jquery-tablesorter 1.21.3 → 1.21.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (21) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/jquery-tablesorter/version.rb +1 -1
  4. data/vendor/assets/javascripts/jquery-tablesorter/addons/pager/jquery.tablesorter.pager.js +2 -2
  5. data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.combined.js +48 -30
  6. data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.js +6 -6
  7. data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.widgets.js +42 -24
  8. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-columnSelector.js +18 -13
  9. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-select2.js +41 -23
  10. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter.js +24 -16
  11. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-grouping.js +7 -8
  12. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-pager.js +3 -3
  13. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-resizable.js +1 -1
  14. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-scroller.js +5 -1
  15. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-uitheme.js +16 -6
  16. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-view.js +6 -3
  17. data/vendor/assets/stylesheets/jquery-tablesorter/theme.bootstrap.css +7 -0
  18. data/vendor/assets/stylesheets/jquery-tablesorter/theme.bootstrap_2.css +6 -0
  19. data/vendor/assets/stylesheets/jquery-tablesorter/theme.dropbox.css +2 -4
  20. data/vendor/assets/stylesheets/jquery-tablesorter/theme.grey.css +1 -2
  21. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fb62c8ab5ad34f27a1f4bd10790a80d3c0e373c7
4
- data.tar.gz: 6d530e5d1c5d208a24ef2a2139dc38d9e74353a4
3
+ metadata.gz: 00d5cfb816cce8b645193c850e6ae99698cb2516
4
+ data.tar.gz: 5af380402f10f667792a92c6fff45c6675ad963b
5
5
  SHA512:
6
- metadata.gz: 3f9c35ae24b81cf21f905c2d7cc74d845258dc385bec0fd273673b61e728dddfb8c7f21b640dd5f9c237512f67d82f384665c9dff0efd49e59a3ae6474d8ab79
7
- data.tar.gz: 4077aee386ff83dc67dd9398dd347c49cac084975a0218f1c147718d9a295cd75de4840b02beee2e28730f2ad650956238ebd13693aa26ee4028a52c9655c24b
6
+ metadata.gz: 910fb98292ba03abcbe9936aa464912c2c320665aed95906e681ce9ea07ee60c398be04b65094cc743518c99e3dbc83cb3deaa2f987affc5d65176601028d5f3
7
+ data.tar.gz: c40b9a23019d3ef3d0ec431f50c6ef2bef63f5fb375257f36d50d6baeb425b15b5cc1b69453fb9015e405d0fcb962cbe20c71a27340090865c2a19efe6ca6670
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  Simple integration of jquery-tablesorter into the asset pipeline.
6
6
 
7
- Current tablesorter version: 2.26.5 (6/28/2016), [documentation]
7
+ Current tablesorter version: 2.26.6 (7/11/2016), [documentation]
8
8
 
