jquery-tablesorter 1.24.0 → 1.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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.combined.js +61 -51
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.js +39 -46
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.widgets.js +22 -5
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter.js +6 -2
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-resizable.js +15 -2
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-scroller.js +5 -3
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-vertical-group.js +137 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8dc5f32cf7e88554cda49d8163dd0da7ac6bba98
|
4
|
+
data.tar.gz: 7aa178dd8b98beaeaf5c9c416eff90018ab2e71b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64d29329c00a4241270065248042d75eb8a8d452cbce5977bfcf0a068c6f2a0bb5174d0e2acaf30a06d401bc0165c392b4cabc1e18feedd00e113b170c48c461
|
7
|
+
data.tar.gz: f1f2323544c8ac076ce18b1bca88e2ccdb54e95cd4ff704d47a52b28926c80ab790ed6fc5a829e76ad2220b8dc68ca151ae676aae11511ea282eb95b686ca156
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
Simple integration of jQuery tablesorter ([Mottie's fork]) into the asset pipeline.
|
6
6
|
|
7
|
-
Current tablesorter version: 2.29.
|
7
|
+
Current tablesorter version: 2.29.2 (12/13/2017) [documentation]
|
8
8
|
|
9
9
|
Any issue associated with the js/css files, please report to [Mottie's fork].
|
10
10
|
|
@@ -4,7 +4,7 @@
|
|
4
4
|
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀██
|
5
5
|
█████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
|
6
6
|
*/
|
7
|
-
/*! tablesorter (FORK) - updated
|
7
|
+
/*! tablesorter (FORK) - updated 12-13-2017 (v2.29.2)*/
|
8
8
|
/* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
|
9
9
|
(function(factory) {
|
10
10
|
if (typeof define === 'function' && define.amd) {
|
@@ -16,7 +16,7 @@
|
|
16
16
|
}
|
17
17
|
}(function(jQuery) {
|
18
18
|
|
19
|
-
/*! TableSorter (FORK) v2.29.
|
19
|
+
/*! TableSorter (FORK) v2.29.2 *//*
|
20
20
|
* Client-side table sorting with ease!
|
21
21
|
* @requires jQuery v1.2.6+
|
22
22
|
*
|
@@ -40,7 +40,7 @@
|
|
40
40
|
'use strict';
|
41
41
|
var ts = $.tablesorter = {
|
42
42
|
|
43
|
-
version : '2.29.
|
43
|
+
version : '2.29.2',
|
44
44
|
|
45
45
|
parsers : [],
|
46
46
|
widgets : [],
|
@@ -532,8 +532,7 @@
|
|
532
532
|
if ( c.delayInit && ts.isEmptyObject( c.cache ) ) {
|
533
533
|
ts.buildCache( c );
|
534
534
|
}
|
535
|
-
|
536
|
-
$cell = ts.getHeaderCell( $( this ) );
|
535
|
+
$cell = ts.getClosest( $( this ), '.' + ts.css.header );
|
537
536
|
// reference original table headers and find the same cell
|
538
537
|
// don't use $headers or IE8 throws an error - see #987
|
539
538
|
temp = $headers.index( $cell );
|
@@ -573,10 +572,15 @@
|
|
573
572
|
'';
|
574
573
|
// redefine c.$headers here in case of an updateAll that replaces or adds an entire header cell - see #683
|
575
574
|
c.$headers = $( $.map( c.$table.find( c.selectorHeaders ), function( elem, index ) {
|
576
|
-
var configHeaders, header, column, template, tmp,
|
575
|
+
var configHeaders, header, column, template, tmp,
|
577
576
|
$elem = $( elem );
|
578
577
|
// ignore cell (don't add it to c.$headers) if row has ignoreRow class
|
579
|
-
if ( $elem
|
578
|
+
if ( ts.getClosest( $elem, 'tr' ).hasClass( c.cssIgnoreRow ) ) { return; }
|
579
|
+
// transfer data-column to element if not th/td - #1459
|
580
|
+
if ( !/(th|td)/i.test( elem.nodeName ) ) {
|
581
|
+
tmp = ts.getClosest( $elem, 'th, td' );
|
582
|
+
$elem.attr( 'data-column', tmp.attr( 'data-column' ) );
|
583
|
+
}
|
580
584
|
// make sure to get header cell & not column indexed cell
|
581
585
|
configHeaders = ts.getColumnData( c.table, c.headers, index, true );
|
582
586
|
// save original header content
|
@@ -599,9 +603,7 @@
|
|
599
603
|
if ( c.onRenderHeader ) {
|
600
604
|
c.onRenderHeader.apply( $elem, [ index, c, c.$table ] );
|
601
605
|
}
|
602
|
-
|
603
|
-
$th = ts.getHeaderCell( $elem );
|
604
|
-
column = parseInt( $th.attr( 'data-column' ), 10 );
|
606
|
+
column = parseInt( $elem.attr( 'data-column' ), 10 );
|
605
607
|
elem.column = column;
|
606
608
|
tmp = ts.getOrder( ts.getData( $elem, configHeaders, 'sortInitialOrder' ) || c.sortInitialOrder );
|
607
609
|
// this may get updated numerous times if there are multiple rows
|
@@ -637,6 +639,7 @@
|
|
637
639
|
if ( ts.isEmptyObject( c.sortVars[ indx ] ) ) {
|
638
640
|
c.sortVars[ indx ] = {};
|
639
641
|
}
|
642
|
+
// Use c.$headers.parent() in case selectorHeaders doesn't point to the th/td
|
640
643
|
$temp = c.$headers.filter( '[data-column="' + indx + '"]' );
|
641
644
|
// target sortable column cells, unless there are none, then use non-sortable cells
|
642
645
|
// .last() added in jQuery 1.4; use .filter(':last') to maintain compatibility with jQuery v1.2.6
|
@@ -1100,6 +1103,15 @@
|
|
1100
1103
|
css = [ ts.css.sortAsc + ' ' + c.cssAsc, ts.css.sortDesc + ' ' + c.cssDesc ],
|
1101
1104
|
cssIcon = [ c.cssIconAsc, c.cssIconDesc, c.cssIconNone ],
|
1102
1105
|
aria = [ 'ascending', 'descending' ],
|
1106
|
+
updateColumnSort = function($el, index) {
|
1107
|
+
$el
|
1108
|
+
.removeClass( none )
|
1109
|
+
.addClass( css[ index ] )
|
1110
|
+
.attr( 'aria-sort', aria[ index ] )
|
1111
|
+
.find( '.' + ts.css.icon )
|
1112
|
+
.removeClass( cssIcon[ 2 ] )
|
1113
|
+
.addClass( cssIcon[ index ] );
|
1114
|
+
},
|
1103
1115
|
// find the footer
|
1104
1116
|
$extras = c.$table
|
1105
1117
|
.find( 'tfoot tr' )
|
@@ -1138,7 +1150,7 @@
|
|
1138
1150
|
var include = true,
|
1139
1151
|
$el = c.$headers.eq( i ),
|
1140
1152
|
col = parseInt( $el.attr( 'data-column' ), 10 ),
|
1141
|
-
end = col +
|
1153
|
+
end = col + ts.getClosest( $el, 'th, td' )[0].colSpan;
|
1142
1154
|
for ( ; col < end; col++ ) {
|
1143
1155
|
include = include ? include || ts.isValueInArray( col, c.sortList ) > -1 : false;
|
1144
1156
|
}
|
@@ -1152,23 +1164,13 @@
|
|
1152
1164
|
if ( $sorted.length ) {
|
1153
1165
|
for ( column = 0; column < $sorted.length; column++ ) {
|
1154
1166
|
if ( !$sorted[ column ].sortDisabled ) {
|
1155
|
-
$sorted
|
1156
|
-
.eq( column )
|
1157
|
-
.removeClass( none )
|
1158
|
-
.addClass( css[ list[ indx ][ 1 ] ] )
|
1159
|
-
.attr( 'aria-sort', aria[ list[ indx ][ 1 ] ] )
|
1160
|
-
.find( '.' + ts.css.icon )
|
1161
|
-
.removeClass( cssIcon[ 2 ] )
|
1162
|
-
.addClass( cssIcon[ list[ indx ][ 1 ] ] );
|
1167
|
+
updateColumnSort( $sorted.eq( column ) , list[ indx ][ 1 ] );
|
1163
1168
|
}
|
1164
1169
|
}
|
1165
|
-
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
.removeClass( none )
|
1170
|
-
.addClass( css[ list[ indx ][ 1 ] ] );
|
1171
|
-
}
|
1170
|
+
}
|
1171
|
+
// add sorted class to footer & extra headers, if they exist
|
1172
|
+
if ( $extras.length ) {
|
1173
|
+
updateColumnSort( $extras.filter( '[data-column="' + list[ indx ][ 0 ] + '"]' ), list[ indx ][ 1 ] );
|
1172
1174
|
}
|
1173
1175
|
}
|
1174
1176
|
}
|
@@ -1179,29 +1181,20 @@
|
|
1179
1181
|
}
|
1180
1182
|
},
|
1181
1183
|
|
1182
|
-
// This function does NOT return closest if the $el matches the selector
|
1183
1184
|
getClosest : function( $el, selector ) {
|
1184
|
-
return $.fn.closest ?
|
1185
|
-
$el.closest( selector ) :
|
1186
|
-
$el.parents( selector ).filter( ':first' );
|
1187
|
-
},
|
1188
|
-
|
1189
|
-
getHeaderCell : function( $el ) {
|
1190
1185
|
// jQuery v1.2.6 doesn't have closest()
|
1191
1186
|
if ( $.fn.closest ) {
|
1192
|
-
return $el.closest(
|
1187
|
+
return $el.closest( selector );
|
1193
1188
|
}
|
1194
|
-
return
|
1189
|
+
return $el.is( selector ) ?
|
1195
1190
|
$el :
|
1196
|
-
$el.parents(
|
1191
|
+
$el.parents( selector ).filter( ':first' );
|
1197
1192
|
},
|
1198
1193
|
|
1199
1194
|
// nextSort (optional), lets you disable next sort text
|
1200
1195
|
setColumnAriaLabel : function( c, $header, nextSort ) {
|
1201
1196
|
if ( $header.length ) {
|
1202
|
-
var
|
1203
|
-
// data-column always stored on the th/td
|
1204
|
-
column = parseInt( $th.attr( 'data-column' ), 10 ),
|
1197
|
+
var column = parseInt( $header.attr( 'data-column' ), 10 ),
|
1205
1198
|
vars = c.sortVars[ column ],
|
1206
1199
|
tmp = $header.hasClass( ts.css.sortAsc ) ?
|
1207
1200
|
'sortAsc' :
|
@@ -1569,10 +1562,10 @@
|
|
1569
1562
|
notMultiSort = !event[ c.sortMultiSortKey ],
|
1570
1563
|
table = c.table,
|
1571
1564
|
len = c.$headers.length,
|
1572
|
-
|
1573
|
-
|
1574
|
-
col = parseInt( $th.attr( 'data-column' ), 10 ),
|
1565
|
+
th = ts.getClosest( $( cell ), 'th, td' ),
|
1566
|
+
col = parseInt( th.attr( 'data-column' ), 10 ),
|
1575
1567
|
order = c.sortVars[ col ].order;
|
1568
|
+
th = th[0];
|
1576
1569
|
// Only call sortStart if sorting is enabled
|
1577
1570
|
c.$table.triggerHandler( 'sortStart', table );
|
1578
1571
|
// get current column sort order
|
@@ -1607,8 +1600,8 @@
|
|
1607
1600
|
if ( dir < 2 ) {
|
1608
1601
|
c.sortList[ c.sortList.length ] = [ col, dir ];
|
1609
1602
|
// add other columns if header spans across multiple
|
1610
|
-
if (
|
1611
|
-
for ( indx = 1; indx <
|
1603
|
+
if ( th.colSpan > 1 ) {
|
1604
|
+
for ( indx = 1; indx < th.colSpan; indx++ ) {
|
1612
1605
|
c.sortList[ c.sortList.length ] = [ col + indx, dir ];
|
1613
1606
|
// update count on columns in colSpan
|
1614
1607
|
c.sortVars[ col + indx ].count = $.inArray( dir, order );
|
@@ -1640,8 +1633,8 @@
|
|
1640
1633
|
if ( dir < 2 ) {
|
1641
1634
|
c.sortList[ c.sortList.length ] = [ col, dir ];
|
1642
1635
|
// add other columns if header spans across multiple
|
1643
|
-
if (
|
1644
|
-
for ( indx = 1; indx <
|
1636
|
+
if ( th.colSpan > 1 ) {
|
1637
|
+
for ( indx = 1; indx < th.colSpan; indx++ ) {
|
1645
1638
|
c.sortList[ c.sortList.length ] = [ col + indx, dir ];
|
1646
1639
|
// update count on columns in colSpan
|
1647
1640
|
c.sortVars[ col + indx ].count = $.inArray( dir, order );
|
@@ -2410,7 +2403,7 @@
|
|
2410
2403
|
$cells = ( $headers || c.$headers ),
|
2411
2404
|
// c.$headerIndexed is not defined initially
|
2412
2405
|
$cell = c.$headerIndexed && c.$headerIndexed[ indx ] ||
|
2413
|
-
$cells.
|
2406
|
+
$cells.find( '[data-column="' + indx + '"]:last' );
|
2414
2407
|
if ( typeof obj[ indx ] !== 'undefined' ) {
|
2415
2408
|
return getCell ? obj[ indx ] : obj[ $cells.index( $cell ) ];
|
2416
2409
|
}
|
@@ -3295,7 +3288,7 @@
|
|
3295
3288
|
|
3296
3289
|
})(jQuery);
|
3297
3290
|
|
3298
|
-
/*! Widget: filter - updated
|
3291
|
+
/*! Widget: filter - updated 12/13/2017 (v2.29.1) *//*
|
3299
3292
|
* Requires tablesorter v2.8+ and jQuery 1.7+
|
3300
3293
|
* by Rob Garrison
|
3301
3294
|
*/
|
@@ -4412,6 +4405,7 @@
|
|
4412
4405
|
if ( $.inArray( ffxn, vars.excludeMatch ) < 0 && matches === null ) {
|
4413
4406
|
matches = tsf.types[ffxn]( c, data, vars );
|
4414
4407
|
if ( matches !== null ) {
|
4408
|
+
data.matchedOn = ffxn;
|
4415
4409
|
filterMatched = matches;
|
4416
4410
|
}
|
4417
4411
|
}
|
@@ -4459,6 +4453,7 @@
|
|
4459
4453
|
tsf.multipleColumns( c, wo.filter_$anyMatch ) :
|
4460
4454
|
[];
|
4461
4455
|
data.$cells = data.$row.children();
|
4456
|
+
data.matchedOn = null;
|
4462
4457
|
if ( data.anyMatchFlag && columnIndex.length > 1 || ( data.anyMatchFilter && !hasAnyMatchInput ) ) {
|
4463
4458
|
data.anyMatch = true;
|
4464
4459
|
data.isMatch = true;
|
@@ -4560,7 +4555,9 @@
|
|
4560
4555
|
// cycle through the different filters
|
4561
4556
|
// filters return a boolean or null if nothing matches
|
4562
4557
|
filterMatched = tsf.processTypes( c, data, vars );
|
4563
|
-
|
4558
|
+
// select with exact match; ignore "and" or "or" within the text; fixes #1486
|
4559
|
+
txt = fxn === true && (data.matchedOn === 'and' || data.matchedOn === 'or');
|
4560
|
+
if ( filterMatched !== null && !txt) {
|
4564
4561
|
result = filterMatched;
|
4565
4562
|
// Look for match, and add child row data for matching
|
4566
4563
|
} else {
|
@@ -5542,7 +5539,7 @@
|
|
5542
5539
|
|
5543
5540
|
})(jQuery, window);
|
5544
5541
|
|
5545
|
-
/*! Widget: resizable - updated
|
5542
|
+
/*! Widget: resizable - updated 12/13/2017 (v2.29.1) */
|
5546
5543
|
/*jshint browser:true, jquery:true, unused:false */
|
5547
5544
|
;(function ($, window) {
|
5548
5545
|
'use strict';
|
@@ -5719,7 +5716,10 @@
|
|
5719
5716
|
columns = c.columns - 1,
|
5720
5717
|
$header = $this.data( 'header' );
|
5721
5718
|
if ( !$header ) { return; } // see #859
|
5722
|
-
if (
|
5719
|
+
if (
|
5720
|
+
!$header.is(':visible') ||
|
5721
|
+
( !wo.resizable_addLastColumn && ts.resizable.checkVisibleColumns(c, column) )
|
5722
|
+
) {
|
5723
5723
|
$this.hide();
|
5724
5724
|
} else if ( column < columns || column === columns && wo.resizable_addLastColumn ) {
|
5725
5725
|
$this.css({
|
@@ -5731,6 +5731,16 @@
|
|
5731
5731
|
});
|
5732
5732
|
},
|
5733
5733
|
|
5734
|
+
// Fixes #1485
|
5735
|
+
checkVisibleColumns: function( c, column ) {
|
5736
|
+
var i,
|
5737
|
+
len = 0;
|
5738
|
+
for ( i = column + 1; i < c.columns; i++ ) {
|
5739
|
+
len += c.$headerIndexed[i].is( ':visible' ) ? 1 : 0;
|
5740
|
+
}
|
5741
|
+
return len === 0;
|
5742
|
+
},
|
5743
|
+
|
5734
5744
|
// prevent text selection while dragging resize bar
|
5735
5745
|
toggleTextSelection : function( c, wo, toggle ) {
|
5736
5746
|
var namespace = c.namespace + 'tsresize';
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/*! TableSorter (FORK) v2.29.
|
1
|
+
/*! TableSorter (FORK) v2.29.2 *//*
|
2
2
|
* Client-side table sorting with ease!
|
3
3
|
* @requires jQuery v1.2.6+
|
4
4
|
*
|
@@ -22,7 +22,7 @@
|
|
22
22
|
'use strict';
|
23
23
|
var ts = $.tablesorter = {
|
24
24
|
|
25
|
-
version : '2.29.
|
25
|
+
version : '2.29.2',
|
26
26
|
|
27
27
|
parsers : [],
|
28
28
|
widgets : [],
|
@@ -514,8 +514,7 @@
|
|
514
514
|
if ( c.delayInit && ts.isEmptyObject( c.cache ) ) {
|
515
515
|
ts.buildCache( c );
|
516
516
|
}
|
517
|
-
|
518
|
-
$cell = ts.getHeaderCell( $( this ) );
|
517
|
+
$cell = ts.getClosest( $( this ), '.' + ts.css.header );
|
519
518
|
// reference original table headers and find the same cell
|
520
519
|
// don't use $headers or IE8 throws an error - see #987
|
521
520
|
temp = $headers.index( $cell );
|
@@ -555,10 +554,15 @@
|
|
555
554
|
'';
|
556
555
|
// redefine c.$headers here in case of an updateAll that replaces or adds an entire header cell - see #683
|
557
556
|
c.$headers = $( $.map( c.$table.find( c.selectorHeaders ), function( elem, index ) {
|
558
|
-
var configHeaders, header, column, template, tmp,
|
557
|
+
var configHeaders, header, column, template, tmp,
|
559
558
|
$elem = $( elem );
|
560
559
|
// ignore cell (don't add it to c.$headers) if row has ignoreRow class
|
561
|
-
if ( $elem
|
560
|
+
if ( ts.getClosest( $elem, 'tr' ).hasClass( c.cssIgnoreRow ) ) { return; }
|
561
|
+
// transfer data-column to element if not th/td - #1459
|
562
|
+
if ( !/(th|td)/i.test( elem.nodeName ) ) {
|
563
|
+
tmp = ts.getClosest( $elem, 'th, td' );
|
564
|
+
$elem.attr( 'data-column', tmp.attr( 'data-column' ) );
|
565
|
+
}
|
562
566
|
// make sure to get header cell & not column indexed cell
|
563
567
|
configHeaders = ts.getColumnData( c.table, c.headers, index, true );
|
564
568
|
// save original header content
|
@@ -581,9 +585,7 @@
|
|
581
585
|
if ( c.onRenderHeader ) {
|
582
586
|
c.onRenderHeader.apply( $elem, [ index, c, c.$table ] );
|
583
587
|
}
|
584
|
-
|
585
|
-
$th = ts.getHeaderCell( $elem );
|
586
|
-
column = parseInt( $th.attr( 'data-column' ), 10 );
|
588
|
+
column = parseInt( $elem.attr( 'data-column' ), 10 );
|
587
589
|
elem.column = column;
|
588
590
|
tmp = ts.getOrder( ts.getData( $elem, configHeaders, 'sortInitialOrder' ) || c.sortInitialOrder );
|
589
591
|
// this may get updated numerous times if there are multiple rows
|
@@ -619,6 +621,7 @@
|
|
619
621
|
if ( ts.isEmptyObject( c.sortVars[ indx ] ) ) {
|
620
622
|
c.sortVars[ indx ] = {};
|
621
623
|
}
|
624
|
+
// Use c.$headers.parent() in case selectorHeaders doesn't point to the th/td
|
622
625
|
$temp = c.$headers.filter( '[data-column="' + indx + '"]' );
|
623
626
|
// target sortable column cells, unless there are none, then use non-sortable cells
|
624
627
|
// .last() added in jQuery 1.4; use .filter(':last') to maintain compatibility with jQuery v1.2.6
|
@@ -1082,6 +1085,15 @@
|
|
1082
1085
|
css = [ ts.css.sortAsc + ' ' + c.cssAsc, ts.css.sortDesc + ' ' + c.cssDesc ],
|
1083
1086
|
cssIcon = [ c.cssIconAsc, c.cssIconDesc, c.cssIconNone ],
|
1084
1087
|
aria = [ 'ascending', 'descending' ],
|
1088
|
+
updateColumnSort = function($el, index) {
|
1089
|
+
$el
|
1090
|
+
.removeClass( none )
|
1091
|
+
.addClass( css[ index ] )
|
1092
|
+
.attr( 'aria-sort', aria[ index ] )
|
1093
|
+
.find( '.' + ts.css.icon )
|
1094
|
+
.removeClass( cssIcon[ 2 ] )
|
1095
|
+
.addClass( cssIcon[ index ] );
|
1096
|
+
},
|
1085
1097
|
// find the footer
|
1086
1098
|
$extras = c.$table
|
1087
1099
|
.find( 'tfoot tr' )
|
@@ -1120,7 +1132,7 @@
|
|
1120
1132
|
var include = true,
|
1121
1133
|
$el = c.$headers.eq( i ),
|
1122
1134
|
col = parseInt( $el.attr( 'data-column' ), 10 ),
|
1123
|
-
end = col +
|
1135
|
+
end = col + ts.getClosest( $el, 'th, td' )[0].colSpan;
|
1124
1136
|
for ( ; col < end; col++ ) {
|
1125
1137
|
include = include ? include || ts.isValueInArray( col, c.sortList ) > -1 : false;
|
1126
1138
|
}
|
@@ -1134,23 +1146,13 @@
|
|
1134
1146
|
if ( $sorted.length ) {
|
1135
1147
|
for ( column = 0; column < $sorted.length; column++ ) {
|
1136
1148
|
if ( !$sorted[ column ].sortDisabled ) {
|
1137
|
-
$sorted
|
1138
|
-
.eq( column )
|
1139
|
-
.removeClass( none )
|
1140
|
-
.addClass( css[ list[ indx ][ 1 ] ] )
|
1141
|
-
.attr( 'aria-sort', aria[ list[ indx ][ 1 ] ] )
|
1142
|
-
.find( '.' + ts.css.icon )
|
1143
|
-
.removeClass( cssIcon[ 2 ] )
|
1144
|
-
.addClass( cssIcon[ list[ indx ][ 1 ] ] );
|
1149
|
+
updateColumnSort( $sorted.eq( column ) , list[ indx ][ 1 ] );
|
1145
1150
|
}
|
1146
1151
|
}
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1151
|
-
.removeClass( none )
|
1152
|
-
.addClass( css[ list[ indx ][ 1 ] ] );
|
1153
|
-
}
|
1152
|
+
}
|
1153
|
+
// add sorted class to footer & extra headers, if they exist
|
1154
|
+
if ( $extras.length ) {
|
1155
|
+
updateColumnSort( $extras.filter( '[data-column="' + list[ indx ][ 0 ] + '"]' ), list[ indx ][ 1 ] );
|
1154
1156
|
}
|
1155
1157
|
}
|
1156
1158
|
}
|
@@ -1161,29 +1163,20 @@
|
|
1161
1163
|
}
|
1162
1164
|
},
|
1163
1165
|
|
1164
|
-
// This function does NOT return closest if the $el matches the selector
|
1165
1166
|
getClosest : function( $el, selector ) {
|
1166
|
-
return $.fn.closest ?
|
1167
|
-
$el.closest( selector ) :
|
1168
|
-
$el.parents( selector ).filter( ':first' );
|
1169
|
-
},
|
1170
|
-
|
1171
|
-
getHeaderCell : function( $el ) {
|
1172
1167
|
// jQuery v1.2.6 doesn't have closest()
|
1173
1168
|
if ( $.fn.closest ) {
|
1174
|
-
return $el.closest(
|
1169
|
+
return $el.closest( selector );
|
1175
1170
|
}
|
1176
|
-
return
|
1171
|
+
return $el.is( selector ) ?
|
1177
1172
|
$el :
|
1178
|
-
$el.parents(
|
1173
|
+
$el.parents( selector ).filter( ':first' );
|
1179
1174
|
},
|
1180
1175
|
|
1181
1176
|
// nextSort (optional), lets you disable next sort text
|
1182
1177
|
setColumnAriaLabel : function( c, $header, nextSort ) {
|
1183
1178
|
if ( $header.length ) {
|
1184
|
-
var
|
1185
|
-
// data-column always stored on the th/td
|
1186
|
-
column = parseInt( $th.attr( 'data-column' ), 10 ),
|
1179
|
+
var column = parseInt( $header.attr( 'data-column' ), 10 ),
|
1187
1180
|
vars = c.sortVars[ column ],
|
1188
1181
|
tmp = $header.hasClass( ts.css.sortAsc ) ?
|
1189
1182
|
'sortAsc' :
|
@@ -1551,10 +1544,10 @@
|
|
1551
1544
|
notMultiSort = !event[ c.sortMultiSortKey ],
|
1552
1545
|
table = c.table,
|
1553
1546
|
len = c.$headers.length,
|
1554
|
-
|
1555
|
-
|
1556
|
-
col = parseInt( $th.attr( 'data-column' ), 10 ),
|
1547
|
+
th = ts.getClosest( $( cell ), 'th, td' ),
|
1548
|
+
col = parseInt( th.attr( 'data-column' ), 10 ),
|
1557
1549
|
order = c.sortVars[ col ].order;
|
1550
|
+
th = th[0];
|
1558
1551
|
// Only call sortStart if sorting is enabled
|
1559
1552
|
c.$table.triggerHandler( 'sortStart', table );
|
1560
1553
|
// get current column sort order
|
@@ -1589,8 +1582,8 @@
|
|
1589
1582
|
if ( dir < 2 ) {
|
1590
1583
|
c.sortList[ c.sortList.length ] = [ col, dir ];
|
1591
1584
|
// add other columns if header spans across multiple
|
1592
|
-
if (
|
1593
|
-
for ( indx = 1; indx <
|
1585
|
+
if ( th.colSpan > 1 ) {
|
1586
|
+
for ( indx = 1; indx < th.colSpan; indx++ ) {
|
1594
1587
|
c.sortList[ c.sortList.length ] = [ col + indx, dir ];
|
1595
1588
|
// update count on columns in colSpan
|
1596
1589
|
c.sortVars[ col + indx ].count = $.inArray( dir, order );
|
@@ -1622,8 +1615,8 @@
|
|
1622
1615
|
if ( dir < 2 ) {
|
1623
1616
|
c.sortList[ c.sortList.length ] = [ col, dir ];
|
1624
1617
|
// add other columns if header spans across multiple
|
1625
|
-
if (
|
1626
|
-
for ( indx = 1; indx <
|
1618
|
+
if ( th.colSpan > 1 ) {
|
1619
|
+
for ( indx = 1; indx < th.colSpan; indx++ ) {
|
1627
1620
|
c.sortList[ c.sortList.length ] = [ col + indx, dir ];
|
1628
1621
|
// update count on columns in colSpan
|
1629
1622
|
c.sortVars[ col + indx ].count = $.inArray( dir, order );
|
@@ -2392,7 +2385,7 @@
|
|
2392
2385
|
$cells = ( $headers || c.$headers ),
|
2393
2386
|
// c.$headerIndexed is not defined initially
|
2394
2387
|
$cell = c.$headerIndexed && c.$headerIndexed[ indx ] ||
|
2395
|
-
$cells.
|
2388
|
+
$cells.find( '[data-column="' + indx + '"]:last' );
|
2396
2389
|
if ( typeof obj[ indx ] !== 'undefined' ) {
|
2397
2390
|
return getCell ? obj[ indx ] : obj[ $cells.index( $cell ) ];
|
2398
2391
|
}
|
@@ -4,7 +4,7 @@
|
|
4
4
|
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀██
|
5
5
|
█████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
|
6
6
|
*/
|
7
|
-
/*! tablesorter (FORK) - updated
|
7
|
+
/*! tablesorter (FORK) - updated 12-13-2017 (v2.29.2)*/
|
8
8
|
/* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
|
9
9
|
(function(factory) {
|
10
10
|
if (typeof define === 'function' && define.amd) {
|
@@ -408,7 +408,7 @@
|
|
408
408
|
|
409
409
|
})(jQuery);
|
410
410
|
|
411
|
-
/*! Widget: filter - updated
|
411
|
+
/*! Widget: filter - updated 12/13/2017 (v2.29.1) *//*
|
412
412
|
* Requires tablesorter v2.8+ and jQuery 1.7+
|
413
413
|
* by Rob Garrison
|
414
414
|
*/
|
@@ -1525,6 +1525,7 @@
|
|
1525
1525
|
if ( $.inArray( ffxn, vars.excludeMatch ) < 0 && matches === null ) {
|
1526
1526
|
matches = tsf.types[ffxn]( c, data, vars );
|
1527
1527
|
if ( matches !== null ) {
|
1528
|
+
data.matchedOn = ffxn;
|
1528
1529
|
filterMatched = matches;
|
1529
1530
|
}
|
1530
1531
|
}
|
@@ -1572,6 +1573,7 @@
|
|
1572
1573
|
tsf.multipleColumns( c, wo.filter_$anyMatch ) :
|
1573
1574
|
[];
|
1574
1575
|
data.$cells = data.$row.children();
|
1576
|
+
data.matchedOn = null;
|
1575
1577
|
if ( data.anyMatchFlag && columnIndex.length > 1 || ( data.anyMatchFilter && !hasAnyMatchInput ) ) {
|
1576
1578
|
data.anyMatch = true;
|
1577
1579
|
data.isMatch = true;
|
@@ -1673,7 +1675,9 @@
|
|
1673
1675
|
// cycle through the different filters
|
1674
1676
|
// filters return a boolean or null if nothing matches
|
1675
1677
|
filterMatched = tsf.processTypes( c, data, vars );
|
1676
|
-
|
1678
|
+
// select with exact match; ignore "and" or "or" within the text; fixes #1486
|
1679
|
+
txt = fxn === true && (data.matchedOn === 'and' || data.matchedOn === 'or');
|
1680
|
+
if ( filterMatched !== null && !txt) {
|
1677
1681
|
result = filterMatched;
|
1678
1682
|
// Look for match, and add child row data for matching
|
1679
1683
|
} else {
|
@@ -2655,7 +2659,7 @@
|
|
2655
2659
|
|
2656
2660
|
})(jQuery, window);
|
2657
2661
|
|
2658
|
-
/*! Widget: resizable - updated
|
2662
|
+
/*! Widget: resizable - updated 12/13/2017 (v2.29.1) */
|
2659
2663
|
/*jshint browser:true, jquery:true, unused:false */
|
2660
2664
|
;(function ($, window) {
|
2661
2665
|
'use strict';
|
@@ -2832,7 +2836,10 @@
|
|
2832
2836
|
columns = c.columns - 1,
|
2833
2837
|
$header = $this.data( 'header' );
|
2834
2838
|
if ( !$header ) { return; } // see #859
|
2835
|
-
if (
|
2839
|
+
if (
|
2840
|
+
!$header.is(':visible') ||
|
2841
|
+
( !wo.resizable_addLastColumn && ts.resizable.checkVisibleColumns(c, column) )
|
2842
|
+
) {
|
2836
2843
|
$this.hide();
|
2837
2844
|
} else if ( column < columns || column === columns && wo.resizable_addLastColumn ) {
|
2838
2845
|
$this.css({
|
@@ -2844,6 +2851,16 @@
|
|
2844
2851
|
});
|
2845
2852
|
},
|
2846
2853
|
|
2854
|
+
// Fixes #1485
|
2855
|
+
checkVisibleColumns: function( c, column ) {
|
2856
|
+
var i,
|
2857
|
+
len = 0;
|
2858
|
+
for ( i = column + 1; i < c.columns; i++ ) {
|
2859
|
+
len += c.$headerIndexed[i].is( ':visible' ) ? 1 : 0;
|
2860
|
+
}
|
2861
|
+
return len === 0;
|
2862
|
+
},
|
2863
|
+
|
2847
2864
|
// prevent text selection while dragging resize bar
|
2848
2865
|
toggleTextSelection : function( c, wo, toggle ) {
|
2849
2866
|
var namespace = c.namespace + 'tsresize';
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/*! Widget: filter - updated
|
1
|
+
/*! Widget: filter - updated 12/13/2017 (v2.29.1) *//*
|
2
2
|
* Requires tablesorter v2.8+ and jQuery 1.7+
|
3
3
|
* by Rob Garrison
|
4
4
|
*/
|
@@ -1115,6 +1115,7 @@
|
|
1115
1115
|
if ( $.inArray( ffxn, vars.excludeMatch ) < 0 && matches === null ) {
|
1116
1116
|
matches = tsf.types[ffxn]( c, data, vars );
|
1117
1117
|
if ( matches !== null ) {
|
1118
|
+
data.matchedOn = ffxn;
|
1118
1119
|
filterMatched = matches;
|
1119
1120
|
}
|
1120
1121
|
}
|
@@ -1162,6 +1163,7 @@
|
|
1162
1163
|
tsf.multipleColumns( c, wo.filter_$anyMatch ) :
|
1163
1164
|
[];
|
1164
1165
|
data.$cells = data.$row.children();
|
1166
|
+
data.matchedOn = null;
|
1165
1167
|
if ( data.anyMatchFlag && columnIndex.length > 1 || ( data.anyMatchFilter && !hasAnyMatchInput ) ) {
|
1166
1168
|
data.anyMatch = true;
|
1167
1169
|
data.isMatch = true;
|
@@ -1263,7 +1265,9 @@
|
|
1263
1265
|
// cycle through the different filters
|
1264
1266
|
// filters return a boolean or null if nothing matches
|
1265
1267
|
filterMatched = tsf.processTypes( c, data, vars );
|
1266
|
-
|
1268
|
+
// select with exact match; ignore "and" or "or" within the text; fixes #1486
|
1269
|
+
txt = fxn === true && (data.matchedOn === 'and' || data.matchedOn === 'or');
|
1270
|
+
if ( filterMatched !== null && !txt) {
|
1267
1271
|
result = filterMatched;
|
1268
1272
|
// Look for match, and add child row data for matching
|
1269
1273
|
} else {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/*! Widget: resizable - updated
|
1
|
+
/*! Widget: resizable - updated 12/13/2017 (v2.29.1) */
|
2
2
|
/*jshint browser:true, jquery:true, unused:false */
|
3
3
|
;(function ($, window) {
|
4
4
|
'use strict';
|
@@ -175,7 +175,10 @@
|
|
175
175
|
columns = c.columns - 1,
|
176
176
|
$header = $this.data( 'header' );
|
177
177
|
if ( !$header ) { return; } // see #859
|
178
|
-
if (
|
178
|
+
if (
|
179
|
+
!$header.is(':visible') ||
|
180
|
+
( !wo.resizable_addLastColumn && ts.resizable.checkVisibleColumns(c, column) )
|
181
|
+
) {
|
179
182
|
$this.hide();
|
180
183
|
} else if ( column < columns || column === columns && wo.resizable_addLastColumn ) {
|
181
184
|
$this.css({
|
@@ -187,6 +190,16 @@
|
|
187
190
|
});
|
188
191
|
},
|
189
192
|
|
193
|
+
// Fixes #1485
|
194
|
+
checkVisibleColumns: function( c, column ) {
|
195
|
+
var i,
|
196
|
+
len = 0;
|
197
|
+
for ( i = column + 1; i < c.columns; i++ ) {
|
198
|
+
len += c.$headerIndexed[i].is( ':visible' ) ? 1 : 0;
|
199
|
+
}
|
200
|
+
return len === 0;
|
201
|
+
},
|
202
|
+
|
190
203
|
// prevent text selection while dragging resize bar
|
191
204
|
toggleTextSelection : function( c, wo, toggle ) {
|
192
205
|
var namespace = c.namespace + 'tsresize';
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/*! Widget: scroller - updated
|
1
|
+
/*! Widget: scroller - updated 12/13/2017 (v2.29.1) *//*
|
2
2
|
Copyright (C) 2011 T. Connell & Associates, Inc.
|
3
3
|
|
4
4
|
Dual-licensed under the MIT and GPL licenses
|
@@ -289,8 +289,10 @@
|
|
289
289
|
});
|
290
290
|
|
291
291
|
// resize/update events - filterEnd fires after "tablesorter-initialized" and "updateComplete"
|
292
|
-
|
293
|
-
|
292
|
+
tmp = ts.hasWidget( c.table, 'filter' ) ?
|
293
|
+
'filterEnd filterInit' :
|
294
|
+
'tablesorter-initialized updateComplete';
|
295
|
+
events = ( tmp + ' sortEnd pagerComplete columnUpdate ' ).split( ' ' ).join( namespace + ' ' );
|
294
296
|
|
295
297
|
$table
|
296
298
|
.off( namespace )
|
@@ -0,0 +1,137 @@
|
|
1
|
+
/*! Widget: vertical-group (BETA) - updated 12/13/2017 (v2.29.1) */
|
2
|
+
/* Requires tablesorter and jQuery
|
3
|
+
* Originally by @aavmurphy (Andrew Murphy)
|
4
|
+
* Adapted for tablesorter by Rob Garrison - see #1469 & #1470
|
5
|
+
*
|
6
|
+
* This widget is licensed under the same terms at mottie/tablesorter itself, i.e. free to use
|
7
|
+
*/
|
8
|
+
/* jshint browser:true, jquery:true, unused:false */
|
9
|
+
/* global jQuery:false */
|
10
|
+
;(function($){
|
11
|
+
'use strict';
|
12
|
+
|
13
|
+
var ts = $.tablesorter,
|
14
|
+
tscss = ts.css;
|
15
|
+
|
16
|
+
$.extend( ts.css, {
|
17
|
+
verticalGroupHeader: 'tablesorter-vertical-group',
|
18
|
+
verticalGroupHide: 'tablesorter-vertical-group-hide',
|
19
|
+
verticalGroupShow: 'tablesorter-vertical-group-show'
|
20
|
+
});
|
21
|
+
|
22
|
+
ts.addWidget({
|
23
|
+
id: 'vertical-group',
|
24
|
+
priority: 99,
|
25
|
+
init: verticalGroup,
|
26
|
+
format: verticalGroup
|
27
|
+
});
|
28
|
+
|
29
|
+
function cleanUp( el ) {
|
30
|
+
el.removeClass(tscss.verticalGroupHide + ' ' + tscss.verticalGroupShow);
|
31
|
+
}
|
32
|
+
|
33
|
+
function setZebra( wo, $cell, indx ) {
|
34
|
+
var $row = $cell.parent();
|
35
|
+
$row
|
36
|
+
.removeClass( wo.zebra[ (indx + 1) % 2 ] )
|
37
|
+
.addClass( wo.zebra[ indx % 2] );
|
38
|
+
}
|
39
|
+
|
40
|
+
function verticalGroup( table, c, wo, init ) {
|
41
|
+
// -------------------------------------------------------------------------
|
42
|
+
// loop thru the header row,
|
43
|
+
// - look for .vertical-group
|
44
|
+
//
|
45
|
+
// loop thru the rows
|
46
|
+
//
|
47
|
+
// set ALWAYS_SHOW = FALSE
|
48
|
+
// loop thru the 1st 4 columns
|
49
|
+
// if this cell does not exist, skip to next row
|
50
|
+
// if ALWAYS_SHOW, then this cell is SHOW
|
51
|
+
// else if this column does not have '.vertical-group', then this cell is SHOW
|
52
|
+
// else if this cell is NOT the same as the cell-above, then this cell is SHOW
|
53
|
+
// else this cell is HIDE
|
54
|
+
// if this cell is SHOW, set ALWAYS_SHOW
|
55
|
+
// if this cell is SHOW,
|
56
|
+
// then
|
57
|
+
// set the cell class to .vertical_group_show
|
58
|
+
// else
|
59
|
+
// set the cell class to vertical_group_show
|
60
|
+
//
|
61
|
+
// TO DO add/remove classes so as not to clobber other existing classes
|
62
|
+
// TO DO add classes
|
63
|
+
//
|
64
|
+
// .vertical-group-show { background-color: white !important; }
|
65
|
+
// .vertical-group-hide { visibility: hidden; border-top: white !important;background-color: white !important; }
|
66
|
+
//
|
67
|
+
// this is all because of stripped tables
|
68
|
+
// - background-colour show be the table's background colour (or the first row's)
|
69
|
+
// - the border-color needs to be the same
|
70
|
+
//
|
71
|
+
// ------------------------------------------------------------------------------------------------
|
72
|
+
var tmp,
|
73
|
+
zebra_index = -1, // increments at start of loop
|
74
|
+
rows = table.tBodies[0].rows,
|
75
|
+
header = table.tHead.rows,
|
76
|
+
has_zebra = ts.hasWidget( table, 'zebra'),
|
77
|
+
is_vertical_group_col = [],
|
78
|
+
last_row = [];
|
79
|
+
|
80
|
+
if ( wo.vertical_group_lock ) {
|
81
|
+
return;
|
82
|
+
}
|
83
|
+
wo.vertical_group_lock = true;
|
84
|
+
|
85
|
+
is_vertical_group_col = $.map( c.$headerIndexed, function( el ) {
|
86
|
+
return el.hasClass( tscss.verticalGroupHeader ) ? 1 : '';
|
87
|
+
});
|
88
|
+
|
89
|
+
if ( is_vertical_group_col.join('') === '' ) {
|
90
|
+
cleanUp( $(rows).find( '.' + tscss.verticalGroupHide + ',.' + tscss.verticalGroupShow ) );
|
91
|
+
wo.vertical_group_lock = false;
|
92
|
+
return;
|
93
|
+
}
|
94
|
+
|
95
|
+
for (var i = 0; i < rows.length; i++) {
|
96
|
+
var always_show_cell = false;
|
97
|
+
|
98
|
+
for (var j = 0; j < c.columns; j++ ) {
|
99
|
+
if ( !is_vertical_group_col[ j ] || !rows[ i ].cells[ j ] ) {
|
100
|
+
zebra_index++;
|
101
|
+
continue;
|
102
|
+
}
|
103
|
+
|
104
|
+
var $cell = $( rows[ i ].cells[ j ] ),
|
105
|
+
// only group if column is sorted
|
106
|
+
isSorted = ts.isValueInArray( j, c.sortList ), // returns equivalent of an indexOf value
|
107
|
+
cell_data = $cell.html();
|
108
|
+
|
109
|
+
if ( isSorted < 0 ) {
|
110
|
+
cleanUp( $cell );
|
111
|
+
} else if ( !always_show_cell && cell_data === last_row[j] ) {
|
112
|
+
if ( !$cell.hasClass(tscss.verticalGroupHide) ) {
|
113
|
+
$cell.addClass( tscss.verticalGroupHide );
|
114
|
+
}
|
115
|
+
if ( has_zebra ) {
|
116
|
+
setZebra( wo, $cell, zebra_index );
|
117
|
+
}
|
118
|
+
$cell.removeClass( tscss.verticalGroupShow );
|
119
|
+
} else if (isSorted === 0) {
|
120
|
+
// only show cells from the first sorted column
|
121
|
+
always_show_cell = true; // show
|
122
|
+
if ( !$cell.hasClass( tscss.verticalGroupShow ) ) {
|
123
|
+
$cell.addClass( tscss.verticalGroupShow );
|
124
|
+
}
|
125
|
+
$cell.removeClass( tscss.verticalGroupHide );
|
126
|
+
if ( has_zebra ) {
|
127
|
+
// only adjust striping based on the first sorted column
|
128
|
+
setZebra( wo, $cell, isSorted ? zebra_index : ++zebra_index );
|
129
|
+
}
|
130
|
+
}
|
131
|
+
last_row[j] = cell_data;
|
132
|
+
}
|
133
|
+
}
|
134
|
+
wo.vertical_group_lock = false;
|
135
|
+
}
|
136
|
+
|
137
|
+
})(jQuery);
|
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.24.
|
4
|
+
version: 1.24.1
|
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: 2017-
|
12
|
+
date: 2017-12-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
@@ -142,6 +142,7 @@ files:
|
|
142
142
|
- vendor/assets/javascripts/jquery-tablesorter/widgets/widget-storage.js
|
143
143
|
- vendor/assets/javascripts/jquery-tablesorter/widgets/widget-toggle.js
|
144
144
|
- vendor/assets/javascripts/jquery-tablesorter/widgets/widget-uitheme.js
|
145
|
+
- vendor/assets/javascripts/jquery-tablesorter/widgets/widget-vertical-group.js
|
145
146
|
- vendor/assets/javascripts/jquery-tablesorter/widgets/widget-view.js
|
146
147
|
- vendor/assets/stylesheets/jquery-tablesorter/addons/pager/jquery.tablesorter.pager.css
|
147
148
|
- vendor/assets/stylesheets/jquery-tablesorter/dragtable.mod.css
|