newxtree.js代码
2018-09-22 01:09
/*=========================================
PoweredbyFason
HomePage:
Version:3.0
=========================================*/
varTreeConfig={
TreeIcon:{
root:root.gif,
folderopen:folderopen.gif,
folder:folder.gif,
file:file.gif,
Rplus:Rplus.gif,
Rminus:Rminus.gif,
join:T.gif,
joinbottom:L.gif,
plus:Tplus.gif,
plusbottom:Lplus.gif,
minus:Tminus.gif,
minusbottom:Lminus.gif,
blank:blank.gif,
line:I.gif
},
defaultText:New,
defaultHref:javascript:void(0),
defaultTarget:_blank,
loadingText:Loading...,
unavaibleText:Unavaible,
useCookie:true,
contextmenu:null
};
varTreeHandler={
id:0,
all:{},
getId:function(obj,key){
varID=key==null?this.id:key;
this.all[ID]=obj;
returnkey==null?this.id++:key;
},
setImagePath:function(sPath){
for(iinTreeConfig.TreeIcon){
vartem=newImage();
tem.src=sPath+TreeConfig.TreeIcon[i];
TreeConfig.TreeIcon[i]=tem.src;
}
}
};
//*************
//WebCookie
//*************
varWebCookie=newfunction(){
this.setValue=function(sName,sValue,sExpire,sPath,sDomain,sSecure){
varcookie=sName+=+escape(sValue);
if(sExpire)cookie+=;expires=+sExpire.toGMTString();
if(sPath)cookie+=;path=+sPath;
if(sSecure)cookie+=;secure;
};
this.getValue=function(sName){
varc=document.cookie.split(;);
for(vari=0;i<c.length;i++){
varcItem=c[i].split(=);
if(cItem[0]==sName)returnunescape(cItem[1]);
}
returnnull;
};
this.delCookie=function(sName){
varcVal=this.getValue(sName);
if(cVal!=null){
vard=newDate();d.setTime(d.getTime()-1);
this.setValue(sName,cVal,d);
}
};
};
//**************
//TreeNode
//**************
Array.prototype.Remove=function(o){
for(vari=0;i<this.length;i++){
if(this[i]==o)break;
}
if(i!=this.length)returnthis.slice(0,i).concat(this.slice(i+1,this.length));
returnthis;
};
functionTreeNode(sKey,sText,sHref,sTarget,sTitle,sIcon,sOpenIcon,sXMLSrc){
this.id=TreeHandler.getId(this,sKey);
this.level=0;
this.text=sText?sText:TreeConfig.defaultText;
this.href=sHref?sHref:TreeConfig.defaultHref;
this.target=sHref?(sTarget?sTarget:TreeConfig.defaultTarget):_self;
this.title=sTitle?sTitle:this.text;
this.childNodes=newArray();
this.parentNode=null;
this.shown=false;
this.icon=sIcon;
this.openIcon=sOpenIcon;
this.src=sXMLSrc;
this._tree=null;
this.onexpand=null;
this.oncollapse=null;
this.onselect=null;
this.toElement();
if(sXMLSrc){
this.open=0;
this.loader=newthis.constructor(null,TreeConfig.loadingText,null,null,null);
this.add(this.loader);
}
};
TreeNode.prototype.toElement=function(){
varf=typeof(this.href)==function;
varoThis=this;
this._item=document.createElement(div);
this._item.className=TreeNode;
this._item.noWrap=true;
this._item.onselectstart=function(){returnfalse;}
this._handler=document.createElement(img);
this._handler.align=absmiddle;
this._handler.onclick=function(){oThis.toggle();};
this._item.appendChild(this._handler);
this._icon=document.createElement(img);
this._icon.align=absmiddle;
//this._icon.onclick=function(){oThis.select(true);};
this._icon.onclick=function(){oThis.toggle();};//superj修改,单击图标为展开
this._icon.ondblclick=function(){oThis.toggle();};
this._item.appendChild(this._icon);
this._anchor=document.createElement(a);
this._anchor.className=TreeNode-Anchor
this._anchor.target=f?_self:this.target;
this._anchor.href=f?TreeConfig.defaultHref:this.href;
this._anchor.title=this.title;
//this._anchor.onmousedown=function(e){returnoThis.contextMenu(e);};
this._anchor.onmousedown=function(){oThis.toggle();};//superj修改,单击标签为展开
this._anchor.onfocus=function(){oThis.focus();}
this._anchor.onblur=function(){oThis.blur();};
this._anchor.onkeydown=function(e){returnoThis.KeyDown(e);}
this._item.appendChild(this._anchor);
this._container=document.createElement(div);
this._container.style.display=this.open?:none;
this._item.appendChild(this._container);
};
TreeNode.prototype.HTMLtoText=function(s){
returnString(s).replace(/&/g,).replace(/\/g,").replace(/</g,<).replace(/>/g,>);
};
TreeNode.prototype.isLast=function(){
varp=this.parentNode;
if(p==null)returnfalse;
returnp.childNodes[p.childNodes.length-1]==this;
};
TreeNode.prototype.indent=function(){
for(vari=0;i<this.childNodes.length;i++){this.childNodes[i].indent();}
vart=this._item,iv=this.level;
if(iv)while(--iv){t.removeChild(t.firstChild);}
varnode=this.parentNode,v=0,_root=this.getRoot();
while(node){
v++;
if(node==_root)break;
varm=document.createElement(img);
m.align=absmiddle;
m.src=node.isLast()?TreeConfig.TreeIcon.blank:TreeConfig.TreeIcon.line;
t.insertBefore(m,t.firstChild);
node=node.parentNode;
}
this.level=v;
};
TreeNode.prototype.recalIndent=function(nLevel,b){
for(vari=0;i<this.childNodes.length;i++){
this.childNodes[i]._item.childNodes[nLevel-1].src=b?TreeConfig.TreeIcon.blank:TreeConfig.TreeIcon.line;
this.childNodes[i].recalIndent(nLevel,b);
}
};
TreeNode.prototype.reloadIcon=function(){
varl=this.isLast(),o=this.open,m=TreeConfig.TreeIcon;
if(this.parentNode){
this._handler.src=this.childNodes.length>0?(o?(l?m.minusbottom:m.minus):(l?m.plusbottom:m.plus)):(l?m.joinbottom:m.join);
}
this._icon.src=this.childNodes.length>0?(o?(this.openIcon?this.openIcon:(this.icon?this.icon:m.folderopen)):(this.icon?this.icon:m.folder)):(this.icon?this.icon:m.file);
};
TreeNode.prototype.addXMLNodeLoop=function(doc){
varc=doc.childNodes;
for(vari=0;i<c.length;i++){
varo=c[i];
if(o.nodeType==1){
varX=this.constructor;
varnode=newX(o.getAttribute(id),o.getAttribute(text),o.getAttribute(href),o.getAttribute(target),o.getAttribute(title),o.getAttribute(icon),o.getAttribute(openicon),o.getAttribute(src));
this.add(node);
if(!o.getAttribute(src)){
node.addXMLNodeLoop(o);
}
}
}
};
TreeNode.prototype.XMLHttpCallBack=function(){
if(this._xmlhttp.readyState!=4)return;
varoLoad=this.loader;
vardoc=this._xmlhttp.responseXML;
varsXML=String(this._xmlhttp.responseText).replace(/<\?xml[^\?]*\?>/i,);
if(window.DOMParser){
doc=(newDOMParser()).parseFromString(sXML,text/xml);
}else{
doc.loadXML(sXML);
}
if(doc.documentElement){
varoRoot=doc.getElementsByTagName(Tree)[0];
if(oRoot.childNodes.length==0){this.setText(TreeConfig.unavaibleText);}
else{
vars=this._tree.getSelectedNode()==oLoad;
this.addXMLNodeLoop(oRoot);
oLoad.remove();
this.async();
this.loader=null;
}
}
else{
oLoad.setText(TreeConfig.unavaibleText);
}
};
TreeNode.prototype.getXML=function(){
varoLoad=this.loader;
varoThis=this;
this._xmlhttp=null;
try{
if(window.XMLHttpRequest)
this._xmlhttp=newXMLHttpRequest();
elseif(window.ActiveXObject)
this._xmlhttp=newActiveXObject(Microsoft.XMLHTTP);
}catch(e){}
if(this._xmlhttp==null)thrownewError(Yourbrowserdoesn\tsupport!);
this._xmlhttp.onreadystatechange=function(){oThis.XMLHttpCallBack();};
try{
vartemp=(/\?/g.test(this.src)?&:?)+temp=+String(newDate().getTime())
this._xmlhttp.open(get,this.src+temp,true);
this._xmlhttp.send(null);
}catch(e){oLoad.setText(TreeConfig.unavaibleText);}
};
TreeNode.prototype.resetTree=function(oTree){
for(vari=0;i<this.childNodes.length;i++)
this.childNodes[i].resetTree(oTree);
this._tree=oTree;
};
TreeNode.prototype.setOpen=function(v){
this.open=v;
if(TreeConfig.useCookie){
WebCookie.setValue(o+this.id,v);
}
};
TreeNode.prototype.getOpen=function(){
varo=WebCookie.getValue(o+this.id);
if(o!=null)
returnparseInt(o);
return0;
};
TreeNode.prototype.toHTML=function(){
varo=this._item;
this.indent();
this.reloadIcon();
if(this.parentNode==null)o.removeChild(this._handler);
returno;
};
TreeNode.prototype.getRoot=function(){
varroot=this;
while(root.parentNode)root=root.parentNode;
returnroot;
};
TreeNode.prototype.setText=function(sText){
this.text=sText;
this._anchor.innerHTML=this.HTMLtoText(sText);
};
TreeNode.prototype.add=function(oItem){
vartree=this._tree;
oItem.parentNode=this;
varlen=this.childNodes.length;
this.childNodes[len]=oItem;
if(len>0){
varo=this.childNodes[len-1];
o.recalIndent(o.level,false);
o.reloadIcon();
}elseif(tree){
if(tree._rendered)this.open=0;
this.reloadIcon();
}
if(tree)this.resetTree(tree);
this._container.style.display=this.open?:none;
this._container.appendChild(oItem.toHTML());
returnoItem;
};
TreeNode.prototype.remove=function(f){
for(vari=0;i<this.childNodes.length;i++){this.childNodes[i].remove(true);}
this.unselect();
varv=this.getPreviousSibling();
varp=this.parentNode;
if(p){
p.childNodes=p.childNodes.Remove(this);
if(p.childNodes.length>0){
varnode=p.childNodes[p.childNodes.length-1];
node.recalIndent(node.level,true);
node.reloadIcon();
}else{
p.setOpen(0);
p._container.style.display=none;
p.reloadIcon();
}
}
vartmp=this._item;
if(tmp)tmp.parentNode.removeChild(tmp);
deleteTreeConfig[this.id];
if(v&&!f)v.select(false);
};
TreeNode.prototype.toggle=function(){
if(this.childNodes.length>0){
if(this.open){
this.collapse();
}
else{
this.expand();
}
}
};
TreeNode.prototype.expand=function(){
this.setOpen(1);
if(!this.shown){
this.shown=true;
if(this.src)this.getXML();
}
this.reloadIcon();
this._container.style.display=;
if(typeofthis.onexpand==function){
this.onexpand();
}else{
eval(this.onexpand);
}
};
TreeNode.prototype.collapse=function(){
this.setOpen(0);
this._container.style.display=none;
this.reloadIcon();
this.select(false);
if(typeofthis.oncollapse==function){
this.oncollapse();
}else{
eval(this.oncollapse);
}
};
TreeNode.prototype.async=function(){
vara=this._tree.context;
if(!a.length)return;
varid=a[a.length-1];
varnode=TreeHandler.all[id];
if(typeof(node)!=undefined){
if(node.parentNode==this){
this._.context=a.slice(0,-1);
if(node.childNodes.length>0)
node.expand();
else
node.select();
}
}
};
TreeNode.prototype.expandAll=function(){
if(this.childNodes.length>0&&!this.open)this.expand();
this.expandChildren();
};
TreeNode.prototype.collapseAll=function(){
this.collapseChildren();
if(this.childNodes.length>0&&this.open)this.collapse();
};
TreeNode.prototype.expandChildren=function(){
for(vari=0;i<this.childNodes.length;i++)
this.childNodes[i].expandAll();
};
TreeNode.prototype.collapseChildren=function(){
for(vari=0;i<this.childNodes.length;i++)
this.childNodes[i].collapseAll();
};
TreeNode.prototype.openURL=function(){
if(typeofthis.href==function){
this.href();
}elseif(this.href!=TreeConfig.defaultHref){
window.open(this.href,this.target);
}
};
TreeNode.prototype.select=function(b){
this._anchor.focus();
if(b){
this.openURL();
}
};
TreeNode.prototype.unselect=function(){
this._anchor.className=TreeNode-Anchor;
varselected=this._tree.getSelectedNode();
if(selected==this)this._tree.setSelectedNode(null);
};
TreeNode.prototype.focus=function(){
varnode=this._tree.getSelectedNode();
if(node&&node!=this){node.unselect();}
this._tree.setSelectedNode(this);
varoItem=this._anchor;
oItem.className=TreeNode-Anchorfocus;
if(typeofthis.onselect==function){
this.onselect();
}else{
eval(this.onselect);
}
};
TreeNode.prototype.blur=function(){
varoItem=this._anchor;
oItem.className=TreeNode-Anchorselected;
};
TreeNode.prototype.contextMenu=function(e){
e=ewindow.event;
if(e.button==2){
if(typeofTreeConfig.contextmenu==function)
TreeConfig.contextmenu();
returnfalse;
}
returntrue;
};
TreeNode.prototype.getFirstChild=function(){
if(this.childNodes.length>0&&this.open)
returnthis.childNodes[0];
returnthis;
};
TreeNode.prototype.getLastChild=function(){
if(this.childNodes.length>0&&this.open)
returnthis.childNodes[this.childNodes.length-1].getLastChild();
returnthis;
};
TreeNode.prototype.getPreviousSibling=function(){
if(!this.parentNode)returnnull;
for(vari=0;i<this.parentNode.childNodes.length;i++)
if(this.parentNode.childNodes[i]==this)break;
if(i==0)
returnthis.parentNode;
else
returnthis.parentNode.childNodes[i-1].getLastChild();
};
TreeNode.prototype.getNextSibling=function(){
if(!this.parentNode)returnnull;
for(vari=0;i<this.parentNode.childNodes.length;i++)
if(this.parentNode.childNodes[i]==this)break;
if(i==this.parentNode.childNodes.length-1)
returnthis.parentNode.getNextSibling();
else
returnthis.parentNode.childNodes[i+1];
}
TreeNode.prototype.KeyDown=function(e){
e=ewindow.event;
varcode=e.whiche.keyCode;
varo=this;
if(code==37){
if(this.open)this.collapse();
else{
if(this.parentNode)this.parentNode.select(false);
}
returnfalse;
}
elseif(code==38){
varel=o.getPreviousSibling();
if(el)el.select(false);
returnfalse;
}
elseif(code==39){
if(this.childNodes.length>0){
if(!this.open)this.expand();
else{
varel=o.getFirstChild();
if(el)el.select(false);
}
}
returnfalse;
}
elseif(code==40){
if(this.open&&this.childNodes.length>0)this.getFirstChild().select(false);
else{
varel=o.getNextSibling();
if(el)el.select(false);
}
returnfalse;
}
elseif(code==13){
this.toggle();
returntrue;
}
returntrue;
};
functionCheckBoxTreeNode(sKey,sName,sText,sHref,sTarget,sTitle,sIcon,sOpenIcon,sXMLSrc){
this._base=TreeNode;
this._base(sKey,sText,sHref,sTarget,sTitle,sIcon,sOpenIcon,sXMLSrc);
this.checked=false;
};
CheckBoxTreeNode.prototype=newTreeNode;
CheckBoxTreeNode.prototype.toHTML=function(){
this._base=TreeNode.prototype.toHTML;
this._base();
varoThis=this;
this._checkbox=document.createElement(input);
this._checkbox.id=this._checkbox.name=this.name;
this._checkbox.type=checkbox;
this._checkbox.defaultChecked=this.parentNodeinstanceofCheckBoxTreeNode?this.parentNode.getChecked():this.checked;
this._checkbox.onclick=function(){oThis.check()};
this._checkbox.hideFocus=true;
this._item.insertBefore(this._checkbox,this._icon);
returnthis._item;
};
CheckBoxTreeNode.prototype.check=function(){
this.setCheckedChildren(this.getChecked());
this.setCheckedParent();
if(typeofthis.oncheck==function){
this.oncheck();
}else{
eval(this.oncheck);
}
};
CheckBoxTreeNode.prototype.setCheckedChildren=function(b){
for(vari=0,j=0;i<this.childNodes.length;i++){
if(this.childNodes[i]instanceofCheckBoxTreeNode)
this.childNodes[i].setCheckedChildren(b);
}
this._checkbox.checked=b;
};
CheckBoxTreeNode.prototype.setCheckedParent=function(){
varp=this.parentNode;
if(pinstanceofCheckBoxTreeNode){
for(vari=0;i<p.childNodes.length;i++){
if(!p.childNodes[i].getChecked())break;
}
p._checkbox.checked=i==p.childNodes.length
p.setCheckedParent();
}
};
CheckBoxTreeNode.prototype.getChecked=function(){
returnthis._checkbox.checked;
};
//************
//TreeView
//************
functionTreeView(sKey,sText,sHref,sTarget,sTitle,sIcon,sOpenIcon,sXMLSrc){
this.base=TreeNode;
this.base(sKey,sText,sHref,sTarget,sTitle,sIcon,sOpenIcon,sXMLSrc);
this.icon=sIconTreeConfig.TreeIcon.root;
this.context=newArray();
this._rendered=false;
this._tree=this;
};
TreeView.prototype=newTreeNode;
TreeView.prototype.getSelectedNode=function(){
if(window.selectedNode)returnwindow.selectedNode;
returnnull;
};
TreeView.prototype.setSelectedNode=function(oNode){
window.selectedNode=oNode;
};
TreeView.prototype.setContext=function(){
this.context=newArray();
for(vari=arguments.length-1,j=0;i>=0;i--,j++){
this.context[j]=arguments[i];
}
};
TreeView.prototype.create=function(oTarget){
oTarget.appendChild(this.toHTML());
this._rendered=true;
if(this.childNodes.length>0this.openthis.src)
this.expand();
};
TreeView.prototype.toString=function(){
varobj=this.toHTML();
varo=document.createElement(div);
o.appendChild(obj);
this._rendered=true;
returno.innerHTML;
};