X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/530ef4b6c5b943cfa68b779d11cf7de29aa878bf..0494b8d9b9bb03ab6c22b34dae81261e3cd7e3e6:/src/widgets/tree/TreeSorter.js diff --git a/src/widgets/tree/TreeSorter.js b/src/widgets/tree/TreeSorter.js index 730bc80b..aeabcbef 100644 --- a/src/widgets/tree/TreeSorter.js +++ b/src/widgets/tree/TreeSorter.js @@ -1,8 +1,8 @@ /*! - * Ext JS Library 3.2.1 - * 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 @@ -23,8 +23,10 @@ new Ext.tree.TreeSorter(myTree, { * @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) */ /** @@ -49,48 +51,54 @@ Ext.tree.TreeSorter = function(tree, config){ */ 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]); @@ -102,5 +110,5 @@ Ext.tree.TreeSorter.prototype = { if(p && p.childrenRendered){ this.doSort.defer(1, this, [p]); } - } -}; \ No newline at end of file + } +}); \ No newline at end of file