9
9
  Any issue associated with the js/css files, please report to [Mottie's fork].
10
10
 
@@ -1,7 +1,7 @@
1
1
  module JqueryTablesorter
2
2
  MAJOR = 1
3
3
  MINOR = 21
4
- TINY = 3
4
+ TINY = 4
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 6/28/2015 (v2.26.5)
3
+ * updated 7/11/2016 (v2.26.6)
4
4
  */
5
5
  /*jshint browser:true, jquery:true, unused:false */
6
6
  ;(function($) {
@@ -783,7 +783,7 @@
783
783
  // set to either set or get value
784
784
  parsePageSize = function( p, size, mode ) {
785
785
  var s = parseInt( size, 10 ) || p.size || p.settings.size || 10;
786
- return /all/i.test( size ) || s === p.totalRows ?
786
+ return p.initialized && (/all/i.test( size ) || s === p.totalRows) ?
787
787
  // "get" to get `p.size` or "set" to set `p.$size.val()`
788
788
  'all' : ( mode === 'get' ? s : p.size );
789
789
  },
@@ -4,7 +4,7 @@
4
4
  ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀██
5
5
  █████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
6
6
  */
7
- /*! tablesorter (FORK) - updated 06-28-2016 (v2.26.5)*/
7
+ /*! tablesorter (FORK) - updated 07-11-2016 (v2.26.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($) {
18
18
 
19
- /*! TableSorter (FORK) v2.26.5 *//*
19
+ /*! TableSorter (FORK) v2.26.6 *//*
20
20
  * Client-side table sorting with ease!
21
21
  * @requires jQuery v1.2.6+
22
22
  *
@@ -39,7 +39,7 @@
39
39
  'use strict';
40
40
  var ts = $.tablesorter = {
41
41
 
42
- version : '2.26.5',
42
+ version : '2.26.6',
43
43
 
44
44
  parsers : [],
45
45
  widgets : [],
@@ -1777,14 +1777,14 @@
1777
1777
  regex = ts.regex;
1778
1778
  // first try and sort Hex codes
1779
1779
  if ( regex.hex.test( b ) ) {
1780
- aNum = parseInt( a.match( regex.hex ), 16 );
1781
- bNum = parseInt( b.match( regex.hex ), 16 );
1780
+ aNum = parseInt( ( a || '' ).match( regex.hex ), 16 );
1781
+ bNum = parseInt( ( b || '' ).match( regex.hex ), 16 );
1782
1782
  if ( aNum < bNum ) { return -1; }
1783
1783
  if ( aNum > bNum ) { return 1; }
1784
1784
  }
1785
1785
  // chunk/tokenize
1786
- aNum = a.replace( regex.chunk, '\\0$1\\0' ).replace( regex.chunks, '' ).split( '\\0' );
1787
- bNum = b.replace( regex.chunk, '\\0$1\\0' ).replace( regex.chunks, '' ).split( '\\0' );
1786
+ aNum = ( a || '' ).replace( regex.chunk, '\\0$1\\0' ).replace( regex.chunks, '' ).split( '\\0' );
1787
+ bNum = ( b || '' ).replace( regex.chunk, '\\0$1\\0' ).replace( regex.chunks, '' ).split( '\\0' );
1788
1788
  max = Math.max( aNum.length, bNum.length );
1789
1789
  // natural sorting through split numeric strings and default strings
1790
1790
  for ( indx = 0; indx < max; indx++ ) {
@@ -2839,7 +2839,7 @@
2839
2839
 
2840
2840
  })(jQuery, window, document);
2841
2841
 
2842
- /*! Widget: uitheme - updated 3/26/2015 (v2.21.3) */
2842
+ /*! Widget: uitheme - updated 7/11/2016 (v2.26.6) */
2843
2843
  ;(function ($) {
2844
2844
  'use strict';
2845
2845
  var ts = $.tablesorter || {};
@@ -2897,7 +2897,7 @@
2897
2897
  id: 'uitheme',
2898
2898
  priority: 10,
2899
2899
  format: function(table, c, wo) {
2900
- var i, hdr, icon, time, $header, $icon, $tfoot, $h, oldtheme, oldremove, oldIconRmv, hasOldTheme,
2900
+ var i, tmp, hdr, icon, time, $header, $icon, $tfoot, $h, oldtheme, oldremove, oldIconRmv, hasOldTheme,
2901
2901
  themesAll = ts.themes,
2902
2902
  $table = c.$table.add( $( c.namespace + '_extra_table' ) ),
2903
2903
  $headers = c.$headers.add( $( c.namespace + '_extra_headers' ) ),
@@ -2964,10 +2964,20 @@
2964
2964
  .removeClass(hasOldTheme ? [ oldtheme.icons, oldIconRmv ].join(' ') : '')
2965
2965
  .addClass(themes.icons || '');
2966
2966
  }
2967
- if ($table.hasClass('hasFilters')) {
2968
- $table.children('thead').children('.' + ts.css.filterRow)
2969
- .removeClass(hasOldTheme ? oldtheme.filterRow || '' : '')
2970
- .addClass(themes.filterRow || '');
2967
+ // filter widget initializes after uitheme
2968
+ if (c.widgets.indexOf('filter') > -1) {
2969
+ tmp = function() {
2970
+ $table.children('thead').children('.' + ts.css.filterRow)
2971
+ .removeClass(hasOldTheme ? oldtheme.filterRow || '' : '')
2972
+ .addClass(themes.filterRow || '');
2973
+ };
2974
+ if (wo.filter_initialized) {
2975
+ tmp();
2976
+ } else {
2977
+ $table.one('filterInit', function() {
2978
+ tmp();
2979
+ });
2980
+ }
2971
2981
  }
2972
2982
  }
2973
2983
  for (i = 0; i < c.columns; i++) {
@@ -3104,7 +3114,7 @@
3104
3114
 
3105
3115
  })(jQuery);
3106
3116
 
3107
- /*! Widget: filter - updated 6/28/2015 (v2.26.5) *//*
3117
+ /*! Widget: filter - updated 7/11/2016 (v2.26.6) *//*
3108
3118
  * Requires tablesorter v2.8+ and jQuery 1.7+
3109
3119
  * by Rob Garrison
3110
3120
  */
@@ -3891,12 +3901,13 @@
3891
3901
  .attr( 'data-lastSearchTime', new Date().getTime() )
3892
3902
  .unbind( tmp.replace( ts.regex.spaces, ' ' ) )
3893
3903
  .bind( 'keydown' + namespace, function( event ) {
3894
- if ( event.which === tskeyCodes.escape && !wo.filter_resetOnEsc ) {
3904
+ if ( event.which === tskeyCodes.escape && !table.config.widgetOptions.filter_resetOnEsc ) {
3895
3905
  // prevent keypress event
3896
3906
  return false;
3897
3907
  }
3898
3908
  })
3899
3909
  .bind( 'keyup' + namespace, function( event ) {
3910
+ wo = table.config.widgetOptions; // make sure "wo" isn't cached
3900
3911
  var column = parseInt( $( this ).attr( 'data-column' ), 10 );
3901
3912
  $( this ).attr( 'data-lastSearchTime', new Date().getTime() );
3902
3913
  // emulate what webkit does.... escape clears the filter
@@ -3923,7 +3934,8 @@
3923
3934
  // don't get cached data, in case data-column changes dynamically
3924
3935
  var column = parseInt( $( this ).attr( 'data-column' ), 10 );
3925
3936
  // don't allow 'change' event to process if the input value is the same - fixes #685
3926
- if ( wo.filter_initialized && ( event.which === tskeyCodes.enter || event.type === 'search' ||
3937
+ if ( table.config.widgetOptions.filter_initialized &&
3938
+ ( event.which === tskeyCodes.enter || event.type === 'search' ||
3927
3939
  ( event.type === 'change' ) && this.value !== c.lastSearch[column] ) ||
3928
3940
  // only "input" event fires in MS Edge when clicking the "x" to clear the search
3929
3941
  ( event.type === 'input' && this.value === '' ) ) {
@@ -3972,7 +3984,7 @@
3972
3984
  // show/hide filter row as needed
3973
3985
  c.$table
3974
3986
  .find( '.' + tscss.filterRow )
3975
- .triggerHandler( combinedFilters === '' ? 'mouseleave' : 'mouseenter' );
3987
+ .triggerHandler( tsf.hideFiltersCheck( c ) ? 'mouseleave' : 'mouseenter' );
3976
3988
  }
3977
3989
  // return if the last search is the same; but filter === false when updating the search
3978
3990
  // see example-widget-filter.html filter toggle buttons
@@ -4005,26 +4017,34 @@
4005
4017
  return false;
4006
4018
  }
4007
4019
  },
4020
+ hideFiltersCheck: function( c ) {
4021
+ if (typeof c.widgetOptions.filter_hideFilters === 'function') {
4022
+ var val = c.widgetOptions.filter_hideFilters( c );
4023
+ if (typeof val === 'boolean') {
4024
+ return val;
4025
+ }
4026
+ }
4027
+ return ts.getFilters( c.$table ).join( '' ) === '';
4028
+ },
4008
4029
  hideFilters: function( c, $table ) {
4009
- var timer,
4010
- $row = ( $table || c.$table ).find( '.' + tscss.filterRow ).addClass( tscss.filterRowHide );
4011
- $row
4030
+ var timer;
4031
+ ( $table || c.$table )
4032
+ .find( '.' + tscss.filterRow )
4033
+ .addClass( tscss.filterRowHide )
4012
4034
  .bind( 'mouseenter mouseleave', function( e ) {
4013
4035
  // save event object - http://bugs.jquery.com/ticket/12140
4014
4036
  var event = e,
4015
- $filterRow = $( this );
4037
+ $row = $( this );
4016
4038
  clearTimeout( timer );
4017
4039
  timer = setTimeout( function() {
4018
4040
  if ( /enter|over/.test( event.type ) ) {
4019
- $filterRow.removeClass( tscss.filterRowHide );
4041
+ $row.removeClass( tscss.filterRowHide );
4020
4042
  } else {
4021
4043
  // don't hide if input has focus
4022
4044
  // $( ':focus' ) needs jQuery 1.6+
4023
- if ( $( document.activeElement ).closest( 'tr' )[0] !== $filterRow[0] ) {
4045
+ if ( $( document.activeElement ).closest( 'tr' )[0] !== $row[0] ) {
4024
4046
  // don't hide row if any filter has a value
4025
- if ( c.lastCombinedFilter === '' ) {
4026
- $filterRow.addClass( tscss.filterRowHide );
4027
- }
4047
+ $row.toggleClass( tscss.filterRowHide, tsf.hideFiltersCheck( c ) );
4028
4048
  }
4029
4049
  }
4030
4050
  }, 200 );
@@ -4036,9 +4056,7 @@
4036
4056
  timer = setTimeout( function() {
4037
4057
  clearTimeout( timer );
4038
4058
  // don't hide row if any filter has a value
4039
- if ( ts.getFilters( c.$table ).join( '' ) === '' ) {
4040
- $row.toggleClass( tscss.filterRowHide, event.type !== 'focus' );
4041
- }
4059
+ $row.toggleClass( tscss.filterRowHide, tsf.hideFiltersCheck( c ) && event.type !== 'focus' );
4042
4060
  }, 200 );
4043
4061
  });
4044
4062
  },
@@ -5232,7 +5250,7 @@
5232
5250
 
5233
5251
  })(jQuery, window);
5234
5252
 
5235
- /*! Widget: resizable - updated 6/28/2015 (v2.26.5) */
5253
+ /*! Widget: resizable - updated 6/28/2016 (v2.26.5) */
5236
5254
  /*jshint browser:true, jquery:true, unused:false */
5237
5255
  ;(function ($, window) {
5238
5256
  'use strict';
@@ -1,4 +1,4 @@
1
- /*! TableSorter (FORK) v2.26.5 *//*
1
+ /*! TableSorter (FORK) v2.26.6 *//*
2
2
  * Client-side table sorting with ease!
3
3
  * @requires jQuery v1.2.6+
4
4
  *
@@ -21,7 +21,7 @@
21
21
  'use strict';
22
22
  var ts = $.tablesorter = {
23
23
 
24
- version : '2.26.5',
24
+ version : '2.26.6',
25
25
 
26
26
  parsers : [],
27
27
  widgets : [],
@@ -1759,14 +1759,14 @@
1759
1759
  regex = ts.regex;
1760
1760
  // first try and sort Hex codes
1761
1761
  if ( regex.hex.test( b ) ) {
1762
- aNum = parseInt( a.match( regex.hex ), 16 );
1763
- bNum = parseInt( b.match( regex.hex ), 16 );
1762
+ aNum = parseInt( ( a || '' ).match( regex.hex ), 16 );
1763
+ bNum = parseInt( ( b || '' ).match( regex.hex ), 16 );
1764
1764
  if ( aNum < bNum ) { return -1; }
1765
1765
  if ( aNum > bNum ) { return 1; }
1766
1766
  }
1767
1767
  // chunk/tokenize
1768
- aNum = a.replace( regex.chunk, '\\0$1\\0' ).replace( regex.chunks, '' ).split( '\\0' );
1769
- bNum = b.replace( regex.chunk, '\\0$1\\0' ).replace( regex.chunks, '' ).split( '\\0' );
1768
+ aNum = ( a || '' ).replace( regex.chunk, '\\0$1\\0' ).replace( regex.chunks, '' ).split( '\\0' );
1769
+ bNum = ( b || '' ).replace( regex.chunk, '\\0$1\\0' ).replace( regex.chunks, '' ).split( '\\0' );
1770
1770
  max = Math.max( aNum.length, bNum.length );
1771
1771
  // natural sorting through split numeric strings and default strings
1772
1772
  for ( indx = 0; indx < max; indx++ ) {
@@ -4,7 +4,7 @@
4
4
  ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀██
5
5
  █████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
6
6
  */
7
- /*! tablesorter (FORK) - updated 06-28-2016 (v2.26.5)*/
7
+ /*! tablesorter (FORK) - updated 07-11-2016 (v2.26.6)*/
8
8
  /* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
9
9
  (function(factory) {
10
10
  if (typeof define === 'function' && define.amd) {
@@ -107,7 +107,7 @@
107
107
 
108
108
  })(jQuery, window, document);
109
109
 
110
- /*! Widget: uitheme - updated 3/26/2015 (v2.21.3) */
110
+ /*! Widget: uitheme - updated 7/11/2016 (v2.26.6) */
111
111
  ;(function ($) {
112
112
  'use strict';
113
113
  var ts = $.tablesorter || {};
@@ -165,7 +165,7 @@
165
165
  id: 'uitheme',
166
166
  priority: 10,
167
167
  format: function(table, c, wo) {
168
- var i, hdr, icon, time, $header, $icon, $tfoot, $h, oldtheme, oldremove, oldIconRmv, hasOldTheme,
168
+ var i, tmp, hdr, icon, time, $header, $icon, $tfoot, $h, oldtheme, oldremove, oldIconRmv, hasOldTheme,
169
169
  themesAll = ts.themes,
170
170
  $table = c.$table.add( $( c.namespace + '_extra_table' ) ),
171
171
  $headers = c.$headers.add( $( c.namespace + '_extra_headers' ) ),
@@ -232,10 +232,20 @@
232
232
  .removeClass(hasOldTheme ? [ oldtheme.icons, oldIconRmv ].join(' ') : '')
233
233
  .addClass(themes.icons || '');
234
234
  }
235
- if ($table.hasClass('hasFilters')) {
236
- $table.children('thead').children('.' + ts.css.filterRow)
237
- .removeClass(hasOldTheme ? oldtheme.filterRow || '' : '')
238
- .addClass(themes.filterRow || '');
235
+ // filter widget initializes after uitheme
236
+ if (c.widgets.indexOf('filter') > -1) {
237
+ tmp = function() {
238
+ $table.children('thead').children('.' + ts.css.filterRow)
239
+ .removeClass(hasOldTheme ? oldtheme.filterRow || '' : '')
240
+ .addClass(themes.filterRow || '');
241
+ };
242
+ if (wo.filter_initialized) {
243
+ tmp();
244
+ } else {
245
+ $table.one('filterInit', function() {
246
+ tmp();
247
+ });
248
+ }
239
249
  }
240
250
  }
241
251
  for (i = 0; i < c.columns; i++) {
@@ -372,7 +382,7 @@
372
382
 
373
383
  })(jQuery);
374
384
 
375
- /*! Widget: filter - updated 6/28/2015 (v2.26.5) *//*
385
+ /*! Widget: filter - updated 7/11/2016 (v2.26.6) *//*
376
386
  * Requires tablesorter v2.8+ and jQuery 1.7+
377
387
  * by Rob Garrison
378
388
  */
@@ -1159,12 +1169,13 @@
1159
1169
  .attr( 'data-lastSearchTime', new Date().getTime() )
1160
1170
  .unbind( tmp.replace( ts.regex.spaces, ' ' ) )
1161
1171
  .bind( 'keydown' + namespace, function( event ) {
1162
- if ( event.which === tskeyCodes.escape && !wo.filter_resetOnEsc ) {
1172
+ if ( event.which === tskeyCodes.escape && !table.config.widgetOptions.filter_resetOnEsc ) {
1163
1173
  // prevent keypress event
1164
1174
  return false;
1165
1175
  }
1166
1176
  })
1167
1177
  .bind( 'keyup' + namespace, function( event ) {
1178
+ wo = table.config.widgetOptions; // make sure "wo" isn't cached
1168
1179
  var column = parseInt( $( this ).attr( 'data-column' ), 10 );
1169
1180
  $( this ).attr( 'data-lastSearchTime', new Date().getTime() );
1170
1181
  // emulate what webkit does.... escape clears the filter
@@ -1191,7 +1202,8 @@
1191
1202
  // don't get cached data, in case data-column changes dynamically
1192
1203
  var column = parseInt( $( this ).attr( 'data-column' ), 10 );
1193
1204
  // don't allow 'change' event to process if the input value is the same - fixes #685
1194
- if ( wo.filter_initialized && ( event.which === tskeyCodes.enter || event.type === 'search' ||
1205
+ if ( table.config.widgetOptions.filter_initialized &&
1206
+ ( event.which === tskeyCodes.enter || event.type === 'search' ||
1195
1207
  ( event.type === 'change' ) && this.value !== c.lastSearch[column] ) ||
1196
1208
  // only "input" event fires in MS Edge when clicking the "x" to clear the search
1197
1209
  ( event.type === 'input' && this.value === '' ) ) {
@@ -1240,7 +1252,7 @@
1240
1252
  // show/hide filter row as needed
1241
1253
  c.$table
1242
1254
  .find( '.' + tscss.filterRow )
1243
- .triggerHandler( combinedFilters === '' ? 'mouseleave' : 'mouseenter' );
1255
+ .triggerHandler( tsf.hideFiltersCheck( c ) ? 'mouseleave' : 'mouseenter' );
1244
1256
  }
1245
1257
  // return if the last search is the same; but filter === false when updating the search
1246
1258
  // see example-widget-filter.html filter toggle buttons
@@ -1273,26 +1285,34 @@
1273
1285
  return false;
1274
1286
  }
1275
1287
  },
1288
+ hideFiltersCheck: function( c ) {
1289
+ if (typeof c.widgetOptions.filter_hideFilters === 'function') {
1290
+ var val = c.widgetOptions.filter_hideFilters( c );
1291
+ if (typeof val === 'boolean') {
1292
+ return val;
1293
+ }
1294
+ }
1295
+ return ts.getFilters( c.$table ).join( '' ) === '';
1296
+ },
1276
1297
  hideFilters: function( c, $table ) {
1277
- var timer,
1278
- $row = ( $table || c.$table ).find( '.' + tscss.filterRow ).addClass( tscss.filterRowHide );
1279
- $row
1298
+ var timer;
1299
+ ( $table || c.$table )
1300
+ .find( '.' + tscss.filterRow )
1301
+ .addClass( tscss.filterRowHide )
1280
1302
  .bind( 'mouseenter mouseleave', function( e ) {
1281
1303
  // save event object - http://bugs.jquery.com/ticket/12140
1282
1304
  var event = e,
1283
- $filterRow = $( this );
1305
+ $row = $( this );
1284
1306
  clearTimeout( timer );
1285
1307
  timer = setTimeout( function() {
1286
1308
  if ( /enter|over/.test( event.type ) ) {
1287
- $filterRow.removeClass( tscss.filterRowHide );
1309
+ $row.removeClass( tscss.filterRowHide );
1288
1310
  } else {
1289
1311
  // don't hide if input has focus
1290
1312
  // $( ':focus' ) needs jQuery 1.6+
1291
- if ( $( document.activeElement ).closest( 'tr' )[0] !== $filterRow[0] ) {
1313
+ if ( $( document.activeElement ).closest( 'tr' )[0] !== $row[0] ) {
1292
1314
  // don't hide row if any filter has a value
1293
- if ( c.lastCombinedFilter === '' ) {
1294
- $filterRow.addClass( tscss.filterRowHide );
1295
- }
1315
+ $row.toggleClass( tscss.filterRowHide, tsf.hideFiltersCheck( c ) );
1296
1316
  }
1297
1317
  }
1298
1318
  }, 200 );
@@ -1304,9 +1324,7 @@
1304
1324
  timer = setTimeout( function() {
1305
1325
  clearTimeout( timer );
1306
1326
  // don't hide row if any filter has a value
1307
- if ( ts.getFilters( c.$table ).join( '' ) === '' ) {
1308
- $row.toggleClass( tscss.filterRowHide, event.type !== 'focus' );
1309
- }
1327
+ $row.toggleClass( tscss.filterRowHide, tsf.hideFiltersCheck( c ) && event.type !== 'focus' );
1310
1328
  }, 200 );
1311
1329
  });
1312
1330
  },
@@ -2500,7 +2518,7 @@
2500
2518
 
2501
2519
  })(jQuery, window);
2502
2520
 
2503
- /*! Widget: resizable - updated 6/28/2015 (v2.26.5) */
2521
+ /*! Widget: resizable - updated 6/28/2016 (v2.26.5) */
2504
2522
  /*jshint browser:true, jquery:true, unused:false */
2505
2523
  ;(function ($, window) {
2506
2524
  'use strict';
@@ -1,4 +1,4 @@
1
- /* Widget: columnSelector (responsive table widget) - updated 4/29/2016 (v2.25.9) *//*
1
+ /* Widget: columnSelector (responsive table widget) - updated 7/11/2016 (v2.26.6) *//*
2
2
  * Requires tablesorter v2.8+ and jQuery 1.7+
3
3
  * by Justin Hallett & Rob Garrison
4
4
  */
@@ -348,7 +348,7 @@
348
348
  }
349
349
  // only add resize end if using media queries
350
350
  if ( hasSpans && wo.columnSelector_mediaquery ) {
351
- nspace = c.namespace.slice( 1 ) + 'columnselector';
351
+ nspace = c.namespace + 'columnselector';
352
352
  // Setup window.resizeEnd event
353
353
  $window
354
354
  .off( nspace )
@@ -365,15 +365,18 @@
365
365
  adjustColspans: function(c, wo) {
366
366
  var index, cols, col, span, end, $cell,
367
367
  colSel = c.selector,
368
- autoModeOn = colSel.auto,
369
- $colspans = $( c.namespace + 'columnselectorHasSpan' ),
370
- len = $colspans.length;
371
- if ( len ) {
372
- for ( index = 0; index < len; index++ ) {
373
- $cell = $colspans.eq(index);
374
- col = parseInt( $cell.attr('data-column'), 10 ) || $cell[0].cellIndex;
375
- span = parseInt( $cell.attr('data-col-span'), 10 );
376
- end = col + span;
368
+ filtered = wo.filter_filteredRow || 'filtered',
369
+ autoModeOn = wo.columnSelector_mediaquery && colSel.auto,
370
+ // find all header/footer cells in case a regular column follows a colspan; see #1238
371
+ $headers = c.$table.children( 'thead, tfoot' ).children().children()
372
+ .add( $(c.namespace + '_extra_table').children( 'thead, tfoot' ).children().children() ),
373
+ len = $headers.length;
374
+ for ( index = 0; index < len; index++ ) {
375
+ $cell = $headers.eq(index);
376
+ col = parseInt( $cell.attr('data-column'), 10 ) || $cell[0].cellIndex;
377
+ span = parseInt( $cell.attr('data-col-span'), 10 ) || 1;
378
+ end = col + span;
379
+ if ( span > 1 ) {
377
380
  for ( cols = col; cols < end; cols++ ) {
378
381
  if ( !autoModeOn && colSel.states[ cols ] === false ||
379
382
  autoModeOn && c.$headerIndexed[ cols ] && !c.$headerIndexed[ cols ].is(':visible') ) {
@@ -381,10 +384,12 @@
381
384
  }
382
385
  }
383
386
  if ( span ) {
384
- $cell.removeClass( wo.filter_filteredRow || 'filtered' )[0].colSpan = span;
387
+ $cell.removeClass( filtered )[0].colSpan = span;
385
388
  } else {
386
- $cell.addClass( wo.filter_filteredRow || 'filtered' );
389
+ $cell.addClass( filtered );
387
390
  }
391
+ } else if ( typeof colSel.states[ col ] !== 'undefined' ) {
392
+ $cell.toggleClass( filtered, !colSel.states[ col ] );
388
393
  }
389
394
  }
390
395
  },
@@ -1,4 +1,4 @@
1
- /*! Widget: filter, select2 formatter function - updated 5/28/2016 (v2.26.2) *//*
1
+ /*! Widget: filter, select2 formatter function - updated 7/11/2016 (v2.26.6) *//*
2
2
  * requires: jQuery 1.7.2+, tableSorter (FORK) 2.16+, filter widget 2.16+
3
3
  and select2 v3.4.6+ plugin (this code is NOT compatible with select2 v4+)
4
4
  */
@@ -25,28 +25,40 @@
25
25
 
26
26
  }, select2Def ),
27
27
  arry, data,
28
- c = $cell.closest('table')[0].config,
28
+ // add class to $cell since it may point to a removed DOM node
29
+ // after a "refreshWidgets"; see #1237
30
+ c = $cell.addClass('select2col' + indx).closest('table')[0].config,
29
31
  wo = c.widgetOptions,
30
32
  // Add a hidden input to hold the range values
31
33
  $input = $('<input class="filter" type="hidden">')
32
34
  .appendTo($cell)
33
35
  // hidden filter update namespace trigger by filter widget
34
36
  .bind('change' + c.namespace + 'filter', function(){
35
- var val = this.value;
36
- val = val.replace(/[/()$^]/g, '').split('|');
37
- $cell.find('.select2').select2('val', val);
37
+ var val = convertRegex(this.value);
38
+ c.$table.find('.select2col' + indx + ' .select2').select2('val', val);
38
39
  updateSelect2();
39
40
  }),
40
41
  $header = c.$headerIndexed[indx],
41
42
  onlyAvail = $header.hasClass(wo.filter_onlyAvail),
42
- $shcell = [],
43
43
  matchPrefix = o.match ? '' : '^',
44
44
  matchSuffix = o.match ? '' : '$',
45
+ flags = wo.filter_ignoreCase ? 'i' : '',
46
+
47
+ convertRegex = function(val) {
48
+ // value = '/(^x$|^y$)/' => ['x','y']
49
+ return val
50
+ .replace(/^\/\(\^?/, '')
51
+ .replace(/\$\|\^/g, '|')
52
+ .replace(/\$?\)\/i?$/g, '')
53
+ // unescape special regex characters
54
+ .replace(/\\/g, '')
55
+ .split('|');
56
+ },
45
57
 
46
58
  // this function updates the hidden input and adds the current values to the header cell text
47
59
  updateSelect2 = function() {
48
60
  var arry = false,
49
- v = $cell.find('.select2').select2('val') || o.value || '';
61
+ v = c.$table.find('.select2col' + indx + ' .select2').select2('val') || o.value || '';
50
62
  // convert array to string
51
63
  if ($.isArray(v)) {
52
64
  arry = true;
@@ -60,12 +72,16 @@
60
72
  }
61
73
  $input
62
74
  // add regex, so we filter exact numbers
63
- .val( $.isArray(v) && v.length && v.join('') !== '' ? '/(' + matchPrefix + (v || []).join(matchSuffix + '|' + matchPrefix) + matchSuffix + ')/' : '' )
75
+ .val(
76
+ $.isArray(v) && v.length && v.join('') !== '' ?
77
+ '/(' + matchPrefix + (v || []).join(matchSuffix + '|' + matchPrefix) + matchSuffix + ')/' + flags :
78
+ ''
79
+ )
64
80
  .trigger('search').end()
65
81
  .find('.select2').select2('val', v);
66
82
  // update sticky header cell
67
- if ($shcell.length) {
68
- $shcell.find('.select2').select2('val', v);
83
+ if (c.widgetOptions.$sticky) {
84
+ c.widgetOptions.$sticky.find('.select2col' + indx + ' .select2').select2('val', v);
69
85
  }
70
86
  },
71
87
 
@@ -91,12 +107,13 @@
91
107
  // data options are already defined
92
108
  if (!(o.ajax && !$.isEmptyObject(o.ajax)) && !o.data) {
93
109
  updateOptions();
94
- if (onlyAvail) {
95
- c.$table.bind('filterEnd', function(){
96
- updateOptions();
97
- $cell.add($shcell).find('.select2').select2(o);
98
- });
99
- }
110
+ c.$table.bind('filterEnd', function(){
111
+ updateOptions();
112
+ c.$table
113
+ .find('.select2col' + indx)
114
+ .add(c.widgetOptions.$sticky && c.widgetOptions.$sticky.find('.select2col' + indx))
115
+ .find('.select2').select2(o);
116
+ });
100
117
  }
101
118
 
102
119
  // add a select2 hidden input!
@@ -109,10 +126,10 @@
109
126
  });
110
127
 
111
128
  // update select2 from filter hidden input, in case of saved filters
112
- c.$table.bind('filterFomatterUpdate', function(){
129
+ c.$table.bind('filterFomatterUpdate', function() {
113
130
  // value = '/(^x$|^y$)/' => 'x,y'
114
- var val = c.$table.data('lastSearch')[indx] || '';
115
- val = val.replace(/^\/\(\^?/, '').replace(/\$\|\^/g, '|').replace(/\$?\)\/$/g, '').split('|');
131
+ var val = convertRegex(c.$table.data('lastSearch')[indx] || '');
132
+ $cell = c.$table.find('.select2col' + indx);
116
133
  $cell.find('.select2').select2('val', val);
117
134
  updateSelect2();
118
135
  ts.filter.formatterUpdated($cell, indx);
@@ -120,25 +137,26 @@
120
137
 
121
138
  // has sticky headers?
122
139
  c.$table.bind('stickyHeadersInit', function(){
123
- $shcell = c.widgetOptions.$sticky.find('.' + ts.css.filterRow).children().eq(indx).empty();
140
+ var $shcell = c.widgetOptions.$sticky.find('.select2col' + indx).empty();
124
141
  // add a select2!
125
142
  $('<input class="select2 select2-' + indx + '" type="hidden">')
126
143
  .val(o.value)
127
144
  .appendTo($shcell)
128
145
  .select2(o)
129
146
  .bind('change', function(){
130
- $cell.find('.select2').select2('val', $shcell.find('.select2').select2('val') );
147
+ c.$table.find('.select2col' + indx)
148
+ .find('.select2')
149
+ .select2('val', c.widgetOptions.$sticky.find('.select2col' + indx + ' .select2').select2('val') );
131
150
  updateSelect2();
132
151
  });
133
152
  if (o.cellText) {
134
153
  $shcell.prepend('<label>' + o.cellText + '</label>');
135
154
  }
136
-
137
155
  });
138
156
 
139
157
  // on reset
140
158
  c.$table.bind('filterReset', function(){
141
- $cell.find('.select2').select2('val', o.value || '');
159
+ c.$table.find('.select2col' + indx).find('.select2').select2('val', o.value || '');
142
160
  setTimeout(function(){
143
161
  updateSelect2();
144
162
  }, 0);
@@ -1,4 +1,4 @@
1
- /*! Widget: filter - updated 6/28/2015 (v2.26.5) *//*
1
+ /*! Widget: filter - updated 7/11/2016 (v2.26.6) *//*
2
2
  * Requires tablesorter v2.8+ and jQuery 1.7+
3
3
  * by Rob Garrison
4
4
  */
@@ -785,12 +785,13 @@
785
785
  .attr( 'data-lastSearchTime', new Date().getTime() )
786
786
  .unbind( tmp.replace( ts.regex.spaces, ' ' ) )
787
787
  .bind( 'keydown' + namespace, function( event ) {
788
- if ( event.which === tskeyCodes.escape && !wo.filter_resetOnEsc ) {
788
+ if ( event.which === tskeyCodes.escape && !table.config.widgetOptions.filter_resetOnEsc ) {
789
789
  // prevent keypress event
790
790
  return false;
791
791
  }
792
792
  })
793
793
  .bind( 'keyup' + namespace, function( event ) {
794
+ wo = table.config.widgetOptions; // make sure "wo" isn't cached
794
795
  var column = parseInt( $( this ).attr( 'data-column' ), 10 );
795
796
  $( this ).attr( 'data-lastSearchTime', new Date().getTime() );
796
797
  // emulate what webkit does.... escape clears the filter
@@ -817,7 +818,8 @@
817
818
  // don't get cached data, in case data-column changes dynamically
818
819
  var column = parseInt( $( this ).attr( 'data-column' ), 10 );
819
820
  // don't allow 'change' event to process if the input value is the same - fixes #685
820
- if ( wo.filter_initialized && ( event.which === tskeyCodes.enter || event.type === 'search' ||
821
+ if ( table.config.widgetOptions.filter_initialized &&
822
+ ( event.which === tskeyCodes.enter || event.type === 'search' ||
821
823
  ( event.type === 'change' ) && this.value !== c.lastSearch[column] ) ||
822
824
  // only "input" event fires in MS Edge when clicking the "x" to clear the search
823
825
  ( event.type === 'input' && this.value === '' ) ) {
@@ -866,7 +868,7 @@
866
868
  // show/hide filter row as needed
867
869
  c.$table
868
870
  .find( '.' + tscss.filterRow )
869
- .triggerHandler( combinedFilters === '' ? 'mouseleave' : 'mouseenter' );
871
+ .triggerHandler( tsf.hideFiltersCheck( c ) ? 'mouseleave' : 'mouseenter' );
870
872
  }
871
873
  // return if the last search is the same; but filter === false when updating the search
872
874
  // see example-widget-filter.html filter toggle buttons
@@ -899,26 +901,34 @@
899
901
  return false;
900
902
  }
901
903
  },
904
+ hideFiltersCheck: function( c ) {
905
+ if (typeof c.widgetOptions.filter_hideFilters === 'function') {
906
+ var val = c.widgetOptions.filter_hideFilters( c );
907
+ if (typeof val === 'boolean') {
908
+ return val;
909
+ }
910
+ }
911
+ return ts.getFilters( c.$table ).join( '' ) === '';
912
+ },
902
913
  hideFilters: function( c, $table ) {
903
- var timer,
904
- $row = ( $table || c.$table ).find( '.' + tscss.filterRow ).addClass( tscss.filterRowHide );
905
- $row
914
+ var timer;
915
+ ( $table || c.$table )
916
+ .find( '.' + tscss.filterRow )
917
+ .addClass( tscss.filterRowHide )
906
918
  .bind( 'mouseenter mouseleave', function( e ) {
907
919
  // save event object - http://bugs.jquery.com/ticket/12140
908
920
  var event = e,
909
- $filterRow = $( this );
921
+ $row = $( this );
910
922
  clearTimeout( timer );
911
923
  timer = setTimeout( function() {
912
924
  if ( /enter|over/.test( event.type ) ) {
913
- $filterRow.removeClass( tscss.filterRowHide );
925
+ $row.removeClass( tscss.filterRowHide );
914
926
  } else {
915
927
  // don't hide if input has focus
916
928
  // $( ':focus' ) needs jQuery 1.6+
917
- if ( $( document.activeElement ).closest( 'tr' )[0] !== $filterRow[0] ) {
929
+ if ( $( document.activeElement ).closest( 'tr' )[0] !== $row[0] ) {
918
930
  // don't hide row if any filter has a value
919
- if ( c.lastCombinedFilter === '' ) {
920
- $filterRow.addClass( tscss.filterRowHide );
921
- }
931
+ $row.toggleClass( tscss.filterRowHide, tsf.hideFiltersCheck( c ) );
922
932
  }
923
933
  }
924
934
  }, 200 );
@@ -930,9 +940,7 @@
930
940
  timer = setTimeout( function() {
931
941
  clearTimeout( timer );
932
942
  // don't hide row if any filter has a value
933
- if ( ts.getFilters( c.$table ).join( '' ) === '' ) {
934
- $row.toggleClass( tscss.filterRowHide, event.type !== 'focus' );
935
- }
943
+ $row.toggleClass( tscss.filterRowHide, tsf.hideFiltersCheck( c ) && event.type !== 'focus' );
936
944
  }, 200 );
937
945
  });
938
946
  },
@@ -1,4 +1,4 @@
1
- /*! Widget: grouping - updated 6/28/2015 (v2.26.5) *//*
1
+ /*! Widget: grouping - updated 7/11/2016 (v2.26.6) *//*
2
2
  * Requires tablesorter v2.8+ and jQuery 1.7+
3
3
  * by Rob Garrison
4
4
  */
@@ -151,12 +151,10 @@
151
151
  }
152
152
  }
153
153
  }
154
-
155
154
  // save collapsed groups
156
155
  if ( wo.group_saveGroups &&
157
156
  !$.isEmptyObject( wo.group_collapsedGroups ) &&
158
157
  wo.group_collapsedGroups[ wo.group_collapsedGroup ].length ) {
159
-
160
158
  name = $row.find( '.group-name' ).text().toLowerCase() + $row.attr( 'data-group-index' );
161
159
  isHidden = $.inArray( name, wo.group_collapsedGroups[ wo.group_collapsedGroup ] ) > -1;
162
160
  $row.toggleClass( 'collapsed', isHidden );
@@ -172,7 +170,7 @@
172
170
  var name = ( data.currentGroup || '' ).replace(/</g, '&lt;').replace(/>/g, '&gt;');
173
171
  return '<tr class="group-header ' + c.selectorRemove.slice(1) +
174
172
  '" unselectable="on" ' + ( c.tabIndex ? 'tabindex="0" ' : '' ) + 'data-group-index="' +
175
- ( data.groupIndex++ ) + '">' +
173
+ data.groupIndex + '">' +
176
174
  '<td colspan="' + c.columns + '">' +
177
175
  ( wo.group_collapsible ? '<i/>' : '' ) +
178
176
  '<span class="group-name">' + name + '</span>' +
@@ -183,8 +181,8 @@
183
181
  // save current grouping
184
182
  var saveName, direction,
185
183
  savedGroup = false;
186
- if (wo.group_collapsible && wo.group_saveGroups && ts.storage) {
187
- wo.group_collapsedGroups = ts.storage( c.table, 'tablesorter-groups' ) || {};
184
+ if (wo.group_collapsible && wo.group_saveGroups) {
185
+ wo.group_collapsedGroups = ts.storage && ts.storage( c.table, 'tablesorter-groups' ) || {};
188
186
  // include direction when saving groups (reversed numbers shows different range values)
189
187
  direction = 'dir' + c.sortList[0][1];
190
188
  // combine column, sort direction & grouping as save key
@@ -234,9 +232,10 @@
234
232
  }
235
233
  data.$row.before( tsg.groupHeaderHTML( c, wo, data ) );
236
234
  if ( wo.group_saveGroups && !data.savedGroup && wo.group_collapsed && wo.group_collapsible ) {
237
- // all groups start collapsed
238
- wo.group_collapsedGroups[ wo.group_collapsedGroup ].push( data.currentGroup );
235
+ // all groups start collapsed; data.groupIndex is 1 more than the expected index.
236
+ wo.group_collapsedGroups[ wo.group_collapsedGroup ].push( data.currentGroup + data.groupIndex );
239
237
  }
238
+ data.groupIndex++;
240
239
  }
241
240
  },
242
241
 
@@ -1,4 +1,4 @@
1
- /*! Widget: Pager - updated 6/28/2015 (v2.26.5) */
1
+ /*! Widget: Pager - updated 7/11/2016 (v2.26.6) */
2
2
  /* Requires tablesorter v2.8+ and jQuery 1.7+
3
3
  * by Rob Garrison
4
4
  */
@@ -1085,7 +1085,7 @@
1085
1085
  p.filteredRows = typeof tmp.filtered !== 'undefined' ? tmp.filtered :
1086
1086
  ( c.debug ? console.error('Pager: no initial filtered page set!') || 0 : 0 );
1087
1087
  tsp.updatePageDisplay( c, false );
1088
- } else {
1088
+ } else if (p.initialized) {
1089
1089
  tsp.getAjax( c );
1090
1090
  }
1091
1091
  } else if ( !p.ajax ) {
@@ -1115,7 +1115,7 @@
1115
1115
  parsePageSize: function( c, size, mode ) {
1116
1116
  var p = c.pager,
1117
1117
  s = parseInt( size, 10 ) || p.size || c.widgetOptions.pager_size || 10;
1118
- return /all/i.test( size ) || s === p.totalRows ?
1118
+ return p.initialized && (/all/i.test( size ) || s === p.totalRows) ?
1119
1119
  // "get" to set `p.size` or "set" to set `p.$size.val()`
1120
1120
  'all' : ( mode === 'get' ? s : p.size );
1121
1121
  },
@@ -1,4 +1,4 @@
1
- /*! Widget: resizable - updated 6/28/2015 (v2.26.5) */
1
+ /*! Widget: resizable - updated 6/28/2016 (v2.26.5) */
2
2
  /*jshint browser:true, jquery:true, unused:false */
3
3
  ;(function ($, window) {
4
4
  'use strict';
@@ -1,4 +1,4 @@
1
- /*! Widget: scroller - updated 6/15/2016 (v2.26.3) *//*
1
+ /*! Widget: scroller - updated 7/11/2016 (v2.26.6) *//*
2
2
  Copyright (C) 2011 T. Connell & Associates, Inc.
3
3
 
4
4
  Dual-licensed under the MIT and GPL licenses
@@ -370,6 +370,8 @@
370
370
  $tableWrap = $table.parent(),
371
371
  $hdr = wo.scroller_$header,
372
372
  $foot = wo.scroller_$footer,
373
+ $win = $(window),
374
+ position = [ $win.scrollLeft(), $win.scrollTop() ],
373
375
  id = c.namespace.slice( 1 ) + 'tsscroller',
374
376
  // Hide other scrollers so we can resize
375
377
  $div = $( 'div.' + tscss.scrollerWrap + '[id!="' + id + '"]' )
@@ -459,6 +461,8 @@
459
461
  .find( '.' + tscss.scrollerFixed )
460
462
  .find( '.' + tscss.scrollerTable )
461
463
  .scrollTop( wo.scroller_saved[1] );
464
+ $win.scrollLeft( position[0] );
465
+ $win.scrollTop( position[1] );
462
466
 
463
467
  // update resizable widget handles
464
468
  setTimeout( function() {
@@ -1,4 +1,4 @@
1
- /*! Widget: uitheme - updated 3/26/2015 (v2.21.3) */
1
+ /*! Widget: uitheme - updated 7/11/2016 (v2.26.6) */
2
2
  ;(function ($) {
3
3
  'use strict';
4
4
  var ts = $.tablesorter || {};
@@ -56,7 +56,7 @@
56
56
  id: 'uitheme',
57
57
  priority: 10,
58
58
  format: function(table, c, wo) {
59
- var i, hdr, icon, time, $header, $icon, $tfoot, $h, oldtheme, oldremove, oldIconRmv, hasOldTheme,
59
+ var i, tmp, hdr, icon, time, $header, $icon, $tfoot, $h, oldtheme, oldremove, oldIconRmv, hasOldTheme,
60
60
  themesAll = ts.themes,
61
61
  $table = c.$table.add( $( c.namespace + '_extra_table' ) ),
62
62
  $headers = c.$headers.add( $( c.namespace + '_extra_headers' ) ),
@@ -123,10 +123,20 @@
123
123
  .removeClass(hasOldTheme ? [ oldtheme.icons, oldIconRmv ].join(' ') : '')
124
124
  .addClass(themes.icons || '');
125
125
  }
126
- if ($table.hasClass('hasFilters')) {
127
- $table.children('thead').children('.' + ts.css.filterRow)
128
- .removeClass(hasOldTheme ? oldtheme.filterRow || '' : '')
129
- .addClass(themes.filterRow || '');
126
+ // filter widget initializes after uitheme
127
+ if (c.widgets.indexOf('filter') > -1) {
128
+ tmp = function() {
129
+ $table.children('thead').children('.' + ts.css.filterRow)
130
+ .removeClass(hasOldTheme ? oldtheme.filterRow || '' : '')
131
+ .addClass(themes.filterRow || '');
132
+ };
133
+ if (wo.filter_initialized) {
134
+ tmp();
135
+ } else {
136
+ $table.one('filterInit', function() {
137
+ tmp();
138
+ });
139
+ }
130
140
  }
131
141
  }
132
142
  for (i = 0; i < c.columns; i++) {
@@ -1,4 +1,4 @@
1
- /* Widget: view (beta) - updated 10/31/2015 (v2.24.0) */
1
+ /* Widget: view (beta) - updated 7/11/2016 (v2.26.6) */
2
2
  /* By Justin F. Hallett (https://github.com/TheSin-)
3
3
  * Requires tablesorter v2.8+ and jQuery 1.7+
4
4
  */
@@ -100,7 +100,10 @@
100
100
  var content = $(v).html();
101
101
  // Add 2 spans, one is dropped when using .html()
102
102
  var span = $('<span />').append($('<span/>', attrs).append(content));
103
- tmpl = tmpl.replace(reg, span.html());
103
+ tmpl = tmpl.replace(new RegExp(reg, 'g'), span.html());
104
+
105
+ reg = '{col' + k + ':raw}';
106
+ tmpl = tmpl.replace(new RegExp(reg, 'g'), $(v).text());
104
107
  });
105
108
 
106
109
  var $tmpl = $(tmpl);
@@ -115,6 +118,7 @@
115
118
  });
116
119
 
117
120
  $(wo.view_container).append($container);
121
+ c.$table.triggerHandler('viewComplete');
118
122
  },
119
123
 
120
124
  removeView: function(c, wo) {
@@ -151,7 +155,6 @@
151
155
  c.$table.on('tablesorter-ready', function() {
152
156
  view.buildToolBar(c, wo);
153
157
  view.buildView(c, wo);
154
- c.$table.triggerHandler('viewComplete');
155
158
  });
156
159
  },
157
160
 
@@ -23,10 +23,17 @@
23
23
  cursor: default;
24
24
  }
25
25
 
26
+ .tablesorter-bootstrap .tablesorter-header.sorter-false i.tablesorter-icon {
27
+ display: none;
28
+ }
29
+
26
30
  .tablesorter-bootstrap .tablesorter-header-inner {
27
31
  position: relative;
28
32
  padding: 4px 18px 4px 4px;
29
33
  }
34
+ .tablesorter-bootstrap .sorter-false .tablesorter-header-inner {
35
+ padding: 4px;
36
+ }
30
37
 
31
38
  /* bootstrap uses <i> for icons */
32
39
  .tablesorter-bootstrap .tablesorter-header i.tablesorter-icon {
@@ -34,11 +34,17 @@
34
34
  .tablesorter-bootstrap .sorter-false {
35
35
  cursor: default;
36
36
  }
37
+ .tablesorter-bootstrap .tablesorter-header.sorter-false i.tablesorter-icon {
38
+ display: none;
39
+ }
37
40
 
38
41
  .tablesorter-bootstrap .tablesorter-header-inner {
39
42
  position: relative;
40
43
  padding: 4px 18px 4px 4px;
41
44
  }
45
+ .tablesorter-bootstrap .sorter-false .tablesorter-header-inner {
46
+ padding: 4px;
47
+ }
42
48
 
43
49
  /* bootstrap uses <i> for icons */
44
50
  .tablesorter-bootstrap .tablesorter-header i.tablesorter-icon {
@@ -79,10 +79,8 @@
79
79
  cursor: default;
80
80
  }
81
81
 
82
- .tablesorter-dropbox thead .sorter-false i.tablesorter-icon,
83
- .tablesorter-dropbox thead .sorter-false:hover i.tablesorter-icon {
84
- background-image: none;
85
- padding: 4px;
82
+ .tablesorter-dropbox thead .sorter-false i.tablesorter-icon {
83
+ display: none;
86
84
  }
87
85
 
88
86
  /* tbody */
@@ -85,8 +85,7 @@
85
85
  cursor: default;
86
86
  }
87
87
  .tablesorter-grey thead .sorter-false i.tablesorter-icon {
88
- background-image: none;
89
- padding: 4px;
88
+ display: none;
90
89
  }
91
90
 
92
91
  /* tfoot */
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.21.3
4
+ version: 1.21.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jun Lin
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-06-28 00:00:00.000000000 Z
12
+ date: 2016-07-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties