jquery-tablesorter 1.20.1 → 1.20.2

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: be1871fe019187a3a9ede62fe42793b65d00594e
4
- data.tar.gz: 016ffee69c030c956b4f7a38b04b2d9489a29a2c
3
+ metadata.gz: 19368ab000f6255ad881bc8de033aeac5f2f28c1
4
+ data.tar.gz: 253d804a8e656d63c63f20580c71da20c223671f
5
5
  SHA512:
6
- metadata.gz: 8994b468e65125354e889fef34523bd1bd325b10aa2cf2999c5534fcd99e0d9b00fb16e45d44ee09bfb45b9ffea795c403aa32bed780d7b23395a5dfacc2de6c
7
- data.tar.gz: ba2cff70a88e65d42c2015fdf47d6b8bf7b8069b3e889aae2c74f57ef5e96b226bac537565c76581e765bc6c58ae97df135ffec8efc9df7a93400ac2520918d2
6
+ metadata.gz: 020827d35135c9b0e1f0650409a9afa3e19e6f7dc58ec76c7249a26df4c0e8f183a7fe8de80b5e8ddb9391c4e1a6a700059cdcf50a2a10af744683212dcfed9e
7
+ data.tar.gz: eb0f673d5955bc90fa4d7e83624cb3c326e85086c93711bda194ae6f4d9097b383f2bf2746e81e904a056c6a81d2a8dfdef267649ad455f2bb0739db4b4fbaaa
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  Simple integration of jquery-tablesorter into the asset pipeline.
6
6
 
7
- Current tablesorter version: 2.25.1 (1/10/2016), [documentation]
7
+ Current tablesorter version: 2.25.2 (1/15/2016), [documentation]
8
8
 
