📄 dhtmlxtree.js
字号:
/*
Copyright Scand LLC http://www.scbr.com
To use this component please contact info@scbr.com to obtain license
*/
function dhtmlXTreeObject(htmlObject,width,height,rootId){
if(typeof(htmlObject)!="object")
this.parentObject=document.getElementById(htmlObject);
else
this.parentObject=htmlObject;
this.dlmtr=",";
this.dropLower=false;
this.xmlstate=0;
this.mytype="tree";
this.smcheck=true;
this.width=width;
this.height=height;
this.rootId=rootId;
this.childCalc=null;
this.def_img_x="18px";
this.def_img_y="18px";
this._dragged=new Array();
this._selected=new Array();
this.style_pointer="pointer";
if(navigator.appName == 'Microsoft Internet Explorer')this.style_pointer="hand";
this._aimgs=true;
this.htmlcA=" [";
this.htmlcB="]";
this.lWin=window;
this.cMenu=0;
this.mlitems=0;
this.dadmode=0;
this.slowParse=false;
this.autoScroll=true;
this.hfMode=0;
this.nodeCut=new Array();
this.XMLsource=0;
this.XMLloadingWarning=0;
this._globalIdStorage=new Array();
this.globalNodeStorage=new Array();
this._globalIdStorageSize=0;
this.treeLinesOn=true;
this.checkFuncHandler=0;
this._spnFH=0;
this.dblclickFuncHandler=0;
this.tscheck=false;
this.timgen=true;
this.dpcpy=false;
this._ld_id=null;
this.imPath="treeGfx/";
this.checkArray=new Array("iconUnCheckAll.gif","iconCheckAll.gif","iconCheckGray.gif","iconUncheckDis.gif","iconCheckDis.gif","iconCheckDis.gif");
this.radioArray=new Array("radio_off.gif","radio_on.gif","radio_on.gif","radio_off.gif","radio_on.gif","radio_on.gif");
this.lineArray=new Array("line2.gif","line3.gif","line4.gif","blank.gif","blank.gif","line1.gif");
this.minusArray=new Array("minus2.gif","minus3.gif","minus4.gif","minus.gif","minus5.gif");
this.plusArray=new Array("plus2.gif","plus3.gif","plus4.gif","plus.gif","plus5.gif");
this.imageArray=new Array("leaf.gif","folderOpen.gif","folderClosed.gif");
this.cutImg= new Array(0,0,0);
this.cutImage="but_cut.gif";
this.dragger= new dhtmlDragAndDropObject();
this.htmlNode=new dhtmlXTreeItemObject(this.rootId,"",0,this);
this.htmlNode.htmlNode.childNodes[0].childNodes[0].style.display="none";
this.htmlNode.htmlNode.childNodes[0].childNodes[0].childNodes[0].className="hiddenRow";
this.allTree=this._createSelf();
this.allTree.appendChild(this.htmlNode.htmlNode);
if(_isFF)this.allTree.childNodes[0].width="100%";
this.allTree.onselectstart=new Function("return false;");
this.XMLLoader=new dtmlXMLLoaderObject(this._parseXMLTree,this,true,this.no_cashe);
this.selectionBar=document.createElement("DIV");
this.selectionBar.className="selectionBar";
this.selectionBar.innerHTML=" ";
this.selectionBar.style.display="none";
this.allTree.appendChild(this.selectionBar);
var self=this;
if(window.addEventListener)window.addEventListener("unload",function(){try{self.destructor();}catch(e){}},false);
if(window.attachEvent)window.attachEvent("onunload",function(){try{self.destructor();}catch(e){}});
return this;
};
dhtmlXTreeObject.prototype.destructor=function(){
for(var i=0;i<this._globalIdStorageSize;i++){
var z=this.globalNodeStorage[i];
z.parentObject=null;z.treeNod=null;z.childNodes=null;z.span=null;z.tr.nodem=null;z.tr=null;z.htmlNode.objBelong=null;z.htmlNode=null;
this.globalNodeStorage[i]=null;
}
this.allTree.innerHTML="";
this.XMLLoader.destructor();
for(var a in this){
this[a]=null;
}
}
function cObject(){
return this;
}
cObject.prototype= new Object;
cObject.prototype.clone = function(){
function _dummy(){};
_dummy.prototype=this;
return new _dummy();
}
function dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode){
this.htmlNode="";
this.acolor="";
this.scolor="";
this.tr=0;
this.childsCount=0;
this.tempDOMM=0;
this.tempDOMU=0;
this.dragSpan=0;
this.dragMove=0;
this.span=0;
this.closeble=1;
this.childNodes=new Array();
this.userData=new cObject();
this.checkstate=0;
this.treeNod=treeObject;
this.label=itemText;
this.parentObject=parentObject;
this.actionHandler=actionHandler;
this.images=new Array(treeObject.imageArray[0],treeObject.imageArray[1],treeObject.imageArray[2]);
this.id=treeObject._globalIdStorageAdd(itemId,this);
if(this.treeNod.checkBoxOff)this.htmlNode=this.treeNod._createItem(1,this,mode);
else this.htmlNode=this.treeNod._createItem(0,this,mode);
this.htmlNode.objBelong=this;
return this;
};
dhtmlXTreeObject.prototype._globalIdStorageAdd=function(itemId,itemObject){
if(this._globalIdStorageFind(itemId,1,1)){d=new Date();itemId=d.valueOf()+"_"+itemId;return this._globalIdStorageAdd(itemId,itemObject);}
this._globalIdStorage[this._globalIdStorageSize]=itemId;
this.globalNodeStorage[this._globalIdStorageSize]=itemObject;
this._globalIdStorageSize++;
return itemId;
};
dhtmlXTreeObject.prototype.setListDelimeter=function(separator){
this.dlmtr=separator;
}
dhtmlXTreeObject.prototype._globalIdStorageSub=function(itemId){
for(var i=0;i<this._globalIdStorageSize;i++)
if(this._globalIdStorage[i]==itemId)
{
this._globalIdStorage[i]=this._globalIdStorage[this._globalIdStorageSize-1];
this.globalNodeStorage[i]=this.globalNodeStorage[this._globalIdStorageSize-1];
this._globalIdStorageSize--;
this._globalIdStorage[this._globalIdStorageSize]=0;
this.globalNodeStorage[this._globalIdStorageSize]=0;
}
};
dhtmlXTreeObject.prototype._globalIdStorageFind=function(itemId,skipXMLSearch,skipParsing,isreparse){
for(var i=0;i<this._globalIdStorageSize;i++)
if(this._globalIdStorage[i]==itemId)
{
if((this.globalNodeStorage[i].unParsed)&&(!skipParsing))
{
this.reParse(this.globalNodeStorage[i],0);
}
if((isreparse)&&(this._edsbpsA)){
for(var j=0;j<this._edsbpsA.length;j++)
if(this._edsbpsA[j][2]==itemId){
dhtmlxError.throwError("getItem","Requested item still in parsing process.",itemId);
return null;
}
}
return this.globalNodeStorage[i];
}
if((this.slowParse)&&(itemId!=0)&&(!skipXMLSearch))return this.preParse(itemId);
else return null;
};
dhtmlXTreeObject.prototype.reParse=function(node){
var that=this;
if((this.onXLS)&&(!this.parsCount))that.onXLS(that,node.id);
this.xmlstate=1;
var tmp=node.unParsed;
node.unParsed=0;
this.XMLloadingWarning=1;
var oldpid=this.parsingOn;
this.parsingOn=node.id;
this.parsedArray=new Array();
this.setCheckList="";
this._parseXMLTree(this,tmp,node.id,2,node);
var chArr=this.setCheckList.split(this.dlmtr);
for(var i=0;i<this.parsedArray.length;i++)
node.htmlNode.childNodes[0].appendChild(this.parsedArray[i]);
this.oldsmcheck=this.smcheck;
this.smcheck=false;
for(var n=0;n<chArr.length;n++)
if(chArr[n])this.setCheck(chArr[n],1);
this.smcheck=this.oldsmcheck;
this.parsingOn=oldpid;
this.XMLloadingWarning=0;
this._redrawFrom(this,node);
return true;
}
dhtmlXTreeObject.prototype.setEscapingMode=function(mode){
this.utfesc=mode;
}
dhtmlXTreeObject.prototype._escape=function(str){
switch(this.utfesc){
case "none":
return str;
break;
case "utf8":
return encodeURI(str);
break;
default:
return escape(str);
break;
}
}
dhtmlXTreeObject.prototype.preParse=function(itemId){
if(!itemId)return null;
var z=this.XMLLoader.getXMLTopNode("tree");
var i=0;
var k=0;
if(!z)return;
for(i=0;i<z.childNodes.length;i++)
if(z.childNodes[i].nodeType==1)
{
var zNode=this.findXML(z.childNodes[i],"id",itemId);
if(zNode!==false)
{
var nArr=new Array();
while(1){
nArr[nArr.length]=zNode.getAttribute("id");
z=this._globalIdStorageFind(zNode.getAttribute("id"),true,true,true);
if(z)break;
zNode=zNode.parentNode;
}
for(var i=nArr.length-1;i>=0;i--)
this._globalIdStorageFind(nArr[i],true,false);
z=this._globalIdStorageFind(itemId,true,false);
if(!z)dhtmlxError.throwError("getItem","The item "+itemId+" not operable. Seems you have non-unique IDs in tree's XML.",itemId);
return z;
}
}
return null;
}
dhtmlXTreeObject.prototype.findXML=function(node,par,val){
for(var i=0;i<node.childNodes.length;i++)
if(node.childNodes[i].nodeType==1)
{
if(node.childNodes[i].getAttribute(par)==val)
return node;
var z=this.findXML(node.childNodes[i],par,val);
if(z)return(z);
}
return false;
}
dhtmlXTreeObject.prototype._drawNewTr=function(htmlObject,node)
{
var tr =document.createElement('tr');
var td1=document.createElement('td');
var td2=document.createElement('td');
td1.appendChild(document.createTextNode(" "));
td2.colSpan=3;
td2.appendChild(htmlObject);
tr.appendChild(td1);tr.appendChild(td2);
return tr;
};
dhtmlXTreeObject.prototype.loadXMLString=function(xmlString,afterCall){
var that=this;
if((this.onXLS)&&(!this.parsCount))that.onXLS(that,null);
this.xmlstate=1;
if(afterCall)this.XMLLoader.waitCall=afterCall;
this.XMLLoader.loadXMLString(xmlString);};
dhtmlXTreeObject.prototype.loadXML=function(file,afterCall){
var that=this;
if((this.onXLS)&&(!this.parsCount))that.onXLS(that,this._ld_id);
this._ld_id=null;
this.xmlstate=1;
this.XMLLoader=new dtmlXMLLoaderObject(this._parseXMLTree,this,true,this.no_cashe);
if(afterCall)this.XMLLoader.waitCall=afterCall;
this.XMLLoader.loadXML(file);};
dhtmlXTreeObject.prototype._attachChildNode=function(parentObject,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,childs,beforeNode,afterNode){
if(beforeNode)parentObject=beforeNode.parentObject;
if(((parentObject.XMLload==0)&&(this.XMLsource))&&(!this.XMLloadingWarning))
{
parentObject.XMLload=1;
this._loadDynXML(parentObject.id);
}
var Count=parentObject.childsCount;
var Nodes=parentObject.childNodes;
if(afterNode){
if(afterNode.tr.previousSibling.previousSibling){
beforeNode=afterNode.tr.previousSibling.nodem;
}
else
optionStr=optionStr.replace("TOP","")+",TOP";
}
if(beforeNode)
{
var ik,jk;
for(ik=0;ik<Count;ik++)
if(Nodes[ik]==beforeNode)
{
for(jk=Count;jk!=ik;jk--)
Nodes[1+jk]=Nodes[jk];
break;
}
ik++;
Count=ik;
}
if((!itemActionHandler)&&(this.aFunc))itemActionHandler=this.aFunc;
if(optionStr){
var tempStr=optionStr.split(",");
for(var i=0;i<tempStr.length;i++)
{
switch(tempStr[i])
{
case "TOP": if(parentObject.childsCount>0){beforeNode=new Object;beforeNode.tr=parentObject.childNodes[0].tr.previousSibling;}
for(ik=Count;ik>0;ik--)
Nodes[ik]=Nodes[ik-1];
Count=0;
break;
}
};
};
Nodes[Count]=new dhtmlXTreeItemObject(itemId,itemText,parentObject,this,itemActionHandler,1);
if(image1)Nodes[Count].images[0]=image1;
if(image2)Nodes[Count].images[1]=image2;
if(image3)Nodes[Count].images[2]=image3;
parentObject.childsCount++;
var tr=this._drawNewTr(Nodes[Count].htmlNode);
if((this.XMLloadingWarning)||(this._hAdI))
Nodes[Count].htmlNode.parentNode.parentNode.style.display="none";
if((beforeNode)&&(beforeNode.tr.nextSibling))
parentObject.htmlNode.childNodes[0].insertBefore(tr,beforeNode.tr.nextSibling);
else
if(this.parsingOn==parentObject.id){
this.parsedArray[this.parsedArray.length]=tr;
}
else
parentObject.htmlNode.childNodes[0].appendChild(tr);
if((beforeNode)&&(!beforeNode.span))beforeNode=null;
if(this.XMLsource)if((childs)&&(childs!=0))Nodes[Count].XMLload=0;else Nodes[Count].XMLload=1;
Nodes[Count].tr=tr;
tr.nodem=Nodes[Count];
if(parentObject.itemId==0)
tr.childNodes[0].className="hiddenRow";
if((parentObject._r_logic)||(this._frbtr))
Nodes[Count].htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0].src=this.imPath+this.radioArray[0];
if(optionStr){
var tempStr=optionStr.split(",");
for(var i=0;i<tempStr.length;i++)
{
switch(tempStr[i])
{
case "SELECT": this.selectItem(itemId,false);break;
case "CALL": this.selectItem(itemId,true);break;
case "CHILD": Nodes[Count].XMLload=0;break;
case "CHECKED":
if(this.XMLloadingWarning)
this.setCheckList+=this.dlmtr+itemId;
else
this.setCheck(itemId,1);
break;
case "HCHECKED":
this._setCheck(Nodes[Count],"unsure");
break;
case "OPEN": Nodes[Count].openMe=1;break;
}
};
};
if(!this.XMLloadingWarning)
{
if((this._getOpenState(parentObject)<0)&&(!this._hAdI))this.openItem(parentObject.id);
if(beforeNode)
{
this._correctPlus(beforeNode);
this._correctLine(beforeNode);
}
this._correctPlus(parentObject);
this._correctLine(parentObject);
this._correctPlus(Nodes[Count]);
if(parentObject.childsCount>=2)
{
this._correctPlus(Nodes[parentObject.childsCount-2]);
this._correctLine(Nodes[parentObject.childsCount-2]);
}
if(parentObject.childsCount!=2)this._correctPlus(Nodes[0]);
if(this.tscheck)this._correctCheckStates(parentObject);
if(this._onradh)this._onradh(itemId);
}
if(this.cMenu)this.cMenu.setContextZone(Nodes[Count].span,Nodes[Count].id);
return Nodes[Count];
};
dhtmlXTreeObject.prototype.setItemContextMenu=function(itemId,cMenu){
var l=itemId.split(this.dlmtr);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -