jquery-tablesorter 1.20.8 → 1.21.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2e9e9be444cd61966e902ca61fb38e30d870fd22
4
- data.tar.gz: 9db7ce839fc6b20fedc6478afbd4723fa19bdea8
3
+ metadata.gz: f3731f02067ca05fe70bd8cffb0b88cc8609550c
4
+ data.tar.gz: 9e80942394a066cff780da926ff0a8da5a65630b
5
5
  SHA512:
6
- metadata.gz: 033fa5e5d2e2ed0c26c3b0fc3473d0ee551a958e49fddd61c5305f5869a955d47a098b1a259da69cceb56ad4613c4d281f7c8fdf65a1993dc8fbb27cc45389e1
7
- data.tar.gz: 7479a1ad0d1598784e2b74678fe76e56b34b519515a2713c6661a71152d5f9e15f9b44d229949c2341e2df9311655e89637188a37ef2449dbe5c2210d5be4785
6
+ metadata.gz: 471a7f37eda5c4a93fac02ede5f1420a3ecd473733a87966666d8ea6ff6cc8c66f4e25692b883d192ac45d5a6fde7cd45681145a685d8c64c5e7c6b12270bc99
7
+ data.tar.gz: 93cdb689d1ea90b88621a25b376d5f1daf6a4a0c21b8c71f9f7d1bb62250bae33479a1312b9e51c25dc24404bccdab3497b36d8af4c4b90f5f69cea05982ef5e
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  Simple integration of jquery-tablesorter into the asset pipeline.
6
6
 
7
- Current tablesorter version: 2.25.8 (4/11/2016), [documentation]
7
+ Current tablesorter version: 2.26.0 (5/1/2016), [documentation]
8
8
 
