mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-10 05:39:31 +03:00
1360 lines
41 KiB
JavaScript
1360 lines
41 KiB
JavaScript
//v.2.6 build 100722
|
|
|
|
/*
|
|
Copyright DHTMLX LTD. http://www.dhtmlx.com
|
|
You allowed to use this component or parts of it under GPL terms
|
|
To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
|
|
*/
|
|
|
|
/*_TOPICS_
|
|
@0:Initialization
|
|
@1:Selection control
|
|
@2:Add/delete
|
|
@3:Reserved
|
|
@4:Methods of Option object
|
|
*/
|
|
|
|
/**
|
|
* Build combobox from existing select control.
|
|
*
|
|
*
|
|
* @param parent {string} id of existing select control
|
|
* @param size {int } size of control, optional
|
|
* @return {object} combobox object
|
|
* @type public
|
|
* @topic 0
|
|
*
|
|
*/
|
|
|
|
function dhtmlXComboFromSelect(parent,size){
|
|
if (typeof(parent)=="string")
|
|
parent=document.getElementById(parent);
|
|
|
|
|
|
size=size||parent.getAttribute("width")||(window.getComputedStyle?window.getComputedStyle(parent,null)["width"]:(parent.currentStyle?parent.currentStyle["width"]:0));
|
|
if ((!size)||(size=="auto"))
|
|
size=parent.offsetWidth||100;
|
|
|
|
var z=document.createElement("SPAN");
|
|
|
|
|
|
|
|
parent.parentNode.insertBefore(z,parent);
|
|
parent.style.display='none';
|
|
|
|
var s_type = parent.getAttribute('opt_type');
|
|
|
|
var w= new dhtmlXCombo(z,parent.name,size,s_type,parent.tabIndex);
|
|
|
|
var x=new Array();
|
|
var sel=0;
|
|
for (var i=0; i<parent.options.length; i++){
|
|
if (parent.options[i].selected) sel=i;
|
|
var label=parent.options[i].innerHTML;
|
|
var val=parent.options[i].getAttribute("value");
|
|
if ((typeof(val)=="undefined")||(val===null)) val=label;
|
|
x[i]={value:val,text:label,img_src:parent.options[i].getAttribute("img_src")};
|
|
}
|
|
if(x.length)
|
|
w.addOption(x);
|
|
|
|
|
|
parent.parentNode.removeChild(parent);
|
|
w.selectOption(sel,null,true);
|
|
if (parent.onchange)
|
|
w.attachEvent("onChange",parent.onchange);
|
|
|
|
if(parent.style.direction=="rtl" && w.setRTL)
|
|
w.setRTL(true);
|
|
|
|
return w;
|
|
}
|
|
|
|
var dhtmlXCombo_optionTypes = [];
|
|
/**
|
|
* @desc: build combobox
|
|
* @param: parent - (string) id of existing object which will be used as container
|
|
* @param: name - (string) name of combobox - will be used in FORM
|
|
* @param: width - (int) size of combobox
|
|
* @param: tabIndex - (int) tab index, optional
|
|
* @type: public
|
|
* @topic: 0
|
|
*/
|
|
function dhtmlXCombo(parent,name,width,optionType,tabIndex){
|
|
if (typeof(parent)=="string")
|
|
parent=document.getElementById(parent);
|
|
|
|
this.dhx_Event();
|
|
this.optionType = (optionType != window.undefined && dhtmlXCombo_optionTypes[optionType]) ? optionType : 'default';
|
|
this._optionObject = dhtmlXCombo_optionTypes[this.optionType];
|
|
|
|
this._disabled = false;
|
|
|
|
if (!window.dhx_glbSelectAr){
|
|
window.dhx_glbSelectAr=new Array();
|
|
window.dhx_openedSelect=null;
|
|
window.dhx_SelectId=1;
|
|
dhtmlxEvent(document.body,"click",this.closeAll);
|
|
dhtmlxEvent(document.body,"keydown",function(e){ try { if ((e||event).keyCode==9) window.dhx_glbSelectAr[0].closeAll(); } catch(e) {} return true; } );
|
|
}
|
|
|
|
if (parent.tagName=="SELECT")
|
|
return dhtmlXComboFromSelect(parent);
|
|
else
|
|
this._createSelf(parent,name,width,tabIndex);
|
|
dhx_glbSelectAr.push(this);
|
|
}
|
|
|
|
/**
|
|
* @desc: change control size
|
|
* @param: new_size - (int) new size value
|
|
* @type: public
|
|
* @topic: 0
|
|
*/
|
|
dhtmlXCombo.prototype.setSize = function(new_size){
|
|
this.DOMlist.style.width=new_size+"px";
|
|
if (this.DOMlistF) this.DOMlistF.style.width=new_size+"px";
|
|
this.DOMelem.style.width=new_size+"px";
|
|
this.DOMelem_input.style.width = Math.max(0,(new_size-19))+'px';
|
|
}
|
|
/**
|
|
* @desc: switch between combobox and auto-filter modes
|
|
* @param: mode - (boolean) enable filtering mode
|
|
* @param: url - (string) url for filtering from XML, optional
|
|
* @param: cache - (boolean) XML caching, optional
|
|
* @param: autosubload - (boolean) enable auto load additional suggestions on selecting last loaded option
|
|
* @type: public
|
|
* @topic: 0
|
|
*/
|
|
dhtmlXCombo.prototype.enableFilteringMode = function(mode,url,cache,autosubload){
|
|
this._filter=convertStringToBoolean(mode);
|
|
|
|
if (url){
|
|
this._xml=url;
|
|
this._autoxml=convertStringToBoolean(autosubload);
|
|
}
|
|
if (convertStringToBoolean(cache)) this._xmlCache=[];
|
|
//this.DOMelem_button.style.display=(this._filter?"none":"");
|
|
}
|
|
|
|
dhtmlXCombo.prototype.setFilteringParam=function(name,value){
|
|
if (!this._prs) this._prs=[];
|
|
this._prs.push([name,value]);
|
|
}
|
|
/**
|
|
* @desc: disable combobox
|
|
* @param: mode - (boolean) disable combobox
|
|
* @type: public
|
|
* @topic: 1
|
|
*/
|
|
dhtmlXCombo.prototype.disable = function(mode){
|
|
var z=convertStringToBoolean(mode);
|
|
if (this._disabled==z) return;
|
|
this.DOMelem_input.disabled=z;
|
|
this._disabled=z;
|
|
}
|
|
/**
|
|
* @desc: switch to readonly mode
|
|
* @param: mode - (boolean) readonly mode
|
|
* @param: autosearch - (boolean) true by default
|
|
* @type: public
|
|
* @topic: 1
|
|
*/
|
|
dhtmlXCombo.prototype.readonly = function(mode,autosearch){
|
|
this.DOMelem_input.readOnly=mode ? true : false;
|
|
if(autosearch===false || mode===false){
|
|
this.DOMelem.onkeyup=function(ev){ }
|
|
} else {
|
|
var that = this;
|
|
this.DOMelem.onkeyup=function(ev){
|
|
ev=ev||window.event;
|
|
if (ev.keyCode!=9) ev.cancelBubble=true;
|
|
if((ev.keyCode >= 48 && ev.keyCode <= 57)||(ev.keyCode >= 65 && ev.keyCode <= 90)){
|
|
for(var i=0; i<that.optionsArr.length; i++){
|
|
var text = that.optionsArr[i].text;
|
|
if(text.toString().toUpperCase().indexOf(String.fromCharCode(ev.keyCode)) == 0){
|
|
that.selectOption(i);
|
|
break;
|
|
}
|
|
}
|
|
ev.cancelBubble=true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @desc: get Option by value
|
|
* @param: value - (string) value of option in question
|
|
* @type: public
|
|
* @return: option object
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.getOption = function(value)
|
|
{
|
|
for(var i=0; i<this.optionsArr.length; i++)
|
|
if(this.optionsArr[i].value==value)
|
|
return this.optionsArr[i];
|
|
return null;
|
|
}
|
|
/**
|
|
* @desc: get Option by label
|
|
* @param: label - (string) label of option in question
|
|
* @type: public
|
|
* @return: option object
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.getOptionByLabel = function(value)
|
|
{
|
|
//value=value.replace(/&/g,"&")
|
|
for(var i=0; i<this.optionsArr.length; i++)
|
|
if(this.optionsArr[i].text==value || this.optionsArr[i]._ctext==value)
|
|
return this.optionsArr[i];
|
|
return null;
|
|
}
|
|
/**
|
|
* @desc: get Option by index
|
|
* @param: ind - (int) index of option in question
|
|
* @type: public
|
|
* @return: option object
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.getOptionByIndex = function(ind){
|
|
return this.optionsArr[ind];
|
|
}
|
|
/**
|
|
* @desc: clear all options from combobox
|
|
* @type: public
|
|
* @param: value - (bool) clear current value as well
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.clearAll = function(all)
|
|
{
|
|
if (all) this.setComboText("");
|
|
this.optionsArr=new Array();
|
|
this.redrawOptions();
|
|
if (all) this._confirmSelection();
|
|
}
|
|
/**
|
|
* @desc: delete option by value
|
|
* @param: value - (string) value of option in question
|
|
* @type: public
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.deleteOption = function(value)
|
|
{
|
|
var ind=this.getIndexByValue(value);
|
|
if(ind<0) return;
|
|
if (this.optionsArr[ind]==this._selOption) this._selOption=null;
|
|
this.optionsArr.splice(ind, 1);
|
|
this.redrawOptions();
|
|
}
|
|
|
|
/**
|
|
* @desc: enable/disable immideatly rendering after changes in combobox
|
|
* @param: mode - (boolean) enable/disable
|
|
* @type: public
|
|
* @topic: 1
|
|
*/
|
|
dhtmlXCombo.prototype.render=function(mode){
|
|
this._skiprender=(!convertStringToBoolean(mode));
|
|
this.redrawOptions();
|
|
}
|
|
|
|
/**
|
|
* @desc: update option in combobox
|
|
* @param: oldvalue - (string) index of option in question
|
|
* @param: avalue - (variable)
|
|
* @type: public
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.updateOption = function(oldvalue, avalue, atext, acss)
|
|
{
|
|
var dOpt=this.getOption(oldvalue);
|
|
if (typeof(avalue)!="object") avalue={text:atext,value:avalue,css:acss};
|
|
dOpt.setValue(avalue);
|
|
this.redrawOptions();
|
|
}
|
|
/**
|
|
* @desc: add new option
|
|
* @param: value - (variable) - different input for different kinds of options - please refer to examples
|
|
* @type: public
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.addOption = function(options)
|
|
{
|
|
if (!arguments[0].length || typeof(arguments[0])!="object")
|
|
args = [arguments];
|
|
else
|
|
args = options;
|
|
|
|
this.render(false);
|
|
for (var i=0; i<args.length; i++) {
|
|
var attr = args[i];
|
|
if (attr.length){
|
|
attr.value = attr[0]||"";
|
|
attr.text = attr[1]||"";
|
|
attr.css = attr[2]||"";
|
|
}
|
|
this._addOption(attr);
|
|
}
|
|
this.render(true);
|
|
}
|
|
|
|
dhtmlXCombo.prototype._addOption = function(attr)
|
|
{
|
|
dOpt = new this._optionObject();
|
|
this.optionsArr.push(dOpt);
|
|
dOpt.setValue.apply(dOpt,[attr]);
|
|
this.redrawOptions();
|
|
}
|
|
|
|
|
|
/**
|
|
* @desc: return index of item by value
|
|
* @param: value - (string) value of option in question
|
|
* @type: public
|
|
* @return: option index
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.getIndexByValue = function(val){
|
|
for(var i=0; i<this.optionsArr.length; i++)
|
|
if(this.optionsArr[i].value == val) return i;
|
|
return -1;
|
|
}
|
|
|
|
/**
|
|
* @desc: get value of selected item
|
|
* @type: public
|
|
* @return: option value
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.getSelectedValue = function(){
|
|
return (this._selOption?this._selOption.value:null);
|
|
}
|
|
/**
|
|
* @desc: get current text in combobox
|
|
* @type: public
|
|
* @return: combobox text
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.getComboText = function(){
|
|
return this.DOMelem_input.value;
|
|
}
|
|
/**
|
|
* @desc: set text in covmbobox
|
|
* @param: text - (string) new text label
|
|
* @type: public
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.setComboText = function(text){
|
|
this.DOMelem_input.value=text;
|
|
}
|
|
|
|
/**
|
|
* @desc: set text in covmbobox
|
|
* @param: text - (string) new text label
|
|
* @type: public
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.setComboValue = function(text){
|
|
this.setComboText(text);
|
|
for(var i=0; i<this.optionsArr.length; i++)
|
|
if (this.optionsArr[i].data()[0]==text)
|
|
return this.selectOption(i,null,true);
|
|
this.DOMelem_hidden_input.value=text;
|
|
}
|
|
|
|
/**
|
|
* @desc: get value which will be sent with form
|
|
* @type: public
|
|
* @return: combobox value
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.getActualValue = function(){
|
|
return this.DOMelem_hidden_input.value;
|
|
}
|
|
/**
|
|
* @desc: get text of selected option
|
|
* @type: public
|
|
* @return: text of option
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.getSelectedText = function(){
|
|
return (this._selOption?this._selOption.text:"");
|
|
}
|
|
/**
|
|
* @desc: get index of selected option
|
|
* @type: public
|
|
* @return: option index
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.getSelectedIndex = function(){
|
|
for(var i=0; i<this.optionsArr.length; i++)
|
|
if(this.optionsArr[i] == this._selOption) return i;
|
|
return -1;
|
|
}
|
|
/**
|
|
* @desc: set name used while form submit
|
|
* @param: name - (string) new combobox name
|
|
* @type: public
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.setName = function(name){
|
|
this.DOMelem_hidden_input.name = name;
|
|
this.DOMelem_hidden_input2 = name.replace(/(\]?)$/, "_new_value$1");
|
|
|
|
this.name = name;
|
|
}
|
|
/**
|
|
* @desc: show combox ( reversion to hide command )
|
|
* @param: mode - (boolean) enable/disable
|
|
* @type: public
|
|
* @topic: 1
|
|
*/
|
|
dhtmlXCombo.prototype.show = function(mode){
|
|
if (convertStringToBoolean(mode))
|
|
this.DOMelem.style.display = "";
|
|
else
|
|
this.DOMelem.style.display = "none";
|
|
}
|
|
|
|
/**
|
|
* @desc: destroy object and any related HTML elements
|
|
* @type: public
|
|
* @topic: 0
|
|
*/
|
|
dhtmlXCombo.prototype.destructor = function()
|
|
{
|
|
this.DOMParent.removeChild(this.DOMelem);
|
|
this.DOMlist.parentNode.removeChild(this.DOMlist);
|
|
var s=dhx_glbSelectAr;
|
|
this.DOMParent=this.DOMlist=this.DOMelem=0;
|
|
this.DOMlist.combo=this.DOMelem.combo=0;
|
|
for(var i=0; i<s.length; i++)
|
|
{
|
|
if(s[i] == this)
|
|
{
|
|
s[i] = null;
|
|
s.splice(i,1);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @desc: create self HTML
|
|
* @type: private
|
|
* @topic: 0
|
|
*/
|
|
dhtmlXCombo.prototype._createSelf = function(selParent, name, width, tab)
|
|
{
|
|
if (width.toString().indexOf("%")!=-1){
|
|
var self = this;
|
|
var resWidht=parseInt(width)/100;
|
|
window.setInterval(function(){
|
|
if (!selParent.parentNode) return;
|
|
var ts=selParent.parentNode.offsetWidth*resWidht-2;
|
|
if (ts<0) return;
|
|
if (ts==self._lastTs) return;
|
|
self.setSize(self._lastTs=ts);},500);
|
|
var width=parseInt(selParent.offsetWidth); //mm
|
|
}
|
|
|
|
var width=parseInt(width||100); //mm
|
|
this.ListPosition = "Bottom"; //set optionlist positioning
|
|
this.DOMParent = selParent;
|
|
this._inID = null;
|
|
this.name = name;
|
|
|
|
this._selOption = null; //selected option object pointer
|
|
this.optionsArr = Array();
|
|
|
|
var opt = new this._optionObject();
|
|
opt.DrawHeader(this,name, width,tab);
|
|
//HTML select part 2 - options list DIV element
|
|
this.DOMlist = document.createElement("DIV");
|
|
this.DOMlist.className = 'dhx_combo_list '+(dhtmlx.skin?dhtmlx.skin+"_list":"");
|
|
this.DOMlist.style.width=width-(_isIE?0:0)+"px";
|
|
if (_isOpera || _isKHTML )
|
|
this.DOMlist.style.overflow="auto";
|
|
this.DOMlist.style.display = "none";
|
|
document.body.insertBefore(this.DOMlist,document.body.firstChild);
|
|
if (_isIE) {
|
|
this.DOMlistF = document.createElement("IFRAME");
|
|
this.DOMlistF.style.border="0px";
|
|
this.DOMlistF.className = 'dhx_combo_list';
|
|
this.DOMlistF.style.width=width-(_isIE?0:0)+"px";
|
|
this.DOMlistF.style.display = "none";
|
|
this.DOMlistF.src="javascript:false;";
|
|
document.body.insertBefore(this.DOMlistF,document.body.firstChild);
|
|
}
|
|
|
|
|
|
|
|
this.DOMlist.combo=this.DOMelem.combo=this;
|
|
|
|
this.DOMelem_input.onkeydown = this._onKey;
|
|
this.DOMelem_input.onkeypress = this._onKeyF;
|
|
this.DOMelem_input.onblur = this._onBlur;
|
|
this.DOMelem.onclick = this._toggleSelect;
|
|
this.DOMlist.onclick = this._selectOption;
|
|
this.DOMlist.onmousedown = function(){
|
|
this._skipBlur=true;
|
|
}
|
|
|
|
this.DOMlist.onkeydown = function(e){
|
|
this.combo.DOMelem_input.focus();
|
|
(e||event).cancelBubble=true;
|
|
this.combo.DOMelem_input.onkeydown(e)
|
|
}
|
|
this.DOMlist.onmouseover = this._listOver;
|
|
|
|
}
|
|
|
|
dhtmlXCombo.prototype._listOver = function(e)
|
|
{
|
|
e = e||event;
|
|
e.cancelBubble = true;
|
|
var node = (_isIE?event.srcElement:e.target);
|
|
var that = this.combo;
|
|
if ( node.parentNode == that.DOMlist ) {
|
|
if(that._selOption) that._selOption.deselect();
|
|
if(that._tempSel) that._tempSel.deselect();
|
|
|
|
var i=0;
|
|
for (i; i<that.DOMlist.childNodes.length; i++) {
|
|
if (that.DOMlist.childNodes[i]==node) break;
|
|
}
|
|
var z=that.optionsArr[i];
|
|
that._tempSel=z;
|
|
that._tempSel.select();
|
|
|
|
if ((that._autoxml)&&((i+1)==that._lastLength)){
|
|
that._fetchOptions(i+1,that._lasttext||"");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* @desc: place option list in necessary place on screen
|
|
* @type: private
|
|
* @topic: 0
|
|
*/
|
|
dhtmlXCombo.prototype._positList = function()
|
|
{
|
|
//if(this.ListAutoPosit) this.enableOptionAutoPositioning(true); //mm auto posit
|
|
var pos=this.getPosition(this.DOMelem);
|
|
if(this.ListPosition == 'Bottom'){
|
|
this.DOMlist.style.top = pos[1]+this.DOMelem.offsetHeight-1+"px";
|
|
this.DOMlist.style.left = pos[0]+"px";
|
|
}
|
|
else if(this.ListPosition == 'Top'){ //mm
|
|
this.DOMlist.style.top = pos[1] - this.DOMlist.offsetHeight+"px";
|
|
|
|
this.DOMlist.style.left = pos[0]+"px"; //mm
|
|
}
|
|
else{
|
|
this.DOMlist.style.top = pos[1]+"px";
|
|
this.DOMlist.style.left = pos[0]+this.DOMelem.offsetWidth+"px";
|
|
}
|
|
|
|
}
|
|
|
|
dhtmlXCombo.prototype.getPosition = function(oNode,pNode){
|
|
if (_isChrome){
|
|
if(!pNode)
|
|
var pNode = document.body
|
|
|
|
var oCurrentNode=oNode;
|
|
var iLeft=0;
|
|
var iTop=0;
|
|
while ((oCurrentNode)&&(oCurrentNode!=pNode)){
|
|
iLeft+=oCurrentNode.offsetLeft-oCurrentNode.scrollLeft;
|
|
iTop+=oCurrentNode.offsetTop-oCurrentNode.scrollTop;
|
|
oCurrentNode=oCurrentNode.offsetParent;
|
|
}
|
|
if (pNode == document.body ){
|
|
if (_isIE && _isIE<8){
|
|
|
|
if (document.documentElement.scrollTop)
|
|
iTop+=document.documentElement.scrollTop;
|
|
if (document.documentElement.scrollLeft)
|
|
iLeft+=document.documentElement.scrollLeft;
|
|
}
|
|
else
|
|
if (!_isFF){
|
|
iLeft+=document.body.offsetLeft;
|
|
iTop+=document.body.offsetTop;
|
|
}
|
|
}
|
|
return new Array(iLeft,iTop);
|
|
}
|
|
var pos = getOffset(oNode);
|
|
return [pos.left, pos.top];
|
|
|
|
}
|
|
/**
|
|
* @desc: correct current selection ( move it to first visible option )
|
|
* @type: private
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype._correctSelection = function(){
|
|
if (this.getComboText()!="")
|
|
for (var i=0; i<this.optionsArr.length; i++)
|
|
if (!this.optionsArr[i].isHidden()){
|
|
return this.selectOption(i,true,false);
|
|
}
|
|
this.unSelectOption();
|
|
}
|
|
/**
|
|
* @desc: select next option in combobox
|
|
* @param: step - (int) step size
|
|
* @type: private
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.selectNext = function(step){
|
|
var z=this.getSelectedIndex()+step;
|
|
while (this.optionsArr[z]){
|
|
if (!this.optionsArr[z].isHidden())
|
|
return this.selectOption(z,false,false);
|
|
z+=step;
|
|
}
|
|
}
|
|
/**
|
|
* @desc: on keypressed handler
|
|
* @type: private
|
|
* @topic: 0
|
|
*/
|
|
dhtmlXCombo.prototype._onKeyF = function(e){
|
|
var that=this.parentNode.combo;
|
|
var ev=e||event;
|
|
ev.cancelBubble=true;
|
|
if (ev.keyCode=="13" || ev.keyCode=="9" ){
|
|
that._confirmSelection();
|
|
that.closeAll();
|
|
} else
|
|
if (ev.keyCode=="27" ){
|
|
that._resetSelection();
|
|
that.closeAll();
|
|
} else that._activeMode=true;
|
|
if (ev.keyCode=="13" || ev.keyCode=="27" ){ //enter
|
|
that.callEvent("onKeyPressed",[ev.keyCode])
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
/**
|
|
* @desc: on keyup handler
|
|
* @type: private
|
|
* @topic: 0
|
|
*/
|
|
dhtmlXCombo.prototype._onKey = function(e){
|
|
var that=this.parentNode.combo;
|
|
(e||event).cancelBubble=true;
|
|
var ev=(e||event).keyCode;
|
|
if (ev>15 && ev<19) return true; //shift,alt,ctrl
|
|
if (ev==27) return;
|
|
if ((that.DOMlist.style.display!="block")&&(ev!="13")&&(ev!="9")&&((!that._filter)||(that._filterAny)))
|
|
that.DOMelem.onclick(e||event);
|
|
|
|
if ((ev!="13")&&(ev!="9")){
|
|
window.setTimeout(function(){ that._onKeyB(ev); },1);
|
|
if (ev=="40" || ev=="38")
|
|
return false;
|
|
}
|
|
else if (ev==9){
|
|
that.closeAll();
|
|
(e||event).cancelBubble=false;
|
|
}
|
|
}
|
|
dhtmlXCombo.prototype._onKeyB = function(ev)
|
|
{
|
|
if (ev=="40"){ //down
|
|
var z=this.selectNext(1);
|
|
} else if (ev=="38"){ //up
|
|
this.selectNext(-1);
|
|
} else{
|
|
this.callEvent("onKeyPressed",[ev])
|
|
if (this._filter) return this.filterSelf((ev==8)||(ev==46));
|
|
for(var i=0; i<this.optionsArr.length; i++)
|
|
if (this.optionsArr[i].data()[1]==this.DOMelem_input.value){
|
|
// ev.cancelBubble=true;
|
|
this.selectOption(i,false,false);
|
|
return false;
|
|
}
|
|
this.unSelectOption();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
* @desc: on data change handler
|
|
* @type: private
|
|
* @topic: 0
|
|
*/
|
|
dhtmlXCombo.prototype._onBlur = function()
|
|
{
|
|
var self = this.parentNode._self;
|
|
window.setTimeout(function(){
|
|
if (self.DOMlist._skipBlur) return !(self.DOMlist._skipBlur=false);
|
|
self._confirmSelection();
|
|
self.callEvent("onBlur",[]);
|
|
},100)
|
|
|
|
}
|
|
/**
|
|
* @desc: redraw combobox options
|
|
* @type: private
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.redrawOptions = function(){
|
|
if (this._skiprender) return;
|
|
for(var i=this.DOMlist.childNodes.length-1; i>=0; i--)
|
|
this.DOMlist.removeChild(this.DOMlist.childNodes[i]);
|
|
for(var i=0; i<this.optionsArr.length; i++)
|
|
this.DOMlist.appendChild(this.optionsArr[i].render());
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
/**
|
|
* @desc: load list of options from XML
|
|
* @param: url - (string) xml url
|
|
* @type: public
|
|
* @topic: 0
|
|
*/
|
|
dhtmlXCombo.prototype.loadXML = function(url,afterCall){
|
|
this._load=true;
|
|
this.callEvent("onXLS",[]);
|
|
if (this._prs)
|
|
for (var i=0; i<this._prs.length; i++)
|
|
url+=[getUrlSymbol(url),escape(this._prs[i][0]),"=",escape(this._prs[i][1])].join("");
|
|
if ((this._xmlCache)&&(this._xmlCache[url])){
|
|
this._fillFromXML(this,null,null,null,this._xmlCache[url]);
|
|
if (afterCall) afterCall();
|
|
}
|
|
else{
|
|
var xml=(new dtmlXMLLoaderObject(this._fillFromXML,this,true,true));
|
|
if (afterCall) xml.waitCall=afterCall;
|
|
xml._cPath=url;
|
|
xml.loadXML(url);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @desc: load list of options from XML string
|
|
* @param: astring - (string) xml string
|
|
* @type: public
|
|
* @topic: 0
|
|
*/
|
|
dhtmlXCombo.prototype.loadXMLString = function(astring){
|
|
var xml=(new dtmlXMLLoaderObject(this._fillFromXML,this,true,true));
|
|
xml.loadXMLString(astring);
|
|
}
|
|
|
|
/**
|
|
* @desc: on XML load handler
|
|
* @type: private
|
|
* @topic: 0
|
|
*/
|
|
dhtmlXCombo.prototype._fillFromXML = function(obj,b,c,d,xml){
|
|
if (obj._xmlCache) obj._xmlCache[xml._cPath]=xml;
|
|
|
|
//check that XML is correct
|
|
var toptag=xml.getXMLTopNode("complete");
|
|
if (toptag.tagName!="complete") return;
|
|
var top=xml.doXPath("//complete");
|
|
var options=xml.doXPath("//option");
|
|
|
|
var add = false;
|
|
|
|
obj.render(false);
|
|
if ((!top[0])||(!top[0].getAttribute("add"))){
|
|
obj.clearAll();
|
|
obj._lastLength=options.length;
|
|
if (obj._xml){
|
|
if ((!options) || (!options.length))
|
|
obj.closeAll();
|
|
else {
|
|
if (obj._activeMode){
|
|
obj._positList();
|
|
obj.DOMlist.style.display="block";
|
|
if (_isIE) obj._IEFix(true);
|
|
}
|
|
}}
|
|
} else {
|
|
obj._lastLength+=options.length||Infinity;
|
|
add = true;
|
|
}
|
|
|
|
for (var i=0; i<options.length; i++) {
|
|
var attr = new Object();
|
|
attr.text = options[i].firstChild?options[i].firstChild.nodeValue:"";
|
|
for (var j=0; j<options[i].attributes.length; j++) {
|
|
var a = options[i].attributes[j];
|
|
if (a)
|
|
attr[a.nodeName] = a.nodeValue;
|
|
}
|
|
obj._addOption(attr);
|
|
}
|
|
obj.render(add!=true || (!!options.length));
|
|
|
|
if ((obj._load)&&(obj._load!==true))
|
|
obj.loadXML(obj._load);
|
|
else{
|
|
obj._load=false;
|
|
if ((!obj._lkmode)&&(obj._filter))
|
|
obj._correctSelection();
|
|
}
|
|
|
|
var selected=xml.doXPath("//option[@selected]");
|
|
if (selected.length)
|
|
obj.selectOption(obj.getIndexByValue(selected[0].getAttribute("value")),false,true);
|
|
|
|
obj.callEvent("onXLE",[]);
|
|
|
|
}
|
|
/**
|
|
* @desc: deselect option
|
|
* @type: public
|
|
* @topic: 1
|
|
*/
|
|
dhtmlXCombo.prototype.unSelectOption = function(){
|
|
if (this._selOption) this._selOption.deselect();
|
|
if(this._tempSel) this._tempSel.deselect();
|
|
this._tempSel=this._selOption=null;
|
|
}
|
|
|
|
/**
|
|
* @desc: confirms combo value (recommended to be called on form submit)
|
|
* @type: public
|
|
* @topic: 1
|
|
*/
|
|
dhtmlXCombo.prototype.confirmValue = function(){
|
|
this._confirmSelection();
|
|
}
|
|
|
|
|
|
dhtmlXCombo.prototype._confirmSelection = function(data,status){
|
|
if(arguments.length==0){
|
|
var z=this.getOptionByLabel(this.DOMelem_input.value);
|
|
data = z?z.value:this.DOMelem_input.value;
|
|
status = (z==null);
|
|
if (data==this.getActualValue()) return;
|
|
}
|
|
|
|
this.DOMelem_hidden_input.value=data;
|
|
this.DOMelem_hidden_input2.value = (status?"true":"false");
|
|
this.callEvent("onChange",[]);
|
|
this._activeMode=false;
|
|
}
|
|
dhtmlXCombo.prototype._resetSelection = function(data,status){
|
|
var z=this.getOption(this.DOMelem_hidden_input.value);
|
|
this.setComboValue(z?z.data()[0]:this.DOMelem_hidden_input.value)
|
|
this.setComboText(z?z.data()[1]:this.DOMelem_hidden_input.value)
|
|
}
|
|
|
|
/**
|
|
* @desc: select option
|
|
* @param: ind - (int) index of option in question
|
|
* @param: filter - (boolean) enable autocomplit range, optional
|
|
* @param: conf - (boolean) true for real selection, false for pre-selection
|
|
* @type: public
|
|
* @topic: 1
|
|
*/
|
|
dhtmlXCombo.prototype.selectOption = function(ind,filter,conf){
|
|
if (arguments.length<3) conf=true;
|
|
this.unSelectOption();
|
|
var z=this.optionsArr[ind];
|
|
if (!z) return;
|
|
this._selOption=z;
|
|
this._selOption.select();
|
|
|
|
var corr=this._selOption.content.offsetTop+this._selOption.content.offsetHeight-this.DOMlist.scrollTop-this.DOMlist.offsetHeight;
|
|
if (corr>0) this.DOMlist.scrollTop+=corr;
|
|
corr=this.DOMlist.scrollTop-this._selOption.content.offsetTop;
|
|
if (corr>0) this.DOMlist.scrollTop-=corr;
|
|
var data=this._selOption.data();
|
|
|
|
if (conf){
|
|
this.setComboText(data[1]);
|
|
this._confirmSelection(data[0],false);
|
|
|
|
if ((this._autoxml)&&((ind+1)==this._lastLength))
|
|
this._fetchOptions(ind+1,this._lasttext||"");
|
|
}
|
|
|
|
if (filter){
|
|
var text=this.getComboText();
|
|
if (text!=data[1]){
|
|
this.setComboText(data[1]);
|
|
dhtmlXRange(this.DOMelem_input,text.length+1,data[1].length);
|
|
}
|
|
}
|
|
else
|
|
this.setComboText(data[1]);
|
|
this._selOption.RedrawHeader(this);
|
|
|
|
/*Event*/
|
|
this.callEvent("onSelectionChange",[]);
|
|
}
|
|
/**
|
|
* @desc: option on select handler
|
|
* @type: private
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype._selectOption = function(e)
|
|
{
|
|
(e||event).cancelBubble = true;
|
|
var node=(_isIE?event.srcElement:e.target);
|
|
var that=this.combo;
|
|
while (!node._self) {
|
|
node = node.parentNode;
|
|
if (!node)
|
|
return;
|
|
}
|
|
|
|
var i=0;
|
|
for (i; i<that.DOMlist.childNodes.length; i++) {
|
|
if (that.DOMlist.childNodes[i]==node) break;
|
|
}
|
|
that.selectOption(i,false,true);
|
|
that.closeAll();
|
|
that.callEvent("onBlur",[])
|
|
that._activeMode=false;
|
|
}
|
|
/**
|
|
* @desc: open list of options
|
|
* @type: public
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.openSelect = function(){
|
|
|
|
|
|
|
|
if (this._disabled) return;
|
|
this.closeAll();
|
|
this._positList();
|
|
this.DOMlist.style.display="block";
|
|
this.callEvent("onOpen",[]);
|
|
if(this._tempSel) this._tempSel.deselect();
|
|
if(this._selOption) this._selOption.select();
|
|
if(this._selOption){
|
|
var corr=this._selOption.content.offsetTop+this._selOption.content.offsetHeight-this.DOMlist.scrollTop-this.DOMlist.offsetHeight;
|
|
if (corr>0) this.DOMlist.scrollTop+=corr;
|
|
corr=this.DOMlist.scrollTop-this._selOption.content.offsetTop;
|
|
if (corr>0) this.DOMlist.scrollTop-=corr;
|
|
}
|
|
/* if (this.autoOptionSize){
|
|
var x=this.DOMlist.offsetWidth;
|
|
|
|
for ( var i=0; i<this.optionsArr.length; i++){
|
|
if(i==0) alert("this.DOMlist.childNodes[i].scrollWidth ="+ this.DOMlist.childNodes[i].scrollWidth + "> x= "+ x);
|
|
if (this.DOMlist.childNodes[i].scrollWidth > x)
|
|
x=this.DOMlist.childNodes[i].scrollWidth;
|
|
}
|
|
|
|
this.DOMlist.style.width=x+"px";
|
|
}*/
|
|
|
|
|
|
if (_isIE) this._IEFix(true);
|
|
this.DOMelem_input.focus();
|
|
|
|
if (this._filter) this.filterSelf();
|
|
}
|
|
/**
|
|
* @desc: open(close) list
|
|
* @type: private
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype._toggleSelect = function(e)
|
|
{
|
|
var that=this.combo;
|
|
if ( that.DOMlist.style.display == "block" ) {
|
|
that.closeAll();
|
|
} else {
|
|
that.openSelect();
|
|
}
|
|
(e||event).cancelBubble = true;
|
|
}
|
|
|
|
dhtmlXCombo.prototype._fetchOptions=function(ind,text){
|
|
if (text=="") { this.closeAll(); return this.clearAll(); }
|
|
var url=this._xml+((this._xml.indexOf("?")!=-1)?"&":"?")+"pos="+ind+"&mask="+encodeURIComponent(text);
|
|
this._lasttext=text;
|
|
if (this._load) this._load=url;
|
|
else {
|
|
if (!this.callEvent("onDynXLS",[text,ind])) return;
|
|
this.loadXML(url);
|
|
}
|
|
}
|
|
/**
|
|
* @desc: filter list of options
|
|
* @type: private
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype.filterSelf = function(mode)
|
|
{
|
|
var text=this.getComboText();
|
|
if (this._xml){
|
|
this._lkmode=mode;
|
|
this._fetchOptions(0,text);
|
|
}
|
|
try{ var filter=new RegExp("^"+text,"i"); } catch (e){ var filter=new RegExp("^"+text.replace(/([\[\]\{\}\(\)\+\*\\])/g,"\\$1")); }
|
|
this.filterAny=false;
|
|
for(var i=0; i<this.optionsArr.length; i++){
|
|
var z=filter.test(this.optionsArr[i].text);
|
|
this.filterAny|=z;
|
|
this.optionsArr[i].hide(!z);
|
|
}
|
|
if (!this.filterAny) {
|
|
this.closeAll();
|
|
this._activeMode=true;
|
|
}
|
|
else {
|
|
if (this.DOMlist.style.display!="block")
|
|
this.openSelect();
|
|
if (_isIE) this._IEFix(true);
|
|
}
|
|
|
|
if (!mode)
|
|
this._correctSelection();
|
|
else this.unSelectOption();
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
* @desc: set hidden iframe for IE
|
|
* @type: private
|
|
* @topic: 2
|
|
*/
|
|
dhtmlXCombo.prototype._IEFix = function(mode){
|
|
this.DOMlistF.style.display=(mode?"block":"none");
|
|
this.DOMlistF.style.top=this.DOMlist.style.top;
|
|
this.DOMlistF.style.left=this.DOMlist.style.left;
|
|
}
|
|
/**
|
|
* @desc: close opened combobox list
|
|
* @type: public
|
|
* @topic: 1
|
|
*/
|
|
dhtmlXCombo.prototype.closeAll = function()
|
|
{
|
|
if(window.dhx_glbSelectAr)
|
|
for (var i=0; i<dhx_glbSelectAr.length; i++){
|
|
if (dhx_glbSelectAr[i].DOMlist.style.display=="block") {
|
|
dhx_glbSelectAr[i].DOMlist.style.display = "none";
|
|
if (_isIE) dhx_glbSelectAr[i]._IEFix(false);
|
|
}
|
|
dhx_glbSelectAr[i]._activeMode=false;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* @desc: create selection range in input control
|
|
* @param: InputId - (string) id of input ( object can be used as well )
|
|
* @param: Start - (int) start selection position
|
|
* @param: End - (int) end selection position
|
|
* @type: public
|
|
* @topic: 0
|
|
*/
|
|
function dhtmlXRange(InputId, Start, End)
|
|
{
|
|
var Input = typeof(InputId)=='object' ? InputId : document.getElementById(InputId);
|
|
try{ Input.focus(); } catch(e){};
|
|
var Length = Input.value.length;
|
|
Start--;
|
|
if (Start < 0 || Start > End || Start > Length)
|
|
Start = 0;
|
|
if (End > Length)
|
|
End = Length;
|
|
if (Start==End) return;
|
|
if (Input.setSelectionRange) {
|
|
Input.setSelectionRange(Start, End);
|
|
} else if (Input.createTextRange) {
|
|
var range = Input.createTextRange();
|
|
range.moveStart('character', Start);
|
|
range.moveEnd('character', End-Length);
|
|
try{
|
|
range.select();
|
|
}
|
|
catch(e){
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* @desc: combobox option object constructor
|
|
* @type: public
|
|
* @topic: 0
|
|
*/
|
|
dhtmlXCombo_defaultOption = function(){
|
|
this.init();
|
|
}
|
|
/**
|
|
* @desc: option initialization function
|
|
* @type: private
|
|
* @topic: 4
|
|
*/
|
|
dhtmlXCombo_defaultOption.prototype.init = function(){
|
|
this.value = null;
|
|
this.text = "";
|
|
this.selected = false;
|
|
this.css = "";
|
|
}
|
|
/**
|
|
* @desc: mark option as selected
|
|
* @type: public
|
|
* @topic: 4
|
|
*/
|
|
dhtmlXCombo_defaultOption.prototype.select = function(){
|
|
if (this.content){
|
|
this.content.className="dhx_selected_option"+(dhtmlx.skin?" combo_"+dhtmlx.skin+"_sel":"");
|
|
}
|
|
}
|
|
/**
|
|
* @desc: hide option
|
|
* @param: mode - (boolean)
|
|
* @type: public
|
|
* @topic: 4
|
|
*/
|
|
dhtmlXCombo_defaultOption.prototype.hide = function(mode){
|
|
this.render().style.display=mode?"none":"";
|
|
}
|
|
/**
|
|
* @desc: return hide state of option
|
|
* @type: public
|
|
* @return: hide state of option
|
|
* @topic: 4
|
|
*/
|
|
dhtmlXCombo_defaultOption.prototype.isHidden = function(){
|
|
return (this.render().style.display=="none");
|
|
}
|
|
/**
|
|
* @desc: mark option as not selected
|
|
* @type: public
|
|
* @topic: 4
|
|
*/
|
|
dhtmlXCombo_defaultOption.prototype.deselect = function(){
|
|
if (this.content) this.render();
|
|
this.content.className="";
|
|
}
|
|
/**
|
|
* @desc: set value of option
|
|
* @param: value - (string) value
|
|
* @param: text - (string) text
|
|
* @param: css - (string) css style string
|
|
* @type: public
|
|
* @topic: 4
|
|
*/
|
|
dhtmlXCombo_defaultOption.prototype.setValue = function(attr){
|
|
this.value = attr.value||"";
|
|
this.text = attr.text||"";
|
|
this.css = attr.css||"";
|
|
this.content=null;
|
|
}
|
|
|
|
|
|
/**
|
|
* @desc: render option
|
|
* @type: private
|
|
* @topic: 4
|
|
*/
|
|
dhtmlXCombo_defaultOption.prototype.render = function(){
|
|
if (!this.content){
|
|
this.content=document.createElement("DIV");
|
|
this.content._self = this;
|
|
|
|
this.content.style.cssText='width:100%; overflow:hidden;'+this.css;
|
|
if (_isOpera || _isKHTML ) this.content.style.padding="2px 0px 2px 0px";
|
|
this.content.innerHTML=this.text;
|
|
this._ctext=_isIE?this.content.innerText:this.content.textContent;
|
|
}
|
|
return this.content;
|
|
}
|
|
/**
|
|
* @desc: return option data
|
|
* @type: public
|
|
* @return: array of data related to option
|
|
* @topic: 4
|
|
*/
|
|
dhtmlXCombo_defaultOption.prototype.data = function(){
|
|
if (this.content)
|
|
return [this.value,this._ctext ? this._ctext : this.text];
|
|
}
|
|
|
|
dhtmlXCombo_defaultOption.prototype.DrawHeader = function(self, name, width, tab)
|
|
{
|
|
var z=document.createElement("DIV");
|
|
z.style.width = width+"px";
|
|
z.className = 'dhx_combo_box '+(dhtmlx.skin||"");
|
|
z._self = self;
|
|
self.DOMelem = z;
|
|
this._DrawHeaderInput(self, name, width,tab);
|
|
this._DrawHeaderButton(self, name, width);
|
|
self.DOMParent.appendChild(self.DOMelem);
|
|
}
|
|
|
|
dhtmlXCombo_defaultOption.prototype._DrawHeaderInput = function(self, name, width,tab)
|
|
{
|
|
|
|
var z=document.createElement('input');
|
|
z.setAttribute("autocomplete","off");
|
|
z.type = 'text';
|
|
z.className = 'dhx_combo_input';
|
|
|
|
if (tab) z.tabIndex=tab;
|
|
z.style.width = width-19-(document.compatMode=="BackCompat"?0:3)+'px';
|
|
self.DOMelem.appendChild(z);
|
|
self.DOMelem_input = z;
|
|
|
|
z = document.createElement('input');
|
|
z.type = 'hidden';
|
|
z.name = name;
|
|
self.DOMelem.appendChild(z);
|
|
self.DOMelem_hidden_input = z;
|
|
|
|
z = document.createElement('input');
|
|
z.type = 'hidden';
|
|
z.name = (name||"").replace(/(\]?)$/, "_new_value$1");
|
|
z.value="true";
|
|
self.DOMelem.appendChild(z);
|
|
self.DOMelem_hidden_input2 = z;
|
|
}
|
|
|
|
dhtmlXCombo_defaultOption.prototype._DrawHeaderButton = function(self, name, width)
|
|
{
|
|
var z=document.createElement('img');
|
|
z.className = 'dhx_combo_img';
|
|
if(dhtmlx.image_path) dhx_globalImgPath = dhtmlx.image_path;
|
|
z.src = (window.dhx_globalImgPath?dhx_globalImgPath:"")+'combo_select'+(dhtmlx.skin?"_"+dhtmlx.skin:"")+'.gif';
|
|
self.DOMelem.appendChild(z);
|
|
self.DOMelem_button=z;
|
|
}
|
|
|
|
dhtmlXCombo_defaultOption.prototype.RedrawHeader = function(self)
|
|
{
|
|
}
|
|
|
|
|
|
dhtmlXCombo_optionTypes['default'] = dhtmlXCombo_defaultOption;
|
|
|
|
dhtmlXCombo.prototype.dhx_Event=function()
|
|
{
|
|
this.dhx_SeverCatcherPath="";
|
|
|
|
this.attachEvent = function(original, catcher, CallObj)
|
|
{
|
|
CallObj = CallObj||this;
|
|
original = 'ev_'+original;
|
|
if ( ( !this[original] ) || ( !this[original].addEvent ) ) {
|
|
var z = new this.eventCatcher(CallObj);
|
|
z.addEvent( this[original] );
|
|
this[original] = z;
|
|
}
|
|
return ( original + ':' + this[original].addEvent(catcher) ); //return ID (event name & event ID)
|
|
}
|
|
this.callEvent=function(name,arg0){
|
|
if (this["ev_"+name]) return this["ev_"+name].apply(this,arg0);
|
|
return true;
|
|
}
|
|
this.checkEvent=function(name){
|
|
if (this["ev_"+name]) return true;
|
|
return false;
|
|
}
|
|
|
|
this.eventCatcher = function(obj)
|
|
{
|
|
var dhx_catch = new Array();
|
|
var m_obj = obj;
|
|
var func_server = function(catcher,rpc)
|
|
{
|
|
catcher = catcher.split(":");
|
|
var postVar="";
|
|
var postVar2="";
|
|
var target=catcher[1];
|
|
if (catcher[1]=="rpc"){
|
|
postVar='<?xml version="1.0"?><methodCall><methodName>'+catcher[2]+'</methodName><params>';
|
|
postVar2="</params></methodCall>";
|
|
target=rpc;
|
|
}
|
|
var z = function() {
|
|
}
|
|
return z;
|
|
}
|
|
var z = function()
|
|
{
|
|
if (dhx_catch)
|
|
var res=true;
|
|
for (var i=0; i<dhx_catch.length; i++) {
|
|
if (dhx_catch[i] != null) {
|
|
var zr = dhx_catch[i].apply( m_obj, arguments );
|
|
res = res && zr;
|
|
}
|
|
}
|
|
return res;
|
|
}
|
|
z.addEvent = function(ev)
|
|
{
|
|
if ( typeof(ev) != "function" )
|
|
if (ev && ev.indexOf && ev.indexOf("server:") == 0)
|
|
ev = new func_server(ev,m_obj.rpcServer);
|
|
else
|
|
ev = eval(ev);
|
|
if (ev)
|
|
return dhx_catch.push( ev ) - 1;
|
|
return false;
|
|
}
|
|
z.removeEvent = function(id)
|
|
{
|
|
dhx_catch[id] = null;
|
|
}
|
|
return z;
|
|
}
|
|
|
|
this.detachEvent = function(id)
|
|
{
|
|
if (id != false) {
|
|
var list = id.split(':'); //get EventName and ID
|
|
this[ list[0] ].removeEvent( list[1] ); //remove event
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
//combo
|
|
(function(){
|
|
dhtmlx.extend_api("dhtmlXCombo",{
|
|
_init:function(obj){
|
|
if (obj.image_path)
|
|
dhx_globalImgPath=obj.image_path;
|
|
return [obj.parent, obj.name, (obj.width||"100%"), obj.type, obj.index ];
|
|
},
|
|
filter:"filter_command",
|
|
auto_height:"enableOptionAutoHeight",
|
|
auto_position:"enableOptionAutoPositioning",
|
|
auto_width:"enableOptionAutoWidth",
|
|
xml:"loadXML",
|
|
readonly:"readonly",
|
|
items:"addOption"
|
|
},{
|
|
filter_command:function(data){
|
|
if (typeof data == "string")
|
|
this.enableFilteringMode(true,data);
|
|
else
|
|
this.enableFilteringMode(data);
|
|
}
|
|
});
|
|
})();
|
|
|
|
|
|
//(c)dhtmlx ltd. www.dhtmlx.com
|