id=$p_id; $this->item=array(); $this->value=$value; $this->cnt=0; $this->default_value=-1; $this->style_box=""; $this->filter=""; $this->position="normal"; } public function get_id() { return $this->id; } public function set_id($id) { $this->id=$id; return $this; } public function get_item() { return $this->item; } public function get_default_value() { return $this->default_value; } public function set_item($item) { $this->item=$item; return $this; } public function set_default_value($default_value) { $this->default_value=$default_value; return $this; } public function get_position() { return $this->position; } public function set_position($position) { if (!in_array($position, array("normal", "in-absolute", "absolute"))) { throw new Exception("SB0005", EXC_PARAM_VALUE); } $this->position=$position; return $this; } protected function compute_position() { $list_id=sprintf('%s_list', $this->id); switch ($this->position) { case 'absolute': // Show when click $javascript=sprintf(' $("%s_bt").onclick=function() { try { if (! document.getElementById("select_box%s") ) { var newDiv=new Element("div"); newDiv.id="select_box%s"; document.body.appendChild(newDiv); newDiv.addClassName("select_box"); $("select_box%s").onmouseleave=function() { try { var newDiv=$("select_box%s"); newDiv.setStyle({display:"none"}); } catch(e) { alert(e.message); } } } else { var newDiv=document.getElementById("select_box%s"); } newDiv.innerHTML=$("select_box%s").innerHTML; var pos=$("%s_bt").cumulativeOffset(); var nTop=pos.top; var viewport = document.viewport.getDimensions(); if ( nTop> viewport.height-newDiv.getHeight()-20) { nTop-=newDiv.getHeight()-5} newDiv.setStyle({display:"block",position:"absolute",top:nTop+"px",left:pos.left+5+"px","z-index":999}); if ( $("search_%s") ) { $("search_%s").focus();} } catch(e) { alert(e.message); } } ', $this->id, $this->id, $this->id,$this->id, $this->id, $this->id, $this->id, $this->id, $list_id, $list_id); break; case "normal": // Show when click $javascript=sprintf('$("%s_bt").onclick=function() { try { var newDiv=$("select_box%s"); var pos=$("%s_bt").cumulativeOffset(); newDiv.setStyle({display:"block",position:"fixed",top:pos.top+25+"px",left:pos.left+5+"px"}); if ( $("search_%s") ) { $("search_%s").focus();} } catch(e) { alert(e.message); } } ', $this->id, $this->id, $this->id, $list_id, $list_id); // Hide when out of the zone $javascript.=sprintf('$("select_box%s").onmouseleave=function() { try { var newDiv=$("select_box%s"); newDiv.setStyle({display:"none"}); } catch(e) { alert(e.message); } }', $this->id, $this->id); break; case "in-absolute": // Show when click $javascript=sprintf(' $("%s_bt").onclick=function() { try { if (! document.getElementById("select_box_content") ) { var newDiv=new Element("div"); newDiv.id="select_box_content"; document.body.appendChild(newDiv); newDiv.addClassName("select_box"); $("select_box_content").onmouseleave=function() { try { var newDiv=$("select_box_content"); newDiv.setStyle({display:"none"}); } catch(e) { alert(e.message); } } } else { var newDiv=document.getElementById("select_box_content"); } newDiv.innerHTML=$("select_box%s").innerHTML; var pos=$("%s_bt").cumulativeOffset(); var nTop=pos.top; var viewport = document.viewport.getDimensions(); if ( nTop> viewport.height-newDiv.getHeight()-20) { nTop-=newDiv.getHeight()-5} newDiv.setStyle({display:"block",position:"absolute",top:nTop+"px",left:pos.left+5+"px","z-index":999}); if ( $("search_%s") ) { $("search_%s").focus();} } catch(e) { alert(e.message); } } ', $this->id, $this->id, $this->id, $list_id, $list_id); break; default: break; } return $javascript; } function input() { $list_id=sprintf('%s_list', $this->id); // Show when click $javascript=$this->compute_position(); // display the button printf('', $this->id, $this->value); printf('', $this->id, $this->id, $this->default_value); printf('
', $this->id, $this->style_box); // Show the filter if there is one, if ($this->filter!="") { echo HtmlInput::filter_list($list_id); } // Print the list of possible options printf('"; echo "
"; // javascript : onclick on button echo ""; } function add_url($label, $url) { $this->item[$this->cnt]['label']=$label; $this->item[$this->cnt]['url']=$url; $this->item[$this->cnt]['type']="url"; $this->cnt++; } function add_javascript($label, $javascript) { $this->item[$this->cnt]['label']=$label; $this->item[$this->cnt]['javascript']=$javascript.";$('select_box{$this->id}').hide()"; $this->item[$this->cnt]['type']="javascript"; $this->cnt++; } function add_value($label, $value) { $this->item[$this->cnt]['label']=$label; $this->item[$this->cnt]['update']=$value; $this->item[$this->cnt]['javascript']=sprintf(" $('%s').value='%s';$('%s_bt').value='%s';$('select_box%s').hide()", $this->id, $value, $this->id, $label, $this->id); $this->item[$this->cnt]['type']='value'; $this->cnt++; } function add_input($p_label, HtmlInput $p_element) { /* $this->item[$this->cnt]['label']=$p_element->label; $this->item[$this->cnt]['value']=$p_element->value; $this->item[$this->cnt]['javascript']=$p_element->javascript; * */ $this->item[$this->cnt]['label']=$p_label; $this->item[$this->cnt]['input']=clone $p_element; $this->item[$this->cnt]['type']='input'; $this->cnt++; } function set_filter($p_filter) { $this->filter=$p_filter; } function get_filter() { return $this->filter; } }