jquery-tablesorter 1.17.2 → 1.17.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) 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 +76 -71
  5. data/vendor/assets/javascripts/jquery-tablesorter/extras/jquery.dragtable.mod.js +1 -1
  6. data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.combined.js +2647 -2576
  7. data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.js +174 -119
  8. data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.widgets.js +2487 -2471
  9. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-extract.js +15 -15
  10. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-iso8601.js +1 -1
  11. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-month.js +4 -4
  12. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-range.js +1 -1
  13. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-two-digit-year.js +12 -12
  14. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-weekday.js +4 -4
  15. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date.js +1 -1
  16. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-duration.js +1 -1
  17. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-feet-inch-fraction.js +6 -6
  18. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-file-type.js +22 -22
  19. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-globalize.js +1 -1
  20. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-ignore-articles.js +15 -15
  21. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-image.js +3 -3
  22. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-input-select.js +10 -3
  23. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-metric.js +2 -2
  24. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-named-numbers.js +3 -3
  25. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-network.js +1 -1
  26. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-roman.js +4 -4
  27. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-alignChar.js +122 -121
  28. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-build-table.js +13 -13
  29. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-chart.js +2 -2
  30. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-columnSelector.js +324 -324
  31. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-columns.js +60 -60
  32. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-editable.js +219 -219
  33. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-html5.js +360 -361
  34. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-jui.js +666 -666
  35. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-select2.js +124 -124
  36. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-type-insideRange.js +1 -1
  37. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter.js +1448 -1433
  38. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-formatter.js +1 -1
  39. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-grouping.js +213 -213
  40. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-headerTitles.js +3 -3
  41. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-math.js +271 -216
  42. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-output.js +339 -320
  43. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-pager.js +1057 -1045
  44. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-print.js +109 -109
  45. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-reflow.js +114 -115
  46. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-resizable.js +360 -359
  47. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-saveSort.js +59 -59
  48. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-scroller.js +818 -806
  49. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-sort2Hash.js +128 -0
  50. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-sortTbodies.js +195 -195
  51. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-staticRow.js +90 -90
  52. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-stickyHeaders.js +257 -257
  53. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-storage.js +76 -76
  54. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-uitheme.js +170 -170
  55. metadata +3 -3
  56. data/vendor/assets/javascripts/jquery-tablesorter/extras/jquery.quicksearch.js +0 -195
@@ -8,422 +8,421 @@
8
8
  /*jshint browser:true, jquery:true, unused:false */
9
9
  /*global jQuery: false */
