117 lines
3.3 KiB
JavaScript
117 lines
3.3 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
|
|
*/
|
|
|
|
/*
|
|
Purpose: sorting extension for dhtmlxTree
|
|
Last updated: 03.05.2005
|
|
*/
|
|
|
|
|
|
/**
|
|
* @desc: reorder items in tree according to their text
|
|
* @type: public
|
|
* @param: nodeId - id of node to start sorting from
|
|
* @param: all_levels - sorting all levels or only current level
|
|
* @param: order - sorting order - ASC or DES
|
|
* @edition: Professional
|
|
* @topic: 0
|
|
*/
|
|
|
|
dhtmlXTreeObject.prototype.sortTree=function(nodeId,order,all_levels)
|
|
{
|
|
var sNode=this._globalIdStorageFind(nodeId);
|
|
if (!sNode) return false;
|
|
|
|
this._reorderBranch(sNode,(order.toString().toLowerCase()=="asc"),convertStringToBoolean(all_levels))
|
|
};
|
|
|
|
/**
|
|
* @desc: set custom sort functions, which has two parametrs - id_of_item1,id_of_item2
|
|
* @type: public
|
|
* @param: func - sorting function
|
|
* @edition: Professional
|
|
* @topic: 0
|
|
*/
|
|
dhtmlXTreeObject.prototype.setCustomSortFunction=function(func)
|
|
{
|
|
this._csfunca=func;
|
|
};
|
|
|
|
|
|
dhtmlXTreeObject.prototype._reorderBranch=function(node,order,all_levels){
|
|
var m=[];
|
|
var count=node.childsCount;
|
|
if (!count) return;
|
|
|
|
var parent = node.childNodes[0].tr.parentNode;
|
|
for (var i=0; i<count; i++){
|
|
m[i]=node.childNodes[i];
|
|
parent.removeChild(m[i].tr);
|
|
}
|
|
|
|
var self=this;
|
|
if (order==1)
|
|
if(this._csfunca)
|
|
m.sort( function(a,b){ return self._csfunca(a.id,b.id); } );
|
|
else
|
|
m.sort( function(a,b){ return ((a.span.innerHTML.toUpperCase()>b.span.innerHTML.toUpperCase())?1:((a.span.innerHTML.toUpperCase()==b.span.innerHTML.toUpperCase())?0:-1)) } );
|
|
else
|
|
if(this._csfunca)
|
|
m.sort( function(a,b){ return self._csfunca(b.id,a.id); } );
|
|
else
|
|
m.sort( function(a,b){ return ((a.span.innerHTML.toUpperCase()<b.span.innerHTML.toUpperCase())?1:((a.span.innerHTML.toUpperCase()==b.span.innerHTML.toUpperCase())?0:-1)) } );
|
|
|
|
for (var i=0; i<count; i++){
|
|
parent.appendChild(m[i].tr);
|
|
node.childNodes[i]=m[i];
|
|
|
|
if ((all_levels)&&(m[i].unParsed))
|
|
m[i].unParsed.set("order",order?1:-1);
|
|
else
|
|
if ((all_levels)&&(m[i].childsCount))
|
|
this._reorderBranch(m[i],order,all_levels);
|
|
|
|
}
|
|
|
|
for (var i=0; i<count; i++){
|
|
this._correctPlus(m[i]);
|
|
this._correctLine(m[i]);
|
|
}
|
|
}
|
|
|
|
dhtmlXTreeObject.prototype._reorderXMLBranch=function(node){
|
|
var orderold=node.getAttribute("order");
|
|
if (orderold=="none") return;
|
|
var order=(orderold==1);
|
|
var count=node.childNodes.length;
|
|
if (!count) return;
|
|
|
|
var m=new Array();
|
|
var j=0;
|
|
|
|
for (var i=0; i<count; i++)
|
|
if (node.childNodes[i].nodeType==1)
|
|
{ m[j]=node.childNodes[i]; j++ }
|
|
|
|
for (var i=count-1; i!=0; i--)
|
|
node.removeChild(node.childNodes[i]);
|
|
|
|
|
|
if (order)
|
|
m.sort( function(a,b){ return ((a.getAttribute("text")>b.getAttribute("text"))?1:((a.getAttribute("text")==b.getAttribute("text"))?0:-1)) } );
|
|
else
|
|
m.sort( function(a,b){ return ((a.getAttribute("text")<b.getAttribute("text"))?1:((a.getAttribute("text")==b.getAttribute("text"))?0:-1)) } );
|
|
|
|
for (var i=0; i<j; i++){
|
|
m[i].setAttribute("order",orderold);
|
|
node.appendChild(m[i]);
|
|
}
|
|
|
|
node.setAttribute("order","none");
|
|
}
|
|
//(c)dhtmlx ltd. www.dhtmlx.com
|