1 <html><head><title>../roojs1/Roo/tree/TreeSorter.js</title><link rel="stylesheet" type="text/css" href="../../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-comment">/*
4 * Copyright(c) 2006-2007, Ext JS, LLC.
6 * Originally Released Under LGPL - original licence link has changed is not relivant.
9 * <script type="text/javascript">
14 * @class Roo.tree.TreeSorter
15 * Provides sorting of nodes in a TreePanel
17 * @cfg {Boolean} folderSort True to sort leaf nodes under non leaf nodes
18 * @cfg {String} property The named attribute on the node to sort by (defaults to text)
19 * @cfg {String} dir The direction to sort (asc or desc) (defaults to asc)
20 * @cfg {String} leafAttr The attribute used to determine leaf nodes in folder sort (defaults to "leaf")
21 * @cfg {Boolean} caseSensitive true for case sensitive sort (defaults to false)
22 * @cfg {Function} sortType A custom "casting" function used to convert node values before sorting
24 * @param {TreePanel} tree
25 * @param {Object} config
27 </span><span class="jsdoc-var">Roo.tree.TreeSorter </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tree</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">){
28 </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">);
29 </span><span class="jsdoc-var">tree.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"beforechildrenrendered"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.doSort</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
30 </span><span class="jsdoc-var">tree.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"append"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.updateSort</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
31 </span><span class="jsdoc-var">tree.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"insert"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.updateSort</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
33 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">dsc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.dir </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">this.dir.toLowerCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">"desc"</span><span class="jsdoc-syntax">;
34 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.property </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-string">"text"</span><span class="jsdoc-syntax">;
35 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sortType </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.sortType</span><span class="jsdoc-syntax">;
36 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">fs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.folderSort</span><span class="jsdoc-syntax">;
37 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.caseSensitive </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
38 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">leafAttr </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.leafAttr </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-string">'leaf'</span><span class="jsdoc-syntax">;
40 </span><span class="jsdoc-var">this.sortFn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n1</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">n2</span><span class="jsdoc-syntax">){
41 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">fs</span><span class="jsdoc-syntax">){
42 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n1.attributes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">leafAttr</span><span class="jsdoc-syntax">] && !</span><span class="jsdoc-var">n2.attributes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">leafAttr</span><span class="jsdoc-syntax">]){
43 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">1;
45 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">n1.attributes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">leafAttr</span><span class="jsdoc-syntax">] && </span><span class="jsdoc-var">n2.attributes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">leafAttr</span><span class="jsdoc-syntax">]){
46 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">-1;
49 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">v1 </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sortType </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">sortType</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n1</span><span class="jsdoc-syntax">) : (</span><span class="jsdoc-var">cs </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">n1.attributes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">] : </span><span class="jsdoc-var">n1.attributes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.toUpperCase</span><span class="jsdoc-syntax">());
50 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">v2 </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sortType </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">sortType</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n2</span><span class="jsdoc-syntax">) : (</span><span class="jsdoc-var">cs </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">n2.attributes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">] : </span><span class="jsdoc-var">n2.attributes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.toUpperCase</span><span class="jsdoc-syntax">());
51 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v1 </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">v2</span><span class="jsdoc-syntax">){
52 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">dsc </span><span class="jsdoc-syntax">? +1 : -1;
53 }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v1 </span><span class="jsdoc-syntax">> </span><span class="jsdoc-var">v2</span><span class="jsdoc-syntax">){
54 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">dsc </span><span class="jsdoc-syntax">? -1 : +1;
55 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
56 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">0;
61 </span><span class="jsdoc-var">Roo.tree.TreeSorter.prototype </span><span class="jsdoc-syntax">= {
62 </span><span class="jsdoc-var">doSort </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">){
63 </span><span class="jsdoc-var">node.sort</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.sortFn</span><span class="jsdoc-syntax">);
66 </span><span class="jsdoc-var">compareNodes </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n1</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">n2</span><span class="jsdoc-syntax">){
67 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n1.text.toUpperCase</span><span class="jsdoc-syntax">() > </span><span class="jsdoc-var">n2.text.toUpperCase</span><span class="jsdoc-syntax">() ? 1 : -1);
70 </span><span class="jsdoc-var">updateSort </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tree</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">){
71 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.childrenRendered</span><span class="jsdoc-syntax">){
72 </span><span class="jsdoc-var">this.doSort.defer</span><span class="jsdoc-syntax">(1, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, [</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">]);
75 };</span></code></body></html>