9
9
  Any issue associated with the js/css files, please report to [Mottie's fork].
10
10
 
@@ -24,7 +24,7 @@ Or install it yourself as:
24
24
 
25
25
  ## Requirements
26
26
 
27
- It should work with Rails 3.2 and higher (tested up to 4.2) as well as with ruby 1.9.3 - 2.2.x.
27
+ It should work with Rails 3.2 and higher (tested up to 4.2) as well as with ruby 1.9.3 - 2.3.x.
28
28
  Each release is always tested with the latest version of both.
29
29
 
30
30
  ## Usage
@@ -1,7 +1,7 @@
1
1
  module JqueryTablesorter
2
2
  MAJOR = 1
3
3
  MINOR = 20
4
- TINY = 1
4
+ TINY = 2
5
5
 
6
6
  VERSION = [MAJOR, MINOR, TINY].compact.join('.')
7
7
  end
@@ -4,7 +4,7 @@
4
4
  ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀██
5
5
  █████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
6
6
  */
7
- /*! tablesorter (FORK) - updated 01-10-2016 (v2.25.1)*/
7
+ /*! tablesorter (FORK) - updated 01-15-2016 (v2.25.2)*/
8
8
  /* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
9
9
  (function(factory) {
10
10
  if (typeof define === 'function' && define.amd) {
@@ -16,7 +16,7 @@
16
16
  }
17
17
  }(function($) {
18
18
 
19
- /*! TableSorter (FORK) v2.25.1 *//*
19
+ /*! TableSorter (FORK) v2.25.2 *//*
20
20
  * Client-side table sorting with ease!
21
21
  * @requires jQuery v1.2.6+
22
22
  *
@@ -39,7 +39,7 @@
39
39
  'use strict';
40
40
  var ts = $.tablesorter = {
41
41
 
42
- version : '2.25.1',
42
+ version : '2.25.2',
43
43
 
44
44
  parsers : [],
45
45
  widgets : [],
@@ -208,6 +208,10 @@
208
208
  bottom : false
209
209
  },
210
210
 
211
+ keyCodes : {
212
+ enter : 13
213
+ },
214
+
211
215
  // placeholder date parser data (globalize)
212
216
  dates : {},
213
217
 
@@ -476,7 +480,7 @@
476
480
  // only recognize left clicks
477
481
  if ( ( ( e.which || e.button ) !== 1 && !type.match( ' ' + c.pointerClick + ' | sort | keyup ' ) ) ||
478
482
  // allow pressing enter
479
- ( type === ' keyup ' && e.which !== 13 ) ||
483
+ ( type === ' keyup ' && e.which !== ts.keyCodes.enter ) ||
480
484
  // allow triggering a click event (e.which is undefined) & ignore physical clicks
481
485
  ( type.match( ' ' + c.pointerClick + ' ' ) && typeof e.which !== 'undefined' ) ) {
482
486
  return;
@@ -1064,8 +1068,8 @@
1064
1068
  // find the footer
1065
1069
  $headers = c.$table
1066
1070
  .find( 'tfoot tr' )
1067
- .add( $( c.namespace + '_extra_headers' ).children( 'tr' ) )
1068
1071
  .children( 'td, th' )
1072
+ .add( $( c.namespace + '_extra_headers' ) )
1069
1073
  .removeClass( css.join( ' ' ) );
1070
1074
  // remove all header information
1071
1075
  c.$headers
@@ -3086,7 +3090,7 @@
3086
3090
 
3087
3091
  })(jQuery);
3088
3092
 
3089
- /*! Widget: filter - updated 1/10/2016 (v2.25.1) *//*
3093
+ /*! Widget: filter - updated 1/15/2016 (v2.25.2) *//*
3090
3094
  * Requires tablesorter v2.8+ and jQuery 1.7+
3091
3095
  * by Rob Garrison
3092
3096
  */
@@ -3094,7 +3098,8 @@
3094
3098
  'use strict';
3095
3099
  var tsf, tsfRegex,
3096
3100
  ts = $.tablesorter || {},
3097
- tscss = ts.css;
3101
+ tscss = ts.css,
3102
+ tskeyCodes = ts.keyCodes;
3098
3103
 
3099
3104
  $.extend( tscss, {
3100
3105
  filterRow : 'tablesorter-filter-row',
@@ -3103,6 +3108,14 @@
3103
3108
  filterRowHide : 'hideme'
3104
3109
  });
3105
3110
 
3111
+ $.extend( tskeyCodes, {
3112
+ backSpace : 8,
3113
+ escape : 27,
3114
+ space : 32,
3115
+ left : 37,
3116
+ down : 40
3117
+ });
3118
+
3106
3119
  ts.addWidget({
3107
3120
  id: 'filter',
3108
3121
  priority: 50,
@@ -3127,6 +3140,7 @@
3127
3140
  filter_onlyAvail : 'filter-onlyAvail', // a header with a select dropdown & this class name will only show available ( visible ) options within the drop down
3128
3141
  filter_placeholder : { search : '', select : '' }, // default placeholder text ( overridden by any header 'data-placeholder' setting )
3129
3142
  filter_reset : null, // jQuery selector string of an element used to reset the filters
3143
+ filter_resetOnEsc : true, // Reset filter input when the user presses escape - normalized across browsers
3130
3144
  filter_saveFilters : false, // Use the $.tablesorter.storage utility to save the most recent filters
3131
3145
  filter_searchDelay : 300, // typing delay in milliseconds before starting a search
3132
3146
  filter_searchFiltered: true, // allow searching through already filtered rows in special circumstances; will speed up searching in large tables if true
@@ -3835,18 +3849,25 @@
3835
3849
  ts.setFilters( table, c.$table.data( 'lastSearch' ) || [], internal === false );
3836
3850
  }
3837
3851
  // unbind events
3838
- tmp = ( 'keypress keyup search change '.split( ' ' ).join( namespace + ' ' ) );
3852
+ tmp = ( 'keypress keyup keydown search change input '.split( ' ' ).join( namespace + ' ' ) );
3839
3853
  $el
3840
3854
  // use data attribute instead of jQuery data since the head is cloned without including
3841
3855
  // the data/binding
3842
3856
  .attr( 'data-lastSearchTime', new Date().getTime() )
3843
3857
  .unbind( tmp.replace( ts.regex.spaces, ' ' ) )
3844
- // include change for select - fixes #473
3858
+ .bind( 'keydown' + namespace, function( event ) {
3859
+ if ( event.which === tskeyCodes.escape && !wo.filter_resetOnEsc ) {
3860
+ // prevent keypress event
3861
+ return false;
3862
+ }
3863
+ })
3845
3864
  .bind( 'keyup' + namespace, function( event ) {
3865
+ var column = parseInt( $( this ).attr( 'data-column' ), 10 );
3846
3866
  $( this ).attr( 'data-lastSearchTime', new Date().getTime() );
3847
3867
  // emulate what webkit does.... escape clears the filter
3848
- if ( event.which === 27 ) {
3849
- this.value = '';
3868
+ if ( event.which === tskeyCodes.escape ) {
3869
+ // make sure to restore the last value on escape
3870
+ this.value = wo.filter_resetOnEsc ? '' : c.lastSearch[column];
3850
3871
  // live search
3851
3872
  } else if ( wo.filter_liveSearch === false ) {
3852
3873
  return;
@@ -3855,19 +3876,21 @@
3855
3876
  // liveSearch can contain a min value length; ignore arrow and meta keys, but allow backspace
3856
3877
  ( typeof wo.filter_liveSearch === 'number' && this.value.length < wo.filter_liveSearch ) ||
3857
3878
  // let return & backspace continue on, but ignore arrows & non-valid characters
3858
- ( event.which !== 13 && event.which !== 8 &&
3859
- ( event.which < 32 || ( event.which >= 37 && event.which <= 40 ) ) ) ) ) {
3879
+ ( event.which !== tskeyCodes.enter && event.which !== tskeyCodes.backSpace &&
3880
+ ( event.which < tskeyCodes.space || ( event.which >= tskeyCodes.left && event.which <= tskeyCodes.down ) ) ) ) ) {
3860
3881
  return;
3861
3882
  }
3862
3883
  // change event = no delay; last true flag tells getFilters to skip newest timed input
3863
3884
  tsf.searching( table, true, true );
3864
3885
  })
3865
- .bind( 'search change keypress '.split( ' ' ).join( namespace + ' ' ), function( event ) {
3886
+ // include change for select - fixes #473
3887
+ .bind( 'search change keypress input '.split( ' ' ).join( namespace + ' ' ), function( event ) {
3866
3888
  // don't get cached data, in case data-column changes dynamically
3867
3889
  var column = parseInt( $( this ).attr( 'data-column' ), 10 );
3868
3890
  // don't allow 'change' event to process if the input value is the same - fixes #685
3869
- if ( wo.filter_initialized && ( event.which === 13 || event.type === 'search' ||
3870
- event.type === 'change' && this.value !== c.lastSearch[column] ) ) {
3891
+ if ( wo.filter_initialized && ( event.which === tskeyCodes.enter || event.type === 'search' ||
3892
+ // only "input" event fires in MS Edge when clicking the "x" to clear the search
3893
+ ( event.type === 'change' || event.type === 'input' ) && this.value !== c.lastSearch[column] ) ) {
3871
3894
  event.preventDefault();
3872
3895
  // init search with no delay
3873
3896
  $( this ).attr( 'data-lastSearchTime', new Date().getTime() );
@@ -1,4 +1,4 @@
1
- /*! TableSorter (FORK) v2.25.1 *//*
1
+ /*! TableSorter (FORK) v2.25.2 *//*
2
2
  * Client-side table sorting with ease!
3
3
  * @requires jQuery v1.2.6+
4
4
  *
@@ -21,7 +21,7 @@
21
21
  'use strict';
22
22
  var ts = $.tablesorter = {
23
23
 
24
- version : '2.25.1',
24
+ version : '2.25.2',
25
25
 
26
26
  parsers : [],
27
27
  widgets : [],
@@ -190,6 +190,10 @@
190
190
  bottom : false
191
191
  },
192
192
 
193
+ keyCodes : {
194
+ enter : 13
195
+ },
196
+
193
197
  // placeholder date parser data (globalize)
194
198
  dates : {},
195
199
 
@@ -458,7 +462,7 @@
458
462
  // only recognize left clicks
459
463
  if ( ( ( e.which || e.button ) !== 1 && !type.match( ' ' + c.pointerClick + ' | sort | keyup ' ) ) ||
460
464
  // allow pressing enter
461
- ( type === ' keyup ' && e.which !== 13 ) ||
465
+ ( type === ' keyup ' && e.which !== ts.keyCodes.enter ) ||
462
466
  // allow triggering a click event (e.which is undefined) & ignore physical clicks
463
467
  ( type.match( ' ' + c.pointerClick + ' ' ) && typeof e.which !== 'undefined' ) ) {
464
468
  return;
@@ -1046,8 +1050,8 @@
1046
1050
  // find the footer
1047
1051
  $headers = c.$table
1048
1052
  .find( 'tfoot tr' )
1049
- .add( $( c.namespace + '_extra_headers' ).children( 'tr' ) )
1050
1053
  .children( 'td, th' )
1054
+ .add( $( c.namespace + '_extra_headers' ) )
1051
1055
  .removeClass( css.join( ' ' ) );
1052
1056
  // remove all header information
1053
1057
  c.$headers
@@ -4,7 +4,7 @@
4
4
  ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀██
5
5
  █████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀
6
6
  */
7
- /*! tablesorter (FORK) - updated 01-10-2016 (v2.25.1)*/
7
+ /*! tablesorter (FORK) - updated 01-15-2016 (v2.25.2)*/
8
8
  /* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
9
9
  (function(factory) {
10
10
  if (typeof define === 'function' && define.amd) {
@@ -372,7 +372,7 @@
372
372
 
373
373
  })(jQuery);
374
374
 
375
- /*! Widget: filter - updated 1/10/2016 (v2.25.1) *//*
375
+ /*! Widget: filter - updated 1/15/2016 (v2.25.2) *//*
376
376
  * Requires tablesorter v2.8+ and jQuery 1.7+
377
377
  * by Rob Garrison
378
378
  */
@@ -380,7 +380,8 @@
380
380
  'use strict';
381
381
  var tsf, tsfRegex,
382
382
  ts = $.tablesorter || {},
383
- tscss = ts.css;
383
+ tscss = ts.css,
384
+ tskeyCodes = ts.keyCodes;
384
385
 
385
386
  $.extend( tscss, {
386
387
  filterRow : 'tablesorter-filter-row',
@@ -389,6 +390,14 @@
389
390
  filterRowHide : 'hideme'
390
391
  });
391
392
 
393
+ $.extend( tskeyCodes, {
394
+ backSpace : 8,
395
+ escape : 27,
396
+ space : 32,
397
+ left : 37,
398
+ down : 40
399
+ });
400
+
392
401
  ts.addWidget({
393
402
  id: 'filter',
394
403
  priority: 50,
@@ -413,6 +422,7 @@
413
422
  filter_onlyAvail : 'filter-onlyAvail', // a header with a select dropdown & this class name will only show available ( visible ) options within the drop down
414
423
  filter_placeholder : { search : '', select : '' }, // default placeholder text ( overridden by any header 'data-placeholder' setting )
415
424
  filter_reset : null, // jQuery selector string of an element used to reset the filters
425
+ filter_resetOnEsc : true, // Reset filter input when the user presses escape - normalized across browsers
416
426
  filter_saveFilters : false, // Use the $.tablesorter.storage utility to save the most recent filters
417
427
  filter_searchDelay : 300, // typing delay in milliseconds before starting a search
418
428
  filter_searchFiltered: true, // allow searching through already filtered rows in special circumstances; will speed up searching in large tables if true
@@ -1121,18 +1131,25 @@
1121
1131
  ts.setFilters( table, c.$table.data( 'lastSearch' ) || [], internal === false );
1122
1132
  }
1123
1133
  // unbind events
1124
- tmp = ( 'keypress keyup search change '.split( ' ' ).join( namespace + ' ' ) );
1134
+ tmp = ( 'keypress keyup keydown search change input '.split( ' ' ).join( namespace + ' ' ) );
1125
1135
  $el
1126
1136
  // use data attribute instead of jQuery data since the head is cloned without including
1127
1137
  // the data/binding
1128
1138
  .attr( 'data-lastSearchTime', new Date().getTime() )
1129
1139
  .unbind( tmp.replace( ts.regex.spaces, ' ' ) )
1130
- // include change for select - fixes #473
1140
+ .bind( 'keydown' + namespace, function( event ) {
1141
+ if ( event.which === tskeyCodes.escape && !wo.filter_resetOnEsc ) {
1142
+ // prevent keypress event
1143
+ return false;
1144
+ }
1145
+ })
1131
1146
  .bind( 'keyup' + namespace, function( event ) {
1147
+ var column = parseInt( $( this ).attr( 'data-column' ), 10 );
1132
1148
  $( this ).attr( 'data-lastSearchTime', new Date().getTime() );
1133
1149
  // emulate what webkit does.... escape clears the filter
1134
- if ( event.which === 27 ) {
1135
- this.value = '';
1150
+ if ( event.which === tskeyCodes.escape ) {
1151
+ // make sure to restore the last value on escape
1152
+ this.value = wo.filter_resetOnEsc ? '' : c.lastSearch[column];
1136
1153
  // live search
1137
1154
  } else if ( wo.filter_liveSearch === false ) {
1138
1155
  return;
@@ -1141,19 +1158,21 @@
1141
1158
  // liveSearch can contain a min value length; ignore arrow and meta keys, but allow backspace
1142
1159
  ( typeof wo.filter_liveSearch === 'number' && this.value.length < wo.filter_liveSearch ) ||
1143
1160
  // let return & backspace continue on, but ignore arrows & non-valid characters
1144
- ( event.which !== 13 && event.which !== 8 &&
1145
- ( event.which < 32 || ( event.which >= 37 && event.which <= 40 ) ) ) ) ) {
1161
+ ( event.which !== tskeyCodes.enter && event.which !== tskeyCodes.backSpace &&
1162
+ ( event.which < tskeyCodes.space || ( event.which >= tskeyCodes.left && event.which <= tskeyCodes.down ) ) ) ) ) {
1146
1163
  return;
1147
1164
  }
1148
1165
  // change event = no delay; last true flag tells getFilters to skip newest timed input
1149
1166
  tsf.searching( table, true, true );
1150
1167
  })
1151
- .bind( 'search change keypress '.split( ' ' ).join( namespace + ' ' ), function( event ) {
1168
+ // include change for select - fixes #473
1169
+ .bind( 'search change keypress input '.split( ' ' ).join( namespace + ' ' ), function( event ) {
1152
1170
  // don't get cached data, in case data-column changes dynamically
1153
1171
  var column = parseInt( $( this ).attr( 'data-column' ), 10 );
1154
1172
  // don't allow 'change' event to process if the input value is the same - fixes #685
1155
- if ( wo.filter_initialized && ( event.which === 13 || event.type === 'search' ||
1156
- event.type === 'change' && this.value !== c.lastSearch[column] ) ) {
1173
+ if ( wo.filter_initialized && ( event.which === tskeyCodes.enter || event.type === 'search' ||
1174
+ // only "input" event fires in MS Edge when clicking the "x" to clear the search
1175
+ ( event.type === 'change' || event.type === 'input' ) && this.value !== c.lastSearch[column] ) ) {
1157
1176
  event.preventDefault();
1158
1177
  // init search with no delay
1159
1178
  $( this ).attr( 'data-lastSearchTime', new Date().getTime() );
@@ -1,4 +1,4 @@
1
- /*! Parser: input & select - updated 12/13/2015 (v2.25.0) *//*
1
+ /*! Parser: input & select - updated 1/15/2016 (v2.25.2) *//*
2
2
  * for jQuery 1.7+ & tablesorter 2.7.11+
3
3
  * Demo: http://mottie.github.com/tablesorter/docs/example-widget-grouping.html
4
4
  */
@@ -158,16 +158,16 @@
158
158
  $( ':focus' ).blur();
159
159
  }
160
160
  })
161
- .on( 'focus' + namespace, 'select, input, textarea', function() {
161
+ .on( 'focus' + namespace, 'select, input:not([type=checkbox]), textarea', function() {
162
162
  $( this ).data( 'ts-original-value', this.value );
163
163
  })
164
- .on( 'blur' + namespace, 'input, textarea', function() {
164
+ .on( 'blur' + namespace, 'input:not([type=checkbox]), textarea', function() {
165
165
  // restore input value;
166
166
  // 'change' is triggered before 'blur' so this doesn't replace the new update with the original
167
167
  this.value = $( this ).data( 'ts-original-value' );
168
168
  })
169
169
  .on( 'change keyup '.split( ' ' ).join( namespace + ' ' ), 'select, input, textarea', function( event ) {
170
- if ( event.which === 27 ) {
170
+ if ( event.which === 27 && !( this.nodeName === 'INPUT' && this.type === 'checkbox' ) ) {
171
171
  // escape: restore original value
172
172
  this.value = $( this ).data( 'ts-original-value' );
173
173
  return;
@@ -1,4 +1,4 @@
1
- /*! Widget: filter - updated 1/10/2016 (v2.25.1) *//*
1
+ /*! Widget: filter - updated 1/15/2016 (v2.25.2) *//*
2
2
  * Requires tablesorter v2.8+ and jQuery 1.7+
3
3
  * by Rob Garrison
4
4
  */
@@ -6,7 +6,8 @@
6
6
  'use strict';
7
7
  var tsf, tsfRegex,
8
8
  ts = $.tablesorter || {},
9
- tscss = ts.css;
9
+ tscss = ts.css,
10
+ tskeyCodes = ts.keyCodes;
10
11
 
11
12
  $.extend( tscss, {
12
13
  filterRow : 'tablesorter-filter-row',
@@ -15,6 +16,14 @@
15
16
  filterRowHide : 'hideme'
16
17
  });
17
18
 
19
+ $.extend( tskeyCodes, {
20
+ backSpace : 8,
21
+ escape : 27,
22
+ space : 32,
23
+ left : 37,
24
+ down : 40
25
+ });
26
+
18
27
  ts.addWidget({
19
28
  id: 'filter',
20
29
  priority: 50,
@@ -39,6 +48,7 @@
39
48
  filter_onlyAvail : 'filter-onlyAvail', // a header with a select dropdown & this class name will only show available ( visible ) options within the drop down
40
49
  filter_placeholder : { search : '', select : '' }, // default placeholder text ( overridden by any header 'data-placeholder' setting )
41
50
  filter_reset : null, // jQuery selector string of an element used to reset the filters
51
+ filter_resetOnEsc : true, // Reset filter input when the user presses escape - normalized across browsers
42
52
  filter_saveFilters : false, // Use the $.tablesorter.storage utility to save the most recent filters
43
53
  filter_searchDelay : 300, // typing delay in milliseconds before starting a search
44
54
  filter_searchFiltered: true, // allow searching through already filtered rows in special circumstances; will speed up searching in large tables if true
@@ -747,18 +757,25 @@
747
757
  ts.setFilters( table, c.$table.data( 'lastSearch' ) || [], internal === false );
748
758
  }
749
759
  // unbind events
750
- tmp = ( 'keypress keyup search change '.split( ' ' ).join( namespace + ' ' ) );
760
+ tmp = ( 'keypress keyup keydown search change input '.split( ' ' ).join( namespace + ' ' ) );
751
761
  $el
752
762
  // use data attribute instead of jQuery data since the head is cloned without including
753
763
  // the data/binding
754
764
  .attr( 'data-lastSearchTime', new Date().getTime() )
755
765
  .unbind( tmp.replace( ts.regex.spaces, ' ' ) )
756
- // include change for select - fixes #473
766
+ .bind( 'keydown' + namespace, function( event ) {
767
+ if ( event.which === tskeyCodes.escape && !wo.filter_resetOnEsc ) {
768
+ // prevent keypress event
769
+ return false;
770
+ }
771
+ })
757
772
  .bind( 'keyup' + namespace, function( event ) {
773
+ var column = parseInt( $( this ).attr( 'data-column' ), 10 );
758
774
  $( this ).attr( 'data-lastSearchTime', new Date().getTime() );
759
775
  // emulate what webkit does.... escape clears the filter
760
- if ( event.which === 27 ) {
761
- this.value = '';
776
+ if ( event.which === tskeyCodes.escape ) {
777
+ // make sure to restore the last value on escape
778
+ this.value = wo.filter_resetOnEsc ? '' : c.lastSearch[column];
762
779
  // live search
763
780
  } else if ( wo.filter_liveSearch === false ) {
764
781
  return;
@@ -767,19 +784,21 @@
767
784
  // liveSearch can contain a min value length; ignore arrow and meta keys, but allow backspace
768
785
  ( typeof wo.filter_liveSearch === 'number' && this.value.length < wo.filter_liveSearch ) ||
769
786
  // let return & backspace continue on, but ignore arrows & non-valid characters
770
- ( event.which !== 13 && event.which !== 8 &&
771
- ( event.which < 32 || ( event.which >= 37 && event.which <= 40 ) ) ) ) ) {
787
+ ( event.which !== tskeyCodes.enter && event.which !== tskeyCodes.backSpace &&
788
+ ( event.which < tskeyCodes.space || ( event.which >= tskeyCodes.left && event.which <= tskeyCodes.down ) ) ) ) ) {
772
789
  return;
773
790
  }
774
791
  // change event = no delay; last true flag tells getFilters to skip newest timed input
775
792
  tsf.searching( table, true, true );
776
793
  })
777
- .bind( 'search change keypress '.split( ' ' ).join( namespace + ' ' ), function( event ) {
794
+ // include change for select - fixes #473
795
+ .bind( 'search change keypress input '.split( ' ' ).join( namespace + ' ' ), function( event ) {
778
796
  // don't get cached data, in case data-column changes dynamically
779
797
  var column = parseInt( $( this ).attr( 'data-column' ), 10 );
780
798
  // don't allow 'change' event to process if the input value is the same - fixes #685
781
- if ( wo.filter_initialized && ( event.which === 13 || event.type === 'search' ||
782
- event.type === 'change' && this.value !== c.lastSearch[column] ) ) {
799
+ if ( wo.filter_initialized && ( event.which === tskeyCodes.enter || event.type === 'search' ||
800
+ // only "input" event fires in MS Edge when clicking the "x" to clear the search
801
+ ( event.type === 'change' || event.type === 'input' ) && this.value !== c.lastSearch[column] ) ) {
783
802
  event.preventDefault();
784
803
  // init search with no delay
785
804
  $( this ).attr( 'data-lastSearchTime', new Date().getTime() );
@@ -1,4 +1,4 @@
1
- /*! Widget: output - updated 1/10/2016 (v2.25.1) *//*
1
+ /*! Widget: output - updated 1/15/2016 (v2.25.2) *//*
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?)
@@ -148,8 +148,11 @@
148
148
  // all tbody rows
149
149
  $rows = $el.children('tbody').children('tr');
150
150
 
151
- // get (f)iltered, (v)isible, all rows (look for the first letter only), or jQuery filter selector
152
- $rows = /^f/.test(saveRows) ? $rows.not('.' + (wo.filter_filteredRow || 'filtered') ) :
151
+ // check for a filter callback function first! because
152
+ // /^f/.test(function(){ console.log('test'); }) is TRUE! (function is converted to a string)
153
+ $rows = typeof saveRows === 'function' ? $rows.filter(saveRows) :
154
+ // get (f)iltered, (v)isible, all rows (look for the first letter only), or jQuery filter selector
155
+ /^f/.test(saveRows) ? $rows.not('.' + (wo.filter_filteredRow || 'filtered') ) :
153
156
  /^v/.test(saveRows) ? $rows.filter(':visible') :
154
157
  // look for '.' (class selector), '#' (id selector),
155
158
  // ':' (basic filters, e.g. ':not()') or '[' (attribute selector start)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jquery-tablesorter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.20.1
4
+ version: 1.20.2
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-01-11 00:00:00.000000000 Z
12
+ date: 2016-01-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
@@ -172,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
172
  version: '0'
173
173
  requirements: []
174
174
  rubyforge_project:
175
- rubygems_version: 2.4.8
175
+ rubygems_version: 2.5.1
176
176
  signing_key:
177
177
  specification_version: 4
178
178
  summary: Simple integration of jquery-tablesorter (Mottie's fork) into the Rails asset