jquery-tablesorter 1.23.5 → 1.23.6

Sign up to get free protection for your applications and to get access to all the features.
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