jquery-tablesorter 1.24.0 → 1.24.1
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.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
|