|
31 | 31 | SPECIAL_TITLE = "_DATA_", LEVELINDENT = 24, styled = false, TABLECELLID_PREFIX = "jstable_",TABLECELLID_POSTFIX = "_col",
|
32 | 32 | MINCOLWIDTH = 10,
|
33 | 33 | findDataCell = function (from,id) {
|
34 |
| - return from.find("div["+NODE_DATA_ATTR+'="'+id+'"]'); |
| 34 | + return from.find("div["+NODE_DATA_ATTR+'="'+ escapeId(id) +'"]'); |
35 | 35 | },
|
36 | 36 | isClickedSep = false, toResize = null, oldMouseX = 0, newMouseX = 0;
|
37 | 37 |
|
|
148 | 148 | draggable : s.draggable,
|
149 | 149 | stateful: s.stateful,
|
150 | 150 | indent: 0,
|
| 151 | + sortFn: [], |
151 | 152 | sortOrder: 'text',
|
152 | 153 | sortAsc: true,
|
153 | 154 | fixedHeader: s.fixedHeader !== false,
|
|
160 | 161 | }, cols = gs.columns, treecol = 0;
|
161 | 162 | // find which column our tree shuld go in
|
162 | 163 | for (i=0;i<s.columns.length;i++) {
|
| 164 | + //Save sort function |
| 165 | + if (i!==0 && s.columns[i].sort) { |
| 166 | + gs.sortFn[s.columns[i].value] = s.columns[i].sort; |
| 167 | + } |
163 | 168 | if (s.columns[i].tree) {
|
164 | 169 | // save which column it was
|
165 | 170 | treecol = i;
|
|
244 | 249 | var bigger;
|
245 | 250 |
|
246 | 251 | if (gs.sortOrder==='text') {
|
247 |
| - bigger = (defaultSort(a, b) === 1); |
| 252 | + bigger = defaultSort(a, b); |
248 | 253 | } else {
|
249 | 254 | var nodeA = this.get_node(a);
|
250 | 255 | var nodeB = this.get_node(b);
|
251 |
| - bigger = nodeA.data[gs.sortOrder] > nodeB.data[gs.sortOrder]; |
| 256 | + var valueA = nodeA.data[gs.sortOrder]; |
| 257 | + var valueB = nodeB.data[gs.sortOrder]; |
| 258 | + if(valueA && valueB){ |
| 259 | + if(gs.sortFn[gs.sortOrder]){ |
| 260 | + bigger = gs.sortFn[gs.sortOrder](valueA, valueB, nodeA, nodeB); |
| 261 | + }else{ |
| 262 | + // Default sorting |
| 263 | + bigger = (valueA > valueB ? 1 : -1); |
| 264 | + } |
| 265 | + }else{ |
| 266 | + // undefined is second |
| 267 | + if(valueA){ |
| 268 | + bigger = 1; |
| 269 | + }else if(valueB){ |
| 270 | + bigger = -1; |
| 271 | + }else{ |
| 272 | + // Compare two nodes without values |
| 273 | + bigger = defaultSort(a, b); |
| 274 | + } |
| 275 | + } |
252 | 276 | }
|
253 | 277 |
|
254 |
| - if (gs.sortAsc===false) |
255 |
| - bigger = !bigger; |
| 278 | + if (gs.sortAsc===false){ |
| 279 | + bigger = -bigger; |
256 | 280 |
|
257 |
| - return bigger ? 1 : -1; |
| 281 | + } |
| 282 | + |
| 283 | + return bigger; |
258 | 284 | };
|
259 | 285 |
|
260 | 286 | // sortable columns when jQuery UI is available
|
|
0 commit comments