jquery-tablesorter 1.23.15 → 1.24.0
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 +2 -2
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.combined.js +77 -43
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.js +46 -25
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.widgets.js +31 -18
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-columnSelector.js +18 -14
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-grouping.js +9 -2
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-output.js +12 -4
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-resizable.js +2 -1
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-scroller.js +5 -1
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-sort2Hash.js +23 -3
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-stickyHeaders.js +24 -12
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-uitheme.js +4 -4
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.bootstrap.css +2 -2
- data/vendor/assets/stylesheets/jquery-tablesorter/theme.bootstrap_3.css +2 -2
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fd2f6d679b0523149759cc69b1b95cb25ca39e65
|
|
4
|
+
data.tar.gz: 86b19e6a3167c07baf0d90e3ab2d8993da19c625
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f26ac12515b165ac9e47c2cefac141a377a48f1d00be50f71bf62afc75a767d0b6ff795e3564f70465de4129119c9d3b81c2136d984edaced5fd2b9695bb6c55
|
|
7
|
+
data.tar.gz: bb9343e62a716614e84c5ba8f450d25af4d1c6e965e02fecc2a35b7ace98654f1e7ab5025a7f9f87421c3ff075d46caa0b630ae8ccf593076394338809bd423a
|
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.
|
|
7
|
+
Current tablesorter version: 2.29.0 (9/27/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 09-27-2017 (v2.29.0)*/
|
|
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.
|
|
19
|
+
/*! TableSorter (FORK) v2.29.0 *//*
|
|
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.
|
|
43
|
+
version : '2.29.0',
|
|
44
44
|
|
|
45
45
|
parsers : [],
|
|
46
46
|
widgets : [],
|
|
@@ -439,10 +439,10 @@
|
|
|
439
439
|
e.stopPropagation();
|
|
440
440
|
ts.applyWidgetId( this, id );
|
|
441
441
|
})
|
|
442
|
-
.bind( 'applyWidgets' + namespace, function( e,
|
|
442
|
+
.bind( 'applyWidgets' + namespace, function( e, callback ) {
|
|
443
443
|
e.stopPropagation();
|
|
444
|
-
// apply widgets
|
|
445
|
-
ts.applyWidget( this,
|
|
444
|
+
// apply widgets (false = not initializing)
|
|
445
|
+
ts.applyWidget( this, false, callback );
|
|
446
446
|
})
|
|
447
447
|
.bind( 'refreshWidgets' + namespace, function( e, all, dontapply ) {
|
|
448
448
|
e.stopPropagation();
|
|
@@ -479,9 +479,9 @@
|
|
|
479
479
|
downTarget = null;
|
|
480
480
|
if ( core !== true ) {
|
|
481
481
|
$headers.addClass( namespace.slice( 1 ) + '_extra_headers' );
|
|
482
|
-
tmp =
|
|
483
|
-
if ( tmp && tmp.nodeName === 'TABLE' && tmp !== table ) {
|
|
484
|
-
$( tmp ).addClass( namespace.slice( 1 ) + '_extra_table' );
|
|
482
|
+
tmp = ts.getClosest( $headers, 'table' );
|
|
483
|
+
if ( tmp.length && tmp[ 0 ].nodeName === 'TABLE' && tmp[ 0 ] !== table ) {
|
|
484
|
+
$( tmp[ 0 ] ).addClass( namespace.slice( 1 ) + '_extra_table' );
|
|
485
485
|
}
|
|
486
486
|
}
|
|
487
487
|
tmp = ( c.pointerDown + ' ' + c.pointerUp + ' ' + c.pointerClick + ' sort keyup ' )
|
|
@@ -533,8 +533,7 @@
|
|
|
533
533
|
ts.buildCache( c );
|
|
534
534
|
}
|
|
535
535
|
// jQuery v1.2.6 doesn't have closest()
|
|
536
|
-
$cell =
|
|
537
|
-
/TH|TD/.test( this.nodeName ) ? $( this ) : $( this ).parents( 'th, td' );
|
|
536
|
+
$cell = ts.getHeaderCell( $( this ) );
|
|
538
537
|
// reference original table headers and find the same cell
|
|
539
538
|
// don't use $headers or IE8 throws an error - see #987
|
|
540
539
|
temp = $headers.index( $cell );
|
|
@@ -574,7 +573,7 @@
|
|
|
574
573
|
'';
|
|
575
574
|
// redefine c.$headers here in case of an updateAll that replaces or adds an entire header cell - see #683
|
|
576
575
|
c.$headers = $( $.map( c.$table.find( c.selectorHeaders ), function( elem, index ) {
|
|
577
|
-
var configHeaders, header, column, template, tmp,
|
|
576
|
+
var configHeaders, header, column, template, tmp, $th,
|
|
578
577
|
$elem = $( elem );
|
|
579
578
|
// ignore cell (don't add it to c.$headers) if row has ignoreRow class
|
|
580
579
|
if ( $elem.parent().hasClass( c.cssIgnoreRow ) ) { return; }
|
|
@@ -600,7 +599,9 @@
|
|
|
600
599
|
if ( c.onRenderHeader ) {
|
|
601
600
|
c.onRenderHeader.apply( $elem, [ index, c, c.$table ] );
|
|
602
601
|
}
|
|
603
|
-
column
|
|
602
|
+
// data-column stored on th or td only
|
|
603
|
+
$th = ts.getHeaderCell( $elem );
|
|
604
|
+
column = parseInt( $th.attr( 'data-column' ), 10 );
|
|
604
605
|
elem.column = column;
|
|
605
606
|
tmp = ts.getOrder( ts.getData( $elem, configHeaders, 'sortInitialOrder' ) || c.sortInitialOrder );
|
|
606
607
|
// this may get updated numerous times if there are multiple rows
|
|
@@ -618,10 +619,9 @@
|
|
|
618
619
|
}
|
|
619
620
|
// add cell to headerList
|
|
620
621
|
c.headerList[ index ] = elem;
|
|
622
|
+
$elem.addClass( ts.css.header + ' ' + c.cssHeader );
|
|
621
623
|
// add to parent in case there are multiple rows
|
|
622
|
-
$elem
|
|
623
|
-
.addClass( ts.css.header + ' ' + c.cssHeader )
|
|
624
|
-
.parent()
|
|
624
|
+
ts.getClosest( $elem, 'tr' )
|
|
625
625
|
.addClass( ts.css.headerRow + ' ' + c.cssHeaderRow )
|
|
626
626
|
.attr( 'role', 'row' );
|
|
627
627
|
// allow keyboard cursor to focus on element
|
|
@@ -1179,10 +1179,29 @@
|
|
|
1179
1179
|
}
|
|
1180
1180
|
},
|
|
1181
1181
|
|
|
1182
|
+
// This function does NOT return closest if the $el matches the selector
|
|
1183
|
+
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
|
+
// jQuery v1.2.6 doesn't have closest()
|
|
1191
|
+
if ( $.fn.closest ) {
|
|
1192
|
+
return $el.closest( 'th, td' );
|
|
1193
|
+
}
|
|
1194
|
+
return /TH|TD/.test( $el[0].nodeName ) ?
|
|
1195
|
+
$el :
|
|
1196
|
+
$el.parents( 'th, td' ).filter( ':first' );
|
|
1197
|
+
},
|
|
1198
|
+
|
|
1182
1199
|
// nextSort (optional), lets you disable next sort text
|
|
1183
1200
|
setColumnAriaLabel : function( c, $header, nextSort ) {
|
|
1184
1201
|
if ( $header.length ) {
|
|
1185
|
-
var
|
|
1202
|
+
var $th = ts.getHeaderCell( $header ),
|
|
1203
|
+
// data-column always stored on the th/td
|
|
1204
|
+
column = parseInt( $th.attr( 'data-column' ), 10 ),
|
|
1186
1205
|
vars = c.sortVars[ column ],
|
|
1187
1206
|
tmp = $header.hasClass( ts.css.sortAsc ) ?
|
|
1188
1207
|
'sortAsc' :
|
|
@@ -1340,10 +1359,9 @@
|
|
|
1340
1359
|
$cell = $( cell ),
|
|
1341
1360
|
// update cache - format: function( s, table, cell, cellIndex )
|
|
1342
1361
|
// no closest in jQuery v1.2.6
|
|
1343
|
-
tbodyIndex = $tbodies
|
|
1344
|
-
.index( $.fn.closest ? $cell.closest( 'tbody' ) : $cell.parents( 'tbody' ).filter( ':first' ) ),
|
|
1362
|
+
tbodyIndex = $tbodies.index( ts.getClosest( $cell, 'tbody' ) ),
|
|
1345
1363
|
tbcache = c.cache[ tbodyIndex ],
|
|
1346
|
-
$row =
|
|
1364
|
+
$row = ts.getClosest( $cell, 'tr' );
|
|
1347
1365
|
cell = $cell[ 0 ]; // in case cell is a jQuery object
|
|
1348
1366
|
// tbody may not exist if update is initialized while tbody is removed for processing
|
|
1349
1367
|
if ( $tbodies.length && tbodyIndex >= 0 ) {
|
|
@@ -1398,11 +1416,13 @@
|
|
|
1398
1416
|
if ( valid ) {
|
|
1399
1417
|
$row = $( $row );
|
|
1400
1418
|
c.$tbodies.append( $row );
|
|
1401
|
-
} else if (
|
|
1419
|
+
} else if (
|
|
1420
|
+
!$row ||
|
|
1402
1421
|
// row is a jQuery object?
|
|
1403
1422
|
!( $row instanceof jQuery ) ||
|
|
1404
1423
|
// row contained in the table?
|
|
1405
|
-
(
|
|
1424
|
+
( ts.getClosest( $row, 'table' )[ 0 ] !== c.table )
|
|
1425
|
+
) {
|
|
1406
1426
|
if ( c.debug ) {
|
|
1407
1427
|
console.error( 'addRows method requires (1) a jQuery selector reference to rows that have already ' +
|
|
1408
1428
|
'been added to the table, or (2) row HTML string to be added to a table with only one tbody' );
|
|
@@ -1549,10 +1569,10 @@
|
|
|
1549
1569
|
notMultiSort = !event[ c.sortMultiSortKey ],
|
|
1550
1570
|
table = c.table,
|
|
1551
1571
|
len = c.$headers.length,
|
|
1552
|
-
// get current column index
|
|
1553
|
-
|
|
1572
|
+
// get current column index; *always* stored on th/td
|
|
1573
|
+
$th = ts.getHeaderCell( $( cell ) ),
|
|
1574
|
+
col = parseInt( $th.attr( 'data-column' ), 10 ),
|
|
1554
1575
|
order = c.sortVars[ col ].order;
|
|
1555
|
-
|
|
1556
1576
|
// Only call sortStart if sorting is enabled
|
|
1557
1577
|
c.$table.triggerHandler( 'sortStart', table );
|
|
1558
1578
|
// get current column sort order
|
|
@@ -2076,7 +2096,7 @@
|
|
|
2076
2096
|
if ( !widget.priority ) { widget.priority = 10; }
|
|
2077
2097
|
widgets[ indx ] = widget;
|
|
2078
2098
|
} else if ( c.debug ) {
|
|
2079
|
-
console.warn( '"' + names[ indx ] + '" widget code
|
|
2099
|
+
console.warn( '"' + names[ indx ] + '" was enabled, but the widget code has not been loaded!' );
|
|
2080
2100
|
}
|
|
2081
2101
|
}
|
|
2082
2102
|
// sort widgets by priority
|
|
@@ -2148,6 +2168,7 @@
|
|
|
2148
2168
|
c.widgetInit[ name[ index ] ] = false;
|
|
2149
2169
|
}
|
|
2150
2170
|
}
|
|
2171
|
+
c.$table.triggerHandler( 'widgetRemoveEnd', table );
|
|
2151
2172
|
},
|
|
2152
2173
|
|
|
2153
2174
|
refreshWidgets : function( table, doAll, dontapply ) {
|
|
@@ -2999,7 +3020,7 @@
|
|
|
2999
3020
|
|
|
3000
3021
|
})(jQuery, window, document);
|
|
3001
3022
|
|
|
3002
|
-
/*! Widget: uitheme - updated
|
|
3023
|
+
/*! Widget: uitheme - updated 9/27/2017 (v2.29.0) */
|
|
3003
3024
|
;(function ($) {
|
|
3004
3025
|
'use strict';
|
|
3005
3026
|
var ts = $.tablesorter || {};
|
|
@@ -3016,10 +3037,10 @@
|
|
|
3016
3037
|
active : '', // applied when column is sorted
|
|
3017
3038
|
hover : '', // custom css required - a defined bootstrap style may not override other classes
|
|
3018
3039
|
// icon class names
|
|
3019
|
-
icons : '', // add 'icon-white' to make them white; this icon class is added to the <i> in the header
|
|
3040
|
+
icons : '', // add 'bootstrap-icon-white' to make them white; this icon class is added to the <i> in the header
|
|
3020
3041
|
iconSortNone : 'bootstrap-icon-unsorted', // class name added to icon when column is not sorted
|
|
3021
|
-
iconSortAsc : '
|
|
3022
|
-
iconSortDesc : '
|
|
3042
|
+
iconSortAsc : 'glyphicon glyphicon-chevron-up', // class name added to icon when column has ascending sort
|
|
3043
|
+
iconSortDesc : 'glyphicon glyphicon-chevron-down', // class name added to icon when column has descending sort
|
|
3023
3044
|
filterRow : '', // filter row class
|
|
3024
3045
|
footerRow : '',
|
|
3025
3046
|
footerCells : '',
|
|
@@ -5202,7 +5223,7 @@
|
|
|
5202
5223
|
|
|
5203
5224
|
})( jQuery );
|
|
5204
5225
|
|
|
5205
|
-
/*! Widget: stickyHeaders - updated
|
|
5226
|
+
/*! Widget: stickyHeaders - updated 9/27/2017 (v2.29.0) *//*
|
|
5206
5227
|
* Requires tablesorter v2.8+ and jQuery 1.4.3+
|
|
5207
5228
|
* by Rob Garrison
|
|
5208
5229
|
*/
|
|
@@ -5354,10 +5375,14 @@
|
|
|
5354
5375
|
});
|
|
5355
5376
|
}
|
|
5356
5377
|
},
|
|
5378
|
+
getLeftPosition = function() {
|
|
5379
|
+
return $attach.length ?
|
|
5380
|
+
parseInt($attach.css('padding-left'), 10) || 0 :
|
|
5381
|
+
$table.offset().left - parseInt($table.css('margin-left'), 10) - $(window).scrollLeft();
|
|
5382
|
+
},
|
|
5357
5383
|
resizeHeader = function() {
|
|
5358
5384
|
$stickyWrap.css({
|
|
5359
|
-
left :
|
|
5360
|
-
$table.offset().left - parseInt($table.css('margin-left'), 10) - $xScroll.scrollLeft(),
|
|
5385
|
+
left : getLeftPosition(),
|
|
5361
5386
|
width: $table.outerWidth()
|
|
5362
5387
|
});
|
|
5363
5388
|
setWidth( $table, $stickyTable );
|
|
@@ -5367,10 +5392,10 @@
|
|
|
5367
5392
|
if (!$table.is(':visible')) { return; } // fixes #278
|
|
5368
5393
|
// Detect nested tables - fixes #724
|
|
5369
5394
|
nestedStickyTop = $nestedSticky.length ? $nestedSticky.offset().top - $yScroll.scrollTop() + $nestedSticky.height() : 0;
|
|
5370
|
-
var
|
|
5395
|
+
var tmp,
|
|
5396
|
+
offset = $table.offset(),
|
|
5371
5397
|
stickyOffset = getStickyOffset(c, wo),
|
|
5372
5398
|
yWindow = $.isWindow( $yScroll[0] ), // $.isWindow needs jQuery 1.4.3
|
|
5373
|
-
xWindow = $.isWindow( $xScroll[0] ),
|
|
5374
5399
|
attachTop = $attach.length ?
|
|
5375
5400
|
( yWindow ? $yScroll.scrollTop() : $yScroll.offset().top ) :
|
|
5376
5401
|
$yScroll.scrollTop(),
|
|
@@ -5378,19 +5403,27 @@
|
|
|
5378
5403
|
scrollTop = attachTop + stickyOffset + nestedStickyTop - captionHeight,
|
|
5379
5404
|
tableHeight = $table.height() - ($stickyWrap.height() + ($tfoot.height() || 0)) - captionHeight,
|
|
5380
5405
|
isVisible = ( scrollTop > offset.top ) && ( scrollTop < offset.top + tableHeight ) ? 'visible' : 'hidden',
|
|
5406
|
+
state = isVisible === 'visible' ? ts.css.stickyVis : ts.css.stickyHide,
|
|
5407
|
+
needsUpdating = !$stickyWrap.hasClass( state ),
|
|
5381
5408
|
cssSettings = { visibility : isVisible };
|
|
5382
5409
|
if ($attach.length) {
|
|
5410
|
+
// attached sticky headers always need updating
|
|
5411
|
+
needsUpdating = true;
|
|
5383
5412
|
cssSettings.top = yWindow ? scrollTop - $attach.offset().top : $attach.scrollTop();
|
|
5384
5413
|
}
|
|
5385
|
-
|
|
5386
|
-
|
|
5387
|
-
|
|
5414
|
+
// adjust when scrolling horizontally - fixes issue #143
|
|
5415
|
+
tmp = getLeftPosition();
|
|
5416
|
+
if (tmp !== parseInt($stickyWrap.css('left'), 10)) {
|
|
5417
|
+
needsUpdating = true;
|
|
5418
|
+
cssSettings.left = tmp;
|
|
5388
5419
|
}
|
|
5389
5420
|
cssSettings.top = ( cssSettings.top || 0 ) + stickyOffset + nestedStickyTop;
|
|
5390
|
-
|
|
5391
|
-
|
|
5392
|
-
|
|
5393
|
-
|
|
5421
|
+
if (needsUpdating) {
|
|
5422
|
+
$stickyWrap
|
|
5423
|
+
.removeClass( ts.css.stickyVis + ' ' + ts.css.stickyHide )
|
|
5424
|
+
.addClass( state )
|
|
5425
|
+
.css(cssSettings);
|
|
5426
|
+
}
|
|
5394
5427
|
if (isVisible !== laststate || resizing) {
|
|
5395
5428
|
// make sure the column widths match
|
|
5396
5429
|
resizeHeader();
|
|
@@ -5509,7 +5542,7 @@
|
|
|
5509
5542
|
|
|
5510
5543
|
})(jQuery, window);
|
|
5511
5544
|
|
|
5512
|
-
/*! Widget: resizable - updated
|
|
5545
|
+
/*! Widget: resizable - updated 9/27/2017 (v2.29.0) */
|
|
5513
5546
|
/*jshint browser:true, jquery:true, unused:false */
|
|
5514
5547
|
;(function ($, window) {
|
|
5515
5548
|
'use strict';
|
|
@@ -5836,6 +5869,7 @@
|
|
|
5836
5869
|
vars.$target = vars.$next = null;
|
|
5837
5870
|
// will update stickyHeaders, just in case, see #912
|
|
5838
5871
|
c.$table.triggerHandler('stickyHeadersUpdate');
|
|
5872
|
+
c.$table.triggerHandler('resizableComplete');
|
|
5839
5873
|
}
|
|
5840
5874
|
};
|
|
5841
5875
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! TableSorter (FORK) v2.
|
|
1
|
+
/*! TableSorter (FORK) v2.29.0 *//*
|
|
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.
|
|
25
|
+
version : '2.29.0',
|
|
26
26
|
|
|
27
27
|
parsers : [],
|
|
28
28
|
widgets : [],
|
|
@@ -421,10 +421,10 @@
|
|
|
421
421
|
e.stopPropagation();
|
|
422
422
|
ts.applyWidgetId( this, id );
|
|
423
423
|
})
|
|
424
|
-
.bind( 'applyWidgets' + namespace, function( e,
|
|
424
|
+
.bind( 'applyWidgets' + namespace, function( e, callback ) {
|
|
425
425
|
e.stopPropagation();
|
|
426
|
-
// apply widgets
|
|
427
|
-
ts.applyWidget( this,
|
|
426
|
+
// apply widgets (false = not initializing)
|
|
427
|
+
ts.applyWidget( this, false, callback );
|
|
428
428
|
})
|
|
429
429
|
.bind( 'refreshWidgets' + namespace, function( e, all, dontapply ) {
|
|
430
430
|
e.stopPropagation();
|
|
@@ -461,9 +461,9 @@
|
|
|
461
461
|
downTarget = null;
|
|
462
462
|
if ( core !== true ) {
|
|
463
463
|
$headers.addClass( namespace.slice( 1 ) + '_extra_headers' );
|
|
464
|
-
tmp =
|
|
465
|
-
if ( tmp && tmp.nodeName === 'TABLE' && tmp !== table ) {
|
|
466
|
-
$( tmp ).addClass( namespace.slice( 1 ) + '_extra_table' );
|
|
464
|
+
tmp = ts.getClosest( $headers, 'table' );
|
|
465
|
+
if ( tmp.length && tmp[ 0 ].nodeName === 'TABLE' && tmp[ 0 ] !== table ) {
|
|
466
|
+
$( tmp[ 0 ] ).addClass( namespace.slice( 1 ) + '_extra_table' );
|
|
467
467
|
}
|
|
468
468
|
}
|
|
469
469
|
tmp = ( c.pointerDown + ' ' + c.pointerUp + ' ' + c.pointerClick + ' sort keyup ' )
|
|
@@ -515,8 +515,7 @@
|
|
|
515
515
|
ts.buildCache( c );
|
|
516
516
|
}
|
|
517
517
|
// jQuery v1.2.6 doesn't have closest()
|
|
518
|
-
$cell =
|
|
519
|
-
/TH|TD/.test( this.nodeName ) ? $( this ) : $( this ).parents( 'th, td' );
|
|
518
|
+
$cell = ts.getHeaderCell( $( this ) );
|
|
520
519
|
// reference original table headers and find the same cell
|
|
521
520
|
// don't use $headers or IE8 throws an error - see #987
|
|
522
521
|
temp = $headers.index( $cell );
|
|
@@ -556,7 +555,7 @@
|
|
|
556
555
|
'';
|
|
557
556
|
// redefine c.$headers here in case of an updateAll that replaces or adds an entire header cell - see #683
|
|
558
557
|
c.$headers = $( $.map( c.$table.find( c.selectorHeaders ), function( elem, index ) {
|
|
559
|
-
var configHeaders, header, column, template, tmp,
|
|
558
|
+
var configHeaders, header, column, template, tmp, $th,
|
|
560
559
|
$elem = $( elem );
|
|
561
560
|
// ignore cell (don't add it to c.$headers) if row has ignoreRow class
|
|
562
561
|
if ( $elem.parent().hasClass( c.cssIgnoreRow ) ) { return; }
|
|
@@ -582,7 +581,9 @@
|
|
|
582
581
|
if ( c.onRenderHeader ) {
|
|
583
582
|
c.onRenderHeader.apply( $elem, [ index, c, c.$table ] );
|
|
584
583
|
}
|
|
585
|
-
column
|
|
584
|
+
// data-column stored on th or td only
|
|
585
|
+
$th = ts.getHeaderCell( $elem );
|
|
586
|
+
column = parseInt( $th.attr( 'data-column' ), 10 );
|
|
586
587
|
elem.column = column;
|
|
587
588
|
tmp = ts.getOrder( ts.getData( $elem, configHeaders, 'sortInitialOrder' ) || c.sortInitialOrder );
|
|
588
589
|
// this may get updated numerous times if there are multiple rows
|
|
@@ -600,10 +601,9 @@
|
|
|
600
601
|
}
|
|
601
602
|
// add cell to headerList
|
|
602
603
|
c.headerList[ index ] = elem;
|
|
604
|
+
$elem.addClass( ts.css.header + ' ' + c.cssHeader );
|
|
603
605
|
// add to parent in case there are multiple rows
|
|
604
|
-
$elem
|
|
605
|
-
.addClass( ts.css.header + ' ' + c.cssHeader )
|
|
606
|
-
.parent()
|
|
606
|
+
ts.getClosest( $elem, 'tr' )
|
|
607
607
|
.addClass( ts.css.headerRow + ' ' + c.cssHeaderRow )
|
|
608
608
|
.attr( 'role', 'row' );
|
|
609
609
|
// allow keyboard cursor to focus on element
|
|
@@ -1161,10 +1161,29 @@
|
|
|
1161
1161
|
}
|
|
1162
1162
|
},
|
|
1163
1163
|
|
|
1164
|
+
// This function does NOT return closest if the $el matches the selector
|
|
1165
|
+
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
|
+
// jQuery v1.2.6 doesn't have closest()
|
|
1173
|
+
if ( $.fn.closest ) {
|
|
1174
|
+
return $el.closest( 'th, td' );
|
|
1175
|
+
}
|
|
1176
|
+
return /TH|TD/.test( $el[0].nodeName ) ?
|
|
1177
|
+
$el :
|
|
1178
|
+
$el.parents( 'th, td' ).filter( ':first' );
|
|
1179
|
+
},
|
|
1180
|
+
|
|
1164
1181
|
// nextSort (optional), lets you disable next sort text
|
|
1165
1182
|
setColumnAriaLabel : function( c, $header, nextSort ) {
|
|
1166
1183
|
if ( $header.length ) {
|
|
1167
|
-
var
|
|
1184
|
+
var $th = ts.getHeaderCell( $header ),
|
|
1185
|
+
// data-column always stored on the th/td
|
|
1186
|
+
column = parseInt( $th.attr( 'data-column' ), 10 ),
|
|
1168
1187
|
vars = c.sortVars[ column ],
|
|
1169
1188
|
tmp = $header.hasClass( ts.css.sortAsc ) ?
|
|
1170
1189
|
'sortAsc' :
|
|
@@ -1322,10 +1341,9 @@
|
|
|
1322
1341
|
$cell = $( cell ),
|
|
1323
1342
|
// update cache - format: function( s, table, cell, cellIndex )
|
|
1324
1343
|
// no closest in jQuery v1.2.6
|
|
1325
|
-
tbodyIndex = $tbodies
|
|
1326
|
-
.index( $.fn.closest ? $cell.closest( 'tbody' ) : $cell.parents( 'tbody' ).filter( ':first' ) ),
|
|
1344
|
+
tbodyIndex = $tbodies.index( ts.getClosest( $cell, 'tbody' ) ),
|
|
1327
1345
|
tbcache = c.cache[ tbodyIndex ],
|
|
1328
|
-
$row =
|
|
1346
|
+
$row = ts.getClosest( $cell, 'tr' );
|
|
1329
1347
|
cell = $cell[ 0 ]; // in case cell is a jQuery object
|
|
1330
1348
|
// tbody may not exist if update is initialized while tbody is removed for processing
|
|
1331
1349
|
if ( $tbodies.length && tbodyIndex >= 0 ) {
|
|
@@ -1380,11 +1398,13 @@
|
|
|
1380
1398
|
if ( valid ) {
|
|
1381
1399
|
$row = $( $row );
|
|
1382
1400
|
c.$tbodies.append( $row );
|
|
1383
|
-
} else if (
|
|
1401
|
+
} else if (
|
|
1402
|
+
!$row ||
|
|
1384
1403
|
// row is a jQuery object?
|
|
1385
1404
|
!( $row instanceof jQuery ) ||
|
|
1386
1405
|
// row contained in the table?
|
|
1387
|
-
(
|
|
1406
|
+
( ts.getClosest( $row, 'table' )[ 0 ] !== c.table )
|
|
1407
|
+
) {
|
|
1388
1408
|
if ( c.debug ) {
|
|
1389
1409
|
console.error( 'addRows method requires (1) a jQuery selector reference to rows that have already ' +
|
|
1390
1410
|
'been added to the table, or (2) row HTML string to be added to a table with only one tbody' );
|
|
@@ -1531,10 +1551,10 @@
|
|
|
1531
1551
|
notMultiSort = !event[ c.sortMultiSortKey ],
|
|
1532
1552
|
table = c.table,
|
|
1533
1553
|
len = c.$headers.length,
|
|
1534
|
-
// get current column index
|
|
1535
|
-
|
|
1554
|
+
// get current column index; *always* stored on th/td
|
|
1555
|
+
$th = ts.getHeaderCell( $( cell ) ),
|
|
1556
|
+
col = parseInt( $th.attr( 'data-column' ), 10 ),
|
|
1536
1557
|
order = c.sortVars[ col ].order;
|
|
1537
|
-
|
|
1538
1558
|
// Only call sortStart if sorting is enabled
|
|
1539
1559
|
c.$table.triggerHandler( 'sortStart', table );
|
|
1540
1560
|
// get current column sort order
|
|
@@ -2058,7 +2078,7 @@
|
|
|
2058
2078
|
if ( !widget.priority ) { widget.priority = 10; }
|
|
2059
2079
|
widgets[ indx ] = widget;
|
|
2060
2080
|
} else if ( c.debug ) {
|
|
2061
|
-
console.warn( '"' + names[ indx ] + '" widget code
|
|
2081
|
+
console.warn( '"' + names[ indx ] + '" was enabled, but the widget code has not been loaded!' );
|
|
2062
2082
|
}
|
|
2063
2083
|
}
|
|
2064
2084
|
// sort widgets by priority
|
|
@@ -2130,6 +2150,7 @@
|
|
|
2130
2150
|
c.widgetInit[ name[ index ] ] = false;
|
|
2131
2151
|
}
|
|
2132
2152
|
}
|
|
2153
|
+
c.$table.triggerHandler( 'widgetRemoveEnd', table );
|
|
2133
2154
|
},
|
|
2134
2155
|
|
|
2135
2156
|
refreshWidgets : function( table, doAll, dontapply ) {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀██
|
|
5
5
|
█████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
|
|
6
6
|
*/
|
|
7
|
-
/*! tablesorter (FORK) - updated
|
|
7
|
+
/*! tablesorter (FORK) - updated 09-27-2017 (v2.29.0)*/
|
|
8
8
|
/* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
|
|
9
9
|
(function(factory) {
|
|
10
10
|
if (typeof define === 'function' && define.amd) {
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
|
|
134
134
|
})(jQuery, window, document);
|
|
135
135
|
|
|
136
|
-
/*! Widget: uitheme - updated
|
|
136
|
+
/*! Widget: uitheme - updated 9/27/2017 (v2.29.0) */
|
|
137
137
|
;(function ($) {
|
|
138
138
|
'use strict';
|
|
139
139
|
var ts = $.tablesorter || {};
|
|
@@ -150,10 +150,10 @@
|
|
|
150
150
|
active : '', // applied when column is sorted
|
|
151
151
|
hover : '', // custom css required - a defined bootstrap style may not override other classes
|
|
152
152
|
// icon class names
|
|
153
|
-
icons : '', // add 'icon-white' to make them white; this icon class is added to the <i> in the header
|
|
153
|
+
icons : '', // add 'bootstrap-icon-white' to make them white; this icon class is added to the <i> in the header
|
|
154
154
|
iconSortNone : 'bootstrap-icon-unsorted', // class name added to icon when column is not sorted
|
|
155
|
-
iconSortAsc : '
|
|
156
|
-
iconSortDesc : '
|
|
155
|
+
iconSortAsc : 'glyphicon glyphicon-chevron-up', // class name added to icon when column has ascending sort
|
|
156
|
+
iconSortDesc : 'glyphicon glyphicon-chevron-down', // class name added to icon when column has descending sort
|
|
157
157
|
filterRow : '', // filter row class
|
|
158
158
|
footerRow : '',
|
|
159
159
|
footerCells : '',
|
|
@@ -2336,7 +2336,7 @@
|
|
|
2336
2336
|
|
|
2337
2337
|
})( jQuery );
|
|
2338
2338
|
|
|
2339
|
-
/*! Widget: stickyHeaders - updated
|
|
2339
|
+
/*! Widget: stickyHeaders - updated 9/27/2017 (v2.29.0) *//*
|
|
2340
2340
|
* Requires tablesorter v2.8+ and jQuery 1.4.3+
|
|
2341
2341
|
* by Rob Garrison
|
|
2342
2342
|
*/
|
|
@@ -2488,10 +2488,14 @@
|
|
|
2488
2488
|
});
|
|
2489
2489
|
}
|
|
2490
2490
|
},
|
|
2491
|
+
getLeftPosition = function() {
|
|
2492
|
+
return $attach.length ?
|
|
2493
|
+
parseInt($attach.css('padding-left'), 10) || 0 :
|
|
2494
|
+
$table.offset().left - parseInt($table.css('margin-left'), 10) - $(window).scrollLeft();
|
|
2495
|
+
},
|
|
2491
2496
|
resizeHeader = function() {
|
|
2492
2497
|
$stickyWrap.css({
|
|
2493
|
-
left :
|
|
2494
|
-
$table.offset().left - parseInt($table.css('margin-left'), 10) - $xScroll.scrollLeft(),
|
|
2498
|
+
left : getLeftPosition(),
|
|
2495
2499
|
width: $table.outerWidth()
|
|
2496
2500
|
});
|
|
2497
2501
|
setWidth( $table, $stickyTable );
|
|
@@ -2501,10 +2505,10 @@
|
|
|
2501
2505
|
if (!$table.is(':visible')) { return; } // fixes #278
|
|
2502
2506
|
// Detect nested tables - fixes #724
|
|
2503
2507
|
nestedStickyTop = $nestedSticky.length ? $nestedSticky.offset().top - $yScroll.scrollTop() + $nestedSticky.height() : 0;
|
|
2504
|
-
var
|
|
2508
|
+
var tmp,
|
|
2509
|
+
offset = $table.offset(),
|
|
2505
2510
|
stickyOffset = getStickyOffset(c, wo),
|
|
2506
2511
|
yWindow = $.isWindow( $yScroll[0] ), // $.isWindow needs jQuery 1.4.3
|
|
2507
|
-
xWindow = $.isWindow( $xScroll[0] ),
|
|
2508
2512
|
attachTop = $attach.length ?
|
|
2509
2513
|
( yWindow ? $yScroll.scrollTop() : $yScroll.offset().top ) :
|
|
2510
2514
|
$yScroll.scrollTop(),
|
|
@@ -2512,19 +2516,27 @@
|
|
|
2512
2516
|
scrollTop = attachTop + stickyOffset + nestedStickyTop - captionHeight,
|
|
2513
2517
|
tableHeight = $table.height() - ($stickyWrap.height() + ($tfoot.height() || 0)) - captionHeight,
|
|
2514
2518
|
isVisible = ( scrollTop > offset.top ) && ( scrollTop < offset.top + tableHeight ) ? 'visible' : 'hidden',
|
|
2519
|
+
state = isVisible === 'visible' ? ts.css.stickyVis : ts.css.stickyHide,
|
|
2520
|
+
needsUpdating = !$stickyWrap.hasClass( state ),
|
|
2515
2521
|
cssSettings = { visibility : isVisible };
|
|
2516
2522
|
if ($attach.length) {
|
|
2523
|
+
// attached sticky headers always need updating
|
|
2524
|
+
needsUpdating = true;
|
|
2517
2525
|
cssSettings.top = yWindow ? scrollTop - $attach.offset().top : $attach.scrollTop();
|
|
2518
2526
|
}
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2527
|
+
// adjust when scrolling horizontally - fixes issue #143
|
|
2528
|
+
tmp = getLeftPosition();
|
|
2529
|
+
if (tmp !== parseInt($stickyWrap.css('left'), 10)) {
|
|
2530
|
+
needsUpdating = true;
|
|
2531
|
+
cssSettings.left = tmp;
|
|
2522
2532
|
}
|
|
2523
2533
|
cssSettings.top = ( cssSettings.top || 0 ) + stickyOffset + nestedStickyTop;
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2534
|
+
if (needsUpdating) {
|
|
2535
|
+
$stickyWrap
|
|
2536
|
+
.removeClass( ts.css.stickyVis + ' ' + ts.css.stickyHide )
|
|
2537
|
+
.addClass( state )
|
|
2538
|
+
.css(cssSettings);
|
|
2539
|
+
}
|
|
2528
2540
|
if (isVisible !== laststate || resizing) {
|
|
2529
2541
|
// make sure the column widths match
|
|
2530
2542
|
resizeHeader();
|
|
@@ -2643,7 +2655,7 @@
|
|
|
2643
2655
|
|
|
2644
2656
|
})(jQuery, window);
|
|
2645
2657
|
|
|
2646
|
-
/*! Widget: resizable - updated
|
|
2658
|
+
/*! Widget: resizable - updated 9/27/2017 (v2.29.0) */
|
|
2647
2659
|
/*jshint browser:true, jquery:true, unused:false */
|
|
2648
2660
|
;(function ($, window) {
|
|
2649
2661
|
'use strict';
|
|
@@ -2970,6 +2982,7 @@
|
|
|
2970
2982
|
vars.$target = vars.$next = null;
|
|
2971
2983
|
// will update stickyHeaders, just in case, see #912
|
|
2972
2984
|
c.$table.triggerHandler('stickyHeadersUpdate');
|
|
2985
|
+
c.$table.triggerHandler('resizableComplete');
|
|
2973
2986
|
}
|
|
2974
2987
|
};
|
|
2975
2988
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* Widget: columnSelector (responsive table widget) - updated
|
|
1
|
+
/* Widget: columnSelector (responsive table widget) - updated 9/27/2017 (v2.29.0) *//*
|
|
2
2
|
* Requires tablesorter v2.8+ and jQuery 1.7+
|
|
3
3
|
* by Justin Hallett & Rob Garrison
|
|
4
4
|
*/
|
|
@@ -269,16 +269,16 @@
|
|
|
269
269
|
c.$table.triggerHandler(wo.columnSelector_updated);
|
|
270
270
|
}
|
|
271
271
|
},
|
|
272
|
-
addSelectors: function( prefix, column ) {
|
|
272
|
+
addSelectors: function( wo, prefix, column ) {
|
|
273
273
|
var array = [],
|
|
274
274
|
temp = ' col:nth-child(' + column + ')';
|
|
275
275
|
array.push(prefix + temp + ',' + prefix + '_extra_table' + temp);
|
|
276
|
-
temp = ' tr:not(.
|
|
276
|
+
temp = ' tr:not(.' + wo.columnSelector_classHasSpan + ') th[data-column="' + ( column - 1 ) + '"]';
|
|
277
277
|
array.push(prefix + temp + ',' + prefix + '_extra_table' + temp);
|
|
278
|
-
temp = ' tr:not(.
|
|
278
|
+
temp = ' tr:not(.' + wo.columnSelector_classHasSpan + ') td:nth-child(' + column + ')';
|
|
279
279
|
array.push(prefix + temp + ',' + prefix + '_extra_table' + temp);
|
|
280
280
|
// for other cells in colspan columns
|
|
281
|
-
temp = ' tr td:not(' + prefix + '
|
|
281
|
+
temp = ' tr td:not(' + prefix + wo.columnSelector_classHasSpan + ')[data-column="' + (column - 1) + '"]';
|
|
282
282
|
array.push(prefix + temp + ',' + prefix + '_extra_table' + temp);
|
|
283
283
|
return array;
|
|
284
284
|
},
|
|
@@ -301,7 +301,7 @@
|
|
|
301
301
|
isHidden[ column + 1 ] = ts.getData( c.$headerIndexed[ column ], col, 'columnSelector' ) === 'false';
|
|
302
302
|
if ( isHidden[ column + 1 ] ) {
|
|
303
303
|
// hide columnSelector false column (in auto mode)
|
|
304
|
-
mediaAll = mediaAll.concat( tsColSel.addSelectors( prefix, column + 1 ) );
|
|
304
|
+
mediaAll = mediaAll.concat( tsColSel.addSelectors( wo, prefix, column + 1 ) );
|
|
305
305
|
}
|
|
306
306
|
}
|
|
307
307
|
}
|
|
@@ -313,7 +313,7 @@
|
|
|
313
313
|
column = parseInt($(this).attr('data-column'), 10) + 1;
|
|
314
314
|
// don't reveal columnSelector false columns
|
|
315
315
|
if ( !isHidden[ column ] ) {
|
|
316
|
-
breaks = breaks.concat( tsColSel.addSelectors( prefix, column ) );
|
|
316
|
+
breaks = breaks.concat( tsColSel.addSelectors( wo, prefix, column ) );
|
|
317
317
|
}
|
|
318
318
|
});
|
|
319
319
|
if (breaks.length) {
|
|
@@ -343,7 +343,7 @@
|
|
|
343
343
|
colSel.$container.find('input[data-column]').filter('[data-column!="auto"]').each(function(){
|
|
344
344
|
if (!this.checked) {
|
|
345
345
|
column = parseInt( $(this).attr('data-column'), 10 ) + 1;
|
|
346
|
-
styles = styles.concat( tsColSel.addSelectors( prefix, column ) );
|
|
346
|
+
styles = styles.concat( tsColSel.addSelectors( wo, prefix, column ) );
|
|
347
347
|
}
|
|
348
348
|
$(this).toggleClass( wo.columnSelector_cssChecked, this.checked );
|
|
349
349
|
});
|
|
@@ -373,10 +373,10 @@
|
|
|
373
373
|
if ( span > 1 ) {
|
|
374
374
|
hasSpans = true;
|
|
375
375
|
$cells.eq( index )
|
|
376
|
-
.addClass( c.namespace.slice( 1 ) + '
|
|
376
|
+
.addClass( c.namespace.slice( 1 ) + 'columnselector' + wo.columnSelector_classHasSpan )
|
|
377
377
|
.attr( 'data-col-span', span );
|
|
378
378
|
// add data-column values
|
|
379
|
-
ts.computeColumnIndex( $cells.eq( index ).parent().addClass(
|
|
379
|
+
ts.computeColumnIndex( $cells.eq( index ).parent().addClass( wo.columnSelector_classHasSpan ) );
|
|
380
380
|
}
|
|
381
381
|
}
|
|
382
382
|
// only add resize end if using media queries
|
|
@@ -402,7 +402,9 @@
|
|
|
402
402
|
autoModeOn = wo.columnSelector_mediaquery && colSel.auto,
|
|
403
403
|
// find all header/footer cells in case a regular column follows a colspan; see #1238
|
|
404
404
|
$headers = c.$table.children( 'thead, tfoot' ).children().children()
|
|
405
|
-
.add( $(c.namespace + '_extra_table').children( 'thead, tfoot' ).children().children() )
|
|
405
|
+
.add( $(c.namespace + '_extra_table').children( 'thead, tfoot' ).children().children() )
|
|
406
|
+
// include grouping widget headers (they have colspans!)
|
|
407
|
+
.add( c.$table.find( '.group-header' ).children() ),
|
|
406
408
|
len = $headers.length;
|
|
407
409
|
for ( index = 0; index < len; index++ ) {
|
|
408
410
|
$cell = $headers.eq(index);
|
|
@@ -422,7 +424,7 @@
|
|
|
422
424
|
$cell.addClass( filtered );
|
|
423
425
|
}
|
|
424
426
|
} else if ( typeof colSel.states[ col ] !== 'undefined' && colSel.states[ col ] !== null ) {
|
|
425
|
-
$cell.toggleClass( filtered, !colSel.states[ col ] );
|
|
427
|
+
$cell.toggleClass( filtered, !autoModeOn && !colSel.states[ col ] );
|
|
426
428
|
}
|
|
427
429
|
}
|
|
428
430
|
},
|
|
@@ -533,6 +535,8 @@
|
|
|
533
535
|
// class name added to checked checkboxes - this fixes an issue with Chrome not updating FontAwesome
|
|
534
536
|
// applied icons; use this class name (input.checked) instead of input:checked
|
|
535
537
|
columnSelector_cssChecked : 'checked',
|
|
538
|
+
// class name added to rows that have a span (e.g. grouping widget & other rows inside the tbody)
|
|
539
|
+
columnSelector_classHasSpan : 'hasSpan',
|
|
536
540
|
// event triggered when columnSelector completes
|
|
537
541
|
columnSelector_updated : 'columnUpdate'
|
|
538
542
|
},
|
|
@@ -546,10 +550,10 @@
|
|
|
546
550
|
if ( csel.$popup ) { csel.$popup.empty(); }
|
|
547
551
|
csel.$style.remove();
|
|
548
552
|
csel.$breakpoints.remove();
|
|
549
|
-
$( c.namespace + '
|
|
553
|
+
$( c.namespace + 'columnselector' + wo.columnSelector_classHasSpan )
|
|
554
|
+
.removeClass( wo.filter_filteredRow || 'filtered' );
|
|
550
555
|
c.$table.find('[data-col-span]').each(function(indx, el) {
|
|
551
556
|
var $el = $(el);
|
|
552
|
-
console.log($el, $el.attr('data-col-span'));
|
|
553
557
|
$el.attr('colspan', $el.attr('data-col-span'));
|
|
554
558
|
});
|
|
555
559
|
c.$table.off('updateAll' + namespace + ' update' + namespace);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Widget: grouping - updated
|
|
1
|
+
/*! Widget: grouping - updated 9/27/2017 (v2.29.0) *//*
|
|
2
2
|
* Requires tablesorter v2.8+ and jQuery 1.7+
|
|
3
3
|
* by Rob Garrison
|
|
4
4
|
*/
|
|
@@ -172,7 +172,10 @@
|
|
|
172
172
|
|
|
173
173
|
groupHeaderHTML : function( c, wo, data ) {
|
|
174
174
|
var name = ( data.currentGroup || '' ).toString().replace(/</g, '<').replace(/>/g, '>');
|
|
175
|
-
return '<tr class="group-header ' + c.selectorRemove.slice(1) +
|
|
175
|
+
return '<tr class="group-header ' + c.selectorRemove.slice(1) + ' ' +
|
|
176
|
+
// prevent grouping row from being hidden by the columnSelector;
|
|
177
|
+
// classHasSpan option added 2.29.0
|
|
178
|
+
( wo.columnSelector_classHasSpan || 'hasSpan' ) +
|
|
176
179
|
'" unselectable="on" ' + ( c.tabIndex ? 'tabindex="0" ' : '' ) + 'data-group-index="' +
|
|
177
180
|
data.groupIndex + '">' +
|
|
178
181
|
'<td colspan="' + c.columns + '">' +
|
|
@@ -221,6 +224,10 @@
|
|
|
221
224
|
}
|
|
222
225
|
}
|
|
223
226
|
}
|
|
227
|
+
if ( ts.hasWidget( c.table, 'columnSelector' ) ) {
|
|
228
|
+
// make sure to handle the colspan adjustments of the grouping rows
|
|
229
|
+
ts.columnSelector.setUpColspan( c, wo );
|
|
230
|
+
}
|
|
224
231
|
},
|
|
225
232
|
insertGroupHeader: function( c, wo, data ) {
|
|
226
233
|
var $header = c.$headerIndexed[ data.column ],
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Widget: output - updated
|
|
1
|
+
/*! Widget: output - updated 9/27/2017 (v2.29.0) *//*
|
|
2
2
|
* Requires tablesorter v2.8+ and jQuery 1.7+
|
|
3
3
|
* Modified from:
|
|
4
4
|
* HTML Table to CSV: http://www.kunalbabre.com/projects/table2CSV.php (License unknown?)
|
|
@@ -131,8 +131,10 @@
|
|
|
131
131
|
return data;
|
|
132
132
|
},
|
|
133
133
|
|
|
134
|
-
|
|
135
|
-
|
|
134
|
+
// optional vars $rows and dump added by TheSin to make
|
|
135
|
+
// process callable via callback for ajaxPager
|
|
136
|
+
process : function(c, wo, $rows, dump) {
|
|
137
|
+
var mydata, $this, headers, csvData, len, rowsLen, tmp,
|
|
136
138
|
hasStringify = window.JSON && JSON.hasOwnProperty('stringify'),
|
|
137
139
|
indx = 0,
|
|
138
140
|
tmpData = (wo.output_separator || ',').toLowerCase(),
|
|
@@ -162,7 +164,8 @@
|
|
|
162
164
|
headers = output.processRow(c, $this, true, outputJSON);
|
|
163
165
|
|
|
164
166
|
// all tbody rows - do not include widget added rows (e.g. grouping widget headers)
|
|
165
|
-
|
|
167
|
+
if ( !$rows )
|
|
168
|
+
$rows = $el.children('tbody').children('tr').not(c.selectorRemove);
|
|
166
169
|
|
|
167
170
|
// check for a filter callback function first! because
|
|
168
171
|
// /^f/.test(function(){ console.log('test'); }) is TRUE! (function is converted to a string)
|
|
@@ -210,10 +213,15 @@
|
|
|
210
213
|
mydata = outputArray && hasStringify ? JSON.stringify(tmpData) : tmpData.join('\n');
|
|
211
214
|
}
|
|
212
215
|
|
|
216
|
+
if (dump) {
|
|
217
|
+
return mydata;
|
|
218
|
+
}
|
|
219
|
+
|
|
213
220
|
// callback; if true returned, continue processing
|
|
214
221
|
if ($.isFunction(wo.output_callback)) {
|
|
215
222
|
tmp = wo.output_callback(c, mydata, c.pager && c.pager.ajaxObject.url || null);
|
|
216
223
|
if ( tmp === false ) {
|
|
224
|
+
output.busy = false;
|
|
217
225
|
return;
|
|
218
226
|
} else if ( typeof tmp === 'string' ) {
|
|
219
227
|
mydata = tmp;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Widget: resizable - updated
|
|
1
|
+
/*! Widget: resizable - updated 9/27/2017 (v2.29.0) */
|
|
2
2
|
/*jshint browser:true, jquery:true, unused:false */
|
|
3
3
|
;(function ($, window) {
|
|
4
4
|
'use strict';
|
|
@@ -325,6 +325,7 @@
|
|
|
325
325
|
vars.$target = vars.$next = null;
|
|
326
326
|
// will update stickyHeaders, just in case, see #912
|
|
327
327
|
c.$table.triggerHandler('stickyHeadersUpdate');
|
|
328
|
+
c.$table.triggerHandler('resizableComplete');
|
|
328
329
|
}
|
|
329
330
|
};
|
|
330
331
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Widget: scroller - updated
|
|
1
|
+
/*! Widget: scroller - updated 9/27/2017 (v2.29.0) *//*
|
|
2
2
|
Copyright (C) 2011 T. Connell & Associates, Inc.
|
|
3
3
|
|
|
4
4
|
Dual-licensed under the MIT and GPL licenses
|
|
@@ -273,6 +273,9 @@
|
|
|
273
273
|
$tableWrap
|
|
274
274
|
.off( 'scroll' + namespace )
|
|
275
275
|
.on( 'scroll' + namespace, function() {
|
|
276
|
+
// Save position
|
|
277
|
+
wo.scroller_saved[0] = $tableWrap.scrollLeft();
|
|
278
|
+
wo.scroller_saved[1] = $tableWrap.scrollTop();
|
|
276
279
|
if ( wo.scroller_jumpToHeader ) {
|
|
277
280
|
var pos = $win.scrollTop() - $hdr.offset().top;
|
|
278
281
|
if ( $( this ).scrollTop() !== 0 && pos < tbHt && pos > 0 ) {
|
|
@@ -841,6 +844,7 @@
|
|
|
841
844
|
// adjust caption height, see #1202
|
|
842
845
|
$fixedColumn.find('caption').height( wo.scroller_$header.find( 'caption' ).height() );
|
|
843
846
|
|
|
847
|
+
$tableWrap.scroll();
|
|
844
848
|
wo.scroller_isBusy = false;
|
|
845
849
|
|
|
846
850
|
},
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Widget: sort2Hash (BETA) - updated
|
|
1
|
+
/*! Widget: sort2Hash (BETA) - updated 9/27/2017 (v2.29.0) */
|
|
2
2
|
/* Requires tablesorter v2.8+ and jQuery 1.7+
|
|
3
3
|
* by Rob Garrison
|
|
4
4
|
*/
|
|
@@ -225,8 +225,27 @@
|
|
|
225
225
|
hash = s2h.cleanHash( c, wo, component, hash );
|
|
226
226
|
str += value;
|
|
227
227
|
});
|
|
228
|
-
|
|
229
|
-
|
|
228
|
+
|
|
229
|
+
var hashChar = wo.sort2Hash_hash;
|
|
230
|
+
// Combine new hash with any existing hashes
|
|
231
|
+
var newHash = (
|
|
232
|
+
( window.location.hash || '' ).replace( hashChar, '' ).length ?
|
|
233
|
+
hash : hashChar
|
|
234
|
+
) + str;
|
|
235
|
+
|
|
236
|
+
if (wo.sort2Hash_replaceHistory) {
|
|
237
|
+
var baseUrl = window.location.href.split(hashChar)[0];
|
|
238
|
+
// Ensure that there is a leading hash character
|
|
239
|
+
var firstChar = newHash[0];
|
|
240
|
+
if (firstChar != hashChar) {
|
|
241
|
+
newHash = hashChar + newHash;
|
|
242
|
+
}
|
|
243
|
+
// Update URL in browser
|
|
244
|
+
window.location.replace(baseUrl + newHash);
|
|
245
|
+
} else {
|
|
246
|
+
// Add updated hash
|
|
247
|
+
window.location.hash = newHash;
|
|
248
|
+
}
|
|
230
249
|
}
|
|
231
250
|
};
|
|
232
251
|
|
|
@@ -239,6 +258,7 @@
|
|
|
239
258
|
sort2Hash_headerTextAttr : 'data-header', // data attribute containing alternate header text
|
|
240
259
|
sort2Hash_directionText : [ 0, 1 ], // [ 'asc', 'desc' ],
|
|
241
260
|
sort2Hash_overrideSaveSort : false, // if true, override saveSort widget if saved sort available
|
|
261
|
+
sort2Hash_replaceHistory : false, // if true, hash changes are not saved to browser history
|
|
242
262
|
|
|
243
263
|
// this option > table ID > table index on page
|
|
244
264
|
sort2Hash_tableId : null,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Widget: stickyHeaders - updated
|
|
1
|
+
/*! Widget: stickyHeaders - updated 9/27/2017 (v2.29.0) *//*
|
|
2
2
|
* Requires tablesorter v2.8+ and jQuery 1.4.3+
|
|
3
3
|
* by Rob Garrison
|
|
4
4
|
*/
|
|
@@ -150,10 +150,14 @@
|
|
|
150
150
|
});
|
|
151
151
|
}
|
|
152
152
|
},
|
|
153
|
+
getLeftPosition = function() {
|
|
154
|
+
return $attach.length ?
|
|
155
|
+
parseInt($attach.css('padding-left'), 10) || 0 :
|
|
156
|
+
$table.offset().left - parseInt($table.css('margin-left'), 10) - $(window).scrollLeft();
|
|
157
|
+
},
|
|
153
158
|
resizeHeader = function() {
|
|
154
159
|
$stickyWrap.css({
|
|
155
|
-
left :
|
|
156
|
-
$table.offset().left - parseInt($table.css('margin-left'), 10) - $xScroll.scrollLeft(),
|
|
160
|
+
left : getLeftPosition(),
|
|
157
161
|
width: $table.outerWidth()
|
|
158
162
|
});
|
|
159
163
|
setWidth( $table, $stickyTable );
|
|
@@ -163,10 +167,10 @@
|
|
|
163
167
|
if (!$table.is(':visible')) { return; } // fixes #278
|
|
164
168
|
// Detect nested tables - fixes #724
|
|
165
169
|
nestedStickyTop = $nestedSticky.length ? $nestedSticky.offset().top - $yScroll.scrollTop() + $nestedSticky.height() : 0;
|
|
166
|
-
var
|
|
170
|
+
var tmp,
|
|
171
|
+
offset = $table.offset(),
|
|
167
172
|
stickyOffset = getStickyOffset(c, wo),
|
|
168
173
|
yWindow = $.isWindow( $yScroll[0] ), // $.isWindow needs jQuery 1.4.3
|
|
169
|
-
xWindow = $.isWindow( $xScroll[0] ),
|
|
170
174
|
attachTop = $attach.length ?
|
|
171
175
|
( yWindow ? $yScroll.scrollTop() : $yScroll.offset().top ) :
|
|
172
176
|
$yScroll.scrollTop(),
|
|
@@ -174,19 +178,27 @@
|
|
|
174
178
|
scrollTop = attachTop + stickyOffset + nestedStickyTop - captionHeight,
|
|
175
179
|
tableHeight = $table.height() - ($stickyWrap.height() + ($tfoot.height() || 0)) - captionHeight,
|
|
176
180
|
isVisible = ( scrollTop > offset.top ) && ( scrollTop < offset.top + tableHeight ) ? 'visible' : 'hidden',
|
|
181
|
+
state = isVisible === 'visible' ? ts.css.stickyVis : ts.css.stickyHide,
|
|
182
|
+
needsUpdating = !$stickyWrap.hasClass( state ),
|
|
177
183
|
cssSettings = { visibility : isVisible };
|
|
178
184
|
if ($attach.length) {
|
|
185
|
+
// attached sticky headers always need updating
|
|
186
|
+
needsUpdating = true;
|
|
179
187
|
cssSettings.top = yWindow ? scrollTop - $attach.offset().top : $attach.scrollTop();
|
|
180
188
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
189
|
+
// adjust when scrolling horizontally - fixes issue #143
|
|
190
|
+
tmp = getLeftPosition();
|
|
191
|
+
if (tmp !== parseInt($stickyWrap.css('left'), 10)) {
|
|
192
|
+
needsUpdating = true;
|
|
193
|
+
cssSettings.left = tmp;
|
|
184
194
|
}
|
|
185
195
|
cssSettings.top = ( cssSettings.top || 0 ) + stickyOffset + nestedStickyTop;
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
196
|
+
if (needsUpdating) {
|
|
197
|
+
$stickyWrap
|
|
198
|
+
.removeClass( ts.css.stickyVis + ' ' + ts.css.stickyHide )
|
|
199
|
+
.addClass( state )
|
|
200
|
+
.css(cssSettings);
|
|
201
|
+
}
|
|
190
202
|
if (isVisible !== laststate || resizing) {
|
|
191
203
|
// make sure the column widths match
|
|
192
204
|
resizeHeader();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! Widget: uitheme - updated
|
|
1
|
+
/*! Widget: uitheme - updated 9/27/2017 (v2.29.0) */
|
|
2
2
|
;(function ($) {
|
|
3
3
|
'use strict';
|
|
4
4
|
var ts = $.tablesorter || {};
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
active : '', // applied when column is sorted
|
|
16
16
|
hover : '', // custom css required - a defined bootstrap style may not override other classes
|
|
17
17
|
// icon class names
|
|
18
|
-
icons : '', // add 'icon-white' to make them white; this icon class is added to the <i> in the header
|
|
18
|
+
icons : '', // add 'bootstrap-icon-white' to make them white; this icon class is added to the <i> in the header
|
|
19
19
|
iconSortNone : 'bootstrap-icon-unsorted', // class name added to icon when column is not sorted
|
|
20
|
-
iconSortAsc : '
|
|
21
|
-
iconSortDesc : '
|
|
20
|
+
iconSortAsc : 'glyphicon glyphicon-chevron-up', // class name added to icon when column has ascending sort
|
|
21
|
+
iconSortDesc : 'glyphicon glyphicon-chevron-down', // class name added to icon when column has descending sort
|
|
22
22
|
filterRow : '', // filter row class
|
|
23
23
|
footerRow : '',
|
|
24
24
|
footerCells : '',
|
|
@@ -56,8 +56,8 @@
|
|
|
56
56
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAA20lEQVR4AWJABpKSkoxALCstLb0aUAsZaCAMhVEY6B0amx8YZWDDEDSBa2AGe7XeIiAAClYwVGBvsAcIllsf/mvcC9DgOOd8h90fxWvngVEUbZIkuWRZZlE8eQjcisgZMM9zi+LJ6ZfwegmWZflZDugdHMfxTcGqql7TNBlUB/QObtv2VBSFrev6OY7jngzFk9OT/fn73fWYpqnlXNyXDMWT0zuYx/Bvel9ej+LJ6R08DMOu67q7DkTkrSA5vYPneV71fX/QASdTkJwezhs0TfMARn0wMDDGXEPgF4oijqwM5YjNAAAAAElFTkSuQmCC);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
/* white unsorted icon */
|
|
60
|
-
.tablesorter-bootstrap .icon-white.bootstrap-icon-unsorted {
|
|
59
|
+
/* white unsorted icon; updated to use bootstrap-icon-white - see #1432 */
|
|
60
|
+
.tablesorter-bootstrap .bootstrap-icon-white.bootstrap-icon-unsorted {
|
|
61
61
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAAe0lEQVR4AbXQoRWDMBiF0Sh2QLAAQ8SxJGugWSA6A2STW1PxTsnB9cnkfuYvv8OGC1t5G3Y0QMP+Bm857keAdQIzWBP3+Bw4MADQE18B6/etRnCV/w9nnGuLezfAmXhABGtAGIkruvk6auIFRwQJDywllsEAjCecB20GP59BQQ+gtlRLAAAAAElFTkSuQmCC);
|
|
62
62
|
}
|
|
63
63
|
|
|
@@ -53,8 +53,8 @@
|
|
|
53
53
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAA20lEQVR4AWJABpKSkoxALCstLb0aUAsZaCAMhVEY6B0amx8YZWDDEDSBa2AGe7XeIiAAClYwVGBvsAcIllsf/mvcC9DgOOd8h90fxWvngVEUbZIkuWRZZlE8eQjcisgZMM9zi+LJ6ZfwegmWZflZDugdHMfxTcGqql7TNBlUB/QObtv2VBSFrev6OY7jngzFk9OT/fn73fWYpqnlXNyXDMWT0zuYx/Bvel9ej+LJ6R08DMOu67q7DkTkrSA5vYPneV71fX/QASdTkJwezhs0TfMARn0wMDDGXEPgF4oijqwM5YjNAAAAAElFTkSuQmCC);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
/* white unsorted icon */
|
|
57
|
-
.tablesorter-bootstrap .icon-white.bootstrap-icon-unsorted {
|
|
56
|
+
/* white unsorted icon; updated to use bootstrap-icon-white - see #1432 */
|
|
57
|
+
.tablesorter-bootstrap .bootstrap-icon-white.bootstrap-icon-unsorted {
|
|
58
58
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAAe0lEQVR4AbXQoRWDMBiF0Sh2QLAAQ8SxJGugWSA6A2STW1PxTsnB9cnkfuYvv8OGC1t5G3Y0QMP+Bm857keAdQIzWBP3+Bw4MADQE18B6/etRnCV/w9nnGuLezfAmXhABGtAGIkruvk6auIFRwQJDywllsEAjCecB20GP59BQQ+gtlRLAAAAAElFTkSuQmCC);
|
|
59
59
|
}
|
|
60
60
|
|
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.
|
|
4
|
+
version: 1.24.0
|
|
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-10-09 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: railties
|
|
@@ -183,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
183
183
|
version: '0'
|
|
184
184
|
requirements: []
|
|
185
185
|
rubyforge_project:
|
|
186
|
-
rubygems_version: 2.6.
|
|
186
|
+
rubygems_version: 2.6.13
|
|
187
187
|
signing_key:
|
|
188
188
|
specification_version: 4
|
|
189
189
|
summary: Simple integration of jquery-tablesorter (Mottie's fork) into the Rails asset
|