jquery-tablesorter 1.23.5 → 1.23.6

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: 28c65fb16bc9a6660ee7f77bf87d4f2b96c94119
4
- data.tar.gz: 213e89be2506a23e979a6bf03e2bfe245786249e
3
+ metadata.gz: b00e7c0fb7b83ca3dcee23aa4ae1eef3d36d6988
4
+ data.tar.gz: d2acfb12d32b823098e90a19d402542ede84f6ce
5
5
  SHA512:
6
- metadata.gz: 3b76b220679661afb1a9907d860698a21e33983adb1cdfc3b2bd838ccdf61553294c72d9f49dec3b25c45f540374558ab1fd1a0b86e3253fe59a3977f49745e5
7
- data.tar.gz: 242dac185a6b197179368045a2c6098322fae10d1b57dd164e4beb94fca834bf2272823d71a0b966deb18dd2422c502cb7cc7e15690e41598203a9a037511f02
6
+ metadata.gz: 3fdfd7dba37c34d90a2cca21376743b8f069c96376f93b092124819d5f3207f106974dcea02eff3609fe5874370c146baf2488004d1f928507de2f40865b84e5
7
+ data.tar.gz: ffeb45a467ac731aa17ada18b1d1c48c7554300300fbedf00f15e13908eb05c60163fc57220ce987412b137519f020eaa12c98f3a57256c295d256ba5eb98dcd
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.28.5 (1/28/2017), [documentation]
7
+ Current tablesorter version: 2.28.6 (4/2/2017), [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
3
  MINOR = 23
4
- TINY = 5
4
+ TINY = 6
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 1/6/2017 (v2.28.4)
3
+ * updated 4/2/2017 (v2.28.6)
4
4
  */
5
5
  /*jshint browser:true, jquery:true, unused:false */
6
6
  ;(function($) {
@@ -393,10 +393,8 @@
393
393
  },
394
394
 
395
395
  hideRowsSetup = function(table, p){
396
- var $el = p.$container.find(p.cssPageSize);
397
- p.size = parsePageSize( p, $el.val(), 'get' );
398
- $el.val( p.size );
399
- $.data(table, 'pagerLastSize', p.size);
396
+ p.size = parsePageSize( p, p.$container.find(p.cssPageSize).val(), 'get' );
397
+ setPageSize( table, p.size, p );
400
398
  pagerArrows( table, p );
401
399
  if ( !p.removeRows ) {
402
400
  hideRows(table, p);
@@ -689,7 +687,7 @@
689
687
  $.data(table, 'pagerLastPage', p.page);
690
688
  $.data(table, 'pagerLastSize', p.size);
691
689
  p.page = 0;
692
- p.size = 'all';
690
+ p.size = p.totalPages;
693
691
  p.totalPages = 1;
694
692
  $(table)
695
693
  .addClass('pagerDisabled')
@@ -799,15 +797,9 @@
799
797
  },
800
798
 
801
799
  getTotalPages = function( table, p ) {
802
- return ts.hasWidget( table, 'filter' ) ? Math.min( p.totalPages, p.filteredPages ) : p.totalPages;
803
- },
804
-
805
- // set to either set or get value
806
- parsePageSize = function( p, size, mode ) {
807
- var s = parseInt( size, 10 ) || p.size || p.settings.size || 10;
808
- return p.initialized && (/all/i.test( size ) || s === p.totalRows) ?
809
- // "get" to get `p.size` or "set" to set `pageSize.val()`
810
- 'all' : ( mode === 'get' ? s : p.size );
800
+ return ts.hasWidget( table, 'filter' ) ?
801
+ Math.min( p.totalPages, p.filteredPages ) :
802
+ p.totalPages;
811
803
  },
812
804
 
813
805
  parsePageNumber = function( table, p ) {
@@ -818,14 +810,26 @@
818
810
  return p.page;
819
811
  },
820
812
 
813
+ // set to either set or get value
814
+ parsePageSize = function( p, size, mode ) {
815
+ var s = parseInt( size, 10 ) || p.size || p.settings.size || 10;
816
+ if (p.initialized && (/all/i.test( s + ' ' + size ) || s === p.totalRows)) {
817
+ // Fixing #1364 & #1366
818
+ return p.$container.find(p.cssPageSize + ' option[value="all"]').length ?
819
+ 'all' : p.totalRows;
820
+ }
821
+ // "get" to get `p.size` or "set" to set `pageSize.val()`
822
+ return mode === 'get' ? s : p.size;
823
+ },
824
+
821
825
  setPageSize = function(table, size, p) {
826
+ // "all" size is only returned if an "all" option exists - fixes #1366
822
827
  p.size = parsePageSize( p, size, 'get' );
823
- p.$container.find(p.cssPageSize).val( parsePageSize( p, p.size, 'set' ) );
828
+ p.$container.find( p.cssPageSize ).val( p.size );
824
829
  $.data(table, 'pagerLastPage', parsePageNumber( table, p ) );
825
830
  $.data(table, 'pagerLastSize', p.size);
826
831
  p.totalPages = p.size === 'all' ? 1 : Math.ceil( p.totalRows / p.size );
827
832
  p.filteredPages = p.size === 'all' ? 1 : Math.ceil( p.filteredRows / p.size );
828
- moveToPage(table, p);
829
833
  },
830
834
 
831
835
  moveToFirstPage = function(table, p) {
@@ -906,8 +910,8 @@
906
910
  $el = p.$container.find(p.cssPageSize);
907
911
  size = $el.find('option[selected]').val();
908
912
  p.size = $.data(table, 'pagerLastSize') || parsePageSize( p, size, 'get' );
909
- $el.val( p.size ); // set page size
910
913
  p.totalPages = p.size === 'all' ? 1 : Math.ceil( getTotalPages( table, p ) / p.size );
914
+ setPageSize(table, p.size, p); // set page size
911
915
  // if table id exists, include page display with aria info
912
916
  if ( table.id && !c.$table.attr( 'aria-describedby' ) ) {
913
917
  $el = p.$container.find( p.cssPageDisplay );
@@ -924,6 +928,7 @@
924
928
  // tablesorter core update table
925
929
  ts.update( c );
926
930
  setPageSize(table, p.size, p);
931
+ moveToPage(table, p);
927
932
  hideRowsSetup(table, p);
928
933
  if (c.debug) {
929
934
  console.log('Pager: Enabled');
@@ -952,8 +957,7 @@
952
957
  t = ts.storage(table, p.storageKey) || {}; // fixes #387
953
958
  p.page = isNaN(t.page) ? p.page : t.page;
954
959
  p.size = t.size === 'all' ? t.size : ( isNaN( t.size ) ? p.size : t.size ) || p.setSize || 10;
955
- $.data(table, 'pagerLastSize', p.size);
956
- pager.find(p.cssPageSize).val(p.size);
960
+ setPageSize(table, p.size, p);
957
961
  }
958
962
  // skipped rows
959
963
  p.regexRows = new RegExp('(' + (wo.filter_filteredRow || 'filtered') + '|' + c.selectorRemove.slice(1) + '|' + c.cssChildRow + ')');
@@ -965,7 +969,10 @@
965
969
  .bind('filterInit filterStart '.split(' ').join(namespace + ' '), function(e, filters) {
966
970
  p.currentFilters = $.isArray(filters) ? filters : c.$table.data('lastSearch');
967
971
  // don't change page if filters are the same (pager updating, etc)
968
- if (e.type === 'filterStart' && p.pageReset !== false && (c.lastCombinedFilter || '') !== (p.currentFilters || []).join('')) {
972
+ if (
973
+ e.type === 'filterStart' &&
974
+ p.pageReset !== false &&
975
+ (c.lastSearch || []).join(',') !== (p.currentFilters || []).join(',')) {
969
976
  p.page = p.pageReset; // fixes #456 & #565
970
977
  }
971
978
  })
@@ -1020,6 +1027,7 @@
1020
1027
  .bind('pageSize refreshComplete '.split(' ').join(namespace + ' '), function(e, size){
1021
1028
  e.stopPropagation();
1022
1029
  setPageSize(table, parsePageSize( p, size, 'get' ), p);
1030
+ moveToPage(table, p);
1023
1031
  hideRows(table, p);
1024
1032
  updatePageDisplay(table, p, false);
1025
1033
  })
@@ -1087,8 +1095,8 @@
1087
1095
  if ( !$(this).hasClass(p.cssDisabled) ) {
1088
1096
  var size = $(this).val();
1089
1097
  // in case there are more than one pager
1090
- p.$container.find(p.cssGoto).val( size );
1091
1098
  setPageSize(table, size, p);
1099
+ moveToPage(table, p);
1092
1100
  changeHeight(table, p);
1093
1101
  }
1094
1102
  return false;
@@ -1122,6 +1130,8 @@
1122
1130
  if (!p.ajax && !p.initialized) {
1123
1131
  p.initializing = false;
1124
1132
  p.initialized = true;
1133
+ // update page size on init
1134
+ setPageSize(table, p.size, p);
1125
1135
  moveToPage(table, p);
1126
1136
  if (c.debug) {
1127
1137
  console.log('Pager: Triggering pagerInitialized');
@@ -4,7 +4,7 @@
4
4
  ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀██
5
5
  █████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
6
6
  */
7
- /*! tablesorter (FORK) - updated 01-28-2017 (v2.28.5)*/
7
+ /*! tablesorter (FORK) - updated 04-02-2017 (v2.28.6)*/
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.28.5 *//*
19
+ /*! TableSorter (FORK) v2.28.6 *//*
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.28.5',
43
+ version : '2.28.6',
44
44
 
45
45
  parsers : [],
46
46
  widgets : [],
@@ -380,7 +380,17 @@
380
380
  .bind( 'sortReset' + namespace, function( e, callback ) {
381
381
  e.stopPropagation();
382
382
  // using this.config to ensure functions are getting a non-cached version of the config
383
- ts.sortReset( this.config, callback );
383
+ ts.sortReset( this.config, function( table ) {
384
+ if (table.isApplyingWidgets) {
385
+ // multiple triggers in a row... filterReset, then sortReset - see #1361
386
+ // wait to update widgets
387
+ setTimeout( function() {
388
+ ts.applyWidget( table, '', callback );
389
+ }, 100 );
390
+ } else {
391
+ ts.applyWidget( table, '', callback );
392
+ }
393
+ });
384
394
  })
385
395
  .bind( 'updateAll' + namespace, function( e, resort, callback ) {
386
396
  e.stopPropagation();
@@ -449,7 +459,7 @@
449
459
  var tmp = $.extend( true, {}, c.originalSettings );
450
460
  // restore original settings; this clears out current settings, but does not clear
451
461
  // values saved to storage.
452
- c = $.extend( true, ts.defaults, tmp );
462
+ c = $.extend( true, {}, ts.defaults, tmp );
453
463
  c.originalSettings = tmp;
454
464
  this.hasInitialized = false;
455
465
  // setup the entire table again
@@ -684,8 +694,9 @@
684
694
  for ( indx = 0; indx < max; indx++ ) {
685
695
  header = c.$headerIndexed[ colIndex ];
686
696
  if ( header && header.length ) {
687
- // get column indexed table cell
688
- configHeaders = ts.getColumnData( table, c.headers, colIndex );
697
+ // get column indexed table cell; adding true parameter fixes #1362 but
698
+ // it would break backwards compatibility...
699
+ configHeaders = ts.getColumnData( table, c.headers, colIndex ); // , true );
689
700
  // get column parser/extractor
690
701
  extractor = ts.getParserById( ts.getData( header, configHeaders, 'extractor' ) );
691
702
  parser = ts.getParserById( ts.getData( header, configHeaders, 'sorter' ) );
@@ -1786,6 +1797,10 @@
1786
1797
  ts.setHeadersCss( c );
1787
1798
  ts.multisort( c );
1788
1799
  ts.appendCache( c );
1800
+ var indx;
1801
+ for (indx = 0; indx < c.columns; indx++) {
1802
+ c.sortVars[ indx ].count = -1;
1803
+ }
1789
1804
  if ( $.isFunction( callback ) ) {
1790
1805
  callback( c.table );
1791
1806
  }
@@ -1928,14 +1943,15 @@
1928
1943
  },
1929
1944
 
1930
1945
  applyWidgetOptions : function( table ) {
1931
- var indx, widget,
1946
+ var indx, widget, wo,
1932
1947
  c = table.config,
1933
1948
  len = c.widgets.length;
1934
1949
  if ( len ) {
1935
1950
  for ( indx = 0; indx < len; indx++ ) {
1936
1951
  widget = ts.getWidgetById( c.widgets[ indx ] );
1937
1952
  if ( widget && widget.options ) {
1938
- c.widgetOptions = $.extend( true, {}, widget.options, c.widgetOptions );
1953
+ wo = $.extend( {}, widget.options );
1954
+ c.widgetOptions = $.extend( true, wo, c.widgetOptions );
1939
1955
  // add widgetOptions to defaults for option validator
1940
1956
  $.extend( true, ts.defaults.widgetOptions, widget.options );
1941
1957
  }
@@ -2058,22 +2074,22 @@
2058
2074
  }
2059
2075
  }
2060
2076
  if ( c.debug && console.groupEnd ) { console.groupEnd(); }
2061
- // callback executed on init only
2062
- if ( !init && typeof callback === 'function' ) {
2063
- callback( table );
2064
- }
2065
2077
  }
2066
2078
  c.timerReady = setTimeout( function() {
2067
2079
  table.isApplyingWidgets = false;
2068
2080
  $.data( table, 'lastWidgetApplication', new Date() );
2069
2081
  c.$table.triggerHandler( 'tablesorter-ready' );
2082
+ // callback executed on init only
2083
+ if ( !init && typeof callback === 'function' ) {
2084
+ callback( table );
2085
+ }
2086
+ if ( c.debug ) {
2087
+ widget = c.widgets.length;
2088
+ console.log( 'Completed ' +
2089
+ ( init === true ? 'initializing ' : 'applying ' ) + widget +
2090
+ ' widget' + ( widget !== 1 ? 's' : '' ) + ts.benchmark( time ) );
2091
+ }
2070
2092
  }, 10 );
2071
- if ( c.debug ) {
2072
- widget = c.widgets.length;
2073
- console.log( 'Completed ' +
2074
- ( init === true ? 'initializing ' : 'applying ' ) + widget +
2075
- ' widget' + ( widget !== 1 ? 's' : '' ) + ts.benchmark( time ) );
2076
- }
2077
2093
  },
2078
2094
 
2079
2095
  removeWidget : function( table, name, refreshing ) {
@@ -3188,7 +3204,7 @@
3188
3204
 
3189
3205
  })(jQuery);
3190
3206
 
3191
- /*! Widget: filter - updated 12/8/2016 (v2.28.1) *//*
3207
+ /*! Widget: filter - updated 4/2/2017 (v2.28.6) *//*
3192
3208
  * Requires tablesorter v2.8+ and jQuery 1.7+
3193
3209
  * by Rob Garrison
3194
3210
  */
@@ -4073,7 +4089,7 @@
4073
4089
  wo = c.widgetOptions,
4074
4090
  filterArray = $.isArray( filter ),
4075
4091
  filters = ( filterArray ) ? filter : ts.getFilters( table, true ),
4076
- combinedFilters = ( filters || [] ).join( '' ); // combined filter values
4092
+ currentFilters = filters || []; // current filter values
4077
4093
  // prevent errors if delay init is set
4078
4094
  if ( $.isEmptyObject( c.cache ) ) {
4079
4095
  // update cache if delayInit set & pager has initialized ( after user initiates a search )
@@ -4087,7 +4103,10 @@
4087
4103
  // add filter array back into inputs
4088
4104
  if ( filterArray ) {
4089
4105
  ts.setFilters( table, filters, false, skipFirst !== true );
4090
- if ( !wo.filter_initialized ) { c.lastCombinedFilter = ''; }
4106
+ if ( !wo.filter_initialized ) {
4107
+ c.lastSearch = [];
4108
+ c.lastCombinedFilter = '';
4109
+ }
4091
4110
  }
4092
4111
  if ( wo.filter_hideFilters ) {
4093
4112
  // show/hide filter row as needed
@@ -4097,11 +4116,11 @@
4097
4116
  }
4098
4117
  // return if the last search is the same; but filter === false when updating the search
4099
4118
  // see example-widget-filter.html filter toggle buttons
4100
- if ( c.lastCombinedFilter === combinedFilters && filter !== false ) {
4119
+ if ( c.lastSearch.join(',') === currentFilters.join(',') && filter !== false ) {
4101
4120
  return;
4102
4121
  } else if ( filter === false ) {
4103
4122
  // force filter refresh
4104
- c.lastCombinedFilter = null;
4123
+ c.lastCombinedFilter = '';
4105
4124
  c.lastSearch = [];
4106
4125
  }
4107
4126
  // define filter inside it is false
@@ -4118,11 +4137,11 @@
4118
4137
  if ( c.showProcessing ) {
4119
4138
  // give it time for the processing icon to kick in
4120
4139
  setTimeout( function() {
4121
- tsf.findRows( table, filters, combinedFilters );
4140
+ tsf.findRows( table, filters, currentFilters );
4122
4141
  return false;
4123
4142
  }, 30 );
4124
4143
  } else {
4125
- tsf.findRows( table, filters, combinedFilters );
4144
+ tsf.findRows( table, filters, currentFilters );
4126
4145
  return false;
4127
4146
  }
4128
4147
  },
@@ -4444,9 +4463,11 @@
4444
4463
  }
4445
4464
  return showRow;
4446
4465
  },
4447
- findRows: function( table, filters, combinedFilters ) {
4448
- if ( table.config.lastCombinedFilter === combinedFilters ||
4449
- !table.config.widgetOptions.filter_initialized ) {
4466
+ findRows: function( table, filters, currentFilters ) {
4467
+ if (
4468
+ table.config.lastSearch.join(',') === ( currentFilters || [] ).join(',') ||
4469
+ !table.config.widgetOptions.filter_initialized
4470
+ ) {
4450
4471
  return;
4451
4472
  }
4452
4473
  var len, norm_rows, rowData, $rows, $row, rowIndex, tbodyIndex, $tbody, columnIndex,
@@ -4500,8 +4521,7 @@
4500
4521
  // filtered rows count
4501
4522
  c.filteredRows = 0;
4502
4523
  c.totalRows = 0;
4503
- // combindedFilters are undefined on init
4504
- combinedFilters = ( storedFilters || [] ).join( '' );
4524
+ currentFilters = ( storedFilters || [] );
4505
4525
 
4506
4526
  for ( tbodyIndex = 0; tbodyIndex < c.$tbodies.length; tbodyIndex++ ) {
4507
4527
  $tbody = ts.processTbody( table, c.$tbodies.eq( tbodyIndex ), true );
@@ -4514,7 +4534,7 @@
4514
4534
  return el[ columnIndex ].$row.get();
4515
4535
  }) );
4516
4536
 
4517
- if ( combinedFilters === '' || wo.filter_serversideFiltering ) {
4537
+ if ( currentFilters.join('') === '' || wo.filter_serversideFiltering ) {
4518
4538
  $rows
4519
4539
  .removeClass( wo.filter_filteredRow )
4520
4540
  .not( '.' + c.cssChildRow )
@@ -4689,7 +4709,8 @@
4689
4709
  c.totalRows += $rows.length;
4690
4710
  ts.processTbody( table, $tbody, false );
4691
4711
  }
4692
- c.lastCombinedFilter = combinedFilters; // save last search
4712
+ // lastCombinedFilter is no longer used internally
4713
+ c.lastCombinedFilter = storedFilters.join(''); // save last search
4693
4714
  // don't save 'filters' directly since it may have altered ( AnyMatch column searches )
4694
4715
  c.lastSearch = storedFilters;
4695
4716
  c.$table.data( 'lastSearch', storedFilters );
@@ -4989,7 +5010,7 @@
4989
5010
  if ( ( getRaw !== true && wo && !wo.filter_columnFilters ) ||
4990
5011
  // setFilters called, but last search is exactly the same as the current
4991
5012
  // fixes issue #733 & #903 where calling update causes the input values to reset
4992
- ( $.isArray(setFilters) && setFilters.join('') === c.lastCombinedFilter ) ) {
5013
+ ( $.isArray(setFilters) && setFilters.join(',') === c.lastSearch.join(',') ) ) {
4993
5014
  return $( table ).data( 'lastSearch' );
4994
5015
  }
4995
5016
  if ( c ) {
@@ -1,4 +1,4 @@
1
- /*! TableSorter (FORK) v2.28.5 *//*
1
+ /*! TableSorter (FORK) v2.28.6 *//*
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.28.5',
25
+ version : '2.28.6',
26
26
 
27
27
  parsers : [],
28
28
  widgets : [],
@@ -362,7 +362,17 @@
362
362
  .bind( 'sortReset' + namespace, function( e, callback ) {
363
363
  e.stopPropagation();
364
364
  // using this.config to ensure functions are getting a non-cached version of the config
365
- ts.sortReset( this.config, callback );
365
+ ts.sortReset( this.config, function( table ) {
366
+ if (table.isApplyingWidgets) {
367
+ // multiple triggers in a row... filterReset, then sortReset - see #1361
368
+ // wait to update widgets
369
+ setTimeout( function() {
370
+ ts.applyWidget( table, '', callback );
371
+ }, 100 );
372
+ } else {
373
+ ts.applyWidget( table, '', callback );
374
+ }
375
+ });
366
376
  })
367
377
  .bind( 'updateAll' + namespace, function( e, resort, callback ) {
368
378
  e.stopPropagation();
@@ -431,7 +441,7 @@
431
441
  var tmp = $.extend( true, {}, c.originalSettings );
432
442
  // restore original settings; this clears out current settings, but does not clear
433
443
  // values saved to storage.
434
- c = $.extend( true, ts.defaults, tmp );
444
+ c = $.extend( true, {}, ts.defaults, tmp );
435
445
  c.originalSettings = tmp;
436
446
  this.hasInitialized = false;
437
447
  // setup the entire table again
@@ -666,8 +676,9 @@
666
676
  for ( indx = 0; indx < max; indx++ ) {
667
677
  header = c.$headerIndexed[ colIndex ];
668
678
  if ( header && header.length ) {
669
- // get column indexed table cell
670
- configHeaders = ts.getColumnData( table, c.headers, colIndex );
679
+ // get column indexed table cell; adding true parameter fixes #1362 but
680
+ // it would break backwards compatibility...
681
+ configHeaders = ts.getColumnData( table, c.headers, colIndex ); // , true );
671
682
  // get column parser/extractor
672
683
  extractor = ts.getParserById( ts.getData( header, configHeaders, 'extractor' ) );
673
684
  parser = ts.getParserById( ts.getData( header, configHeaders, 'sorter' ) );
@@ -1768,6 +1779,10 @@
1768
1779
  ts.setHeadersCss( c );
1769
1780
  ts.multisort( c );
1770
1781
  ts.appendCache( c );
1782
+ var indx;
1783
+ for (indx = 0; indx < c.columns; indx++) {
1784
+ c.sortVars[ indx ].count = -1;
1785
+ }
1771
1786
  if ( $.isFunction( callback ) ) {
1772
1787
  callback( c.table );
1773
1788
  }
@@ -1910,14 +1925,15 @@
1910
1925
  },
1911
1926
 
1912
1927
  applyWidgetOptions : function( table ) {
1913
- var indx, widget,
1928
+ var indx, widget, wo,
1914
1929
  c = table.config,
1915
1930
  len = c.widgets.length;
1916
1931
  if ( len ) {
1917
1932
  for ( indx = 0; indx < len; indx++ ) {
1918
1933
  widget = ts.getWidgetById( c.widgets[ indx ] );
1919
1934
  if ( widget && widget.options ) {
1920
- c.widgetOptions = $.extend( true, {}, widget.options, c.widgetOptions );
1935
+ wo = $.extend( {}, widget.options );
1936
+ c.widgetOptions = $.extend( true, wo, c.widgetOptions );
1921
1937
  // add widgetOptions to defaults for option validator
1922
1938
  $.extend( true, ts.defaults.widgetOptions, widget.options );
1923
1939
  }
@@ -2040,22 +2056,22 @@
2040
2056
  }
2041
2057
  }
2042
2058
  if ( c.debug && console.groupEnd ) { console.groupEnd(); }
2043
- // callback executed on init only
2044
- if ( !init && typeof callback === 'function' ) {
2045
- callback( table );
2046
- }
2047
2059
  }
2048
2060
  c.timerReady = setTimeout( function() {
2049
2061
  table.isApplyingWidgets = false;
2050
2062
  $.data( table, 'lastWidgetApplication', new Date() );
2051
2063
  c.$table.triggerHandler( 'tablesorter-ready' );
2064
+ // callback executed on init only
2065
+ if ( !init && typeof callback === 'function' ) {
2066
+ callback( table );
2067
+ }
2068
+ if ( c.debug ) {
2069
+ widget = c.widgets.length;
2070
+ console.log( 'Completed ' +
2071
+ ( init === true ? 'initializing ' : 'applying ' ) + widget +
2072
+ ' widget' + ( widget !== 1 ? 's' : '' ) + ts.benchmark( time ) );
2073
+ }
2052
2074
  }, 10 );
2053
- if ( c.debug ) {
2054
- widget = c.widgets.length;
2055
- console.log( 'Completed ' +
2056
- ( init === true ? 'initializing ' : 'applying ' ) + widget +
2057
- ' widget' + ( widget !== 1 ? 's' : '' ) + ts.benchmark( time ) );
2058
- }
2059
2075
  },
2060
2076
 
2061
2077
  removeWidget : function( table, name, refreshing ) {
@@ -4,7 +4,7 @@
4
4
  ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀██
5
5
  █████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
6
6
  */
7
- /*! tablesorter (FORK) - updated 01-28-2017 (v2.28.5)*/
7
+ /*! tablesorter (FORK) - updated 04-02-2017 (v2.28.6)*/
8
8
  /* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
9
9
  (function(factory) {
10
10
  if (typeof define === 'function' && define.amd) {
@@ -393,7 +393,7 @@
393
393
 
394
394
  })(jQuery);
395
395
 
396
- /*! Widget: filter - updated 12/8/2016 (v2.28.1) *//*
396
+ /*! Widget: filter - updated 4/2/2017 (v2.28.6) *//*
397
397
  * Requires tablesorter v2.8+ and jQuery 1.7+
398
398
  * by Rob Garrison
399
399
  */
@@ -1278,7 +1278,7 @@
1278
1278
  wo = c.widgetOptions,
1279
1279
  filterArray = $.isArray( filter ),
1280
1280
  filters = ( filterArray ) ? filter : ts.getFilters( table, true ),
1281
- combinedFilters = ( filters || [] ).join( '' ); // combined filter values
1281
+ currentFilters = filters || []; // current filter values
1282
1282
  // prevent errors if delay init is set
1283
1283
  if ( $.isEmptyObject( c.cache ) ) {
1284
1284
  // update cache if delayInit set & pager has initialized ( after user initiates a search )
@@ -1292,7 +1292,10 @@
1292
1292
  // add filter array back into inputs
1293
1293
  if ( filterArray ) {
1294
1294
  ts.setFilters( table, filters, false, skipFirst !== true );
1295
- if ( !wo.filter_initialized ) { c.lastCombinedFilter = ''; }
1295
+ if ( !wo.filter_initialized ) {
1296
+ c.lastSearch = [];
1297
+ c.lastCombinedFilter = '';
1298
+ }
1296
1299
  }
1297
1300
  if ( wo.filter_hideFilters ) {
1298
1301
  // show/hide filter row as needed
@@ -1302,11 +1305,11 @@
1302
1305
  }
1303
1306
  // return if the last search is the same; but filter === false when updating the search
1304
1307
  // see example-widget-filter.html filter toggle buttons
1305
- if ( c.lastCombinedFilter === combinedFilters && filter !== false ) {
1308
+ if ( c.lastSearch.join(',') === currentFilters.join(',') && filter !== false ) {
1306
1309
  return;
1307
1310
  } else if ( filter === false ) {
1308
1311
  // force filter refresh
1309
- c.lastCombinedFilter = null;
1312
+ c.lastCombinedFilter = '';
1310
1313
  c.lastSearch = [];
1311
1314
  }
1312
1315
  // define filter inside it is false
@@ -1323,11 +1326,11 @@
1323
1326
  if ( c.showProcessing ) {
1324
1327
  // give it time for the processing icon to kick in
1325
1328
  setTimeout( function() {
1326
- tsf.findRows( table, filters, combinedFilters );
1329
+ tsf.findRows( table, filters, currentFilters );
1327
1330
  return false;
1328
1331
  }, 30 );
1329
1332
  } else {
1330
- tsf.findRows( table, filters, combinedFilters );
1333
+ tsf.findRows( table, filters, currentFilters );
1331
1334
  return false;
1332
1335
  }
1333
1336
  },
@@ -1649,9 +1652,11 @@
1649
1652
  }
1650
1653
  return showRow;
1651
1654
  },
1652
- findRows: function( table, filters, combinedFilters ) {
1653
- if ( table.config.lastCombinedFilter === combinedFilters ||
1654
- !table.config.widgetOptions.filter_initialized ) {
1655
+ findRows: function( table, filters, currentFilters ) {
1656
+ if (
1657
+ table.config.lastSearch.join(',') === ( currentFilters || [] ).join(',') ||
1658
+ !table.config.widgetOptions.filter_initialized
1659
+ ) {
1655
1660
  return;
1656
1661
  }
1657
1662
  var len, norm_rows, rowData, $rows, $row, rowIndex, tbodyIndex, $tbody, columnIndex,
@@ -1705,8 +1710,7 @@
1705
1710
  // filtered rows count
1706
1711
  c.filteredRows = 0;
1707
1712
  c.totalRows = 0;
1708
- // combindedFilters are undefined on init
1709
- combinedFilters = ( storedFilters || [] ).join( '' );
1713
+ currentFilters = ( storedFilters || [] );
1710
1714
 
1711
1715
  for ( tbodyIndex = 0; tbodyIndex < c.$tbodies.length; tbodyIndex++ ) {
1712
1716
  $tbody = ts.processTbody( table, c.$tbodies.eq( tbodyIndex ), true );
@@ -1719,7 +1723,7 @@
1719
1723
  return el[ columnIndex ].$row.get();
1720
1724
  }) );
1721
1725
 
1722
- if ( combinedFilters === '' || wo.filter_serversideFiltering ) {
1726
+ if ( currentFilters.join('') === '' || wo.filter_serversideFiltering ) {
1723
1727
  $rows
1724
1728
  .removeClass( wo.filter_filteredRow )
1725
1729
  .not( '.' + c.cssChildRow )
@@ -1894,7 +1898,8 @@
1894
1898
  c.totalRows += $rows.length;
1895
1899
  ts.processTbody( table, $tbody, false );
1896
1900
  }
1897
- c.lastCombinedFilter = combinedFilters; // save last search
1901
+ // lastCombinedFilter is no longer used internally
1902
+ c.lastCombinedFilter = storedFilters.join(''); // save last search
1898
1903
  // don't save 'filters' directly since it may have altered ( AnyMatch column searches )
1899
1904
  c.lastSearch = storedFilters;
1900
1905
  c.$table.data( 'lastSearch', storedFilters );
@@ -2194,7 +2199,7 @@
2194
2199
  if ( ( getRaw !== true && wo && !wo.filter_columnFilters ) ||
2195
2200
  // setFilters called, but last search is exactly the same as the current
2196
2201
  // fixes issue #733 & #903 where calling update causes the input values to reset
2197
- ( $.isArray(setFilters) && setFilters.join('') === c.lastCombinedFilter ) ) {
2202
+ ( $.isArray(setFilters) && setFilters.join(',') === c.lastSearch.join(',') ) ) {
2198
2203
  return $( table ).data( 'lastSearch' );
2199
2204
  }
2200
2205
  if ( c ) {
@@ -0,0 +1,33 @@
1
+ /*! Parser: leading zeros - updated 4/2/2017 (v2.28.6) */
2
+ /* jshint jquery:true, unused:false */
3
+ ;( function( $ ) {
4
+ 'use strict';
5
+
6
+ var ts = $.tablesorter,
7
+ // modify this value to increase precision as needed
8
+ precision = 1e-10;
9
+
10
+ ts.addParser({
11
+ id: 'leadingZeros',
12
+ is: function() {
13
+ return false;
14
+ },
15
+ format: function( s, table ) {
16
+ var val = ( s || '' ).replace( ts.regex.nondigit, '' ),
17
+ number = ts.formatFloat( val, table ),
18
+ str = number.toString();
19
+ if (
20
+ !isNaN( number ) &&
21
+ number == val && // jshint ignore:line
22
+ val.length !== str.length
23
+ ) {
24
+ // subtract a decimal equivalent of the string length
25
+ // so "0001" sorts before "01"
26
+ number -= precision * ( s.length - str.length );
27
+ }
28
+ return number;
29
+ },
30
+ type: 'number'
31
+ });
32
+
33
+ })( jQuery );
@@ -1,4 +1,4 @@
1
- /*! Widget: Build Table - updated 11/26/2016 (v2.28.0) *//*
1
+ /*! Widget: Build Table - updated 4/2/2017 (v2.28.6) *//*
2
2
  * for tableSorter v2.16.0+
3
3
  * by Rob Garrison
4
4
  */
@@ -12,6 +12,8 @@
12
12
  // data.header contains an array of header titles
13
13
  // data.rows contains an array of rows which contains an array of cells
14
14
  bt = ts.buildTable = function(tar, c){
15
+ // add build options to defaults to prevent warnings
16
+ $.extend(true, ts.defaults.widgetOptions, bt.defaults);
15
17
  // add table if one doesn't exist
16
18
  var $tbl = tar.nodeName === 'TABLE' ? $(tar) : $('<table>').appendTo(tar),
17
19
  table = $tbl[0],
@@ -1,4 +1,4 @@
1
- /*! Widget: filter - updated 12/8/2016 (v2.28.1) *//*
1
+ /*! Widget: filter - updated 4/2/2017 (v2.28.6) *//*
2
2
  * Requires tablesorter v2.8+ and jQuery 1.7+
3
3
  * by Rob Garrison
4
4
  */
@@ -883,7 +883,7 @@
883
883
  wo = c.widgetOptions,
884
884
  filterArray = $.isArray( filter ),
885
885
  filters = ( filterArray ) ? filter : ts.getFilters( table, true ),
886
- combinedFilters = ( filters || [] ).join( '' ); // combined filter values
886
+ currentFilters = filters || []; // current filter values
887
887
  // prevent errors if delay init is set
888
888
  if ( $.isEmptyObject( c.cache ) ) {
889
889
  // update cache if delayInit set & pager has initialized ( after user initiates a search )
@@ -897,7 +897,10 @@
897
897
  // add filter array back into inputs
898
898
  if ( filterArray ) {
899
899
  ts.setFilters( table, filters, false, skipFirst !== true );
900
- if ( !wo.filter_initialized ) { c.lastCombinedFilter = ''; }
900
+ if ( !wo.filter_initialized ) {
901
+ c.lastSearch = [];
902
+ c.lastCombinedFilter = '';
903
+ }
901
904
  }
902
905
  if ( wo.filter_hideFilters ) {
903
906
  // show/hide filter row as needed
@@ -907,11 +910,11 @@
907
910
  }
908
911
  // return if the last search is the same; but filter === false when updating the search
909
912
  // see example-widget-filter.html filter toggle buttons
910
- if ( c.lastCombinedFilter === combinedFilters && filter !== false ) {
913
+ if ( c.lastSearch.join(',') === currentFilters.join(',') && filter !== false ) {
911
914
  return;
912
915
  } else if ( filter === false ) {
913
916
  // force filter refresh
914
- c.lastCombinedFilter = null;
917
+ c.lastCombinedFilter = '';
915
918
  c.lastSearch = [];
916
919
  }
917
920
  // define filter inside it is false
@@ -928,11 +931,11 @@
928
931
  if ( c.showProcessing ) {
929
932
  // give it time for the processing icon to kick in
930
933
  setTimeout( function() {
931
- tsf.findRows( table, filters, combinedFilters );
934
+ tsf.findRows( table, filters, currentFilters );
932
935
  return false;
933
936
  }, 30 );
934
937
  } else {
935
- tsf.findRows( table, filters, combinedFilters );
938
+ tsf.findRows( table, filters, currentFilters );
936
939
  return false;
937
940
  }
938
941
  },
@@ -1254,9 +1257,11 @@
1254
1257
  }
1255
1258
  return showRow;
1256
1259
  },
1257
- findRows: function( table, filters, combinedFilters ) {
1258
- if ( table.config.lastCombinedFilter === combinedFilters ||
1259
- !table.config.widgetOptions.filter_initialized ) {
1260
+ findRows: function( table, filters, currentFilters ) {
1261
+ if (
1262
+ table.config.lastSearch.join(',') === ( currentFilters || [] ).join(',') ||
1263
+ !table.config.widgetOptions.filter_initialized
1264
+ ) {
1260
1265
  return;
1261
1266
  }
1262
1267
  var len, norm_rows, rowData, $rows, $row, rowIndex, tbodyIndex, $tbody, columnIndex,
@@ -1310,8 +1315,7 @@
1310
1315
  // filtered rows count
1311
1316
  c.filteredRows = 0;
1312
1317
  c.totalRows = 0;
1313
- // combindedFilters are undefined on init
1314
- combinedFilters = ( storedFilters || [] ).join( '' );
1318
+ currentFilters = ( storedFilters || [] );
1315
1319
 
1316
1320
  for ( tbodyIndex = 0; tbodyIndex < c.$tbodies.length; tbodyIndex++ ) {
1317
1321
  $tbody = ts.processTbody( table, c.$tbodies.eq( tbodyIndex ), true );
@@ -1324,7 +1328,7 @@
1324
1328
  return el[ columnIndex ].$row.get();
1325
1329
  }) );
1326
1330
 
1327
- if ( combinedFilters === '' || wo.filter_serversideFiltering ) {
1331
+ if ( currentFilters.join('') === '' || wo.filter_serversideFiltering ) {
1328
1332
  $rows
1329
1333
  .removeClass( wo.filter_filteredRow )
1330
1334
  .not( '.' + c.cssChildRow )
@@ -1499,7 +1503,8 @@
1499
1503
  c.totalRows += $rows.length;
1500
1504
  ts.processTbody( table, $tbody, false );
1501
1505
  }
1502
- c.lastCombinedFilter = combinedFilters; // save last search
1506
+ // lastCombinedFilter is no longer used internally
1507
+ c.lastCombinedFilter = storedFilters.join(''); // save last search
1503
1508
  // don't save 'filters' directly since it may have altered ( AnyMatch column searches )
1504
1509
  c.lastSearch = storedFilters;
1505
1510
  c.$table.data( 'lastSearch', storedFilters );
@@ -1799,7 +1804,7 @@
1799
1804
  if ( ( getRaw !== true && wo && !wo.filter_columnFilters ) ||
1800
1805
  // setFilters called, but last search is exactly the same as the current
1801
1806
  // fixes issue #733 & #903 where calling update causes the input values to reset
1802
- ( $.isArray(setFilters) && setFilters.join('') === c.lastCombinedFilter ) ) {
1807
+ ( $.isArray(setFilters) && setFilters.join(',') === c.lastSearch.join(',') ) ) {
1803
1808
  return $( table ).data( 'lastSearch' );
1804
1809
  }
1805
1810
  if ( c ) {
@@ -1,4 +1,4 @@
1
- /*! Widget: output - updated 1/28/2017 (v2.28.5) *//*
1
+ /*! Widget: output - updated 4/2/2017 (v2.28.6) *//*
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?)
@@ -85,7 +85,7 @@
85
85
  colspanLen = parseInt( $cell.attr('colspan'), 10) - 1;
86
86
  // allow data-attribute to be an empty string
87
87
  txt = output.formatData( c, wo, $cell, isHeader );
88
- for (col = 1; col <= colspanLen; col++) {
88
+ for (col = 0; col < colspanLen; col++) {
89
89
  // if we're processing the header & making JSON, the header names need to be unique
90
90
  if ($cell.filter('[rowspan]').length) {
91
91
  rowspanLen = parseInt( $cell.attr('rowspan'), 10);
@@ -1,4 +1,4 @@
1
- /*! Widget: Pager - updated 1/6/2017 (v2.28.4) */
1
+ /*! Widget: Pager - updated 4/2/2017 (v2.28.6) */
2
2
  /* Requires tablesorter v2.8+ and jQuery 1.7+
3
3
  * by Rob Garrison
4
4
  */
@@ -180,8 +180,7 @@
180
180
  t = ts.storage( table, wo.pager_storageKey ) || {}; // fixes #387
181
181
  p.page = ( isNaN( t.page ) ? p.page : t.page ) || p.setPage || 0;
182
182
  p.size = t.size === 'all' ? t.size : ( isNaN( t.size ) ? p.size : t.size ) || p.setSize || 10;
183
- $.data( table, 'pagerLastSize', p.size );
184
- p.$container.find( s.pageSize ).val( p.size );
183
+ tsp.setPageSize( c, p.size );
185
184
  }
186
185
 
187
186
  // skipped rows
@@ -219,7 +218,6 @@
219
218
  initComplete: function( c ) {
220
219
  var p = c.pager;
221
220
  tsp.bindEvents( c );
222
- tsp.setPageSize( c, 0 ); // page size 0 is ignored
223
221
  if ( !p.ajax ) {
224
222
  tsp.hideRowsSetup( c );
225
223
  }
@@ -228,6 +226,7 @@
228
226
  p.initialized = true;
229
227
  p.initializing = false;
230
228
  p.isInitializing = false;
229
+ tsp.setPageSize( c, p.size ); // page size 0 is ignored
231
230
  if ( c.debug ) {
232
231
  console.log( 'Pager: Triggering pagerInitialized' );
233
232
  }
@@ -252,7 +251,8 @@
252
251
  p.currentFilters = $.isArray( filters ) ? filters : c.$table.data( 'lastSearch' );
253
252
  // don't change page if filters are the same (pager updating, etc)
254
253
  if ( e.type === 'filterStart' && wo.pager_pageReset !== false &&
255
- ( c.lastCombinedFilter || '' ) !== ( p.currentFilters || [] ).join( '' ) ) {
254
+ ( c.lastSearch || [] ).join( ',' ) !== ( p.currentFilters || [] ).join( ',' )
255
+ ) {
256
256
  p.page = wo.pager_pageReset; // fixes #456 & #565
257
257
  }
258
258
  })
@@ -309,6 +309,7 @@
309
309
  .on( 'pageSize refreshComplete '.split( ' ' ).join( namespace + ' ' ), function( e, size ) {
310
310
  e.stopPropagation();
311
311
  tsp.setPageSize( c, tsp.parsePageSize( c, size, 'get' ) );
312
+ tsp.moveToPage( c, p, true );
312
313
  tsp.hideRows( c );
313
314
  tsp.updatePageDisplay( c, false );
314
315
  })
@@ -381,6 +382,7 @@
381
382
  // in case there are more than one pager
382
383
  p.$container.find( wo.pager_selectors.pageSize ).val( size );
383
384
  tsp.setPageSize( c, size );
385
+ tsp.moveToPage( c, p, true );
384
386
  tsp.changeHeight( c );
385
387
  }
386
388
  return false;
@@ -693,8 +695,7 @@
693
695
  $el = p.$container.find( c.widgetOptions.pager_selectors.pageSize ),
694
696
  size = $el.val();
695
697
  p.size = tsp.parsePageSize( c, size, 'get' );
696
- $el.val( p.size );
697
- $.data( c.table, 'pagerLastSize', p.size );
698
+ tsp.setPageSize( c, p.size );
698
699
  tsp.pagerArrows( c );
699
700
  if ( !c.widgetOptions.pager_removeRows ) {
700
701
  tsp.hideRows( c );
@@ -1002,7 +1003,7 @@
1002
1003
  $.data( table, 'pagerLastPage', p.page );
1003
1004
  $.data( table, 'pagerLastSize', p.size );
1004
1005
  p.page = 0;
1005
- p.size = 'all';
1006
+ p.size = p.totalPages;
1006
1007
  p.totalPages = 1;
1007
1008
  c.$table
1008
1009
  .addClass( 'pagerDisabled' )
@@ -1127,16 +1128,9 @@
1127
1128
  },
1128
1129
 
1129
1130
  getTotalPages: function( c, p ) {
1130
- return ts.hasWidget( c.table, 'filter' ) ? Math.min( p.totalPages, p.filteredPages ) : p.totalPages;
1131
- },
1132
-
1133
- // set to either set or get value
1134
- parsePageSize: function( c, size, mode ) {
1135
- var p = c.pager,
1136
- s = parseInt( size, 10 ) || p.size || c.widgetOptions.pager_size || 10;
1137
- return p.initialized && (/all/i.test( size ) || s === p.totalRows) ?
1138
- // "get" to set `p.size` or "set" to set `pageSize.val()`
1139
- 'all' : ( mode === 'get' ? s : p.size );
1131
+ return ts.hasWidget( c.table, 'filter' ) ?
1132
+ Math.min( p.totalPages, p.filteredPages ) :
1133
+ p.totalPages;
1140
1134
  },
1141
1135
 
1142
1136
  parsePageNumber: function( c, p ) {
@@ -1147,18 +1141,32 @@
1147
1141
  return p.page;
1148
1142
  },
1149
1143
 
1144
+ // set to either set or get value
1145
+ parsePageSize: function( c, size, mode ) {
1146
+ var p = c.pager,
1147
+ wo = c.widgetOptions,
1148
+ s = parseInt( size, 10 ) || p.size || wo.pager_size || 10;
1149
+ if (p.initialized && (/all/i.test( s + ' ' + size ) || s === p.totalRows)) {
1150
+ // Fixing #1364 & #1366
1151
+ return p.$container.find( wo.pager_selectors.pageSize + ' option[value="all"]').length ?
1152
+ 'all' : p.totalRows;
1153
+ }
1154
+ // "get" to set `p.size` or "set" to set `pageSize.val()`
1155
+ return mode === 'get' ? s : p.size;
1156
+ },
1157
+
1150
1158
  setPageSize: function( c, size ) {
1151
1159
  var p = c.pager,
1152
1160
  table = c.table;
1161
+ // "all" size is only returned if an "all" option exists - fixes #1366
1153
1162
  p.size = tsp.parsePageSize( c, size, 'get' );
1154
1163
  p.$container
1155
1164
  .find( c.widgetOptions.pager_selectors.pageSize )
1156
- .val( tsp.parsePageSize( c, p.size, 'set' ) );
1165
+ .val( p.size );
1157
1166
  $.data( table, 'pagerLastPage', tsp.parsePageNumber( c, p ) );
1158
1167
  $.data( table, 'pagerLastSize', p.size );
1159
1168
  p.totalPages = p.size === 'all' ? 1 : Math.ceil( p.totalRows / p.size );
1160
1169
  p.filteredPages = p.size === 'all' ? 1 : Math.ceil( p.filteredRows / p.size );
1161
- tsp.moveToPage( c, p, true );
1162
1170
  },
1163
1171
 
1164
1172
  moveToFirstPage: function( c, p ) {
@@ -1227,7 +1235,7 @@
1227
1235
  p.page = $.data( table, 'pagerLastPage' ) || p.page || 0;
1228
1236
  size = $el.find('option[selected]' ).val();
1229
1237
  p.size = $.data( table, 'pagerLastSize' ) || tsp.parsePageSize( c, size, 'get' );
1230
- $el.val( p.size ); // set page size
1238
+ tsp.setPageSize( c, p.size ); // set page size
1231
1239
  p.totalPages = p.size === 'all' ? 1 : Math.ceil( tsp.getTotalPages( c, p ) / p.size );
1232
1240
  c.$table.removeClass( 'pagerDisabled' );
1233
1241
  // if table id exists, include page display with aria info
@@ -1246,6 +1254,7 @@
1246
1254
  // tablesorter core update table
1247
1255
  ts.update( c );
1248
1256
  tsp.setPageSize( c, p.size );
1257
+ tsp.moveToPage( c, p, true );
1249
1258
  tsp.hideRowsSetup( c );
1250
1259
  if ( c.debug ) {
1251
1260
  console.log( 'Pager: Enabled' );
@@ -1,4 +1,4 @@
1
- /*! Widget: sort2Hash (BETA) - updated 11/10/2015 (v2.24.4) */
1
+ /*! Widget: sort2Hash (BETA) - updated 4/2/2017 (v2.28.6) */
2
2
  /* Requires tablesorter v2.8+ and jQuery 1.7+
3
3
  * by Rob Garrison
4
4
  */
@@ -227,15 +227,14 @@
227
227
  sort2Hash_separator : '-', // don't '#' or '=' here
228
228
  sort2Hash_headerTextAttr : 'data-header', // data attribute containing alternate header text
229
229
  sort2Hash_directionText : [ 0, 1 ], // [ 'asc', 'desc' ],
230
- sort2Hash_overrideSaveSort : false // if true, override saveSort widget if saved sort available
230
+ sort2Hash_overrideSaveSort : false, // if true, override saveSort widget if saved sort available
231
231
 
232
- // Options below commented out for improved compression
233
- // ******************
234
- // sort2Hash_tableId : null, // this option > table ID > table index on page,
232
+ // this option > table ID > table index on page
233
+ sort2Hash_tableId : null,
235
234
  // custom hash processing functions
236
- // sort2Hash_encodeHash : null,
237
- // sort2Hash_decodeHash : null,
238
- // sort2Hash_cleanHash : null
235
+ sort2Hash_encodeHash : null,
236
+ sort2Hash_decodeHash : null,
237
+ sort2Hash_cleanHash : null
239
238
  },
240
239
  init: function(table, thisWidget, c, wo) {
241
240
  s2h.init( c, wo );
@@ -0,0 +1,104 @@
1
+ /* CSS Column & Row Hightlights - matches the blue theme
2
+ * See https://mottie.github.io/tablesorter/docs/example-css-highlighting.html
3
+ */
4
+ table.hover-highlight td:before,
5
+ table.focus-highlight td:before {
6
+ background: #fff;
7
+ }
8
+
9
+ /* ODD ZEBRA STRIPE color (needs zebra widget) */
10
+ .hover-highlight .odd td:before, .hover-highlight .odd th:before,
11
+ .focus-highlight .odd td:before, .focus-highlight .odd th:before {
12
+ background: #ebf2fa;
13
+ }
14
+ /* EVEN ZEBRA STRIPE color (needs zebra widget) */
15
+ .hover-highlight .even td:before, .hover-highlight .even th:before,
16
+ .focus-highlight .even td:before, .focus-highlight .even th:before {
17
+ background-color: #fff;
18
+ }
19
+
20
+ /* FOCUS ROW highlight color (touch devices) */
21
+ .focus-highlight td:focus::before, .focus-highlight th:focus::before {
22
+ background-color: lightblue;
23
+ }
24
+ /* FOCUS COLUMN highlight color (touch devices) */
25
+ .focus-highlight td:focus::after, .focus-highlight th:focus::after {
26
+ background-color: lightblue;
27
+ }
28
+ /* FOCUS CELL highlight color */
29
+ .focus-highlight th:focus, .focus-highlight td:focus,
30
+ .focus-highlight .even th:focus, .focus-highlight .even td:focus,
31
+ .focus-highlight .odd th:focus, .focus-highlight .odd td:focus {
32
+ background-color: #d9d9d9;
33
+ color: #333;
34
+ }
35
+
36
+ /* HOVER ROW highlight colors */
37
+ table.hover-highlight tbody > tr:hover > td, /* override tablesorter theme row hover */
38
+ table.hover-highlight tbody > tr.odd:hover > td,
39
+ table.hover-highlight tbody > tr.even:hover > td {
40
+ background-color: #ffa;
41
+ }
42
+ /* HOVER COLUMN highlight colors */
43
+ .hover-highlight tbody tr td:hover::after,
44
+ .hover-highlight tbody tr th:hover::after {
45
+ background-color: #ffa;
46
+ }
47
+
48
+ /* ************************************************* */
49
+ /* **** No need to modify the definitions below **** */
50
+ /* ************************************************* */
51
+ .focus-highlight td:focus::after, .focus-highlight th:focus::after,
52
+ .hover-highlight td:hover::after, .hover-highlight th:hover::after {
53
+ content: '';
54
+ position: absolute;
55
+ width: 100%;
56
+ height: 999em;
57
+ left: 0;
58
+ top: -555em;
59
+ z-index: -1;
60
+ }
61
+ .focus-highlight td:focus::before, .focus-highlight th:focus::before {
62
+ content: '';
63
+ position: absolute;
64
+ width: 999em;
65
+ height: 100%;
66
+ left: -555em;
67
+ top: 0;
68
+ z-index: -2;
69
+ }
70
+ /* required styles */
71
+ .hover-highlight,
72
+ .focus-highlight {
73
+ overflow: hidden;
74
+ }
75
+ .hover-highlight td, .hover-highlight th,
76
+ .focus-highlight td, .focus-highlight th {
77
+ position: relative;
78
+ outline: 0;
79
+ }
80
+ /* override the tablesorter theme styling */
81
+ table.hover-highlight, table.hover-highlight tbody > tr > td,
82
+ table.focus-highlight, table.focus-highlight tbody > tr > td,
83
+ /* override zebra styling */
84
+ table.hover-highlight tbody tr.even > th,
85
+ table.hover-highlight tbody tr.even > td,
86
+ table.hover-highlight tbody tr.odd > th,
87
+ table.hover-highlight tbody tr.odd > td,
88
+ table.focus-highlight tbody tr.even > th,
89
+ table.focus-highlight tbody tr.even > td,
90
+ table.focus-highlight tbody tr.odd > th,
91
+ table.focus-highlight tbody tr.odd > td {
92
+ background: transparent;
93
+ }
94
+ /* table background positioned under the highlight */
95
+ table.hover-highlight td:before,
96
+ table.focus-highlight td:before {
97
+ content: '';
98
+ position: absolute;
99
+ width: 100%;
100
+ height: 100%;
101
+ left: 0;
102
+ top: 0;
103
+ z-index: -3;
104
+ }
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.23.5
4
+ version: 1.23.6
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-02-10 00:00:00.000000000 Z
12
+ date: 2017-04-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
@@ -103,6 +103,7 @@ files:
103
103
  - vendor/assets/javascripts/jquery-tablesorter/parsers/parser-ignore-articles.js
104
104
  - vendor/assets/javascripts/jquery-tablesorter/parsers/parser-image.js
105
105
  - vendor/assets/javascripts/jquery-tablesorter/parsers/parser-input-select.js
106
+ - vendor/assets/javascripts/jquery-tablesorter/parsers/parser-leading-zeros.js
106
107
  - vendor/assets/javascripts/jquery-tablesorter/parsers/parser-metric.js
107
108
  - vendor/assets/javascripts/jquery-tablesorter/parsers/parser-named-numbers.js
108
109
  - vendor/assets/javascripts/jquery-tablesorter/parsers/parser-network.js
@@ -145,6 +146,7 @@ files:
145
146
  - vendor/assets/stylesheets/jquery-tablesorter/addons/pager/jquery.tablesorter.pager.css
146
147
  - vendor/assets/stylesheets/jquery-tablesorter/dragtable.mod.css
147
148
  - vendor/assets/stylesheets/jquery-tablesorter/filter.formatter.css
149
+ - vendor/assets/stylesheets/jquery-tablesorter/highlights.css
148
150
  - vendor/assets/stylesheets/jquery-tablesorter/theme.black-ice.css
149
151
  - vendor/assets/stylesheets/jquery-tablesorter/theme.blue.css
150
152
  - vendor/assets/stylesheets/jquery-tablesorter/theme.bootstrap.css
@@ -181,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
183
  version: '0'
182
184
  requirements: []
183
185
  rubyforge_project:
184
- rubygems_version: 2.5.2
186
+ rubygems_version: 2.6.11
185
187
  signing_key:
186
188
  specification_version: 4
187
189
  summary: Simple integration of jquery-tablesorter (Mottie's fork) into the Rails asset