--- /dev/null
+<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">/*
+ * 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
+ */
+</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">){
+ </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">);
+ </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">);
+ </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">);
+ </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">);
+
+ </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">;
+ </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">;
+ </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">;
+ </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">;
+ </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">;
+ </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">;
+
+ </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">){
+ </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">fs</span><span class="jsdoc-syntax">){
+ </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">]){
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">1;
+ }
+ </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">]){
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">-1;
+ }
+ }
+ </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">());
+ </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">());
+ </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">){
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">dsc </span><span class="jsdoc-syntax">? +1 : -1;
+ }</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">){
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">dsc </span><span class="jsdoc-syntax">? -1 : +1;
+ }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">0;
+ }
+ };
+};
+
+</span><span class="jsdoc-var">Roo.tree.TreeSorter.prototype </span><span class="jsdoc-syntax">= {
+ </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">){
+ </span><span class="jsdoc-var">node.sort</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.sortFn</span><span class="jsdoc-syntax">);
+ },
+
+ </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">){
+ </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);
+ },
+
+ </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">){
+ </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.childrenRendered</span><span class="jsdoc-syntax">){
+ </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">]);
+ }
+ }
+};</span></code></body></html>
\ No newline at end of file