jquery-tablesorter 1.14.1 → 1.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/lib/jquery-tablesorter/version.rb +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter.js +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/addons/pager/jquery.tablesorter.pager.js +5 -9
- data/vendor/assets/javascripts/jquery-tablesorter/extras/jquery.dragtable.mod.js +1 -4
- data/vendor/assets/javascripts/jquery-tablesorter/{jquery.metadata.js → extras/jquery.metadata.js} +1 -0
- data/vendor/assets/javascripts/jquery-tablesorter/extras/jquery.quicksearch.js +8 -4
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.js +116 -107
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.widgets.js +232 -171
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-file-type.js +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-input-select.js +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-chart.js +2 -3
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-columns.js +78 -0
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-cssStickyHeaders.js +14 -12
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-editable.js +4 -4
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-html5.js +429 -0
- data/vendor/assets/javascripts/jquery-tablesorter/{jquery.tablesorter.widgets-filter-formatter.js → widgets/widget-filter-formatter-jui.js} +1 -381
- data/vendor/assets/javascripts/jquery-tablesorter/{jquery.tablesorter.widgets-filter-formatter-select2.js → widgets/widget-filter-formatter-select2.js} +0 -0
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter.js +1307 -0
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-formatter.js +3 -3
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-grouping.js +4 -4
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-math.js +3 -3
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-pager.js +4 -8
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-resizable.js +176 -0
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-saveSort.js +68 -0
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-staticRow.js +3 -3
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-stickyHeaders.js +269 -0
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-storage.js +76 -0
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-uitheme.js +184 -0
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.black-ice.css +1 -1
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.blue.css +1 -1
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.dark.css +1 -1
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.default.css +1 -1
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.dropbox.css +1 -1
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.green.css +1 -1
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.grey.css +1 -1
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.ice.css +1 -1
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.jui.css +1 -1
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.metro-dark.css +1 -1
- metadata +15 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 434be6c4bd88f3d84bbfaa574aa004a6db18abdb
|
4
|
+
data.tar.gz: 21eb848f7fd16cfb5642470af727a6fc858438c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb3b3737c7de96e57b09385a612d5c1100125ffbd5c31007e1df38b563c7dbc7bc177dfcd958c8ffdb01a6a5ea24b857e8eacbe930d52547c80206b11fdf0b2f
|
7
|
+
data.tar.gz: 68cd1f4205072697210c3cacc18e078666bd9b1144b13968b944d30912f957530925f6d2a315cd7db2b2ec3475dccbb12931cfe8f030c150b21b35065c1847eb
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
Simple integration of jquery-tablesorter into the asset pipeline.
|
6
6
|
|
7
|
-
Current tablesorter version: 2.
|
7
|
+
Current tablesorter version: 2.20.1 (2/20/2015), [documentation]
|
8
8
|
|
9
9
|
Any issue associated with the js/css files, please report to [Mottie's fork].
|
10
10
|
|
@@ -24,7 +24,7 @@ Or install it yourself as:
|
|
24
24
|
|
25
25
|
## Requirements
|
26
26
|
|
27
|
-
Rails 3.
|
27
|
+
Rails 3.2 and higher (tested up to 4.2)
|
28
28
|
|
29
29
|
Tested with ruby 1.9.3 - 2.2.0
|
30
30
|
|
@@ -135,18 +135,15 @@
|
|
135
135
|
},
|
136
136
|
|
137
137
|
calcFilters = function(table, p) {
|
138
|
-
var
|
139
|
-
c = table.config,
|
138
|
+
var c = table.config,
|
140
139
|
hasFilters = c.$table.hasClass('hasFilters');
|
141
140
|
if (hasFilters && !p.ajaxUrl) {
|
142
141
|
if ($.isEmptyObject(c.cache)) {
|
143
142
|
// delayInit: true so nothing is in the cache
|
144
143
|
p.filteredRows = p.totalRows = c.$tbodies.eq(0).children('tr').not( p.countChildRows ? '' : '.' + c.cssChildRow ).length;
|
145
144
|
} else {
|
146
|
-
// just in case the pager tbody isn't the first tbody
|
147
|
-
tbodyIndex = c.$table.children('tbody').index( c.$tbodies.eq(0) );
|
148
145
|
p.filteredRows = 0;
|
149
|
-
$.each(c.cache[
|
146
|
+
$.each(c.cache[0].normalized, function(i, el) {
|
150
147
|
p.filteredRows += p.regexRows.test(el[c.columns].$row[0].className) ? 0 : 1;
|
151
148
|
});
|
152
149
|
}
|
@@ -659,8 +656,7 @@
|
|
659
656
|
c.$table.trigger('updateCache', [ function(){
|
660
657
|
var i,
|
661
658
|
rows = [],
|
662
|
-
|
663
|
-
n = table.config.cache[tbodyIndex].normalized;
|
659
|
+
n = table.config.cache[0].normalized;
|
664
660
|
p.totalRows = n.length;
|
665
661
|
for (i = 0; i < p.totalRows; i++) {
|
666
662
|
rows.push(n[i][c.columns].$row);
|
@@ -768,7 +764,7 @@
|
|
768
764
|
table.config.appender = null; // remove pager appender function
|
769
765
|
p.initialized = false;
|
770
766
|
delete table.config.rowsCopy;
|
771
|
-
$(table).unbind(
|
767
|
+
$(table).unbind( pagerEvents.split(' ').join('.pager ').replace(/\s+/g, ' ') );
|
772
768
|
if (ts.storage) {
|
773
769
|
ts.storage(table, p.storageKey, '');
|
774
770
|
}
|
@@ -848,7 +844,7 @@
|
|
848
844
|
p.regexRows = new RegExp('(' + (wo.filter_filteredRow || 'filtered') + '|' + c.selectorRemove.slice(1) + '|' + c.cssChildRow + ')');
|
849
845
|
|
850
846
|
$t
|
851
|
-
.unbind(
|
847
|
+
.unbind( pagerEvents.split(' ').join('.pager ').replace(/\s+/g, ' ') )
|
852
848
|
.bind('filterInit.pager filterStart.pager', function(e, filters) {
|
853
849
|
p.currentFilters = $.isArray(filters) ? filters : c.$table.data('lastSearch');
|
854
850
|
// don't change page if filters are the same (pager updating, etc)
|
@@ -198,15 +198,12 @@
|
|
198
198
|
}
|
199
199
|
};
|
200
200
|
|
201
|
-
/*!
|
202
|
-
* dragtable
|
201
|
+
/*! dragtable v2.0.14 Mod *//*
|
203
202
|
* _____ _
|
204
203
|
* | |___ _| |
|
205
204
|
* | | | | . | . |
|
206
205
|
* |_|_|_|___|___|
|
207
206
|
*
|
208
|
-
* @Version 2.0.14 MOD
|
209
|
-
*
|
210
207
|
* Copyright (c) 2010-2013, Andres akottr@gmail.com
|
211
208
|
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
212
209
|
* and GPL (GPL-LICENSE.txt) licenses.
|
@@ -32,7 +32,7 @@
|
|
32
32
|
prepareQuery: function (val) {
|
33
33
|
return val.toLowerCase().split(' ');
|
34
34
|
},
|
35
|
-
testQuery: function (query, txt
|
35
|
+
testQuery: function (query, txt) {
|
36
36
|
for (var i = 0; i < query.length; i += 1) {
|
37
37
|
if (txt.indexOf(query[i]) === -1) {
|
38
38
|
return false;
|
@@ -44,13 +44,13 @@
|
|
44
44
|
|
45
45
|
this.go = function () {
|
46
46
|
|
47
|
-
var i = 0,
|
47
|
+
var len, i = 0,
|
48
48
|
numMatchedRows = 0,
|
49
49
|
noresults = true,
|
50
50
|
query = options.prepareQuery(val),
|
51
51
|
val_empty = (val.replace(' ', '').length === 0);
|
52
52
|
|
53
|
-
for (
|
53
|
+
for (i = 0, len = rowcache.length; i < len; i++) {
|
54
54
|
if (val_empty || options.testQuery(query, cache[i], rowcache[i]) ||
|
55
55
|
($(rowcache[i]).hasClass(options.childRow) && $(rowcache[i > 1 ? i - 1 : 0]).is(':visible'))) {
|
56
56
|
options.show.apply(rowcache[i]);
|
@@ -125,7 +125,11 @@
|
|
125
125
|
|
126
126
|
this.loader = function (bool) {
|
127
127
|
if (typeof options.loader === "string" && options.loader !== "") {
|
128
|
-
(bool)
|
128
|
+
if (bool) {
|
129
|
+
$(options.loader).show();
|
130
|
+
} else {
|
131
|
+
$(options.loader).hide();
|
132
|
+
}
|
129
133
|
}
|
130
134
|
return this;
|
131
135
|
};
|
@@ -1,8 +1,10 @@
|
|
1
|
-
|
2
|
-
*
|
1
|
+
/*! TableSorter (FORK) v{{version}} *//*
|
2
|
+
* Client-side table sorting with ease!
|
3
3
|
* @requires jQuery v1.2.6+
|
4
4
|
*
|
5
5
|
* Copyright (c) 2007 Christian Bach
|
6
|
+
* fork maintained by Rob Garrison
|
7
|
+
*
|
6
8
|
* Examples and docs at: http://tablesorter.com
|
7
9
|
* Dual licensed under the MIT and GPL licenses:
|
8
10
|
* http://www.opensource.org/licenses/mit-license.php
|
@@ -11,8 +13,8 @@
|
|
11
13
|
* @type jQuery
|
12
14
|
* @name tablesorter (FORK)
|
13
15
|
* @cat Plugins/Tablesorter
|
14
|
-
* @author Christian Bach
|
15
|
-
* @contributor Rob Garrison
|
16
|
+
* @author Christian Bach - christian.bach@polyester.se
|
17
|
+
* @contributor Rob Garrison - https://github.com/Mottie/tablesorter
|
16
18
|
*/
|
17
19
|
/*jshint browser:true, jquery:true, unused:false, expr: true */
|
18
20
|
/*global console:false, alert:false, require:false, define:false, module:false */
|
@@ -32,7 +34,7 @@
|
|
32
34
|
|
33
35
|
var ts = this;
|
34
36
|
|
35
|
-
ts.version = '
|
37
|
+
ts.version = '{{version}}';
|
36
38
|
|
37
39
|
ts.parsers = [];
|
38
40
|
ts.widgets = [];
|
@@ -104,7 +106,7 @@
|
|
104
106
|
cssIconAsc : '', // class name added to the icon when the column has an ascending sort
|
105
107
|
cssIconDesc : '', // class name added to the icon when the column has a descending sort
|
106
108
|
cssInfoBlock : 'tablesorter-infoOnly', // don't sort tbody with this class name (only one class name allowed here!)
|
107
|
-
|
109
|
+
cssNoSort : 'tablesorter-noSort', // class name added to element inside header; clicking on it won't cause a sort
|
108
110
|
cssIgnoreRow : 'tablesorter-ignoreRow', // header row to ignore; cells within this row will not be added to c.$headers
|
109
111
|
|
110
112
|
// *** selectors
|
@@ -136,7 +138,6 @@
|
|
136
138
|
headerRow : 'tablesorter-headerRow',
|
137
139
|
headerIn : 'tablesorter-header-inner',
|
138
140
|
icon : 'tablesorter-icon',
|
139
|
-
info : 'tablesorter-infoOnly',
|
140
141
|
processing : 'tablesorter-processing',
|
141
142
|
sortAsc : 'tablesorter-headerAsc',
|
142
143
|
sortDesc : 'tablesorter-headerDesc',
|
@@ -180,37 +181,39 @@
|
|
180
181
|
return true;
|
181
182
|
}
|
182
183
|
|
183
|
-
function
|
184
|
+
ts.getElementText = function(c, node, cellIndex) {
|
184
185
|
if (!node) { return ''; }
|
185
186
|
var te,
|
186
|
-
|
187
|
-
|
188
|
-
|
187
|
+
t = c.textExtraction || '',
|
188
|
+
// node could be a jquery object
|
189
|
+
// http://jsperf.com/jquery-vs-instanceof-jquery/2
|
190
|
+
$node = node.jquery ? node : $(node);
|
189
191
|
if (typeof(t) === 'string') {
|
190
192
|
// check data-attribute first when set to 'basic'; don't use node.innerText - it's really slow!
|
191
|
-
return $.trim( (t === 'basic' ? $node.attr(c.textAttribute) || node.textContent : node.textContent ) || $node.text() || '' );
|
193
|
+
return $.trim( ( t === 'basic' ? $node.attr(c.textAttribute) || node.textContent : node.textContent ) || $node.text() || '' );
|
192
194
|
} else {
|
193
195
|
if (typeof(t) === 'function') {
|
194
|
-
return $.trim( t(node, table, cellIndex) );
|
195
|
-
} else if (typeof (te = ts.getColumnData( table, t, cellIndex )) === 'function') {
|
196
|
-
return $.trim( te(node, table, cellIndex) );
|
196
|
+
return $.trim( t($node[0], c.table, cellIndex) );
|
197
|
+
} else if (typeof (te = ts.getColumnData( c.table, t, cellIndex )) === 'function') {
|
198
|
+
return $.trim( te($node[0], c.table, cellIndex) );
|
197
199
|
}
|
198
200
|
}
|
199
201
|
// fallback
|
200
|
-
return $.trim( node.textContent || $node.text() || '' );
|
201
|
-
}
|
202
|
+
return $.trim( $node[0].textContent || $node.text() || '' );
|
203
|
+
};
|
202
204
|
|
203
205
|
function detectParserForColumn(table, rows, rowIndex, cellIndex) {
|
204
206
|
var cur, $node,
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
207
|
+
c = table.config,
|
208
|
+
i = ts.parsers.length,
|
209
|
+
node = false,
|
210
|
+
nodeValue = '',
|
211
|
+
keepLooking = true;
|
209
212
|
while (nodeValue === '' && keepLooking) {
|
210
213
|
rowIndex++;
|
211
214
|
if (rows[rowIndex]) {
|
212
215
|
node = rows[rowIndex].cells[cellIndex];
|
213
|
-
nodeValue = getElementText(
|
216
|
+
nodeValue = ts.getElementText(c, node, cellIndex);
|
214
217
|
$node = $(node);
|
215
218
|
if (table.config.debug) {
|
216
219
|
log('Checking if value was empty on row ' + rowIndex + ', column: ' + cellIndex + ': "' + nodeValue + '"');
|
@@ -293,10 +296,10 @@
|
|
293
296
|
|
294
297
|
/* utils */
|
295
298
|
function buildCache(table) {
|
296
|
-
var cc, t, tx, v, i, j, k, $row,
|
299
|
+
var cc, t, tx, v, i, j, k, $row, cols, cacheTime,
|
297
300
|
totalRows, rowData, colMax,
|
298
301
|
c = table.config,
|
299
|
-
$tb = c.$
|
302
|
+
$tb = c.$tbodies,
|
300
303
|
extractors = c.extractors,
|
301
304
|
parsers = c.parsers;
|
302
305
|
c.cache = {};
|
@@ -319,68 +322,65 @@
|
|
319
322
|
// colMax: # // added at the end
|
320
323
|
};
|
321
324
|
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
325
|
+
totalRows = ($tb[k] && $tb[k].rows.length) || 0;
|
326
|
+
for (i = 0; i < totalRows; ++i) {
|
327
|
+
rowData = {
|
328
|
+
// order: original row order #
|
329
|
+
// $row : jQuery Object[]
|
330
|
+
child: [], // child row text (filter widget)
|
331
|
+
raw: [] // original row text
|
332
|
+
};
|
333
|
+
/** Add the table data to main data array */
|
334
|
+
$row = $($tb[k].rows[i]);
|
335
|
+
cols = [];
|
336
|
+
// if this is a child row, add it to the last row's children and continue to the next row
|
337
|
+
// ignore child row class, if it is the first row
|
338
|
+
if ($row.hasClass(c.cssChildRow) && i !== 0) {
|
339
|
+
t = cc.normalized.length - 1;
|
340
|
+
cc.normalized[t][c.columns].$row = cc.normalized[t][c.columns].$row.add($row);
|
341
|
+
// add 'hasChild' class name to parent row
|
342
|
+
if (!$row.prev().hasClass(c.cssChildRow)) {
|
343
|
+
$row.prev().addClass(ts.css.cssHasChild);
|
344
|
+
}
|
345
|
+
// save child row content (un-parsed!)
|
346
|
+
rowData.child[t] = $.trim( $row[0].textContent || $row.text() || '' );
|
347
|
+
// go to the next for loop
|
348
|
+
continue;
|
349
|
+
}
|
350
|
+
rowData.$row = $row;
|
351
|
+
rowData.order = i; // add original row position to rowCache
|
352
|
+
for (j = 0; j < c.columns; ++j) {
|
353
|
+
if (typeof parsers[j] === 'undefined') {
|
354
|
+
if (c.debug) {
|
355
|
+
log('No parser found for cell:', $row[0].cells[j], 'does it have a header?');
|
344
356
|
}
|
345
|
-
// save child row content (un-parsed!)
|
346
|
-
rowData.child[t] = $.trim( $row[0].textContent || $row.text() || '' );
|
347
|
-
// go to the next for loop
|
348
357
|
continue;
|
349
358
|
}
|
350
|
-
|
351
|
-
rowData.
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
tx = extractors[j].format(t, table, $row[0].cells[j], j);
|
366
|
-
}
|
367
|
-
// allow parsing if the string is empty, previously parsing would change it to zero,
|
368
|
-
// in case the parser needs to extract data from the table cell attributes
|
369
|
-
v = parsers[j].id === 'no-parser' ? '' : parsers[j].format(tx, table, $row[0].cells[j], j);
|
370
|
-
cols.push( c.ignoreCase && typeof v === 'string' ? v.toLowerCase() : v );
|
371
|
-
if ((parsers[j].type || '').toLowerCase() === 'numeric') {
|
372
|
-
// determine column max value (ignore sign)
|
373
|
-
colMax[j] = Math.max(Math.abs(v) || 0, colMax[j] || 0);
|
374
|
-
}
|
359
|
+
t = ts.getElementText(c, $row[0].cells[j], j);
|
360
|
+
rowData.raw.push(t); // save original row text
|
361
|
+
// do extract before parsing if there is one
|
362
|
+
if (typeof extractors[j].id === 'undefined') {
|
363
|
+
tx = t;
|
364
|
+
} else {
|
365
|
+
tx = extractors[j].format(t, table, $row[0].cells[j], j);
|
366
|
+
}
|
367
|
+
// allow parsing if the string is empty, previously parsing would change it to zero,
|
368
|
+
// in case the parser needs to extract data from the table cell attributes
|
369
|
+
v = parsers[j].id === 'no-parser' ? '' : parsers[j].format(tx, table, $row[0].cells[j], j);
|
370
|
+
cols.push( c.ignoreCase && typeof v === 'string' ? v.toLowerCase() : v );
|
371
|
+
if ((parsers[j].type || '').toLowerCase() === 'numeric') {
|
372
|
+
// determine column max value (ignore sign)
|
373
|
+
colMax[j] = Math.max(Math.abs(v) || 0, colMax[j] || 0);
|
375
374
|
}
|
376
|
-
// ensure rowData is always in the same location (after the last column)
|
377
|
-
cols[c.columns] = rowData;
|
378
|
-
cc.normalized.push(cols);
|
379
375
|
}
|
380
|
-
|
381
|
-
|
382
|
-
|
376
|
+
// ensure rowData is always in the same location (after the last column)
|
377
|
+
cols[c.columns] = rowData;
|
378
|
+
cc.normalized.push(cols);
|
383
379
|
}
|
380
|
+
cc.colMax = colMax;
|
381
|
+
// total up rows, not including child rows
|
382
|
+
c.totalRows += cc.normalized.length;
|
383
|
+
|
384
384
|
}
|
385
385
|
if (c.showProcessing) {
|
386
386
|
ts.isProcessing(table); // remove processing icon
|
@@ -394,7 +394,7 @@
|
|
394
394
|
function appendToTable(table, init) {
|
395
395
|
var c = table.config,
|
396
396
|
wo = c.widgetOptions,
|
397
|
-
|
397
|
+
$tbodies = c.$tbodies,
|
398
398
|
rows = [],
|
399
399
|
cc = c.cache,
|
400
400
|
n, totalRows, $bk, $tb,
|
@@ -408,9 +408,9 @@
|
|
408
408
|
if (c.debug) {
|
409
409
|
appendTime = new Date();
|
410
410
|
}
|
411
|
-
for (k = 0; k <
|
412
|
-
$bk = $(
|
413
|
-
if ($bk.length
|
411
|
+
for (k = 0; k < $tbodies.length; k++) {
|
412
|
+
$bk = $tbodies.eq(k);
|
413
|
+
if ($bk.length) {
|
414
414
|
// get tbody
|
415
415
|
$tb = ts.processTbody(table, $bk, true);
|
416
416
|
n = cc[k].normalized;
|
@@ -752,23 +752,23 @@
|
|
752
752
|
// sort multiple columns
|
753
753
|
function multisort(table) { /*jshint loopfunc:true */
|
754
754
|
var i, k, num, col, sortTime, colMax,
|
755
|
-
|
755
|
+
rows, order, sort, x, y,
|
756
756
|
dir = 0,
|
757
757
|
c = table.config,
|
758
758
|
cts = c.textSorter || '',
|
759
759
|
sortList = c.sortList,
|
760
760
|
l = sortList.length,
|
761
|
-
bl =
|
761
|
+
bl = c.$tbodies.length;
|
762
762
|
if (c.serverSideSorting || isEmptyObject(c.cache)) { // empty table - fixes #206/#346
|
763
763
|
return;
|
764
764
|
}
|
765
765
|
if (c.debug) { sortTime = new Date(); }
|
766
766
|
for (k = 0; k < bl; k++) {
|
767
767
|
colMax = c.cache[k].colMax;
|
768
|
-
|
768
|
+
rows = c.cache[k].normalized;
|
769
769
|
|
770
|
-
|
771
|
-
//
|
770
|
+
rows.sort(function(a, b) {
|
771
|
+
// rows is undefined here in IE, so don't use it!
|
772
772
|
for (i = 0; i < l; i++) {
|
773
773
|
col = sortList[i][0];
|
774
774
|
order = sortList[i][1];
|
@@ -851,12 +851,12 @@
|
|
851
851
|
function bindMethods(table){
|
852
852
|
var c = table.config,
|
853
853
|
$table = c.$table,
|
854
|
-
events = 'sortReset update updateRows updateCell updateAll addRows updateComplete sorton appendCache ' +
|
855
|
-
'updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave '.split(' ')
|
854
|
+
events = ('sortReset update updateRows updateCell updateAll addRows updateComplete sorton appendCache ' +
|
855
|
+
'updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ').split(' ')
|
856
856
|
.join(c.namespace + ' ');
|
857
857
|
// apply easy methods that trigger bound events
|
858
858
|
$table
|
859
|
-
.unbind(
|
859
|
+
.unbind( events.replace(/\s+/g, ' ') )
|
860
860
|
.bind('sortReset' + c.namespace, function(e, callback){
|
861
861
|
e.stopPropagation();
|
862
862
|
c.sortList = [];
|
@@ -889,7 +889,7 @@
|
|
889
889
|
$table.find(c.selectorRemove).remove();
|
890
890
|
// get position from the dom
|
891
891
|
var v, t, row, icell,
|
892
|
-
$tb =
|
892
|
+
$tb = c.$tbodies,
|
893
893
|
$cell = $(cell),
|
894
894
|
// update cache - format: function(s, table, cell, cellIndex)
|
895
895
|
// no closest in jQuery v1.2.6 - tbdy = $tb.index( $(cell).closest('tbody') ),$row = $(cell).closest('tr');
|
@@ -902,9 +902,9 @@
|
|
902
902
|
icell = $cell.index();
|
903
903
|
c.cache[tbdy].normalized[row][c.columns].$row = $row;
|
904
904
|
if (typeof c.extractors[icell].id === 'undefined') {
|
905
|
-
t = getElementText(
|
905
|
+
t = ts.getElementText(c, cell, icell);
|
906
906
|
} else {
|
907
|
-
t = c.extractors[icell].format( getElementText(
|
907
|
+
t = c.extractors[icell].format( ts.getElementText(c, cell, icell), table, cell, icell );
|
908
908
|
}
|
909
909
|
v = c.parsers[icell].id === 'no-parser' ? '' :
|
910
910
|
c.parsers[icell].format( t, table, cell, icell );
|
@@ -938,7 +938,7 @@
|
|
938
938
|
$row = $($row).attr('role', 'row'); // make sure we're using a jQuery object
|
939
939
|
var i, j, l, t, v, rowData, cells,
|
940
940
|
rows = $row.filter('tr').length,
|
941
|
-
tbdy =
|
941
|
+
tbdy = c.$tbodies.index( $row.parents('tbody').filter(':first') );
|
942
942
|
// fixes adding rows to an empty table - see issue #179
|
943
943
|
if (!(c.parsers && c.parsers.length)) {
|
944
944
|
buildParserCache(table);
|
@@ -955,9 +955,9 @@
|
|
955
955
|
// add each cell
|
956
956
|
for (j = 0; j < l; j++) {
|
957
957
|
if (typeof c.extractors[j].id === 'undefined') {
|
958
|
-
t = getElementText(
|
958
|
+
t = ts.getElementText(c, $row[i].cells[j], j);
|
959
959
|
} else {
|
960
|
-
t = c.extractors[j].format( getElementText(
|
960
|
+
t = c.extractors[j].format( ts.getElementText(c, $row[i].cells[j], j), table, $row[i].cells[j], j );
|
961
961
|
}
|
962
962
|
v = c.parsers[j].id === 'no-parser' ? '' :
|
963
963
|
c.parsers[j].format( t, table, $row[i].cells[j], j );
|
@@ -1198,7 +1198,7 @@
|
|
1198
1198
|
colgroup = $('<colgroup class="' + ts.css.colgroup + '">');
|
1199
1199
|
overallWidth = c.$table.width();
|
1200
1200
|
// only add col for visible columns - fixes #371
|
1201
|
-
|
1201
|
+
c.$tbodies.find('tr:first').children(':visible').each(function() {
|
1202
1202
|
percent = parseInt( ( $(this).width() / overallWidth ) * 1000, 10 ) / 10 + '%';
|
1203
1203
|
colgroup.append( $('<col>').css('width', percent) );
|
1204
1204
|
});
|
@@ -1330,9 +1330,11 @@
|
|
1330
1330
|
$headers
|
1331
1331
|
// http://stackoverflow.com/questions/5312849/jquery-find-self;
|
1332
1332
|
.find(c.selectorSort).add( $headers.filter(c.selectorSort) )
|
1333
|
-
.unbind(
|
1334
|
-
.bind(
|
1335
|
-
var cell,
|
1333
|
+
.unbind( ('mousedown mouseup sort keyup '.split(' ').join(c.namespace + ' ')).replace(/\s+/g, ' ') )
|
1334
|
+
.bind( 'mousedown mouseup sort keyup '.split(' ').join(c.namespace + ' '), function(e, external) {
|
1335
|
+
var cell,
|
1336
|
+
$target = $(e.target),
|
1337
|
+
type = e.type;
|
1336
1338
|
// only recognize left clicks or enter
|
1337
1339
|
if ( ((e.which || e.button) !== 1 && !/sort|keyup/.test(type)) || (type === 'keyup' && e.which !== 13) ) {
|
1338
1340
|
return;
|
@@ -1342,9 +1344,16 @@
|
|
1342
1344
|
// set timer on mousedown
|
1343
1345
|
if (type === 'mousedown') {
|
1344
1346
|
downTime = new Date().getTime();
|
1345
|
-
return
|
1346
|
-
|
1347
|
-
|
1347
|
+
return;
|
1348
|
+
}
|
1349
|
+
cell = $.fn.closest ? $target.closest('td,th') : $target.parents('td,th').filter(':first');
|
1350
|
+
// prevent sort being triggered on form elements
|
1351
|
+
if ( /(input|select|button|textarea)/i.test(e.target.tagName) ||
|
1352
|
+
// nosort class name, or elements within a nosort container
|
1353
|
+
$target.hasClass(c.cssNoSort) || $target.parents('.' + c.cssNoSort).length > 0 ||
|
1354
|
+
// elements within a button
|
1355
|
+
$target.parents('button').length > 0 ) {
|
1356
|
+
return !c.cancelSelection;
|
1348
1357
|
}
|
1349
1358
|
if (c.delayInit && isEmptyObject(c.cache)) { buildCache(table); }
|
1350
1359
|
// jQuery v1.2.6 doesn't have closest()
|
@@ -1406,13 +1415,13 @@
|
|
1406
1415
|
.join(c.namespace + ' ');
|
1407
1416
|
$t
|
1408
1417
|
.removeData('tablesorter')
|
1409
|
-
.unbind(
|
1418
|
+
.unbind( events.replace(/\s+/g, ' ') );
|
1410
1419
|
c.$headers.add($f)
|
1411
1420
|
.removeClass( [ts.css.header, c.cssHeader, c.cssAsc, c.cssDesc, ts.css.sortAsc, ts.css.sortDesc, ts.css.sortNone].join(' ') )
|
1412
1421
|
.removeAttr('data-column')
|
1413
1422
|
.removeAttr('aria-label')
|
1414
1423
|
.attr('aria-disabled', 'true');
|
1415
|
-
$r.find(c.selectorSort).unbind(
|
1424
|
+
$r.find(c.selectorSort).unbind( ('mousedown mouseup keypress '.split(' ').join(c.namespace + ' ')).replace(/\s+/g, ' ') );
|
1416
1425
|
ts.restoreHeaders(table);
|
1417
1426
|
$t.toggleClass(ts.css.table + ' ' + c.tableClass + ' tablesorter-' + c.theme, removeClasses === false);
|
1418
1427
|
// clear flag in case the plugin is initialized again
|