9
9
  Any issue associated with the js/css files, please report to [Mottie's fork].
10
10
 
@@ -1,7 +1,7 @@
1
1
  module JqueryTablesorter
2
2
  MAJOR = 1
3
- MINOR = 20
4
- TINY = 8
3
+ MINOR = 21
4
+ TINY = 0
5
5
 
6
6
  VERSION = [MAJOR, MINOR, TINY].compact.join('.')
7
7
  end
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * tablesorter (FORK) pager plugin
3
- * updated 11/22/2015 (v2.24.6)
3
+ * updated 5/1/2016 (v2.26.0)
4
4
  */
5
5
  /*jshint browser:true, jquery:true, unused:false */
6
6
  ;(function($) {
@@ -167,6 +167,7 @@
167
167
  c = table.config,
168
168
  namespace = c.namespace + 'pager',
169
169
  sz = parsePageSize( p, p.size, 'get' ); // don't allow dividing by zero
170
+ if (sz === 'all') { sz = p.totalRows; }
170
171
  if (p.countChildRows) { t[ t.length ] = c.cssChildRow; }
171
172
  p.totalPages = Math.ceil( p.totalRows / sz ); // needed for "pageSize" method
172
173
  c.totalRows = p.totalRows;
@@ -175,10 +176,10 @@
175
176
  c.filteredRows = p.filteredRows;
176
177
  p.filteredPages = Math.ceil( p.filteredRows / sz ) || 0;
177
178
  if ( getTotalPages( table, p ) >= 0 ) {
178
- t = (p.size * p.page > p.filteredRows) && completed;
179
+ t = (sz * p.page > p.filteredRows) && completed;
179
180
  p.page = (t) ? p.pageReset || 0 : p.page;
180
- p.startRow = (t) ? p.size * p.page + 1 : (p.filteredRows === 0 ? 0 : p.size * p.page + 1);
181
- p.endRow = Math.min( p.filteredRows, p.totalRows, p.size * ( p.page + 1 ) );
181
+ p.startRow = (t) ? sz * p.page + 1 : (p.filteredRows === 0 ? 0 : sz * p.page + 1);
182
+ p.endRow = Math.min( p.filteredRows, p.totalRows, sz * ( p.page + 1 ) );
182
183
  $out = p.$container.find(p.cssPageDisplay);
183
184
  // form the output string (can now get a new output string from the server)
184
185
  s = ( p.ajaxData && p.ajaxData.output ? p.ajaxData.output || p.output : p.output )
@@ -216,7 +217,7 @@
216
217
  // rebind startRow/page inputs
217
218
  $out.find('.ts-startRow, .ts-page').unbind('change' + namespace).bind('change' + namespace, function(){
218
219
  var v = $(this).val(),
219
- pg = $(this).hasClass('ts-startRow') ? Math.floor( v / p.size ) + 1 : v;
220
+ pg = $(this).hasClass('ts-startRow') ? Math.floor( v / sz ) + 1 : v;
220
221
  c.$table.triggerHandler('pageSet' + namespace, [ pg ]);
221
222
  });
222
223
  }
@@ -232,7 +233,7 @@
232
233
  if (p.savePages && ts.storage) {
233
234
  ts.storage(table, p.storageKey, {
234
235
  page : p.page,
235
- size : p.size
236
+ size : sz === p.totalRows ? 'all' : sz
236
237
  });
237
238
  }
238
239
  }
@@ -307,7 +308,8 @@
307
308
  h = $.data(table, 'pagerSavedHeight');
308
309
  if (h) {
309
310
  d = h - $b.height();
310
- if ( d > 5 && $.data(table, 'pagerLastSize') === p.size && $b.children('tr:visible').length < p.size ) {
311
+ if ( d > 5 && $.data(table, 'pagerLastSize') === p.size &&
312
+ $b.children('tr:visible').length < (p.size === 'all' ? p.totalRows : p.size) ) {
311
313
  $b.append('<tr class="pagerSavedHeightSpacer ' + c.selectorRemove.slice(1) + '" style="height:' + d + 'px;"></tr>');
312
314
  }
313
315
  }
@@ -322,7 +324,7 @@
322
324
  if (!$b.children('tr:visible').length) {
323
325
  $b.append('<tr class="pagerSavedHeightSpacer ' + c.selectorRemove.slice(1) + '"><td>&nbsp</td></tr>');
324
326
  }
325
- h = $b.children('tr').eq(0).height() * p.size;
327
+ h = $b.children('tr').eq(0).height() * (p.size === 'all' ? p.totalRows : p.size);
326
328
  $.data(table, 'pagerSavedHeight', h);
327
329
  fixHeight(table, p);
328
330
  $.data(table, 'pagerLastSize', p.size);
@@ -335,8 +337,9 @@
335
337
  c = table.config,
336
338
  rows = c.$tbodies.eq(0).children('tr'),
337
339
  l = rows.length,
338
- s = ( p.page * p.size ),
339
- e = s + p.size,
340
+ sz = p.size === 'all' ? p.totalRows : p.size,
341
+ s = ( p.page * sz ),
342
+ e = s + sz,
340
343
  f = c.widgetOptions && c.widgetOptions.filter_filteredRow || 'filtered',
341
344
  last = 0, // for cache indexing
342
345
  j = 0; // size counter
@@ -371,7 +374,7 @@
371
374
 
372
375
  hideRowsSetup = function(table, p){
373
376
  p.size = parsePageSize( p, p.$size.val(), 'get' );
374
- p.$size.val( parsePageSize( p, p.size, 'set' ) );
377
+ p.$size.val( p.size );
375
378
  $.data(table, 'pagerLastSize', p.size);
376
379
  pagerArrows( table, p );
377
380
  if ( !p.removeRows ) {
@@ -392,7 +395,7 @@
392
395
  table.config.$tbodies.eq(0).empty();
393
396
 
394
397
  // ajaxProcessing result: [ total, rows, headers ]
395
- var i, j, t, hsh, $f, $sh, $headers, $h, icon, th, d, l, rr_count, len,
398
+ var i, j, t, hsh, $f, $sh, $headers, $h, icon, th, d, l, rr_count, len, sz,
396
399
  c = table.config,
397
400
  $table = c.$table,
398
401
  tds = '',
@@ -483,9 +486,10 @@
483
486
  if (c.showProcessing) {
484
487
  ts.isProcessing(table); // remove loading icon
485
488
  }
489
+ sz = parsePageSize( p, p.size, 'get' );
486
490
  // make sure last pager settings are saved, prevents multiple server side calls with
487
491
  // the same parameters
488
- p.totalPages = Math.ceil( p.totalRows / parsePageSize( p, p.size, 'get' ) );
492
+ p.totalPages = sz === 'all' ? 1 : Math.ceil( p.totalRows / sz );
489
493
  p.last.totalRows = p.totalRows;
490
494
  p.last.currentFilters = p.currentFilters;
491
495
  p.last.sortList = (c.sortList || []).join(',');
@@ -555,6 +559,7 @@
555
559
  url = (p.ajaxUrl) ? p.ajaxUrl
556
560
  // allow using "{page+1}" in the url string to switch to a non-zero based index
557
561
  .replace(/\{page([\-+]\d+)?\}/, function(s, n){ return p.page + (n ? parseInt(n, 10) : 0); })
562
+ // this will pass "all" to server when size is set to "all"
558
563
  .replace(/\{size\}/g, p.size) : '',
559
564
  sortList = c.sortList,
560
565
  filterList = p.currentFilters || $(table).data('lastSearch') || [],
@@ -598,8 +603,8 @@
598
603
  c = table.config,
599
604
  f = c.$table.hasClass('hasFilters'),
600
605
  l = rows && rows.length || 0, // rows may be undefined
601
- s = ( p.page * p.size ),
602
- e = p.size;
606
+ e = p.size === 'all' ? p.totalRows : p.size,
607
+ s = ( p.page * e );
603
608
  if ( l < 1 ) {
604
609
  if (c.debug) {
605
610
  console.warn('Pager: >> No rows for pager to render');
@@ -659,7 +664,7 @@
659
664
  $.data(table, 'pagerLastPage', p.page);
660
665
  $.data(table, 'pagerLastSize', p.size);
661
666
  p.page = 0;
662
- p.size = p.totalRows;
667
+ p.size = 'all';
663
668
  p.totalPages = 1;
664
669
  $(table)
665
670
  .addClass('pagerDisabled')
@@ -777,13 +782,10 @@
777
782
 
778
783
  // set to either set or get value
779
784
  parsePageSize = function( p, size, mode ) {
780
- var s = parseInt( size, 10 ) || p.size || p.settings.size || 10,
781
- // if select does not contain an "all" option, use size
782
- setAll = p.$size.find( 'option[value="all"]' ).length ? 'all' : p.totalRows;
785
+ var s = parseInt( size, 10 ) || p.size || p.settings.size || 10;
783
786
  return /all/i.test( size ) || s === p.totalRows ?
784
787
  // "get" to get `p.size` or "set" to set `p.$size.val()`
785
- ( mode === 'get' ? p.totalRows : setAll ) :
786
- ( mode === 'get' ? s : p.size );
788
+ 'all' : ( mode === 'get' ? s : p.size );
787
789
  },
788
790
 
789
791
  parsePageNumber = function( table, p ) {
@@ -799,8 +801,8 @@
799
801
  p.$size.val( parsePageSize( p, p.size, 'set' ) );
800
802
  $.data(table, 'pagerLastPage', parsePageNumber( table, p ) );
801
803
  $.data(table, 'pagerLastSize', p.size);
802
- p.totalPages = Math.ceil( p.totalRows / p.size );
803
- p.filteredPages = Math.ceil( p.filteredRows / p.size );
804
+ p.totalPages = p.size === 'all' ? 1 : Math.ceil( p.totalRows / p.size );
805
+ p.filteredPages = p.size === 'all' ? 1 : Math.ceil( p.filteredRows / p.size );
804
806
  moveToPage(table, p);
805
807
  },
806
808
 
@@ -872,9 +874,9 @@
872
874
  p.isDisabled = false;
873
875
  p.page = $.data(table, 'pagerLastPage') || p.page || 0;
874
876
  size = p.$size.find('option[selected]').val();
875
- p.size = $.data(table, 'pagerLastSize') || parsePageSize( p, p.size, 'get' );
876
- p.$size.val( parsePageSize( p, p.size, 'set' ) ); // set page size
877
- p.totalPages = Math.ceil( getTotalPages( table, p ) / p.size );
877
+ p.size = $.data(table, 'pagerLastSize') || parsePageSize( p, size, 'get' );
878
+ p.$size.val( p.size ); // set page size
879
+ p.totalPages = p.size === 'all' ? 1 : Math.ceil( getTotalPages( table, p ) / p.size );
878
880
  // if table id exists, include page display with aria info
879
881
  if ( table.id ) {
880
882
  info = table.id + '_pager_info';
@@ -900,7 +902,7 @@
900
902
  c.rowsCopy = rows;
901
903
  p.totalRows = p.countChildRows ? c.$tbodies.eq(0).children('tr').length : rows.length;
902
904
  p.size = $.data(table, 'pagerLastSize') || p.size || p.settings.size || 10;
903
- p.totalPages = Math.ceil( p.totalRows / p.size );
905
+ p.totalPages = p.size === 'all' ? 1 : Math.ceil( p.totalRows / p.size );
904
906
  renderTable(table, rows, p);
905
907
  // update display here in case all rows are removed
906
908
  updatePageDisplay(table, p, false);
@@ -911,7 +913,7 @@
911
913
  return this.each(function() {
912
914
  // check if tablesorter has initialized
913
915
  if (!(this.config && this.hasInitialized)) { return; }
914
- var t, ctrls, fxn,
916
+ var t, ctrls, fxn, size,
915
917
  table = this,
916
918
  c = table.config,
917
919
  wo = c.widgetOptions,
@@ -931,10 +933,10 @@
931
933
  if (p.savePages && ts.storage) {
932
934
  t = ts.storage(table, p.storageKey) || {}; // fixes #387
933
935
  p.page = isNaN(t.page) ? p.page : t.page;
934
- p.size = ( isNaN(t.size) ? p.size : t.size ) || p.settings.size || 10;
936
+ p.size = t.size === 'all' ? t.size : ( isNaN( t.size ) ? p.size : t.size ) || p.setSize || 10;
935
937
  $.data(table, 'pagerLastSize', p.size);
938
+ pager.find(p.cssPageSize).val(p.size);
936
939
  }
937
-
938
940
  // skipped rows
939
941
  p.regexRows = new RegExp('(' + (wo.filter_filteredRow || 'filtered') + '|' + c.selectorRemove.slice(1) + '|' + c.cssChildRow + ')');
940
942
 
@@ -980,7 +982,7 @@
980
982
  if ( !table || triggered || p.ajax ) { return; }
981
983
  var $rows = c.$tbodies.eq(0).children('tr').not(c.selectorRemove);
982
984
  p.totalRows = $rows.length - ( p.countChildRows ? 0 : $rows.filter('.' + c.cssChildRow).length );
983
- p.totalPages = Math.ceil( p.totalRows / p.size );
985
+ p.totalPages = p.size === 'all' ? 1 : Math.ceil( p.totalRows / p.size );
984
986
  if ($rows.length && c.rowsCopy && c.rowsCopy.length === 0) {
985
987
  // make a copy of all table rows once the cache has been built
986
988
  updateCache(table);
@@ -4,7 +4,7 @@
4
4
  ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀██
5
5
  █████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
6
6
  */
7
- /*! tablesorter (FORK) - updated 04-11-2016 (v2.25.8)*/
7
+ /*! tablesorter (FORK) - updated 05-01-2016 (v2.26.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($) {
18
18
 
19
- /*! TableSorter (FORK) v2.25.8 *//*
19
+ /*! TableSorter (FORK) v2.26.0 *//*
20
20
  * Client-side table sorting with ease!
21
21
  * @requires jQuery v1.2.6+
22
22
  *
@@ -39,7 +39,7 @@
39
39
  'use strict';
40
40
  var ts = $.tablesorter = {
41
41
 
42
- version : '2.25.8',
42
+ version : '2.26.0',
43
43
 
44
44
  parsers : [],
45
45
  widgets : [],
@@ -3104,7 +3104,7 @@
3104
3104
 
3105
3105
  })(jQuery);
3106
3106
 
3107
- /*! Widget: filter - updated 4/1/2016 (v2.25.7) *//*
3107
+ /*! Widget: filter - updated 4/29/2016 (v2.25.9) *//*
3108
3108
  * Requires tablesorter v2.8+ and jQuery 1.7+
3109
3109
  * by Rob Garrison
3110
3110
  */
@@ -3183,6 +3183,7 @@
3183
3183
  .unbind( events.replace( ts.regex.spaces, ' ' ) )
3184
3184
  // remove the filter row even if refreshing, because the column might have been moved
3185
3185
  .find( '.' + tscss.filterRow ).remove();
3186
+ wo.filter_initialized = false;
3186
3187
  if ( refreshing ) { return; }
3187
3188
  for ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
3188
3189
  $tbody = ts.processTbody( table, $tbodies.eq( tbodyIndex ), true ); // remove tbody
@@ -3455,7 +3456,7 @@
3455
3456
  return null;
3456
3457
  }
3457
3458
  },
3458
- init: function( table, c, wo ) {
3459
+ init: function( table ) {
3459
3460
  // filter language options
3460
3461
  ts.language = $.extend( true, {}, {
3461
3462
  to : 'to',
@@ -3463,7 +3464,9 @@
3463
3464
  and : 'and'
3464
3465
  }, ts.language );
3465
3466
 
3466
- var options, string, txt, $header, column, filters, val, fxn, noSelect;
3467
+ var options, string, txt, $header, column, val, fxn, noSelect,
3468
+ c = table.config,
3469
+ wo = c.widgetOptions;
3467
3470
  c.$table.addClass( 'hasFilters' );
3468
3471
  c.lastSearch = [];
3469
3472
 
@@ -3651,22 +3654,7 @@
3651
3654
  c.$table
3652
3655
  .unbind( txt.replace( ts.regex.spaces, ' ' ) )
3653
3656
  .bind( txt, function() {
3654
- // redefine 'wo' as it does not update properly inside this callback
3655
- var wo = this.config.widgetOptions;
3656
- filters = tsf.setDefaults( table, c, wo ) || [];
3657
- if ( filters.length ) {
3658
- // prevent delayInit from triggering a cache build if filters are empty
3659
- if ( !( c.delayInit && filters.join( '' ) === '' ) ) {
3660
- ts.setFilters( table, filters, true );
3661
- }
3662
- }
3663
- c.$table.triggerHandler( 'filterFomatterUpdate' );
3664
- // trigger init after setTimeout to prevent multiple filterStart/End/Init triggers
3665
- setTimeout( function() {
3666
- if ( !wo.filter_initialized ) {
3667
- tsf.filterInitComplete( c );
3668
- }
3669
- }, 100 );
3657
+ tsf.completeInit( this );
3670
3658
  });
3671
3659
  // if filter widget is added after pager has initialized; then set filter init flag
3672
3660
  if ( c.pager && c.pager.initialized && !wo.filter_initialized ) {
@@ -3674,8 +3662,30 @@
3674
3662
  setTimeout( function() {
3675
3663
  tsf.filterInitComplete( c );
3676
3664
  }, 100 );
3665
+ } else if ( !wo.filter_initialized ) {
3666
+ tsf.completeInit( table );
3667
+ }
3668
+ },
3669
+ completeInit: function( table ) {
3670
+ // redefine 'c' & 'wo' so they update properly inside this callback
3671
+ var c = table.config,
3672
+ wo = c.widgetOptions,
3673
+ filters = tsf.setDefaults( table, c, wo ) || [];
3674
+ if ( filters.length ) {
3675
+ // prevent delayInit from triggering a cache build if filters are empty
3676
+ if ( !( c.delayInit && filters.join( '' ) === '' ) ) {
3677
+ ts.setFilters( table, filters, true );
3678
+ }
3677
3679
  }
3680
+ c.$table.triggerHandler( 'filterFomatterUpdate' );
3681
+ // trigger init after setTimeout to prevent multiple filterStart/End/Init triggers
3682
+ setTimeout( function() {
3683
+ if ( !wo.filter_initialized ) {
3684
+ tsf.filterInitComplete( c );
3685
+ }
3686
+ }, 100 );
3678
3687
  },
3688
+
3679
3689
  // $cell parameter, but not the config, is passed to the filter_formatters,
3680
3690
  // so we have to work with it instead
3681
3691
  formatterUpdated: function( $cell, column ) {
@@ -4921,7 +4931,7 @@
4921
4931
 
4922
4932
  })( jQuery );
4923
4933
 
4924
- /*! Widget: stickyHeaders - updated 4/1/2016 (v2.25.7) *//*
4934
+ /*! Widget: stickyHeaders - updated 5/1/2016 (v2.26.0) *//*
4925
4935
  * Requires tablesorter v2.8+ and jQuery 1.4.3+
4926
4936
  * by Rob Garrison
4927
4937
  */
@@ -5085,12 +5095,14 @@
5085
5095
  var offset = $table.offset(),
5086
5096
  yWindow = $.isWindow( $yScroll[0] ), // $.isWindow needs jQuery 1.4.3
5087
5097
  xWindow = $.isWindow( $xScroll[0] ),
5088
- // scrollTop = ( $attach.length ? $attach.offset().top : $yScroll.scrollTop() ) + stickyOffset + nestedStickyTop,
5089
- scrollTop = ( $attach.length ? ( yWindow ? $yScroll.scrollTop() : $yScroll.offset().top ) : $yScroll.scrollTop() ) + stickyOffset + nestedStickyTop,
5090
- tableHeight = $table.height() - ($stickyWrap.height() + ($tfoot.height() || 0)),
5098
+ attachTop = $attach.length ?
5099
+ ( yWindow ? $yScroll.scrollTop() : $yScroll.offset().top ) :
5100
+ $yScroll.scrollTop(),
5101
+ captionHeight = wo.stickyHeaders_includeCaption ? 0 : $table.children( 'caption' ).height() || 0,
5102
+ scrollTop = attachTop + stickyOffset + nestedStickyTop - captionHeight,
5103
+ tableHeight = $table.height() - ($stickyWrap.height() + ($tfoot.height() || 0)) - captionHeight,
5091
5104
  isVisible = ( scrollTop > offset.top ) && ( scrollTop < offset.top + tableHeight ) ? 'visible' : 'hidden',
5092
5105
  cssSettings = { visibility : isVisible };
5093
-
5094
5106
  if ($attach.length) {
5095
5107
  cssSettings.top = yWindow ? scrollTop - $attach.offset().top : $attach.scrollTop();
5096
5108
  }
@@ -1,4 +1,4 @@
1
- /*! TableSorter (FORK) v2.25.8 *//*
1
+ /*! TableSorter (FORK) v2.26.0 *//*
2
2
  * Client-side table sorting with ease!
3
3
  * @requires jQuery v1.2.6+
4
4
  *
@@ -21,7 +21,7 @@
21
21
  'use strict';
22
22
  var ts = $.tablesorter = {
23
23
 
24
- version : '2.25.8',
24
+ version : '2.26.0',
25
25
 
26
26
  parsers : [],
27
27
  widgets : [],
@@ -4,7 +4,7 @@
4
4
  ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀██
5
5
  █████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
6
6
  */
7
- /*! tablesorter (FORK) - updated 04-11-2016 (v2.25.8)*/
7
+ /*! tablesorter (FORK) - updated 05-01-2016 (v2.26.0)*/
8
8
  /* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
9
9
  (function(factory) {
10
10
  if (typeof define === 'function' && define.amd) {
@@ -372,7 +372,7 @@
372
372
 
373
373
  })(jQuery);
374
374
 
375
- /*! Widget: filter - updated 4/1/2016 (v2.25.7) *//*
375
+ /*! Widget: filter - updated 4/29/2016 (v2.25.9) *//*
376
376
  * Requires tablesorter v2.8+ and jQuery 1.7+
377
377
  * by Rob Garrison
378
378
  */
@@ -451,6 +451,7 @@
451
451
  .unbind( events.replace( ts.regex.spaces, ' ' ) )
452
452
  // remove the filter row even if refreshing, because the column might have been moved
453
453
  .find( '.' + tscss.filterRow ).remove();
454
+ wo.filter_initialized = false;
454
455
  if ( refreshing ) { return; }
455
456
  for ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
456
457
  $tbody = ts.processTbody( table, $tbodies.eq( tbodyIndex ), true ); // remove tbody
@@ -723,7 +724,7 @@
723
724
  return null;
724
725
  }
725
726
  },
726
- init: function( table, c, wo ) {
727
+ init: function( table ) {
727
728
  // filter language options
728
729
  ts.language = $.extend( true, {}, {
729
730
  to : 'to',
@@ -731,7 +732,9 @@
731
732
  and : 'and'
732
733
  }, ts.language );
733
734
 
734
- var options, string, txt, $header, column, filters, val, fxn, noSelect;
735
+ var options, string, txt, $header, column, val, fxn, noSelect,
736
+ c = table.config,
737
+ wo = c.widgetOptions;
735
738
  c.$table.addClass( 'hasFilters' );
736
739
  c.lastSearch = [];
737
740
 
@@ -919,22 +922,7 @@
919
922
  c.$table
920
923
  .unbind( txt.replace( ts.regex.spaces, ' ' ) )
921
924
  .bind( txt, function() {
922
- // redefine 'wo' as it does not update properly inside this callback
923
- var wo = this.config.widgetOptions;
924
- filters = tsf.setDefaults( table, c, wo ) || [];
925
- if ( filters.length ) {
926
- // prevent delayInit from triggering a cache build if filters are empty
927
- if ( !( c.delayInit && filters.join( '' ) === '' ) ) {
928
- ts.setFilters( table, filters, true );
929
- }
930
- }
931
- c.$table.triggerHandler( 'filterFomatterUpdate' );
932
- // trigger init after setTimeout to prevent multiple filterStart/End/Init triggers
933
- setTimeout( function() {
934
- if ( !wo.filter_initialized ) {
935
- tsf.filterInitComplete( c );
936
- }
937
- }, 100 );
925
+ tsf.completeInit( this );
938
926
  });
939
927
  // if filter widget is added after pager has initialized; then set filter init flag
940
928
  if ( c.pager && c.pager.initialized && !wo.filter_initialized ) {
@@ -942,8 +930,30 @@
942
930
  setTimeout( function() {
943
931
  tsf.filterInitComplete( c );
944
932
  }, 100 );
933
+ } else if ( !wo.filter_initialized ) {
934
+ tsf.completeInit( table );
935
+ }
936
+ },
937
+ completeInit: function( table ) {
938
+ // redefine 'c' & 'wo' so they update properly inside this callback
939
+ var c = table.config,
940
+ wo = c.widgetOptions,
941
+ filters = tsf.setDefaults( table, c, wo ) || [];
942
+ if ( filters.length ) {
943
+ // prevent delayInit from triggering a cache build if filters are empty
944
+ if ( !( c.delayInit && filters.join( '' ) === '' ) ) {
945
+ ts.setFilters( table, filters, true );
946
+ }
945
947
  }
948
+ c.$table.triggerHandler( 'filterFomatterUpdate' );
949
+ // trigger init after setTimeout to prevent multiple filterStart/End/Init triggers
950
+ setTimeout( function() {
951
+ if ( !wo.filter_initialized ) {
952
+ tsf.filterInitComplete( c );
953
+ }
954
+ }, 100 );
946
955
  },
956
+
947
957
  // $cell parameter, but not the config, is passed to the filter_formatters,
948
958
  // so we have to work with it instead
949
959
  formatterUpdated: function( $cell, column ) {
@@ -2189,7 +2199,7 @@
2189
2199
 
2190
2200
  })( jQuery );
2191
2201
 
2192
- /*! Widget: stickyHeaders - updated 4/1/2016 (v2.25.7) *//*
2202
+ /*! Widget: stickyHeaders - updated 5/1/2016 (v2.26.0) *//*
2193
2203
  * Requires tablesorter v2.8+ and jQuery 1.4.3+
2194
2204
  * by Rob Garrison
2195
2205
  */
@@ -2353,12 +2363,14 @@
2353
2363
  var offset = $table.offset(),
2354
2364
  yWindow = $.isWindow( $yScroll[0] ), // $.isWindow needs jQuery 1.4.3
2355
2365
  xWindow = $.isWindow( $xScroll[0] ),
2356
- // scrollTop = ( $attach.length ? $attach.offset().top : $yScroll.scrollTop() ) + stickyOffset + nestedStickyTop,
2357
- scrollTop = ( $attach.length ? ( yWindow ? $yScroll.scrollTop() : $yScroll.offset().top ) : $yScroll.scrollTop() ) + stickyOffset + nestedStickyTop,
2358
- tableHeight = $table.height() - ($stickyWrap.height() + ($tfoot.height() || 0)),
2366
+ attachTop = $attach.length ?
2367
+ ( yWindow ? $yScroll.scrollTop() : $yScroll.offset().top ) :
2368
+ $yScroll.scrollTop(),
2369
+ captionHeight = wo.stickyHeaders_includeCaption ? 0 : $table.children( 'caption' ).height() || 0,
2370
+ scrollTop = attachTop + stickyOffset + nestedStickyTop - captionHeight,
2371
+ tableHeight = $table.height() - ($stickyWrap.height() + ($tfoot.height() || 0)) - captionHeight,
2359
2372
  isVisible = ( scrollTop > offset.top ) && ( scrollTop < offset.top + tableHeight ) ? 'visible' : 'hidden',
2360
2373
  cssSettings = { visibility : isVisible };
2361
-
2362
2374
  if ($attach.length) {
2363
2375
  cssSettings.top = yWindow ? scrollTop - $attach.offset().top : $attach.scrollTop();
2364
2376
  }
@@ -1,4 +1,4 @@
1
- /*! Parser: input & select - updated 1/15/2016 (v2.25.2) *//*
1
+ /*! Parser: input & select - updated 4/29/2016 (v2.25.9) *//*
2
2
  * for jQuery 1.7+ & tablesorter 2.7.11+
3
3
  * Demo: http://mottie.github.com/tablesorter/docs/example-widget-grouping.html
4
4
  */
@@ -52,7 +52,7 @@
52
52
  is : function() {
53
53
  return false;
54
54
  },
55
- format : function( txt, table, cell, cellIndex ) {
55
+ format : function( txt, table, cell ) {
56
56
  var $cell = $( cell ),
57
57
  wo = table.config.widgetOptions,
58
58
  // returning plain language here because this is what is shown in the
@@ -128,7 +128,8 @@
128
128
  }
129
129
  },
130
130
  updateHeaderCheckbox = function( $table, checkboxClass ) {
131
- var $rows = $table.children( 'tbody' ).children( ':visible' ), // (include child rows?)
131
+ var ua = window.navigator.userAgent,
132
+ $rows = $table.children( 'tbody' ).children( ':visible' ), // (include child rows?)
132
133
  len = $rows.length;
133
134
  // set indeterminate state on header checkbox
134
135
  $table.children( 'thead' ).find( 'input[type="checkbox"]' ).each( function() {
@@ -139,6 +140,8 @@
139
140
  this.checked = allChecked;
140
141
  this.indeterminate = false;
141
142
  } else {
143
+ // needed for IE
144
+ this.checked = !(ua.indexOf('Trident/') > -1 || ua.indexOf('Edge/') > -1);
142
145
  this.indeterminate = true;
143
146
  }
144
147
  });
@@ -221,7 +224,7 @@
221
224
  $( this )
222
225
  .off( namespace )
223
226
  .on( 'tablesorter-ready' + namespace, function() {
224
- var checkboxClass, $rows, len,
227
+ var checkboxClass,
225
228
  $table = $( this ),
226
229
  c = $table.length && $table[ 0 ].config;
227
230
  if ( !$.isEmptyObject( c ) ) {
@@ -235,8 +238,10 @@
235
238
  .children( 'thead' )
236
239
  .off( namespace )
237
240
  // modified from http://jsfiddle.net/abkNM/6163/
238
- .on( 'change' + namespace, 'input[type="checkbox"]', function( event ) {
239
- var undef, onlyVisible, column, $target, isParsed, $row, checkboxClass,
241
+ // click needed for IE; a change isn't fired when going from an indeterminate checkbox to
242
+ // either checked or unchecked
243
+ .on( 'click' + namespace + ' change' + namespace, 'input[type="checkbox"]', function( event ) {
244
+ var undef, onlyVisible, column, $target, isParsed, checkboxClass,
240
245
  $checkbox = $( this ),
241
246
  $table = $checkbox.closest( 'table' ),
242
247
  c = $table.length && $table[ 0 ].config,
@@ -252,22 +257,21 @@
252
257
  .children( ':nth-child(' + ( column + 1 ) + ')' )
253
258
  .find( 'input[type="checkbox"]' )
254
259
  .prop( 'checked', isChecked );
255
- if ( !isParsed ) {
256
- // add checkbox class names
257
- checkboxClass = c.checkboxClass || 'checked';
258
- $target.each(function(){
259
- $row = $(this).closest('tr');
260
- toggleRowClass( $(this).closest( 'tr' ), checkboxClass, column, isChecked );
261
- });
262
- updateHeaderCheckbox( $table, checkboxClass );
263
- updateServer( event, $table, $target );
264
- $table[ 0 ].tablesorterBusy = false;
265
- } else {
260
+ // add checkbox class names to row
261
+ checkboxClass = c.checkboxClass || 'checked';
262
+ $target.each( function() {
263
+ toggleRowClass( $( this ).closest( 'tr' ), checkboxClass, column, isChecked );
264
+ });
265
+ updateHeaderCheckbox( $table, checkboxClass );
266
+ if ( isParsed ) {
266
267
  // only update cache if checkboxes are being sorted
267
268
  $.tablesorter.update( c, undef, function() {
268
269
  updateServer( event, $table, $target );
269
270
  $table[ 0 ].tablesorterBusy = false;
270
271
  });
272
+ } else {
273
+ updateServer( event, $table, $target );
274
+ $table[ 0 ].tablesorterBusy = false;
271
275
  }
272
276
  // needed for IE8
273
277
  return true;
@@ -1,4 +1,4 @@
1
- /* Widget: columnSelector (responsive table widget) - updated 2/15/2016 (v2.25.4) *//*
1
+ /* Widget: columnSelector (responsive table widget) - updated 4/29/2016 (v2.25.9) *//*
2
2
  * Requires tablesorter v2.8+ and jQuery 1.7+
3
3
  * by Justin Hallett & Rob Garrison
4
4
  */
@@ -67,19 +67,20 @@
67
67
  },
68
68
 
69
69
  refreshColumns: function( c, optName, optState ) {
70
- var i, arry,
70
+ var i, arry, $el, val,
71
+ colSel = c.selector,
71
72
  isArry = $.isArray(optState || optName),
72
73
  wo = c.widgetOptions;
73
74
  // see #798
74
- if (typeof optName !== 'undefined' && c.selector.$container.length) {
75
+ if (typeof optName !== 'undefined' && colSel.$container.length) {
75
76
  // pass "selectors" to update the all of the container contents
76
77
  if ( optName === 'selectors' ) {
77
- c.selector.$container.empty();
78
+ colSel.$container.empty();
78
79
  tsColSel.setupSelector(c, wo);
79
80
  tsColSel.setupBreakpoints(c, wo);
80
81
  // if optState is undefined, maintain the current "auto" state
81
82
  if ( typeof optState === 'undefined' ) {
82
- optState = c.selector.auto;
83
+ optState = colSel.auto;
83
84
  }
84
85
  }
85
86
  // pass an array of column zero-based indexes to turn off auto mode & toggle selected columns
@@ -90,20 +91,24 @@
90
91
  arry[i] = parseInt(v, 10);
91
92
  });
92
93
  for (i = 0; i < c.columns; i++) {
93
- c.selector.$container
94
- .find('input[data-column=' + i + ']')
95
- .prop('checked', $.inArray( i, arry ) >= 0 );
94
+ val = $.inArray( i, arry ) >= 0;
95
+ $el = colSel.$container.find( 'input[data-column=' + i + ']' );
96
+ if ( $el.length ) {
97
+ $el.prop( 'checked', val );
98
+ colSel.states[i] = val;
99
+ }
96
100
  }
97
101
  }
98
102
  // if passing an array, set auto to false to allow manual column selection & update columns
99
103
  // refreshColumns( c, 'auto', true ) === refreshColumns( c, true );
100
- tsColSel
101
- .updateAuto( c, wo, c.selector.$container.find('input[data-column="auto"]')
102
- .prop('checked', optState === true || optName === true || optName === 'auto' && optState !== false) );
104
+ val = optState === true || optName === true || optName === 'auto' && optState !== false;
105
+ $el = colSel.$container.find( 'input[data-column="auto"]' ).prop( 'checked', val );
106
+ tsColSel.updateAuto( c, wo, $el );
103
107
  } else {
104
108
  tsColSel.updateBreakpoints(c, wo);
105
109
  tsColSel.updateCols(c, wo);
106
110
  }
111
+ tsColSel.saveValues( c, wo );
107
112
  tsColSel.adjustColspans( c, wo );
108
113
  },
109
114
 
@@ -224,9 +229,7 @@
224
229
  $(this).prop( 'checked', indx === 'auto' ? colSel.auto : colSel.states[indx] );
225
230
  });
226
231
  }
227
- if (wo.columnSelector_saveColumns && ts.storage) {
228
- ts.storage( c.$table[0], 'tablesorter-columnSelector-auto', { auto : colSel.auto } );
229
- }
232
+ tsColSel.saveValues( c, wo );
230
233
  tsColSel.adjustColspans( c, wo );
231
234
  // trigger columnUpdate if auto is true (it gets skipped in updateCols()
232
235
  if (colSel.auto) {
@@ -270,7 +273,7 @@
270
273
  }
271
274
  }
272
275
  // only 6 breakpoints (same as jQuery Mobile)
273
- for (priority = 0; priority < 6; priority++){
276
+ for (priority = 0; priority < wo.columnSelector_maxPriorities; priority++){
274
277
  /*jshint loopfunc:true */
275
278
  breaks = [];
276
279
  c.$headers.filter('[' + wo.columnSelector_priority + '=' + (priority + 1) + ']').each(function(){
@@ -317,9 +320,7 @@
317
320
  if (colSel.$style) {
318
321
  colSel.$style.prop('disabled', false).text( styles.length ? styles.join(',') + ' { display: none; }' : '' );
319
322
  }
320
- if (wo.columnSelector_saveColumns && ts.storage) {
321
- ts.storage( c.$table[0], 'tablesorter-columnSelector', colSel.states );
322
- }
323
+ tsColSel.saveValues( c, wo );
323
324
  tsColSel.adjustColspans( c, wo );
324
325
  c.$table.triggerHandler(wo.columnSelector_updated);
325
326
  },
@@ -380,14 +381,22 @@
380
381
  }
381
382
  }
382
383
  if ( span ) {
383
- $cell.removeClass( wo.filter_filteredRow )[0].colSpan = span;
384
+ $cell.removeClass( wo.filter_filteredRow || 'filtered' )[0].colSpan = span;
384
385
  } else {
385
- $cell.addClass( wo.filter_filteredRow );
386
+ $cell.addClass( wo.filter_filteredRow || 'filtered' );
386
387
  }
387
388
  }
388
389
  }
389
390
  },
390
391
 
392
+ saveValues : function( c, wo ) {
393
+ if ( wo.columnSelector_saveColumns && ts.storage ) {
394
+ var colSel = c.selector;
395
+ ts.storage( c.$table[0], 'tablesorter-columnSelector-auto', { auto : colSel.auto } );
396
+ ts.storage( c.$table[0], 'tablesorter-columnSelector', colSel.states );
397
+ }
398
+ },
399
+
391
400
  attachTo : function(table, elm) {
392
401
  table = $(table)[0];
393
402
  var colSel, wo, indx,
@@ -462,6 +471,9 @@
462
471
  // see http://view.jquerymobile.com/1.3.2/dist/demos/widgets/table-column-toggle/#Applyingapresetbreakpoint
463
472
  // *** set to false to disable ***
464
473
  columnSelector_breakpoints : [ '20em', '30em', '40em', '50em', '60em', '70em' ],
474
+ // maximum number of priority settings; if this value is changed (especially increased),
475
+ // then make sure to modify the columnSelector_breakpoints - see #1204
476
+ columnSelector_maxPriorities : 6,
465
477
  // data attribute containing column priority
466
478
  // duplicates how jQuery mobile uses priorities:
467
479
  // http://view.jquerymobile.com/1.3.2/dist/demos/widgets/table-column-toggle/
@@ -483,7 +495,7 @@
483
495
  if (csel.$popup) { csel.$popup.empty(); }
484
496
  csel.$style.remove();
485
497
  csel.$breakpoints.remove();
486
- $( c.namespace + 'columnselectorHasSpan' ).removeClass( wo.filter_filteredRow );
498
+ $( c.namespace + 'columnselectorHasSpan' ).removeClass( wo.filter_filteredRow || 'filtered' );
487
499
  c.$table.off('updateAll' + namespace + ' update' + namespace);
488
500
  }
489
501
 
@@ -519,10 +519,10 @@
519
519
  $date.datepicker('setDate', (getdate === '' ? '' : getdate) || null);
520
520
  if (getdate === '') { notrigger = false; }
521
521
  date = $date.datepicker('getDate');
522
- query = date ? ( o.endOfDay && /<=/.test(compare) ? date.setHours(23, 59, 59) : date.getTime() ) || '' : '';
522
+ query = date ? ( o.endOfDay && /<=/.test(compare) ? date.setHours(23, 59, 59, 999) : date.getTime() ) || '' : '';
523
523
  if (date && o.endOfDay && compare === '=') {
524
524
  compare = '';
525
- query += ' - ' + date.setHours(23, 59, 59);
525
+ query += ' - ' + date.setHours(23, 59, 59, 999);
526
526
  notrigger = false;
527
527
  }
528
528
  $cell.find('.dateCompare')
@@ -670,7 +670,7 @@
670
670
  from = $cell.find('.dateFrom').datepicker('getDate'),
671
671
  to = $cell.find('.dateTo').datepicker('getDate');
672
672
  from = validDate(from) ? from.getTime() : '';
673
- to = validDate(to) ? ( o.endOfDay ? to.setHours(23, 59, 59) : to.getTime() ) || '' : '';
673
+ to = validDate(to) ? ( o.endOfDay ? to.setHours(23, 59, 59, 999) : to.getTime() ) || '' : '';
674
674
  range = from ? ( to ? from + ' - ' + to : '>=' + from ) : (to ? '<=' + to : '');
675
675
  $cell.add( $shcell )
676
676
  .find('.dateRange').val(range)
@@ -1,4 +1,4 @@
1
- /*! Widget: filter - updated 4/1/2016 (v2.25.7) *//*
1
+ /*! Widget: filter - updated 4/29/2016 (v2.25.9) *//*
2
2
  * Requires tablesorter v2.8+ and jQuery 1.7+
3
3
  * by Rob Garrison
4
4
  */
@@ -77,6 +77,7 @@
77
77
  .unbind( events.replace( ts.regex.spaces, ' ' ) )
78
78
  // remove the filter row even if refreshing, because the column might have been moved
79
79
  .find( '.' + tscss.filterRow ).remove();
80
+ wo.filter_initialized = false;
80
81
  if ( refreshing ) { return; }
81
82
  for ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
82
83
  $tbody = ts.processTbody( table, $tbodies.eq( tbodyIndex ), true ); // remove tbody
@@ -349,7 +350,7 @@
349
350
  return null;
350
351
  }
351
352
  },
352
- init: function( table, c, wo ) {
353
+ init: function( table ) {
353
354
  // filter language options
354
355
  ts.language = $.extend( true, {}, {
355
356
  to : 'to',
@@ -357,7 +358,9 @@
357
358
  and : 'and'
358
359
  }, ts.language );
359
360
 
360
- var options, string, txt, $header, column, filters, val, fxn, noSelect;
361
+ var options, string, txt, $header, column, val, fxn, noSelect,
362
+ c = table.config,
363
+ wo = c.widgetOptions;
361
364
  c.$table.addClass( 'hasFilters' );
362
365
  c.lastSearch = [];
363
366
 
@@ -545,22 +548,7 @@
545
548
  c.$table
546
549
  .unbind( txt.replace( ts.regex.spaces, ' ' ) )
547
550
  .bind( txt, function() {
548
- // redefine 'wo' as it does not update properly inside this callback
549
- var wo = this.config.widgetOptions;
550
- filters = tsf.setDefaults( table, c, wo ) || [];
551
- if ( filters.length ) {
552
- // prevent delayInit from triggering a cache build if filters are empty
553
- if ( !( c.delayInit && filters.join( '' ) === '' ) ) {
554
- ts.setFilters( table, filters, true );
555
- }
556
- }
557
- c.$table.triggerHandler( 'filterFomatterUpdate' );
558
- // trigger init after setTimeout to prevent multiple filterStart/End/Init triggers
559
- setTimeout( function() {
560
- if ( !wo.filter_initialized ) {
561
- tsf.filterInitComplete( c );
562
- }
563
- }, 100 );
551
+ tsf.completeInit( this );
564
552
  });
565
553
  // if filter widget is added after pager has initialized; then set filter init flag
566
554
  if ( c.pager && c.pager.initialized && !wo.filter_initialized ) {
@@ -568,8 +556,30 @@
568
556
  setTimeout( function() {
569
557
  tsf.filterInitComplete( c );
570
558
  }, 100 );
559
+ } else if ( !wo.filter_initialized ) {
560
+ tsf.completeInit( table );
571
561
  }
572
562
  },
563
+ completeInit: function( table ) {
564
+ // redefine 'c' & 'wo' so they update properly inside this callback
565
+ var c = table.config,
566
+ wo = c.widgetOptions,
567
+ filters = tsf.setDefaults( table, c, wo ) || [];
568
+ if ( filters.length ) {
569
+ // prevent delayInit from triggering a cache build if filters are empty
570
+ if ( !( c.delayInit && filters.join( '' ) === '' ) ) {
571
+ ts.setFilters( table, filters, true );
572
+ }
573
+ }
574
+ c.$table.triggerHandler( 'filterFomatterUpdate' );
575
+ // trigger init after setTimeout to prevent multiple filterStart/End/Init triggers
576
+ setTimeout( function() {
577
+ if ( !wo.filter_initialized ) {
578
+ tsf.filterInitComplete( c );
579
+ }
580
+ }, 100 );
581
+ },
582
+
573
583
  // $cell parameter, but not the config, is passed to the filter_formatters,
574
584
  // so we have to work with it instead
575
585
  formatterUpdated: function( $cell, column ) {
@@ -1,4 +1,4 @@
1
- /*! Widget: Pager - updated 2/15/2016 (v2.25.4) */
1
+ /*! Widget: Pager - updated 5/1/2016 (v2.26.0) */
2
2
  /* Requires tablesorter v2.8+ and jQuery 1.7+
3
3
  * by Rob Garrison
4
4
  */
@@ -182,8 +182,9 @@
182
182
  if ( wo.pager_savePages && ts.storage ) {
183
183
  t = ts.storage( table, wo.pager_storageKey ) || {}; // fixes #387
184
184
  p.page = ( isNaN( t.page ) ? p.page : t.page ) || p.setPage || 0;
185
- p.size = ( isNaN( t.size ) ? p.size : t.size ) || p.setSize || 10;
185
+ p.size = t.size === 'all' ? t.size : ( isNaN( t.size ) ? p.size : t.size ) || p.setSize || 10;
186
186
  $.data( table, 'pagerLastSize', p.size );
187
+ p.$size.val( p.size );
187
188
  }
188
189
 
189
190
  // skipped rows
@@ -291,7 +292,7 @@
291
292
  var $rows = c.$tbodies.eq( 0 ).children( 'tr' ).not( c.selectorRemove );
292
293
  p.totalRows = $rows.length -
293
294
  ( wo.pager_countChildRows ? 0 : $rows.filter( '.' + c.cssChildRow ).length );
294
- p.totalPages = Math.ceil( p.totalRows / p.size );
295
+ p.totalPages = p.size === 'all' ? 1 : Math.ceil( p.totalRows / p.size );
295
296
  if ( $rows.length && c.rowsCopy && c.rowsCopy.length === 0 ) {
296
297
  // make a copy of all table rows once the cache has been built
297
298
  tsp.updateCache( c );
@@ -443,6 +444,7 @@
443
444
  p = c.pager,
444
445
  namespace = c.namespace + 'pager',
445
446
  sz = tsp.parsePageSize( c, p.size, 'get' ); // don't allow dividing by zero
447
+ if ( sz === 'all' ) { sz = p.totalRows; }
446
448
  if ( wo.pager_countChildRows ) { t[ t.length ] = c.cssChildRow; }
447
449
  p.$size
448
450
  .add( p.$goto )
@@ -456,10 +458,10 @@
456
458
  c.filteredRows = p.filteredRows;
457
459
  p.filteredPages = Math.ceil( p.filteredRows / sz ) || 0;
458
460
  if ( tsp.getTotalPages( c, p ) >= 0 ) {
459
- t = ( p.size * p.page > p.filteredRows ) && completed;
461
+ t = ( sz * p.page > p.filteredRows ) && completed;
460
462
  p.page = t ? wo.pager_pageReset || 0 : p.page;
461
- p.startRow = t ? p.size * p.page + 1 : ( p.filteredRows === 0 ? 0 : p.size * p.page + 1 );
462
- p.endRow = Math.min( p.filteredRows, p.totalRows, p.size * ( p.page + 1 ) );
463
+ p.startRow = t ? sz * p.page + 1 : ( p.filteredRows === 0 ? 0 : sz * p.page + 1 );
464
+ p.endRow = Math.min( p.filteredRows, p.totalRows, sz * ( p.page + 1 ) );
463
465
  $out = p.$container.find( wo.pager_selectors.pageDisplay );
464
466
  // form the output string (can now get a new output string from the server)
465
467
  s = ( p.ajaxData && p.ajaxData.output ? p.ajaxData.output || wo.pager_output : wo.pager_output )
@@ -503,7 +505,7 @@
503
505
  .off( 'change' + namespace )
504
506
  .on( 'change' + namespace, function() {
505
507
  var v = $( this ).val(),
506
- pg = $( this ).hasClass( 'ts-startRow' ) ? Math.floor( v / p.size ) + 1 : v;
508
+ pg = $( this ).hasClass( 'ts-startRow' ) ? Math.floor( v / sz ) + 1 : v;
507
509
  c.$table.triggerHandler( 'pageSet' + namespace, [ pg ] );
508
510
  });
509
511
  }
@@ -519,7 +521,7 @@
519
521
  if ( wo.pager_savePages && ts.storage ) {
520
522
  ts.storage( table, wo.pager_storageKey, {
521
523
  page : p.page,
522
- size : p.size
524
+ size : sz === p.totalRows ? 'all' : sz
523
525
  });
524
526
  }
525
527
  }
@@ -600,7 +602,8 @@
600
602
  h = $.data( table, 'pagerSavedHeight' );
601
603
  if ( h ) {
602
604
  d = h - $b.height();
603
- if ( d > 5 && $.data( table, 'pagerLastSize' ) === p.size && $b.children( 'tr:visible' ).length < p.size ) {
605
+ if ( d > 5 && $.data( table, 'pagerLastSize' ) === p.size &&
606
+ $b.children( 'tr:visible' ).length < ( p.size === 'all' ? p.totalRows : p.size ) ) {
604
607
  $b.append( '<tr class="pagerSavedHeightSpacer ' + c.selectorRemove.slice( 1 ) +
605
608
  '" style="height:' + d + 'px;"></tr>' );
606
609
  }
@@ -611,15 +614,17 @@
611
614
  changeHeight: function( c ) {
612
615
  var h,
613
616
  table = c.table,
617
+ p = c.pager,
618
+ sz = p.size === 'all' ? p.totalRows : p.size,
614
619
  $b = c.$tbodies.eq( 0 );
615
620
  $b.find( 'tr.pagerSavedHeightSpacer' ).remove();
616
621
  if ( !$b.children( 'tr:visible' ).length ) {
617
622
  $b.append( '<tr class="pagerSavedHeightSpacer ' + c.selectorRemove.slice( 1 ) + '"><td>&nbsp</td></tr>' );
618
623
  }
619
- h = $b.children( 'tr' ).eq( 0 ).height() * c.pager.size;
624
+ h = $b.children( 'tr' ).eq( 0 ).height() * sz;
620
625
  $.data( table, 'pagerSavedHeight', h );
621
626
  tsp.fixHeight( c );
622
- $.data( table, 'pagerLastSize', c.pager.size );
627
+ $.data( table, 'pagerLastSize', p.size );
623
628
  },
624
629
 
625
630
  hideRows: function( c ) {
@@ -629,8 +634,9 @@
629
634
  p = c.pager,
630
635
  wo = c.widgetOptions,
631
636
  tbodyLen = c.$tbodies.length,
632
- start = ( p.page * p.size ),
633
- end = start + p.size,
637
+ sz = p.size === 'all' ? p.totalRows : p.size,
638
+ start = ( p.page * sz ),
639
+ end = start + sz,
634
640
  filtr = wo && wo.filter_filteredRow || 'filtered',
635
641
  last = 0, // for cache indexing
636
642
  size = 0; // size counter
@@ -677,7 +683,7 @@
677
683
  namespace = c.namespace + 'pager',
678
684
  size = p.$size.val();
679
685
  p.size = tsp.parsePageSize( c, size, 'get' );
680
- p.$size.val( tsp.parsePageSize( c, p.size, 'set' ) );
686
+ p.$size.val( p.size );
681
687
  $.data( c.table, 'pagerLastSize', p.size );
682
688
  tsp.pagerArrows( c );
683
689
  if ( !c.widgetOptions.pager_removeRows ) {
@@ -701,7 +707,7 @@
701
707
  c.$tbodies.eq( 0 ).empty();
702
708
 
703
709
  // ajaxProcessing result: [ total, rows, headers ]
704
- var i, j, t, hsh, $f, $sh, $headers, $h, icon, th, d, l, rr_count, len,
710
+ var i, j, t, hsh, $f, $sh, $headers, $h, icon, th, d, l, rr_count, len, sz,
705
711
  $table = c.$table,
706
712
  tds = '',
707
713
  result = wo.pager_ajaxProcessing( data, table, xhr ) || [ 0, [] ],
@@ -793,9 +799,10 @@
793
799
  if ( c.showProcessing ) {
794
800
  ts.isProcessing( table ); // remove loading icon
795
801
  }
802
+ sz = tsp.parsePageSize( c, p.size, 'get' );
796
803
  // make sure last pager settings are saved, prevents multiple server side calls with
797
804
  // the same parameters
798
- p.totalPages = Math.ceil( p.totalRows / tsp.parsePageSize( c, p.size, 'get' ) );
805
+ p.totalPages = sz === 'all' ? 1 : Math.ceil( p.totalRows / sz );
799
806
  p.last.totalRows = p.totalRows;
800
807
  p.last.currentFilters = p.currentFilters;
801
808
  p.last.sortList = ( c.sortList || [] ).join( ',' );
@@ -865,6 +872,7 @@
865
872
  url = wo.pager_ajaxUrl ? wo.pager_ajaxUrl
866
873
  // allow using '{page+1}' in the url string to switch to a non-zero based index
867
874
  .replace( /\{page([\-+]\d+)?\}/, function( s, n ) { return p.page + ( n ? parseInt( n, 10 ) : 0 ); })
875
+ // this will pass "all" to server when size is set to "all"
868
876
  .replace( /\{size\}/g, p.size ) : '',
869
877
  sortList = c.sortList,
870
878
  filterList = p.currentFilters || c.$table.data( 'lastSearch' ) || [],
@@ -909,8 +917,8 @@
909
917
  wo = c.widgetOptions,
910
918
  f = c.$table.hasClass('hasFilters'),
911
919
  l = rows && rows.length || 0, // rows may be undefined
912
- s = ( p.page * p.size ),
913
- e = p.size;
920
+ e = p.size === 'all' ? p.totalRows : p.size,
921
+ s = ( p.page * e );
914
922
  if ( l < 1 ) {
915
923
  if ( c.debug ) {
916
924
  console.warn( 'Pager: >> No rows for pager to render' );
@@ -977,7 +985,7 @@
977
985
  $.data( table, 'pagerLastPage', p.page );
978
986
  $.data( table, 'pagerLastSize', p.size );
979
987
  p.page = 0;
980
- p.size = p.totalRows;
988
+ p.size = 'all';
981
989
  p.totalPages = 1;
982
990
  c.$table
983
991
  .addClass( 'pagerDisabled' )
@@ -1106,13 +1114,10 @@
1106
1114
  // set to either set or get value
1107
1115
  parsePageSize: function( c, size, mode ) {
1108
1116
  var p = c.pager,
1109
- s = parseInt( size, 10 ) || p.size || c.widgetOptions.pager_size || 10,
1110
- // if select does not contain an "all" option, use size
1111
- setAll = p.$size.find( 'option[value="all"]' ).length ? 'all' : p.totalRows;
1117
+ s = parseInt( size, 10 ) || p.size || c.widgetOptions.pager_size || 10;
1112
1118
  return /all/i.test( size ) || s === p.totalRows ?
1113
1119
  // "get" to set `p.size` or "set" to set `p.$size.val()`
1114
- ( mode === 'get' ? p.totalRows : setAll ) :
1115
- ( mode === 'get' ? s : p.size );
1120
+ 'all' : ( mode === 'get' ? s : p.size );
1116
1121
  },
1117
1122
 
1118
1123
  parsePageNumber: function( c, p ) {
@@ -1130,8 +1135,8 @@
1130
1135
  p.$size.val( tsp.parsePageSize( c, p.size, 'set' ) );
1131
1136
  $.data( table, 'pagerLastPage', tsp.parsePageNumber( c, p ) );
1132
1137
  $.data( table, 'pagerLastSize', p.size );
1133
- p.totalPages = Math.ceil( p.totalRows / p.size );
1134
- p.filteredPages = Math.ceil( p.filteredRows / p.size );
1138
+ p.totalPages = p.size === 'all' ? 1 : Math.ceil( p.totalRows / p.size );
1139
+ p.filteredPages = p.size === 'all' ? 1 : Math.ceil( p.filteredRows / p.size );
1135
1140
  tsp.moveToPage( c, p, true );
1136
1141
  },
1137
1142
 
@@ -1201,8 +1206,8 @@
1201
1206
  p.page = $.data( table, 'pagerLastPage' ) || p.page || 0;
1202
1207
  size = p.$size.find( 'option[selected]' ).val();
1203
1208
  p.size = $.data( table, 'pagerLastSize' ) || tsp.parsePageSize( c, size, 'get' );
1204
- p.$size.val( tsp.parsePageSize( c, p.size, 'set' ) ); // set page size
1205
- p.totalPages = Math.ceil( tsp.getTotalPages( c, p ) / p.size );
1209
+ p.$size.val( p.size ); // set page size
1210
+ p.totalPages = p.size === 'all' ? 1 : Math.ceil( tsp.getTotalPages( c, p ) / p.size );
1206
1211
  c.$table.removeClass( 'pagerDisabled' );
1207
1212
  // if table id exists, include page display with aria info
1208
1213
  if ( table.id ) {
@@ -1230,7 +1235,7 @@
1230
1235
  c.rowsCopy = rows;
1231
1236
  p.totalRows = wo.pager_countChildRows ? c.$tbodies.eq( 0 ).children( 'tr' ).length : rows.length;
1232
1237
  p.size = $.data( table, 'pagerLastSize' ) || p.size || wo.pager_size || p.setSize || 10;
1233
- p.totalPages = Math.ceil( p.totalRows / p.size );
1238
+ p.totalPages = p.size === 'all' ? 1 : Math.ceil( p.totalRows / p.size );
1234
1239
  tsp.moveToPage( c, p );
1235
1240
  // update display here in case all rows are removed
1236
1241
  tsp.updatePageDisplay( c, false );
@@ -1,4 +1,4 @@
1
- /*! Widget: scroller - updated 4/1/2016 (v2.25.7) *//*
1
+ /*! Widget: scroller - updated 4/29/2016 (v2.25.9) *//*
2
2
  Copyright (C) 2011 T. Connell & Associates, Inc.
3
3
 
4
4
  Dual-licensed under the MIT and GPL licenses
@@ -828,6 +828,9 @@
828
828
 
829
829
  $fixedColumn.removeClass( tscss.scrollerHideElement );
830
830
 
831
+ // adjust caption height, see #1202
832
+ $fixedColumn.find('caption').height( wo.scroller_$header.find( 'caption' ).height() );
833
+
831
834
  wo.scroller_isBusy = false;
832
835
 
833
836
  },
@@ -1,4 +1,4 @@
1
- /*! Widget: stickyHeaders - updated 4/1/2016 (v2.25.7) *//*
1
+ /*! Widget: stickyHeaders - updated 5/1/2016 (v2.26.0) *//*
2
2
  * Requires tablesorter v2.8+ and jQuery 1.4.3+
3
3
  * by Rob Garrison
4
4
  */
@@ -162,12 +162,14 @@
162
162
  var offset = $table.offset(),
163
163
  yWindow = $.isWindow( $yScroll[0] ), // $.isWindow needs jQuery 1.4.3
164
164
  xWindow = $.isWindow( $xScroll[0] ),
165
- // scrollTop = ( $attach.length ? $attach.offset().top : $yScroll.scrollTop() ) + stickyOffset + nestedStickyTop,
166
- scrollTop = ( $attach.length ? ( yWindow ? $yScroll.scrollTop() : $yScroll.offset().top ) : $yScroll.scrollTop() ) + stickyOffset + nestedStickyTop,
167
- tableHeight = $table.height() - ($stickyWrap.height() + ($tfoot.height() || 0)),
165
+ attachTop = $attach.length ?
166
+ ( yWindow ? $yScroll.scrollTop() : $yScroll.offset().top ) :
167
+ $yScroll.scrollTop(),
168
+ captionHeight = wo.stickyHeaders_includeCaption ? 0 : $table.children( 'caption' ).height() || 0,
169
+ scrollTop = attachTop + stickyOffset + nestedStickyTop - captionHeight,
170
+ tableHeight = $table.height() - ($stickyWrap.height() + ($tfoot.height() || 0)) - captionHeight,
168
171
  isVisible = ( scrollTop > offset.top ) && ( scrollTop < offset.top + tableHeight ) ? 'visible' : 'hidden',
169
172
  cssSettings = { visibility : isVisible };
170
-
171
173
  if ($attach.length) {
172
174
  cssSettings.top = yWindow ? scrollTop - $attach.offset().top : $attach.scrollTop();
173
175
  }
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.20.8
4
+ version: 1.21.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: 2016-04-13 00:00:00.000000000 Z
12
+ date: 2016-05-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties