116 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
| Product Name: dhtmlxSuite 
 | |
| Version: 4.0.3 
 | |
| Edition: Professional 
 | |
| License: content of this file is covered by DHTMLX Commercial or Enterprise license. Usage without proper license is prohibited. To obtain it contact sales@dhtmlx.com
 | |
| Copyright UAB Dinamenta http://www.dhtmlx.com
 | |
| */
 | |
| 
 | |
| dhtmlXTreeObject.prototype.addPath=function(sid,tid,style,id){ 
 | |
| 	//sid on top, tid in deep
 | |
| 	this.activatePaths();
 | |
| 	style=style||{};
 | |
| 	var path=[];
 | |
| 	var to=null;
 | |
| 	var from=this._idpull[tid];
 | |
| 	var end=this._idpull[sid];
 | |
| 	while (end!=to){
 | |
| 		path.push({open:this._getOpenState(from),
 | |
| 				from:from.id,
 | |
| 				size:(to?this._getIndex(to):0),
 | |
| 				to:(to?to.id:null),
 | |
| 				style:"border-left:"+(style.width||1)+"px "+(style.mode||"solid")+" "+(style.color||"red")+"; border-bottom:"+(style.width||1)+"px "+(style.mode||"solid")+" "+(style.color||"red")+";"})
 | |
| 		to=from;
 | |
| 		from=from.parentObject;
 | |
| 	}
 | |
| 		
 | |
| 	while (!id || this._pathspull[id]) id=(id||0)+1;
 | |
| 	
 | |
| 	this._pathspull[id]={path:path,id:id};
 | |
| 	this._paths.push(this._pathspull[id]);
 | |
| 	this._renderPath(this._pathspull[id])
 | |
| };
 | |
| dhtmlXTreeObject.prototype.activatePaths=function(height){
 | |
| 	var that=this;
 | |
| 	this.attachEvent("onOpenEnd",function(){ 
 | |
| 		for (var i=0; i<that._paths.length; i++){
 | |
| 			that._clearPath(that._paths[i])
 | |
| 			that._renderPath(that._paths[i]);
 | |
| 		}
 | |
| 		});
 | |
| 	this.attachEvent("onXLE",function(){
 | |
| 		var ends=that.XMLLoader.doXPath("//pathend");
 | |
| 		var starts=that.XMLLoader.doXPath("//pathstart");
 | |
| 		var stpull={};
 | |
| 		for (var i=0; i<starts.length; i++)
 | |
| 			stpull[starts[i].getAttribute("id")]=starts[i];
 | |
| 			
 | |
| 		for (var i=0; i<starts.length; i++){
 | |
| 			var end=ends[i].parentNode;
 | |
| 			var start=stpull[ends[i].getAttribute("id")];
 | |
| 			this.addPath(start.parentNode.getAttribute("id"),end.getAttribute("id"),{color:start.getAttribute("color"),mode:start.getAttribute("mode"),width:start.getAttribute("width")},start.getAttribute("id"));
 | |
| 		}
 | |
| 		
 | |
| 	});
 | |
| 
 | |
| 	if (height) this._halfHeight=height;
 | |
| 	else if (this._idpull[0].childsCount)
 | |
| 		this._halfHeight=Math.floor(this._idpull[0].childNodes[0].span.parentNode.offsetHeight/2);
 | |
| 		
 | |
| 	if (!this._halfHeight)
 | |
| 		this._halfHeight=9;
 | |
| 		
 | |
| 	this.activatePaths=function(){}
 | |
| }
 | |
| dhtmlXTreeObject.prototype._clearPath=function(obj){
 | |
| 	for (var i=obj.path.length-1; i>0; i--){
 | |
| 		var t=obj.path[i];
 | |
| 		if (t._html)
 | |
| 			t._html.parentNode.removeChild(t._html);
 | |
| 		t._html=null;
 | |
| 	}
 | |
| }
 | |
| dhtmlXTreeObject.prototype._renderPath=function(obj){
 | |
| 	var c=this._idpull[obj.path[obj.path.length-1].from].span.parentNode.parentNode;
 | |
| 	var top=(_isIE?9:8)+this._halfHeight;	
 | |
| 	
 | |
| 	var left=(_isIE?27:27);
 | |
| 	while(c.offsetParent!=this.allTree){
 | |
| 		top+=c.offsetTop;
 | |
| 		left+=c.offsetLeft;
 | |
| 		c=c.offsetParent;
 | |
| 	}
 | |
| 	
 | |
| 	
 | |
| 	for (var i=obj.path.length-1; i>0; i--){
 | |
| 		var t=obj.path[i];
 | |
| 		var d=document.createElement("div");
 | |
| 		if (!this._idpull[t.to].tr.offsetHeight) return;
 | |
| 		var pos=this._idpull[t.to].tr.offsetTop;
 | |
| 		d.style.cssText='position:absolute; z-index:1; width:'+(_isIE?10:8)+'px; height:'+(pos-9)+'px; left:'+left+'px; top:'+top+'px;'+t.style;
 | |
| 		top+=pos;
 | |
| 		left+=18;
 | |
| 		this.allTree.appendChild(d);
 | |
| 		t._html=d;
 | |
| 		
 | |
| 	}
 | |
| }
 | |
| dhtmlXTreeObject.prototype.deletePath=function(id){
 | |
| 	var z=this._pathspull[id];
 | |
| 	if (z){
 | |
| 		this._clearPath(z);
 | |
| 		delete this._pathspull[id];
 | |
| 		for (var i=0; i<this._paths.length; i++)
 | |
| 			if (this._paths[i]==z)
 | |
| 				return this._paths.splice(i,1);
 | |
| 	}	
 | |
| };
 | |
| 
 | |
| dhtmlXTreeObject.prototype.deleteAllPaths=function(id){
 | |
| 	for (var i=this._paths.length-1; i>=0; i--)
 | |
| 		this.deletePath(this._paths[i].id);
 | |
| };
 | |
| 
 | |
| dhtmlXTreeObject.prototype._paths=[];
 | |
| dhtmlXTreeObject.prototype._pathspull={};
 | |
| //(c)dhtmlx ltd. www.dhtmlx.com
 |