📄 dhtmlxtree.js
字号:
*****/
/**
* @desc: retun selected item id
* @type: public
* @return: id of selected item
* @topic: 1
*/
dhtmlXTreeObject.prototype.getSelectedItemId=function()
{
var str=new Array();
for (var i=0; i<this._selected.length; i++) str[i]=this._selected[i].id;
return (str.join(this.dlmtr));
};
/**
* @desc: visual select item in tree
* @type: private
* @param: node - tree item object
* @edition: Professional
* @topic: 0
*/
dhtmlXTreeObject.prototype._selectItem=function(node,e){
if (this._onSSCF) this._onSSCFold=this.getSelectedItemId();
this._unselectItems();
this._markItem(node);
if (this._onSSCF) {
var z=this.getSelectedItemId();
if (z!=this._onSSCFold)
this.callEvent("onSelect",[z]);
}
}
dhtmlXTreeObject.prototype._markItem=function(node){
if (node.scolor) node.span.style.color=node.scolor;
node.span.className="selectedTreeRow";
node.i_sel=true;
this._selected[this._selected.length]=node;
}
/**
* @desc: retun node index in children collection by Id
* @type: public
* @param: itemId - node id
* @return: node index
* @topic: 2
*/
dhtmlXTreeObject.prototype.getIndexById=function(itemId){
var z=this._globalIdStorageFind(itemId);
if (!z) return null;
return this._getIndex(z);
};
dhtmlXTreeObject.prototype._getIndex=function(w){
var z=w.parentObject;
for (var i=0; i<z.childsCount; i++)
if (z.childNodes[i]==w) return i;
};
/**
* @desc: visual unselect item in tree
* @type: private
* @param: node - tree item object
* @edition: Professional
* @topic: 0
*/
dhtmlXTreeObject.prototype._unselectItem=function(node){
if ((node)&&(node.i_sel))
{
node.span.className="standartTreeRow";
if (node.acolor) node.span.style.color=node.acolor;
node.i_sel=false;
for (var i=0; i<this._selected.length; i++)
if (!this._selected[i].i_sel) {
this._selected.splice(i,1);
break;
}
}
}
/**
* @desc: visual unselect items in tree
* @type: private
* @param: node - tree item object
* @edition: Professional
* @topic: 0
*/
dhtmlXTreeObject.prototype._unselectItems=function(){
for (var i=0; i<this._selected.length; i++){
var node=this._selected[i];
node.span.className="standartTreeRow";
if (node.acolor) node.span.style.color=node.acolor;
node.i_sel=false;
}
this._selected=new Array();
}
/**
* @desc: select node text event handler
* @type: private
* @param: e - event object
* @param: htmlObject - node object
* @param: mode - if false - call onSelect event
* @topic: 0
*/
dhtmlXTreeObject.prototype.onRowSelect=function(e,htmlObject,mode){
e=e||window.event;
var obj=this.parentObject;
if (htmlObject) obj=htmlObject.parentObject;
var that=obj.treeNod;
var lastId=that.getSelectedItemId();
if ((!e)||(!e.skipUnSel))
that._selectItem(obj,e);
if (!mode) {
if ((e)&&(e.button==2))
that.callEvent("onRightClick",[obj.id,e]);
if (obj.actionHandler) obj.actionHandler(obj.id,lastId);
else that.callEvent("onClick",[obj.id,lastId]);
}
};
/**
* @desc: fix checkbox state
* @type: private
* @topic: 0
*/
dhtmlXTreeObject.prototype._correctCheckStates=function(dhtmlObject){
if (!this.tscheck) return;
if (!dhtmlObject) return;
if (dhtmlObject.id==this.rootId) return;
//calculate state
var act=dhtmlObject.childNodes;
var flag1=0; var flag2=0;
if (dhtmlObject.childsCount==0) return;
for (var i=0; i<dhtmlObject.childsCount; i++){
if (act[i].dscheck) continue;
if (act[i].checkstate==0) flag1=1;
else if (act[i].checkstate==1) flag2=1;
else { flag1=1; flag2=1; break; }
}
if ((flag1)&&(flag2)) this._setCheck(dhtmlObject,"unsure");
else if (flag1) this._setCheck(dhtmlObject,false);
else this._setCheck(dhtmlObject,true);
this._correctCheckStates(dhtmlObject.parentObject);
}
/**
* @desc: checbox select action
* @type: private
* @topic: 0
*/
dhtmlXTreeObject.prototype.onCheckBoxClick=function(e){
if (!this.treeNod.callEvent("onBeforeCheck",[this.parentObject.id,this.parentObject.checkstate]))
return;
if (this.parentObject.dscheck) return true;
if (this.treeNod.tscheck)
if (this.parentObject.checkstate==1) this.treeNod._setSubChecked(false,this.parentObject);
else this.treeNod._setSubChecked(true,this.parentObject);
else
if (this.parentObject.checkstate==1) this.treeNod._setCheck(this.parentObject,false);
else this.treeNod._setCheck(this.parentObject,true);
this.treeNod._correctCheckStates(this.parentObject.parentObject);
return this.treeNod.callEvent("onCheck",[this.parentObject.id,this.parentObject.checkstate]);
};
/**
* @desc: create HTML elements for tree node
* @type: private
* @param: acheck - enable/disable checkbox
* @param: itemObject - item object
* @param: mode - mode
* @topic: 0
*/
dhtmlXTreeObject.prototype._createItem=function(acheck,itemObject,mode){
var table=document.createElement('table');
table.cellSpacing=0;table.cellPadding=0;
table.border=0;
if(this.hfMode)table.style.tableLayout="fixed";
table.style.margin=0;table.style.padding=0;
var tbody=document.createElement('tbody');
var tr=document.createElement('tr');
var td1=document.createElement('td');
td1.className="standartTreeImage";
if(this._txtimg){
var img0=document.createElement("div");
td1.appendChild(img0);
img0.className="dhx_tree_textSign";
}
else
{
var img0=this._getImg(itemObject.id);
img0.border="0";
if (img0.tagName=="IMG") img0.align="absmiddle";
td1.appendChild(img0); img0.style.padding=0; img0.style.margin=0;
img0.style.width=this.def_line_img_x; img0.style.height=this.def_line_img_y;
}
var td11=document.createElement('td');
// var inp=document.createElement("input"); inp.type="checkbox"; inp.style.width="12px"; inp.style.height="12px";
var inp=this._getImg(this.cBROf?this.rootId:itemObject.id);
inp.checked=0; this._setSrc(inp,this.imPath+this.checkArray[0]); inp.style.width="16px"; inp.style.height="16px";
//can cause problems with hide/show check
if (!acheck) (((_isOpera)||(_isKHTML))?td11:inp).style.display="none";
// td11.className="standartTreeImage";
//if (acheck)
td11.appendChild(inp);
if ((!this.cBROf)&&(inp.tagName=="IMG")) inp.align="absmiddle";
inp.onclick=this.onCheckBoxClick;
inp.treeNod=this;
inp.parentObject=itemObject;
td11.width="20px";
var td12=document.createElement('td');
td12.className="standartTreeImage";
var img=this._getImg(this.timgen?itemObject.id:this.rootId);
img.onmousedown=this._preventNsDrag; img.ondragstart=this._preventNsDrag;
img.border="0";
if (this._aimgs){
img.parentObject=itemObject;
if (img.tagName=="IMG") img.align="absmiddle";
img.onclick=this.onRowSelect; }
if (!mode) this._setSrc(img,this.imPath+this.imageArray[0]);
td12.appendChild(img); img.style.padding=0; img.style.margin=0;
if (this.timgen)
{ img.style.width=this.def_img_x; img.style.height=this.def_img_y; }
else
{
img.style.width="0px"; img.style.height="0px";
if (_isOpera) td12.style.display="none";
}
var td2=document.createElement('td');
td2.className="standartTreeRow";
itemObject.span=document.createElement('span');
itemObject.span.className="standartTreeRow";
if (this.mlitems) {
itemObject.span.style.width=this.mlitems;
// if (!_isIE)
itemObject.span.style.display="block";
}
else td2.noWrap=true;
if (!_isKHTML) td2.style.width="100%";
// itemObject.span.appendChild(document.createTextNode(itemObject.label));
itemObject.span.innerHTML=itemObject.label;
td2.appendChild(itemObject.span);
td2.parentObject=itemObject; td1.parentObject=itemObject;
td2.onclick=this.onRowSelect; td1.onclick=this.onRowClick; td2.ondblclick=this.onRowClick2;
if (this.ettip)
tr.title=itemObject.label;
if (this.dragAndDropOff) {
if (this._aimgs) { this.dragger.addDraggableItem(td12,this); td12.parentObject=itemObject; }
this.dragger.addDraggableItem(td2,this);
}
itemObject.span.style.paddingLeft="5px"; itemObject.span.style.paddingRight="5px"; td2.style.verticalAlign="";
td2.style.fontSize="10pt"; td2.style.cursor=this.style_pointer;
tr.appendChild(td1); tr.appendChild(td11); tr.appendChild(td12);
tr.appendChild(td2);
tbody.appendChild(tr);
table.appendChild(tbody);
if (this.ehlt){//highlighting
tr.onmousemove=this._itemMouseIn;
tr[(_isIE)?"onmouseleave":"onmouseout"]=this._itemMouseOut;
}
if(this.checkEvent && this.checkEvent("onRightClick"))
tr.oncontextmenu=Function("e","this.childNodes[0].parentObject.treeNod.callEvent('onRightClick',[this.childNodes[0].parentObject.id,(e||window.event)]); return false;");
return table;
};
/**
* @desc: set path to images directory
* @param: newPath - path to images directory (related to the page with tree or absolute http url)
* @type: public
* @topic: 0
*/
dhtmlXTreeObject.prototype.setImagePath=function( newPath ){ this.imPath=newPath; };
/**
* @desc: set function called when tree node selected
* @param: (function) func - event handling function
* @type: deprecated
* @topic: 0,7
* @event: onRightClick
* @depricated: use grid.attachEvent("onRightClick",func); instead
* @eventdesc: Event occurs after right mouse button was clicked.
Assigning this handler can disable default context menu, and incompattible with dhtmlXMenu integration.
* @eventparam: (string) ID of clicked item
* @eventparam: (object) event object
*/
dhtmlXTreeObject.prototype.setOnRightClickHandler=function(func){ this.attachEvent("onRightClick",func); };
/**
* @desc: set function called when tree node clicked, also can be forced to call from API
* @param: func - event handling function
* @type: deprecated
* @topic: 0,7
* @event: onClick
* @depricated: use grid.attachEvent("onClick",func); instead
* @eventdesc: Event raises immideatly after text part of item in tree was clicked, but after default onClick functionality was processed.
Richt mouse button click can be catched by onRightClick event handler.
* @eventparam: ID of clicked item
* @eventparam: ID of previously selected item
*/
dhtmlXTreeObject.prototype.setOnClickHandler=function(func){ this.attachEvent("onClick",func); };
/**
* @desc: set function called when tree node selected or unselected, include any select change caused by any functionality
* @param: func - event handling function
* @type: deprecated
* @topic: 0,7
* @event: onSelect
* @depricated: use grid.attachEvent("onSelect",func); instead
* @eventdesc: Event raises immideatly after selection in tree was changed
* @eventparam: selected item ID ( list of IDs in case of multiselection)
*/
dhtmlXTreeObject.prototype.setOnSelectStateChange=function(func){ this.attachEvent("onSelect",func); this._onSSCF=true; };
/**
* @desc: enables dynamic loading from XML
* @type: public
* @param: filePath - name of script returning XML; in case of virtual loading - user defined function
* @topic: 0
*/
dhtmlXTreeObject.prototype.setXMLAutoLoading=function(filePath){ this.XMLsource=filePath; };
/**
* @desc: set function called before checkbox checked/unchecked
* @param: func - event handling function
* @type: deprecated
* @topic: 0,7
* @event: onCheck
* @depricated: use tree.attachEvent("onCheck",func); instead
* @eventdesc: Event raises right before item in tree was checked/unchecked. can be canceled (return false from event handler)
* @eventparam: ID of item which will be checked/unchecked
* @eventparam: Current checkbox state. 1 - item checked, 0 - item unchecked.
* @eventreturn: true - confirm changing checked state; false - deny chaning checked state;
*/
dhtmlXTreeObject.prototype.setOnCheckHandler=function(func){ this.attachEvent("onCheck",func); };
/**
* @desc: set function called before tree node opened/closed
* @param: func - event handling function
* @type: deprecated
* @topic: 0,7
* @event: onOpen
* @depricated: use grid.attachEvent("onOpenStart",func); instead
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -