/*!
- * Ext JS Library 3.2.0
- * Copyright(c) 2006-2010 Ext JS, Inc.
- * licensing@extjs.com
- * http://www.extjs.com/license
+ * Ext JS Library 3.3.1
+ * Copyright(c) 2006-2010 Sencha Inc.
+ * licensing@sencha.com
+ * http://www.sencha.com/license
*/
/**
* @class Ext.tree.TreeSorter
* @param {TreePanel} tree
* @param {Object} config
*/
-Ext.tree.TreeSorter = function(tree, config){
- /**
+Ext.tree.TreeSorter = Ext.extend(Object, {
+
+ constructor: function(tree, config){
+ /**
* @cfg {Boolean} folderSort True to sort leaf nodes under non-leaf nodes (defaults to false)
*/
/**
*/
Ext.apply(this, config);
- tree.on("beforechildrenrendered", this.doSort, this);
- tree.on("append", this.updateSort, this);
- tree.on("insert", this.updateSort, this);
- tree.on("textchange", this.updateSortParent, this);
+ tree.on({
+ scope: this,
+ beforechildrenrendered: this.doSort,
+ append: this.updateSort,
+ insert: this.updateSort,
+ textchange: this.updateSortParent
+ });
- var dsc = this.dir && this.dir.toLowerCase() == "desc";
- var p = this.property || "text";
- var sortType = this.sortType;
- var fs = this.folderSort;
- var cs = this.caseSensitive === true;
- var leafAttr = this.leafAttr || 'leaf';
+ var desc = this.dir && this.dir.toLowerCase() == 'desc',
+ prop = this.property || 'text';
+ sortType = this.sortType;
+ folderSort = this.folderSort;
+ caseSensitive = this.caseSensitive === true;
+ leafAttr = this.leafAttr || 'leaf';
+ if(Ext.isString(sortType)){
+ sortType = Ext.data.SortTypes[sortType];
+ }
this.sortFn = function(n1, n2){
- if(fs){
- if(n1.attributes[leafAttr] && !n2.attributes[leafAttr]){
+ var attr1 = n1.attributes,
+ attr2 = n2.attributes;
+
+ if(folderSort){
+ if(attr1[leafAttr] && !attr2[leafAttr]){
return 1;
}
- if(!n1.attributes[leafAttr] && n2.attributes[leafAttr]){
+ if(!attr1[leafAttr] && attr2[leafAttr]){
return -1;
}
}
- var v1 = sortType ? sortType(n1) : (cs ? n1.attributes[p] : n1.attributes[p].toUpperCase());
- var v2 = sortType ? sortType(n2) : (cs ? n2.attributes[p] : n2.attributes[p].toUpperCase());
+ var prop1 = attr1[prop],
+ prop2 = attr2[prop],
+ v1 = sortType ? sortType(prop1) : (caseSensitive ? prop1 : prop1.toUpperCase());
+ v2 = sortType ? sortType(prop2) : (caseSensitive ? prop2 : prop2.toUpperCase());
+
if(v1 < v2){
- return dsc ? +1 : -1;
+ return desc ? 1 : -1;
}else if(v1 > v2){
- return dsc ? -1 : +1;
- }else{
- return 0;
+ return desc ? -1 : 1;
}
+ return 0;
};
-};
-
-Ext.tree.TreeSorter.prototype = {
+ },
+
doSort : function(node){
node.sort(this.sortFn);
},
- compareNodes : function(n1, n2){
- return (n1.text.toUpperCase() > n2.text.toUpperCase() ? 1 : -1);
- },
-
updateSort : function(tree, node){
if(node.childrenRendered){
this.doSort.defer(1, this, [node]);
if(p && p.childrenRendered){
this.doSort.defer(1, this, [p]);
}
- }
-};
\ No newline at end of file
+ }
+});
\ No newline at end of file