jquery-tablesorter 1.11.1 → 1.11.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/jquery-tablesorter/version.rb +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.js +19 -12
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.widgets-filter-formatter-select2.js +15 -12
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.widgets.js +57 -19
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f67ead0cc7ee473fc13eba000fc6fa881e1f5055
|
4
|
+
data.tar.gz: a35b216de9c3d6374d1e23fbcf902ed14ecc3530
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ad77cc7413bd4780c15d580097503bc60844b9ab05cebe4a27ced3f8d4f387c27efcd09ef4160b8c818eda24a3729fee1d0dbe9fce28173c0fecd7fd322a5d0
|
7
|
+
data.tar.gz: 41a29044a40b804f5c2c18950a7855e3cb7f353df1333739f4d964dba51e1a26a67366b49b67c10a4b2d050557e3775d5db03817333acc97684e7525b1bcbd16
|
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.16.
|
7
|
+
Current tablesorter version: 2.16.3 (4/30/2014), [documentation]
|
8
8
|
|
9
9
|
Any issue associate with the js/css files, please report to [Mottie's fork].
|
10
10
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**!
|
2
|
-
* TableSorter 2.16.
|
2
|
+
* TableSorter 2.16.3 - Client-side table sorting with ease!
|
3
3
|
* @requires jQuery v1.2.6+
|
4
4
|
*
|
5
5
|
* Copyright (c) 2007 Christian Bach
|
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
var ts = this;
|
26
26
|
|
27
|
-
ts.version = "2.16.
|
27
|
+
ts.version = "2.16.3";
|
28
28
|
|
29
29
|
ts.parsers = [];
|
30
30
|
ts.widgets = [];
|
@@ -219,7 +219,7 @@
|
|
219
219
|
var c = table.config,
|
220
220
|
// update table bodies in case we start with an empty table
|
221
221
|
tb = c.$tbodies = c.$table.children('tbody:not(.' + c.cssInfoBlock + ')'),
|
222
|
-
rows, list, l, i, h, ch, p, time,
|
222
|
+
rows, list, l, i, h, ch, p, time, indx,
|
223
223
|
j = 0,
|
224
224
|
parsersDebug = "",
|
225
225
|
len = tb.length;
|
@@ -240,7 +240,9 @@
|
|
240
240
|
h = c.$headers.filter(':not([colspan])');
|
241
241
|
h = h.add( c.$headers.filter('[colspan="1"]') ) // ie8 fix
|
242
242
|
.filter('[data-column="' + i + '"]:last');
|
243
|
-
|
243
|
+
// get headers option corrected index
|
244
|
+
indx = c.$headers.index(h);
|
245
|
+
ch = c.headers[indx];
|
244
246
|
// get column parser
|
245
247
|
p = ts.getParserById( ts.getData(h, ch, 'sorter') );
|
246
248
|
// empty cells behaviour - keeping emptyToBottom for backwards compatibility
|
@@ -804,8 +806,8 @@
|
|
804
806
|
$cell = $(cell),
|
805
807
|
// update cache - format: function(s, table, cell, cellIndex)
|
806
808
|
// no closest in jQuery v1.2.6 - tbdy = $tb.index( $(cell).closest('tbody') ),$row = $(cell).closest('tr');
|
807
|
-
tbdy = $tb.index( $cell.parents('tbody').filter(':first') ),
|
808
|
-
$row = $cell.parents('tr').filter(':first');
|
809
|
+
tbdy = $tb.index( $.fn.closest ? $cell.closest('tbody') : $cell.parents('tbody').filter(':first') ),
|
810
|
+
$row = $.fn.closest ? $cell.closest('tr') : $cell.parents('tr').filter(':first');
|
809
811
|
cell = $cell[0]; // in case cell is a jQuery object
|
810
812
|
// tbody may not exist if update is initialized while tbody is removed for processing
|
811
813
|
if ($tb.length && tbdy >= 0) {
|
@@ -1019,9 +1021,7 @@
|
|
1019
1021
|
setHeadersCss(table);
|
1020
1022
|
if (c.initWidgets) {
|
1021
1023
|
// apply widget format
|
1022
|
-
|
1023
|
-
ts.applyWidget(table, false);
|
1024
|
-
}, 0);
|
1024
|
+
ts.applyWidget(table, false);
|
1025
1025
|
}
|
1026
1026
|
}
|
1027
1027
|
|
@@ -1030,7 +1030,13 @@
|
|
1030
1030
|
$table
|
1031
1031
|
.unbind('sortBegin' + c.namespace + ' sortEnd' + c.namespace)
|
1032
1032
|
.bind('sortBegin' + c.namespace + ' sortEnd' + c.namespace, function(e) {
|
1033
|
-
|
1033
|
+
clearTimeout(c.processTimer);
|
1034
|
+
ts.isProcessing(table);
|
1035
|
+
if (e.type === 'sortBegin') {
|
1036
|
+
c.processTimer = setTimeout(function(){
|
1037
|
+
ts.isProcessing(table, true);
|
1038
|
+
}, 500);
|
1039
|
+
}
|
1034
1040
|
});
|
1035
1041
|
}
|
1036
1042
|
|
@@ -1044,7 +1050,6 @@
|
|
1044
1050
|
if (typeof c.initialized === 'function') { c.initialized(table); }
|
1045
1051
|
};
|
1046
1052
|
|
1047
|
-
|
1048
1053
|
// computeTableHeaderCellIndexes from:
|
1049
1054
|
// http://www.javascripttoolbox.com/lib/table/examples.php
|
1050
1055
|
// http://www.javascripttoolbox.com/temp/table_cellindex.html
|
@@ -1161,7 +1166,7 @@
|
|
1161
1166
|
}
|
1162
1167
|
if (c.delayInit && isEmptyObject(c.cache)) { buildCache(table); }
|
1163
1168
|
// jQuery v1.2.6 doesn't have closest()
|
1164
|
-
cell = /TH|TD/.test(this.tagName) ? this : $(this).parents('th, td')[0];
|
1169
|
+
cell = $.fn.closest ? $(this).closest('th, td')[0] : /TH|TD/.test(this.tagName) ? this : $(this).parents('th, td')[0];
|
1165
1170
|
// reference original table headers and find the same cell
|
1166
1171
|
cell = c.$headers[ $headers.index( cell ) ];
|
1167
1172
|
if (!cell.sortDisabled) {
|
@@ -1238,6 +1243,8 @@
|
|
1238
1243
|
};
|
1239
1244
|
|
1240
1245
|
// Natural sort - https://github.com/overset/javascript-natural-sort (date sorting removed)
|
1246
|
+
// this function will only accept strings, or you'll see "TypeError: undefined is not a function"
|
1247
|
+
// I could add a = a.toString(); b = b.toString(); but it'll slow down the sort overall
|
1241
1248
|
ts.sortNatural = function(a, b) {
|
1242
1249
|
if (a === b) { return 0; }
|
1243
1250
|
var xN, xD, yN, yD, xF, yF, i, mx,
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/*! Filter widget formatter functions - updated 4/
|
1
|
+
/*! Filter widget formatter functions - updated 4/30/2014 (v2.16.3)
|
2
2
|
* requires: jQuery 1.7.2+, tableSorter 2.16+, filter widget 2.16+ and select2 v3.4.6+ plugin
|
3
3
|
*/
|
4
4
|
/*jshint browser:true, jquery:true, unused:false */
|
@@ -17,6 +17,7 @@ ts.filterFormatter.select2 = function($cell, indx, select2Def) {
|
|
17
17
|
// select2 filter formatter options
|
18
18
|
cellText : '', // Text (wrapped in a label element)
|
19
19
|
match : true, // adds "filter-match" to header
|
20
|
+
value : '',
|
20
21
|
// include ANY select2 options below
|
21
22
|
multiple : true,
|
22
23
|
width : '100%'
|
@@ -31,21 +32,23 @@ ts.filterFormatter.select2 = function($cell, indx, select2Def) {
|
|
31
32
|
// hidden filter update namespace trigger by filter widget
|
32
33
|
.bind('change' + c.namespace + 'filter', function(){
|
33
34
|
var val = this.value;
|
34
|
-
val = val.replace(/[/()
|
35
|
-
|
35
|
+
val = val.replace(/[/()$^]/g, '').split('|');
|
36
|
+
$cell.find('.select2').select2('val', val);
|
37
|
+
updateSelect2();
|
36
38
|
}),
|
37
39
|
$header = c.$headers.filter('[data-column="' + indx + '"]:last'),
|
38
40
|
onlyAvail = $header.hasClass(wo.filter_onlyAvail),
|
39
41
|
$shcell = [],
|
40
|
-
|
42
|
+
matchPrefix = o.match ? '' : '^',
|
43
|
+
matchSuffix = o.match ? '' : '$',
|
41
44
|
|
42
45
|
// this function updates the hidden input and adds the current values to the header cell text
|
43
|
-
updateSelect2 = function(
|
44
|
-
v =
|
46
|
+
updateSelect2 = function() {
|
47
|
+
var v = $cell.find('.select2').select2('val') || o.value || '';
|
45
48
|
$input
|
46
|
-
// add
|
47
|
-
.val( $.isArray(v) && v.length ? '/(' + (v || []).join(
|
48
|
-
.trigger(
|
49
|
+
// add regex, so we filter exact numbers
|
50
|
+
.val( $.isArray(v) && v.length && v.join('') !== '' ? '/(' + matchPrefix + (v || []).join(matchSuffix + '|' + matchPrefix) + matchSuffix + ')/' : '' )
|
51
|
+
.trigger('search').end()
|
49
52
|
.find('.select2').select2('val', v);
|
50
53
|
// update sticky header cell
|
51
54
|
if ($shcell.length) {
|
@@ -94,11 +97,11 @@ ts.filterFormatter.select2 = function($cell, indx, select2Def) {
|
|
94
97
|
|
95
98
|
// update select2 from filter hidden input, in case of saved filters
|
96
99
|
c.$table.bind('filterFomatterUpdate', function(){
|
97
|
-
// value = '/(x
|
100
|
+
// value = '/(^x$|^y$)/' => 'x,y'
|
98
101
|
var val = c.$table.data('lastSearch')[indx] || '';
|
99
|
-
val = val.replace(/[/()
|
102
|
+
val = val.replace(/[/()$^]/g, '').split('|');
|
100
103
|
$cell.find('.select2').select2('val', val);
|
101
|
-
updateSelect2(
|
104
|
+
updateSelect2();
|
102
105
|
});
|
103
106
|
|
104
107
|
// has sticky headers?
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/*! tableSorter 2.16+ widgets - updated 4/
|
1
|
+
/*! tableSorter 2.16+ widgets - updated 4/30/2014 (v2.16.3)
|
2
2
|
*
|
3
3
|
* Column Styles
|
4
4
|
* Column Filters
|
@@ -817,7 +817,7 @@ ts.filter = {
|
|
817
817
|
},
|
818
818
|
hideFilters: function(table, c) {
|
819
819
|
var $filterRow, $filterRow2, timer;
|
820
|
-
|
820
|
+
$(table)
|
821
821
|
.find('.' + ts.css.filterRow)
|
822
822
|
.addClass('hideme')
|
823
823
|
.bind('mouseenter mouseleave', function(e) {
|
@@ -846,7 +846,7 @@ ts.filter = {
|
|
846
846
|
var event = e;
|
847
847
|
timer = setTimeout(function() {
|
848
848
|
// don't hide row if any filter has a value
|
849
|
-
if (ts.getFilters(table).join('') === '') {
|
849
|
+
if (ts.getFilters(c.$table).join('') === '') {
|
850
850
|
$filterRow2[ event.type === 'focus' ? 'removeClass' : 'addClass']('hideme');
|
851
851
|
}
|
852
852
|
}, 200);
|
@@ -854,7 +854,7 @@ ts.filter = {
|
|
854
854
|
},
|
855
855
|
findRows: function(table, filters, combinedFilters) {
|
856
856
|
if (table.config.lastCombinedFilter === combinedFilters) { return; }
|
857
|
-
var cached, len, $rows,
|
857
|
+
var cached, len, $rows, rowIndex, tbodyIndex, $tbody, $cells, columnIndex,
|
858
858
|
childRow, childRowText, exact, iExact, iFilter, lastSearch, matches, result,
|
859
859
|
notFiltered, searchFiltered, filterMatched, showRow, time,
|
860
860
|
anyMatch, iAnyMatch, rowArray, rowText, iRowText, rowCache,
|
@@ -866,9 +866,10 @@ ts.filter = {
|
|
866
866
|
anyMatchNotAllowedTypes = [ 'range', 'notMatch', 'operators' ],
|
867
867
|
// parse columns after formatter, in case the class is added at that point
|
868
868
|
parsed = c.$headers.map(function(columnIndex) {
|
869
|
-
return c.parsers && c.parsers[columnIndex] && c.parsers[columnIndex].parsed ||
|
870
|
-
|
871
|
-
|
869
|
+
return c.parsers && c.parsers[columnIndex] && c.parsers[columnIndex].parsed ||
|
870
|
+
// getData won't return "parsed" if other "filter-" class names exist (e.g. <th class="filter-select filter-parsed">)
|
871
|
+
ts.getData && ts.getData(c.$headers.filter('[data-column="' + columnIndex + '"]:last'), c.headers[columnIndex], 'filter') === 'parsed' ||
|
872
|
+
$(this).hasClass('filter-parsed');
|
872
873
|
}).get();
|
873
874
|
if (c.debug) { time = new Date(); }
|
874
875
|
for (tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
|
@@ -913,7 +914,6 @@ ts.filter = {
|
|
913
914
|
iAnyMatch = anyMatch.toLowerCase();
|
914
915
|
}
|
915
916
|
// loop through the rows
|
916
|
-
cacheIndex = 0;
|
917
917
|
for (rowIndex = 0; rowIndex < len; rowIndex++) {
|
918
918
|
childRow = $rows[rowIndex].className;
|
919
919
|
// skip child rows & already filtered rows
|
@@ -932,7 +932,7 @@ ts.filter = {
|
|
932
932
|
rowArray = $cells.map(function(i){
|
933
933
|
var txt;
|
934
934
|
if (parsed[i]) {
|
935
|
-
txt = c.cache[tbodyIndex].normalized[
|
935
|
+
txt = c.cache[tbodyIndex].normalized[rowIndex][i];
|
936
936
|
} else {
|
937
937
|
txt = wo.filter_ignoreCase ? $(this).text().toLowerCase() : $(this).text();
|
938
938
|
if (c.sortLocaleCompare) {
|
@@ -943,7 +943,7 @@ ts.filter = {
|
|
943
943
|
}).get();
|
944
944
|
rowText = rowArray.join(' ');
|
945
945
|
iRowText = rowText.toLowerCase();
|
946
|
-
rowCache = c.cache[tbodyIndex].normalized[
|
946
|
+
rowCache = c.cache[tbodyIndex].normalized[rowIndex].slice(0,-1).join(' ');
|
947
947
|
filterMatched = null;
|
948
948
|
$.each(ts.filter.types, function(type, typeFunction) {
|
949
949
|
if ($.inArray(type, anyMatchNotAllowedTypes) < 0) {
|
@@ -964,7 +964,7 @@ ts.filter = {
|
|
964
964
|
for (columnIndex = 0; columnIndex < columns; columnIndex++) {
|
965
965
|
// ignore if filter is empty or disabled
|
966
966
|
if (filters[columnIndex]) {
|
967
|
-
cached = c.cache[tbodyIndex].normalized[
|
967
|
+
cached = c.cache[tbodyIndex].normalized[rowIndex][columnIndex];
|
968
968
|
// check if column data should be from the cell or from parsed data
|
969
969
|
if (wo.filter_useParsedData || parsed[columnIndex]) {
|
970
970
|
exact = cached;
|
@@ -1020,7 +1020,6 @@ ts.filter = {
|
|
1020
1020
|
if (childRow.length) {
|
1021
1021
|
childRow.toggleClass(wo.filter_filteredRow, !showRow);
|
1022
1022
|
}
|
1023
|
-
cacheIndex++;
|
1024
1023
|
}
|
1025
1024
|
}
|
1026
1025
|
ts.processTbody(table, $tbody, false);
|
@@ -1040,8 +1039,10 @@ ts.filter = {
|
|
1040
1039
|
}, 0);
|
1041
1040
|
},
|
1042
1041
|
getOptionSource: function(table, column, onlyAvail) {
|
1043
|
-
var
|
1042
|
+
var cts,
|
1043
|
+
c = table.config,
|
1044
1044
|
wo = c.widgetOptions,
|
1045
|
+
parsed = [],
|
1045
1046
|
arry = false,
|
1046
1047
|
source = wo.filter_selectSource;
|
1047
1048
|
|
@@ -1064,7 +1065,43 @@ ts.filter = {
|
|
1064
1065
|
arry = $.grep(arry, function(value, indx) {
|
1065
1066
|
return $.inArray(value, arry) === indx;
|
1066
1067
|
});
|
1067
|
-
|
1068
|
+
|
1069
|
+
if (c.$headers.filter('[data-column="' + column + '"]:last').hasClass('filter-select-nosort')) {
|
1070
|
+
// unsorted select options
|
1071
|
+
return arry;
|
1072
|
+
} else {
|
1073
|
+
// parse select option values
|
1074
|
+
$.each(arry, function(i, v){
|
1075
|
+
// parse array data using set column parser; this DOES NOT pass the original
|
1076
|
+
// table cell to the parser format function
|
1077
|
+
parsed.push({ t : v, p : c.parsers && c.parsers[column].format( v, table, [], column ) || v });
|
1078
|
+
});
|
1079
|
+
|
1080
|
+
// sort parsed select options
|
1081
|
+
cts = c.textSorter || '';
|
1082
|
+
parsed.sort(function(a, b){
|
1083
|
+
// sortNatural breaks if you don't pass it strings
|
1084
|
+
var x = a.p.toString(), y = b.p.toString();
|
1085
|
+
if ($.isFunction(cts)) {
|
1086
|
+
// custom OVERALL text sorter
|
1087
|
+
return cts(x, y, true, column, table);
|
1088
|
+
} else if (typeof(cts) === 'object' && cts.hasOwnProperty(column)) {
|
1089
|
+
// custom text sorter for a SPECIFIC COLUMN
|
1090
|
+
return cts[column](x, y, true, column, table);
|
1091
|
+
} else if (ts.sortNatural) {
|
1092
|
+
// fall back to natural sort
|
1093
|
+
return ts.sortNatural(x, y);
|
1094
|
+
}
|
1095
|
+
// using an older version! do a basic sort
|
1096
|
+
return true;
|
1097
|
+
});
|
1098
|
+
// rebuild arry from sorted parsed data
|
1099
|
+
arry = [];
|
1100
|
+
$.each(parsed, function(i, v){
|
1101
|
+
arry.push(v.t);
|
1102
|
+
});
|
1103
|
+
return arry;
|
1104
|
+
}
|
1068
1105
|
},
|
1069
1106
|
getOptions: function(table, column, onlyAvail) {
|
1070
1107
|
var rowIndex, tbodyIndex, len, row, cache, cell,
|
@@ -1282,10 +1319,7 @@ ts.addWidget({
|
|
1282
1319
|
// some wibbly-wobbly... timey-wimey... stuff, to make columns line up in Firefox
|
1283
1320
|
offset = nonwkie && $(this).attr('data-column') === ( '' + parseInt(c.columns/2, 10) ) ? 1 : 0;
|
1284
1321
|
$(this)
|
1285
|
-
.css({
|
1286
|
-
width: $cell.width() - spacing,
|
1287
|
-
height: $cell.height()
|
1288
|
-
})
|
1322
|
+
.css({ width: $cell.width() - spacing })
|
1289
1323
|
.find(innerHeader).width( $cell.find(innerHeader).width() - offset );
|
1290
1324
|
});
|
1291
1325
|
};
|
@@ -1364,6 +1398,10 @@ ts.addWidget({
|
|
1364
1398
|
}
|
1365
1399
|
});
|
1366
1400
|
ts.filter.bindSearch( $table, $stickyCells.find('.' + ts.css.filter) );
|
1401
|
+
// support hideFilters
|
1402
|
+
if (wo.filter_hideFilters) {
|
1403
|
+
ts.filter.hideFilters($stickyTable, c);
|
1404
|
+
}
|
1367
1405
|
}
|
1368
1406
|
|
1369
1407
|
$table.trigger('stickyHeadersInit');
|
@@ -1477,7 +1515,7 @@ ts.addWidget({
|
|
1477
1515
|
})
|
1478
1516
|
.find('.' + ts.css.resizer + ',.' + ts.css.grip)
|
1479
1517
|
.bind('mousedown', function(event) {
|
1480
|
-
// save header cell and mouse position
|
1518
|
+
// save header cell and mouse position
|
1481
1519
|
$target = $(event.target).closest('th');
|
1482
1520
|
var $header = c.$headers.filter('[data-column="' + $target.attr('data-column') + '"]');
|
1483
1521
|
if ($header.length > 1) { $target = $target.add($header); }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jquery-tablesorter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.11.
|
4
|
+
version: 1.11.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jun Lin
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-05-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|