⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dhtmlxtree.js

📁 强大的动态功能树的生成文件
💻 JS
📖 第 1 页 / 共 5 页
字号:
/*
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 + -