10
10
  ;(function($){
11
- "use strict";
11
+ 'use strict';
12
12
 
13
- var ts = $.tablesorter || {},
13
+ var ts = $.tablesorter || {},
14
14
 
15
- // compare option selector class name (jQuery selector)
16
- compareSelect = '.compare-select',
15
+ // compare option selector class name (jQuery selector)
16
+ compareSelect = '.compare-select',
17
17
 
18
+ tsff = ts.filterFormatter = $.extend( {}, ts.filterFormatter, {
18
19
 
19
- tsff = ts.filterFormatter = $.extend( {}, ts.filterFormatter, {
20
-
21
- addCompare: function($cell, indx, options){
22
- if (options.compare && $.isArray(options.compare) && options.compare.length > 1) {
23
- var opt = '',
24
- compareSelectClass = [ compareSelect.slice(1), ' ' + compareSelect.slice(1), '' ],
25
- txt = options.cellText ? '<label class="' + compareSelectClass.join('-label') + indx + '">' + options.cellText + '</label>' : '';
26
- $.each(options.compare, function(i, c){
27
- opt += '<option ' + (options.selected === i ? 'selected' : '') + '>' + c + '</option>';
28
- });
29
- $cell
30
- .wrapInner('<div class="' + compareSelectClass.join('-wrapper') + indx + '" />')
31
- .prepend( txt + '<select class="' + compareSelectClass.join('') + indx + '" />' )
32
- .find('select')
33
- .append(opt);
34
- }
35
- },
36
-
37
- updateCompare : function($cell, $input, o) {
38
- var val = $input.val() || '',
39
- num = val.replace(/\s*?[><=]\s*?/g, ''),
40
- compare = val.match(/[><=]/g) || '';
41
- if (o.compare) {
42
- if ($.isArray(o.compare)){
43
- compare = (compare || []).join('') || o.compare[o.selected || 0];
44
- }
45
- $cell.find(compareSelect).val( compare );
46
- }
47
- return [ val, num ];
48
- },
49
-
50
- /**********************\
51
- HTML5 Number (spinner)
52
- \**********************/
53
- html5Number : function($cell, indx, def5Num) {
54
- var t, o = $.extend({
55
- value : 0,
56
- min : 0,
57
- max : 100,
58
- step : 1,
59
- delayed : true,
60
- disabled : false,
61
- addToggle : false,
62
- exactMatch : false,
63
- cellText : '',
64
- compare : '',
65
- skipTest: false
66
- }, def5Num),
67
-
68
- $input,
69
- // test browser for HTML5 range support
70
- $number = $('<input type="number" style="visibility:hidden;" value="test">').appendTo($cell),
71
- // test if HTML5 number is supported - from Modernizr
72
- numberSupported = o.skipTest || $number.attr('type') === 'number' && $number.val() !== 'test',
73
- $shcell = [],
74
- c = $cell.closest('table')[0].config,
75
-
76
- updateNumber = function(delayed, notrigger){
77
- var chkd = o.addToggle ? $cell.find('.toggle').is(':checked') : true,
78
- v = $cell.find('.number').val(),
79
- compare = ($.isArray(o.compare) ? $cell.find(compareSelect).val() || o.compare[ o.selected || 0] : o.compare) || '',
80
- searchType = c.$table[0].hasInitialized ? (delayed ? delayed : o.delayed) || '' : true;
81
- $input
82
- // add equal to the beginning, so we filter exact numbers
83
- .val( !o.addToggle || chkd ? (compare ? compare : o.exactMatch ? '=' : '') + v : '' )
84
- .trigger( notrigger ? '' : 'search', searchType ).end()
85
- .find('.number').val(v);
86
- if ($cell.find('.number').length) {
87
- $cell.find('.number')[0].disabled = (o.disabled || !chkd);
20
+ addCompare: function($cell, indx, options){
21
+ if (options.compare && $.isArray(options.compare) && options.compare.length > 1) {
22
+ var opt = '',
23
+ compareSelectClass = [ compareSelect.slice(1), ' ' + compareSelect.slice(1), '' ],
24
+ txt = options.cellText ? '<label class="' + compareSelectClass.join('-label') + indx + '">' + options.cellText + '</label>' : '';
25
+ $.each(options.compare, function(i, c){
26
+ opt += '<option ' + (options.selected === i ? 'selected' : '') + '>' + c + '</option>';
27
+ });
28
+ $cell
29
+ .wrapInner('<div class="' + compareSelectClass.join('-wrapper') + indx + '" />')
30
+ .prepend( txt + '<select class="' + compareSelectClass.join('') + indx + '" />' )
31
+ .find('select')
32
+ .append(opt);
88
33
  }
89
- // update sticky header cell
90
- if ($shcell.length) {
91
- $shcell.find('.number').val(v)[0].disabled = (o.disabled || !chkd);
92
- $shcell.find(compareSelect).val(compare);
93
- if (o.addToggle) {
94
- $shcell.find('.toggle')[0].checked = chkd;
34
+ },
35
+
36
+ updateCompare : function($cell, $input, o) {
37
+ var val = $input.val() || '',
38
+ num = val.replace(/\s*?[><=]\s*?/g, ''),
39
+ compare = val.match(/[><=]/g) || '';
40
+ if (o.compare) {
41
+ if ($.isArray(o.compare)){
42
+ compare = (compare || []).join('') || o.compare[o.selected || 0];
95
43
  }
44
+ $cell.find(compareSelect).val( compare );
96
45
  }
97
- };
98
- $number.remove();
99
-
100
- if (numberSupported) {
101
- t = o.addToggle ? '<div class="button"><input id="html5button' + indx + '" type="checkbox" class="toggle" />' +
102
- '<label for="html5button' + indx + '"></label></div>' : '';
103
- t += '<input class="number" type="number" min="' + o.min + '" max="' + o.max + '" value="' +
104
- o.value + '" step="' + o.step + '" />';
105
- // add HTML5 number (spinner)
106
- $cell
107
- .append(t + '<input type="hidden" />')
108
- .find('.toggle, .number').bind('change', function(){
109
- updateNumber();
110
- })
111
- .closest('thead').find('th[data-column=' + indx + ']')
112
- .addClass('filter-parsed') // get exact numbers from column
113
- // on reset
114
- .closest('table').bind('filterReset', function(){
115
- if ($.isArray(o.compare)) {
116
- $cell.add($shcell).find(compareSelect).val( o.compare[ o.selected || 0 ] );
117
- }
118
- // turn off the toggle checkbox
46
+ return [ val, num ];
47
+ },
48
+
49
+ /**********************\
50
+ HTML5 Number (spinner)
51
+ \**********************/
52
+ html5Number : function($cell, indx, def5Num) {
53
+ var t, o = $.extend({
54
+ value : 0,
55
+ min : 0,
56
+ max : 100,
57
+ step : 1,
58
+ delayed : true,
59
+ disabled : false,
60
+ addToggle : false,
61
+ exactMatch : false,
62
+ cellText : '',
63
+ compare : '',
64
+ skipTest: false
65
+ }, def5Num),
66
+
67
+ $input,
68
+ // test browser for HTML5 range support
69
+ $number = $('<input type="number" style="visibility:hidden;" value="test">').appendTo($cell),
70
+ // test if HTML5 number is supported - from Modernizr
71
+ numberSupported = o.skipTest || $number.attr('type') === 'number' && $number.val() !== 'test',
72
+ $shcell = [],
73
+ c = $cell.closest('table')[0].config,
74
+
75
+ updateNumber = function(delayed, notrigger){
76
+ var chkd = o.addToggle ? $cell.find('.toggle').is(':checked') : true,
77
+ v = $cell.find('.number').val(),
78
+ compare = ($.isArray(o.compare) ? $cell.find(compareSelect).val() || o.compare[ o.selected || 0] : o.compare) || '',
79
+ searchType = c.$table[0].hasInitialized ? (delayed ? delayed : o.delayed) || '' : true;
80
+ $input
81
+ // add equal to the beginning, so we filter exact numbers
82
+ .val( !o.addToggle || chkd ? (compare ? compare : o.exactMatch ? '=' : '') + v : '' )
83
+ .trigger( notrigger ? '' : 'search', searchType ).end()
84
+ .find('.number').val(v);
85
+ if ($cell.find('.number').length) {
86
+ $cell.find('.number')[0].disabled = (o.disabled || !chkd);
87
+ }
88
+ // update sticky header cell
89
+ if ($shcell.length) {
90
+ $shcell.find('.number').val(v)[0].disabled = (o.disabled || !chkd);
91
+ $shcell.find(compareSelect).val(compare);
119
92
  if (o.addToggle) {
120
- $cell.find('.toggle')[0].checked = false;
121
- if ($shcell.length) {
122
- $shcell.find('.toggle')[0].checked = false;
123
- }
93
+ $shcell.find('.toggle')[0].checked = chkd;
124
94
  }
125
- $cell.find('.number').val( o.value );
126
- setTimeout(function(){
95
+ }
96
+ };
97
+ $number.remove();
98
+
99
+ if (numberSupported) {
100
+ t = o.addToggle ? '<div class="button"><input id="html5button' + indx + '" type="checkbox" class="toggle" />' +
101
+ '<label for="html5button' + indx + '"></label></div>' : '';
102
+ t += '<input class="number" type="number" min="' + o.min + '" max="' + o.max + '" value="' +
103
+ o.value + '" step="' + o.step + '" />';
104
+ // add HTML5 number (spinner)
105
+ $cell
106
+ .append(t + '<input type="hidden" />')
107
+ .find('.toggle, .number').bind('change', function(){
127
108
  updateNumber();
128
- }, 0);
129
- });
130
- $input = $cell.find('input[type=hidden]').bind('change', function(){
131
- $cell.find('.number').val( this.value );
132
- updateNumber();
133
- });
134
-
135
- // update slider from hidden input, in case of saved filters
136
- c.$table.bind('filterFomatterUpdate', function(){
137
- var val = tsff.updateCompare($cell, $input, o)[0] || o.value;
138
- $cell.find('.number').val( ((val || '') + '').replace(/[><=]/g,'') );
139
- updateNumber(false, true);
140
- ts.filter.formatterUpdated($cell, indx);
141
- });
142
-
143
- if (o.compare) {
144
- // add compare select
145
- tsff.addCompare($cell, indx, o);
146
- $cell.find(compareSelect).bind('change', function(){
109
+ })
110
+ .closest('thead').find('th[data-column=' + indx + ']')
111
+ .addClass('filter-parsed') // get exact numbers from column
112
+ // on reset
113
+ .closest('table').bind('filterReset', function(){
114
+ if ($.isArray(o.compare)) {
115
+ $cell.add($shcell).find(compareSelect).val( o.compare[ o.selected || 0 ] );
116
+ }
117
+ // turn off the toggle checkbox
118
+ if (o.addToggle) {
119
+ $cell.find('.toggle')[0].checked = false;
120
+ if ($shcell.length) {
121
+ $shcell.find('.toggle')[0].checked = false;
122
+ }
123
+ }
124
+ $cell.find('.number').val( o.value );
125
+ setTimeout(function(){
126
+ updateNumber();
127
+ }, 0);
128
+ });
129
+ $input = $cell.find('input[type=hidden]').bind('change', function(){
130
+ $cell.find('.number').val( this.value );
147
131
  updateNumber();
148
132
  });
149
- }
150
133
 
151
- // has sticky headers?
152
- c.$table.bind('stickyHeadersInit', function(){
153
- $shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx).empty();
154
- $shcell
155
- .append(t)
156
- .find('.toggle, .number').bind('change', function(){
157
- $cell.find('.number').val( $(this).val() );
158
- updateNumber();
159
- });
134
+ // update slider from hidden input, in case of saved filters
135
+ c.$table.bind('filterFomatterUpdate', function(){
136
+ var val = tsff.updateCompare($cell, $input, o)[0] || o.value;
137
+ $cell.find('.number').val( ((val || '') + '').replace(/[><=]/g, '') );
138
+ updateNumber(false, true);
139
+ ts.filter.formatterUpdated($cell, indx);
140
+ });
160
141
 
161
142
  if (o.compare) {
162
143
  // add compare select
163
- tsff.addCompare($shcell, indx, o);
164
- $shcell.find(compareSelect).bind('change', function(){
165
- $cell.find(compareSelect).val( $(this).val() );
144
+ tsff.addCompare($cell, indx, o);
145
+ $cell.find(compareSelect).bind('change', function(){
166
146
  updateNumber();
167
147
  });
168
148
  }
169
149
 
170
- updateNumber();
171
- });
150
+ // has sticky headers?
151
+ c.$table.bind('stickyHeadersInit', function(){
152
+ $shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx).empty();
153
+ $shcell
154
+ .append(t)
155
+ .find('.toggle, .number').bind('change', function(){
156
+ $cell.find('.number').val( $(this).val() );
157
+ updateNumber();
158
+ });
159
+
160
+ if (o.compare) {
161
+ // add compare select
162
+ tsff.addCompare($shcell, indx, o);
163
+ $shcell.find(compareSelect).bind('change', function(){
164
+ $cell.find(compareSelect).val( $(this).val() );
165
+ updateNumber();
166
+ });
167
+ }
172
168
 
173
- updateNumber();
169
+ updateNumber();
170
+ });
174
171
 
175
- }
172
+ updateNumber();
176
173
 
177
- return numberSupported ? $cell.find('input[type="hidden"]') : $('<input type="search">');
178
- },
179
-
180
- /**********************\
181
- HTML5 range slider
182
- \**********************/
183
- html5Range : function($cell, indx, def5Range) {
184
- var o = $.extend({
185
- value : 0,
186
- min : 0,
187
- max : 100,
188
- step : 1,
189
- delayed : true,
190
- valueToHeader : true,
191
- exactMatch : true,
192
- cellText : '',
193
- compare : '',
194
- allText : 'all',
195
- skipTest : false
196
- }, def5Range),
197
-
198
- $input,
199
- // test browser for HTML5 range support
200
- $range = $('<input type="range" style="visibility:hidden;" value="test">').appendTo($cell),
201
- // test if HTML5 range is supported - from Modernizr (but I left out the method to detect in Safari 2-4)
202
- // see https://github.com/Modernizr/Modernizr/blob/master/feature-detects/inputtypes.js
203
- rangeSupported = o.skipTest || $range.attr('type') === 'range' && $range.val() !== 'test',
204
- $shcell = [],
205
- c = $cell.closest('table')[0].config,
206
-
207
- updateRange = function(v, delayed, notrigger){
208
- /*jshint eqeqeq:false */
209
- // hidden input changes may include compare symbols
210
- v = ( typeof v === "undefined" ? $input.val() : v ).toString().replace(/[<>=]/g,'') || o.value;
211
- var compare = ($.isArray(o.compare) ? $cell.find(compareSelect).val() || o.compare[ o.selected || 0] : o.compare) || '',
212
- t = ' (' + (compare ? compare + v : v == o.min ? o.allText : v) + ')',
213
- searchType = c.$table[0].hasInitialized ? (delayed ? delayed : o.delayed) || '' : true;
214
- $cell.find('input[type=hidden]')
215
- // add equal to the beginning, so we filter exact numbers
216
- .val( ( compare ? compare + v : ( v == o.min ? '' : ( o.exactMatch ? '=' : '' ) + v ) ) )
217
- //( val == o.min ? '' : val + (o.exactMatch ? '=' : ''))
218
- .trigger( notrigger ? '' : 'search', searchType ).end()
219
- .find('.range').val(v);
220
- // or add current value to the header cell, if desired
221
- $cell.closest('thead').find('th[data-column=' + indx + ']').find('.curvalue').html(t);
222
- // update sticky header cell
223
- if ($shcell.length) {
224
- $shcell
225
- .find('.range').val(v).end()
226
- .find(compareSelect).val( compare );
227
- $shcell.closest('thead').find('th[data-column=' + indx + ']').find('.curvalue').html(t);
228
174
  }
229
- };
230
- $range.remove();
231
-
232
- if (rangeSupported) {
233
- // add HTML5 range
234
- $cell
235
- .html('<input type="hidden"><input class="range" type="range" min="' + o.min + '" max="' + o.max + '" value="' + o.value + '" />')
236
- .closest('thead').find('th[data-column=' + indx + ']')
237
- .addClass('filter-parsed') // get exact numbers from column
238
- // add span to header for the current slider value
239
- .find('.tablesorter-header-inner').append('<span class="curvalue" />');
240
- // hidden filter update namespace trigger by filter widget
241
- $input = $cell.find('input[type=hidden]').bind('change' + c.namespace + 'filter', function(){
175
+
176
+ return numberSupported ? $cell.find('input[type="hidden"]') : $('<input type="search">');
177
+ },
178
+
179
+ /**********************\
180
+ HTML5 range slider
181
+ \**********************/
182
+ html5Range : function($cell, indx, def5Range) {
183
+ var o = $.extend({
184
+ value : 0,
185
+ min : 0,
186
+ max : 100,
187
+ step : 1,
188
+ delayed : true,
189
+ valueToHeader : true,
190
+ exactMatch : true,
191
+ cellText : '',
192
+ compare : '',
193
+ allText : 'all',
194
+ skipTest : false
195
+ }, def5Range),
196
+
197
+ $input,
198
+ // test browser for HTML5 range support
199
+ $range = $('<input type="range" style="visibility:hidden;" value="test">').appendTo($cell),
200
+ // test if HTML5 range is supported - from Modernizr (but I left out the method to detect in Safari 2-4)
201
+ // see https://github.com/Modernizr/Modernizr/blob/master/feature-detects/inputtypes.js
202
+ rangeSupported = o.skipTest || $range.attr('type') === 'range' && $range.val() !== 'test',
203
+ $shcell = [],
204
+ c = $cell.closest('table')[0].config,
205
+
206
+ updateRange = function(v, delayed, notrigger){
242
207
  /*jshint eqeqeq:false */
243
- var v = this.value,
244
- compare = ($.isArray(o.compare) ? $cell.find(compareSelect).val() || o.compare[ o.selected || 0] : o.compare) || '';
245
- if (v !== this.lastValue) {
246
- this.lastValue = ( compare ? compare + v : ( v == o.min ? '' : ( o.exactMatch ? '=' : '' ) + v ) );
247
- this.value = this.lastValue;
248
- updateRange( v );
208
+ // hidden input changes may include compare symbols
209
+ v = ( typeof v === 'undefined' ? $input.val() : v ).toString().replace(/[<>=]/g, '') || o.value;
210
+ var compare = ($.isArray(o.compare) ? $cell.find(compareSelect).val() || o.compare[ o.selected || 0] : o.compare) || '',
211
+ t = ' (' + (compare ? compare + v : v == o.min ? o.allText : v) + ')',
212
+ searchType = c.$table[0].hasInitialized ? (delayed ? delayed : o.delayed) || '' : true;
213
+ $cell.find('input[type=hidden]')
214
+ // add equal to the beginning, so we filter exact numbers
215
+ .val( ( compare ? compare + v : ( v == o.min ? '' : ( o.exactMatch ? '=' : '' ) + v ) ) )
216
+ // ( val == o.min ? '' : val + (o.exactMatch ? '=' : ''))
217
+ .trigger( notrigger ? '' : 'search', searchType ).end()
218
+ .find('.range').val(v);
219
+ // or add current value to the header cell, if desired
220
+ $cell.closest('thead').find('th[data-column=' + indx + ']').find('.curvalue').html(t);
221
+ // update sticky header cell
222
+ if ($shcell.length) {
223
+ $shcell
224
+ .find('.range').val(v).end()
225
+ .find(compareSelect).val( compare );
226
+ $shcell.closest('thead').find('th[data-column=' + indx + ']').find('.curvalue').html(t);
249
227
  }
250
- });
251
-
252
- $cell.find('.range').bind('change', function(){
253
- updateRange( this.value );
254
- });
255
-
256
- // update spinner from hidden input, in case of saved filters
257
- c.$table.bind('filterFomatterUpdate', function(){
258
- var val = tsff.updateCompare($cell, $input, o)[0];
259
- $cell.find('.range').val( val );
260
- updateRange(val, false, true);
261
- ts.filter.formatterUpdated($cell, indx);
262
- });
228
+ };
229
+ $range.remove();
230
+
231
+ if (rangeSupported) {
232
+ // add HTML5 range
233
+ $cell
234
+ .html('<input type="hidden"><input class="range" type="range" min="' + o.min + '" max="' + o.max + '" value="' + o.value + '" />')
235
+ .closest('thead').find('th[data-column=' + indx + ']')
236
+ .addClass('filter-parsed') // get exact numbers from column
237
+ // add span to header for the current slider value
238
+ .find('.tablesorter-header-inner').append('<span class="curvalue" />');
239
+ // hidden filter update namespace trigger by filter widget
240
+ $input = $cell.find('input[type=hidden]').bind('change' + c.namespace + 'filter', function(){
241
+ /*jshint eqeqeq:false */
242
+ var v = this.value,
243
+ compare = ($.isArray(o.compare) ? $cell.find(compareSelect).val() || o.compare[ o.selected || 0] : o.compare) || '';
244
+ if (v !== this.lastValue) {
245
+ this.lastValue = ( compare ? compare + v : ( v == o.min ? '' : ( o.exactMatch ? '=' : '' ) + v ) );
246
+ this.value = this.lastValue;
247
+ updateRange( v );
248
+ }
249
+ });
263
250
 
264
- if (o.compare) {
265
- // add compare select
266
- tsff.addCompare($cell, indx, o);
267
- $cell.find(compareSelect).bind('change', function(){
268
- updateRange();
251
+ $cell.find('.range').bind('change', function(){
252
+ updateRange( this.value );
269
253
  });
270
- }
271
254
 
272
- // has sticky headers?
273
- c.$table.bind('stickyHeadersInit', function(){
274
- $shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx).empty();
275
- $shcell
276
- .html('<input class="range" type="range" min="' + o.min + '" max="' + o.max + '" value="' + o.value + '" />')
277
- .find('.range').bind('change', function(){
278
- updateRange( $shcell.find('.range').val() );
279
- });
280
- updateRange();
255
+ // update spinner from hidden input, in case of saved filters
256
+ c.$table.bind('filterFomatterUpdate', function(){
257
+ var val = tsff.updateCompare($cell, $input, o)[0];
258
+ $cell.find('.range').val( val );
259
+ updateRange(val, false, true);
260
+ ts.filter.formatterUpdated($cell, indx);
261
+ });
281
262
 
282
263
  if (o.compare) {
283
264
  // add compare select
284
- tsff.addCompare($shcell, indx, o);
285
- $shcell.find(compareSelect).bind('change', function(){
286
- $cell.find(compareSelect).val( $(this).val() );
265
+ tsff.addCompare($cell, indx, o);
266
+ $cell.find(compareSelect).bind('change', function(){
287
267
  updateRange();
288
268
  });
289
269
  }
290
270
 
291
- });
271
+ // has sticky headers?
272
+ c.$table.bind('stickyHeadersInit', function(){
273
+ $shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx).empty();
274
+ $shcell
275
+ .html('<input class="range" type="range" min="' + o.min + '" max="' + o.max + '" value="' + o.value + '" />')
276
+ .find('.range').bind('change', function(){
277
+ updateRange( $shcell.find('.range').val() );
278
+ });
279
+ updateRange();
292
280
 
293
- // on reset
294
- $cell.closest('table').bind('filterReset', function(){
295
- if ($.isArray(o.compare)) {
296
- $cell.add($shcell).find(compareSelect).val( o.compare[ o.selected || 0 ] );
297
- }
298
- setTimeout(function(){
299
- updateRange(o.value, false, true);
300
- }, 0);
301
- });
302
- updateRange();
281
+ if (o.compare) {
282
+ // add compare select
283
+ tsff.addCompare($shcell, indx, o);
284
+ $shcell.find(compareSelect).bind('change', function(){
285
+ $cell.find(compareSelect).val( $(this).val() );
286
+ updateRange();
287
+ });
288
+ }
303
289
 
304
- }
290
+ });
305
291
 
306
- return rangeSupported ? $cell.find('input[type="hidden"]') : $('<input type="search">');
307
- },
308
-
309
- /**********************\
310
- HTML5 Color picker
311
- \**********************/
312
- html5Color: function($cell, indx, defColor) {
313
- var t, o = $.extend({
314
- value : '#000000',
315
- disabled : false,
316
- addToggle : true,
317
- exactMatch : true,
318
- valueToHeader : false,
319
- skipTest : false
320
- }, defColor),
321
- $input,
322
- // Add a hidden input to hold the range values
323
- $color = $('<input type="color" style="visibility:hidden;" value="test">').appendTo($cell),
324
- // test if HTML5 color is supported - from Modernizr
325
- colorSupported = o.skipTest || $color.attr('type') === 'color' && $color.val() !== 'test',
326
- $shcell = [],
327
- c = $cell.closest('table')[0].config,
328
-
329
- updateColor = function(v, notrigger){
330
- v = ( typeof v === "undefined" ? $input.val() : v ).toString().replace('=','') || o.value;
331
- var chkd = true,
332
- t = ' (' + v + ')';
333
- if (o.addToggle) {
334
- chkd = $cell.find('.toggle').is(':checked');
335
- }
336
- if ($cell.find('.colorpicker').length) {
337
- $cell.find('.colorpicker').val(v)[0].disabled = (o.disabled || !chkd);
338
- }
292
+ // on reset
293
+ $cell.closest('table').bind('filterReset', function(){
294
+ if ($.isArray(o.compare)) {
295
+ $cell.add($shcell).find(compareSelect).val( o.compare[ o.selected || 0 ] );
296
+ }
297
+ setTimeout(function(){
298
+ updateRange(o.value, false, true);
299
+ }, 0);
300
+ });
301
+ updateRange();
339
302
 
340
- $input
341
- .val( chkd ? v + (o.exactMatch ? '=' : '') : '' )
342
- .trigger( !c.$table[0].hasInitialized || notrigger ? '' : 'search' );
343
- if (o.valueToHeader) {
344
- // add current color to the header cell
345
- $cell.closest('thead').find('th[data-column=' + indx + ']').find('.curcolor').html(t);
346
- } else {
347
- // current color to span in cell
348
- $cell.find('.currentColor').html(t);
349
303
  }
350
304
 
351
- // update sticky header cell
352
- if ($shcell.length) {
353
- $shcell.find('.colorpicker').val(v)[0].disabled = (o.disabled || !chkd);
305
+ return rangeSupported ? $cell.find('input[type="hidden"]') : $('<input type="search">');
306
+ },
307
+
308
+ /**********************\
309
+ HTML5 Color picker
310
+ \**********************/
311
+ html5Color: function($cell, indx, defColor) {
312
+ var t, o = $.extend({
313
+ value : '#000000',
314
+ disabled : false,
315
+ addToggle : true,
316
+ exactMatch : true,
317
+ valueToHeader : false,
318
+ skipTest : false
319
+ }, defColor),
320
+ $input,
321
+ // Add a hidden input to hold the range values
322
+ $color = $('<input type="color" style="visibility:hidden;" value="test">').appendTo($cell),
323
+ // test if HTML5 color is supported - from Modernizr
324
+ colorSupported = o.skipTest || $color.attr('type') === 'color' && $color.val() !== 'test',
325
+ $shcell = [],
326
+ c = $cell.closest('table')[0].config,
327
+
328
+ updateColor = function(v, notrigger) {
329
+ v = ( typeof v === 'undefined' ? $input.val() : v ).toString().replace('=', '') || o.value;
330
+ var chkd = true,
331
+ t = ' (' + v + ')';
354
332
  if (o.addToggle) {
355
- $shcell.find('.toggle')[0].checked = chkd;
333
+ chkd = $cell.find('.toggle').is(':checked');
334
+ }
335
+ if ($cell.find('.colorpicker').length) {
336
+ $cell.find('.colorpicker').val(v)[0].disabled = (o.disabled || !chkd);
356
337
  }
338
+
339
+ $input
340
+ .val( chkd ? v + (o.exactMatch ? '=' : '') : '' )
341
+ .trigger( !c.$table[0].hasInitialized || notrigger ? '' : 'search' );
357
342
  if (o.valueToHeader) {
358
343
  // add current color to the header cell
359
- $shcell.closest('thead').find('th[data-column=' + indx + ']').find('.curcolor').html(t);
344
+ $cell.closest('thead').find('th[data-column=' + indx + ']').find('.curcolor').html(t);
360
345
  } else {
361
346
  // current color to span in cell
362
- $shcell.find('.currentColor').html(t);
347
+ $cell.find('.currentColor').html(t);
363
348
  }
364
- }
365
- };
366
- $color.remove();
367
-
368
- if (colorSupported) {
369
- t = '' + indx + Math.round(Math.random() * 100);
370
- // add HTML5 color picker
371
- t = '<div class="color-controls-wrapper">' +
372
- (o.addToggle ? '<div class="button"><input id="colorbutton' + t + '" type="checkbox" class="toggle" /><label for="colorbutton' +
373
- t + '"></label></div>' : '') +
374
- '<input type="hidden"><input class="colorpicker" type="color" />' +
375
- (o.valueToHeader ? '' : '<span class="currentColor">(#000000)</span>') + '</div>';
376
- $cell.html(t);
377
- // add span to header for the current color value - only works if the line in the updateColor() function is also un-commented out
378
- if (o.valueToHeader) {
379
- $cell.closest('thead').find('th[data-column=' + indx + ']').find('.tablesorter-header-inner').append('<span class="curcolor" />');
380
- }
381
349
 
382
- $cell.find('.toggle, .colorpicker').bind('change', function(){
383
- updateColor( $cell.find('.colorpicker').val() );
384
- });
350
+ // update sticky header cell
351
+ if ($shcell.length) {
352
+ $shcell.find('.colorpicker').val(v)[0].disabled = (o.disabled || !chkd);
353
+ if (o.addToggle) {
354
+ $shcell.find('.toggle')[0].checked = chkd;
355
+ }
356
+ if (o.valueToHeader) {
357
+ // add current color to the header cell
358
+ $shcell.closest('thead').find('th[data-column=' + indx + ']').find('.curcolor').html(t);
359
+ } else {
360
+ // current color to span in cell
361
+ $shcell.find('.currentColor').html(t);
362
+ }
363
+ }
364
+ };
365
+ $color.remove();
366
+
367
+ if (colorSupported) {
368
+ t = '' + indx + Math.round(Math.random() * 100);
369
+ // add HTML5 color picker
370
+ t = '<div class="color-controls-wrapper">' +
371
+ (o.addToggle ? '<div class="button"><input id="colorbutton' + t + '" type="checkbox" class="toggle" /><label for="colorbutton' +
372
+ t + '"></label></div>' : '') +
373
+ '<input type="hidden"><input class="colorpicker" type="color" />' +
374
+ (o.valueToHeader ? '' : '<span class="currentColor">(#000000)</span>') + '</div>';
375
+ $cell.html(t);
376
+ // add span to header for the current color value - only works if the line in the updateColor() function is also un-commented out
377
+ if (o.valueToHeader) {
378
+ $cell.closest('thead').find('th[data-column=' + indx + ']').find('.tablesorter-header-inner').append('<span class="curcolor" />');
379
+ }
385
380
 
386
- // hidden filter update namespace trigger by filter widget
387
- $input = $cell.find('input[type=hidden]').bind('change' + c.namespace + 'filter', function(){
388
- updateColor( this.value );
389
- });
381
+ $cell.find('.toggle, .colorpicker').bind('change', function(){
382
+ updateColor( $cell.find('.colorpicker').val() );
383
+ });
390
384
 
391
- // update slider from hidden input, in case of saved filters
392
- c.$table.bind('filterFomatterUpdate', function(){
393
- updateColor( $input.val(), true );
394
- ts.filter.formatterUpdated($cell, indx);
395
- });
385
+ // hidden filter update namespace trigger by filter widget
386
+ $input = $cell.find('input[type=hidden]').bind('change' + c.namespace + 'filter', function(){
387
+ updateColor( this.value );
388
+ });
396
389
 
397
- // on reset
398
- $cell.closest('table').bind('filterReset', function(){
399
- // just turn off the colorpicker
400
- if (o.addToggle) {
401
- $cell.find('.toggle')[0].checked = false;
402
- }
403
- // delay needed because default color needs to be set in the filter
404
- // there is no compare option here, so if addToggle = false,
405
- // default color is #000000 (even with no value set)
406
- setTimeout(function(){
407
- updateColor();
408
- }, 0);
409
- });
410
-
411
- // has sticky headers?
412
- c.$table.bind('stickyHeadersInit', function(){
413
- $shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx);
414
- $shcell
415
- .html(t)
416
- .find('.toggle, .colorpicker').bind('change', function(){
417
- updateColor( $shcell.find('.colorpicker').val() );
418
- });
419
- updateColor( $shcell.find('.colorpicker').val() );
420
- });
390
+ // update slider from hidden input, in case of saved filters
391
+ c.$table.bind('filterFomatterUpdate', function(){
392
+ updateColor( $input.val(), true );
393
+ ts.filter.formatterUpdated($cell, indx);
394
+ });
421
395
 
422
- updateColor( o.value );
396
+ // on reset
397
+ $cell.closest('table').bind('filterReset', function(){
398
+ // just turn off the colorpicker
399
+ if (o.addToggle) {
400
+ $cell.find('.toggle')[0].checked = false;
401
+ }
402
+ // delay needed because default color needs to be set in the filter
403
+ // there is no compare option here, so if addToggle = false,
404
+ // default color is #000000 (even with no value set)
405
+ setTimeout(function(){
406
+ updateColor();
407
+ }, 0);
408
+ });
409
+
410
+ // has sticky headers?
411
+ c.$table.bind('stickyHeadersInit', function(){
412
+ $shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx);
413
+ $shcell
414
+ .html(t)
415
+ .find('.toggle, .colorpicker').bind('change', function(){
416
+ updateColor( $shcell.find('.colorpicker').val() );
417
+ });
418
+ updateColor( $shcell.find('.colorpicker').val() );
419
+ });
420
+
421
+ updateColor( o.value );
422
+ }
423
+ return colorSupported ? $cell.find('input[type="hidden"]') : $('<input type="search">');
423
424
  }
424
- return colorSupported ? $cell.find('input[type="hidden"]') : $('<input type="search">');
425
- }
426
425
 
427
- });
426
+ });
428
427
 
429
428
  })(jQuery);