Upgrade to ExtJS 3.3.0 - Released 10/06/2010
[extjs.git] / docs / source / Sorter.html
1 <html>
2 <head>
3   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    
4   <title>The source code</title>
5     <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
6     <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
7 </head>
8 <body  onload="prettyPrint();">
9     <pre class="prettyprint lang-js">/*!
10  * Ext JS Library 3.3.0
11  * Copyright(c) 2006-2010 Ext JS, Inc.
12  * licensing@extjs.com
13  * http://www.extjs.com/license
14  */
15 <div id="cls-Ext.list.Sorter"></div>/**
16  * @class Ext.list.Sorter
17  * @extends Ext.util.Observable
18  * <p>Supporting Class for Ext.list.ListView</p>
19  * @constructor
20  * @param {Object} config
21  */
22 Ext.list.Sorter = Ext.extend(Ext.util.Observable, {
23     <div id="cfg-Ext.list.Sorter-sortClasses"></div>/**
24      * @cfg {Array} sortClasses
25      * The CSS classes applied to a header when it is sorted. (defaults to <tt>["sort-asc", "sort-desc"]</tt>)
26      */
27     sortClasses : ["sort-asc", "sort-desc"],
28
29     constructor: function(config){
30         Ext.apply(this, config);
31         Ext.list.Sorter.superclass.constructor.call(this);
32     },
33
34     init : function(listView){
35         this.view = listView;
36         listView.on('render', this.initEvents, this);
37     },
38
39     initEvents : function(view){
40         view.mon(view.innerHd, 'click', this.onHdClick, this);
41         view.innerHd.setStyle('cursor', 'pointer');
42         view.mon(view.store, 'datachanged', this.updateSortState, this);
43         this.updateSortState.defer(10, this, [view.store]);
44     },
45
46     updateSortState : function(store){
47         var state = store.getSortState();
48         if(!state){
49             return;
50         }
51         this.sortState = state;
52         var cs = this.view.columns, sortColumn = -1;
53         for(var i = 0, len = cs.length; i < len; i++){
54             if(cs[i].dataIndex == state.field){
55                 sortColumn = i;
56                 break;
57             }
58         }
59         if(sortColumn != -1){
60             var sortDir = state.direction;
61             this.updateSortIcon(sortColumn, sortDir);
62         }
63     },
64
65     updateSortIcon : function(col, dir){
66         var sc = this.sortClasses;
67         var hds = this.view.innerHd.select('em').removeClass(sc);
68         hds.item(col).addClass(sc[dir == "DESC" ? 1 : 0]);
69     },
70
71     onHdClick : function(e){
72         var hd = e.getTarget('em', 3);
73         if(hd && !this.view.disableHeaders){
74             var index = this.view.findHeaderIndex(hd);
75             this.view.store.sort(this.view.columns[index].dataIndex);
76         }
77     }
78 });
79
80 // Backwards compatibility alias
81 Ext.ListView.Sorter = Ext.list.Sorter;</pre>    
82 </body>
83 </html>