jquery-tablesorter 1.20.1 → 1.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 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