X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=docs%2Fsrc%2FRoo_tree_TreeSorter.js.html;fp=docs%2Fsrc%2FRoo_tree_TreeSorter.js.html;h=fb1e45821a995b12e17c5a4a3fc7a5c82a8e104b;hb=9ff8ded6bbbd258ecd646184ba26020874e2c085;hp=0000000000000000000000000000000000000000;hpb=2542b67d1a0768025056f2f330bfe50b64d1ad38;p=roojs1 diff --git a/docs/src/Roo_tree_TreeSorter.js.html b/docs/src/Roo_tree_TreeSorter.js.html new file mode 100644 index 0000000000..fb1e45821a --- /dev/null +++ b/docs/src/Roo_tree_TreeSorter.js.html @@ -0,0 +1,75 @@ +/home/alan/gitlive/roojs1/Roo/tree/TreeSorter.js/* + * Based on: + * Ext JS Library 1.1.1 + * Copyright(c) 2006-2007, Ext JS, LLC. + * + * Originally Released Under LGPL - original licence link has changed is not relivant. + * + * Fork - LGPL + * <script type="text/javascript"> + */ + + +/** + * @class Roo.tree.TreeSorter + * Provides sorting of nodes in a TreePanel + * + * @cfg {Boolean} folderSort True to sort leaf nodes under non leaf nodes + * @cfg {String} property The named attribute on the node to sort by (defaults to text) + * @cfg {String} dir The direction to sort (asc or desc) (defaults to asc) + * @cfg {String} leafAttr The attribute used to determine leaf nodes in folder sort (defaults to "leaf") + * @cfg {Boolean} caseSensitive true for case sensitive sort (defaults to false) + * @cfg {Function} sortType A custom "casting" function used to convert node values before sorting + * @constructor + * @param {TreePanel} tree + * @param {Object} config + */ +Roo.tree.TreeSorter = function(tree, config){ + Roo.apply(this, config); + tree.on("beforechildrenrendered", this.doSort, this); + tree.on("append", this.updateSort, this); + tree.on("insert", this.updateSort, this); + + 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'; + + this.sortFn = function(n1, n2){ + if(fs){ + if(n1.attributes[leafAttr] && !n2.attributes[leafAttr]){ + return 1; + } + if(!n1.attributes[leafAttr] && n2.attributes[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()); + if(v1 < v2){ + return dsc ? +1 : -1; + }else if(v1 > v2){ + return dsc ? -1 : +1; + }else{ + return 0; + } + }; +}; + +Roo.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]); + } + } +}; \ No newline at end of file