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
@@ -1,393 +1,394 @@
1
1
  /*! Widget: resizable - updated 6/26/2015 (v2.22.2) */
2
2
  /*jshint browser:true, jquery:true, unused:false */
3
3
  ;(function ($, window) {
4
- 'use strict';
5
- var ts = $.tablesorter || {};
6
-
7
- $.extend(ts.css, {
8
- resizableContainer : 'tablesorter-resizable-container',
9
- resizableHandle : 'tablesorter-resizable-handle',
10
- resizableNoSelect : 'tablesorter-disableSelection',
11
- resizableStorage : 'tablesorter-resizable'
12
- });
13
-
14
- // Add extra scroller css
15
- $(function(){
16
- var s = '<style>' +
17
- 'body.' + ts.css.resizableNoSelect + ' { -ms-user-select: none; -moz-user-select: -moz-none;' +
18
- '-khtml-user-select: none; -webkit-user-select: none; user-select: none; }' +
19
- '.' + ts.css.resizableContainer + ' { position: relative; height: 1px; }' +
20
- // make handle z-index > than stickyHeader z-index, so the handle stays above sticky header
21
- '.' + ts.css.resizableHandle + ' { position: absolute; display: inline-block; width: 8px;' +
22
- 'top: 1px; cursor: ew-resize; z-index: 3; user-select: none; -moz-user-select: none; }' +
23
- '</style>';
24
- $(s).appendTo('body');
25
- });
26
-
27
- ts.resizable = {
28
- init : function( c, wo ) {
29
- if ( c.$table.hasClass( 'hasResizable' ) ) { return; }
30
- c.$table.addClass( 'hasResizable' );
31
-
32
- var noResize, $header, column, storedSizes, tmp,
33
- $table = c.$table,
34
- $parent = $table.parent(),
35
- marginTop = parseInt( $table.css( 'margin-top' ), 10 ),
36
-
37
- // internal variables
38
- vars = wo.resizable_ = {
39
- useStorage : ts.storage && wo.resizable !== false,
40
- $wrap : $parent,
41
- mouseXPosition : 0,
42
- $target : null,
43
- $next : null,
44
- overflow : $parent.css('overflow') === 'auto' ||
45
- $parent.css('overflow') === 'scroll' ||
46
- $parent.css('overflow-x') === 'auto' ||
47
- $parent.css('overflow-x') === 'scroll',
48
- storedSizes : []
49
- };
50
-
51
- // set default widths
52
- ts.resizableReset( c.table, true );
53
-
54
- // now get measurements!
55
- vars.tableWidth = $table.width();
56
- // attempt to autodetect
57
- vars.fullWidth = Math.abs( $parent.width() - vars.tableWidth ) < 20;
58
-
59
- /*
60
- // Hacky method to determine if table width is set to "auto"
61
- // http://stackoverflow.com/a/20892048/145346
62
- if ( !vars.fullWidth ) {
63
- tmp = $table.width();
64
- $header = $table.wrap('<span>').parent(); // temp variable
65
- storedSizes = parseInt( $table.css( 'margin-left' ), 10 ) || 0;
66
- $table.css( 'margin-left', storedSizes + 50 );
67
- vars.tableWidth = $header.width() > tmp ? 'auto' : tmp;
68
- $table.css( 'margin-left', storedSizes ? storedSizes : '' );
69
- $header = null;
70
- $table.unwrap('<span>');
71
- }
72
- */
4
+ 'use strict';
5
+ var ts = $.tablesorter || {};
6
+
7
+ $.extend(ts.css, {
8
+ resizableContainer : 'tablesorter-resizable-container',
9
+ resizableHandle : 'tablesorter-resizable-handle',
10
+ resizableNoSelect : 'tablesorter-disableSelection',
11
+ resizableStorage : 'tablesorter-resizable'
12
+ });
73
13
 
74
- if ( vars.useStorage && vars.overflow ) {
75
- // save table width
76
- ts.storage( c.table, 'tablesorter-table-original-css-width', vars.tableWidth );
77
- tmp = ts.storage( c.table, 'tablesorter-table-resized-width' ) || 'auto';
78
- ts.resizable.setWidth( $table, tmp, true );
79
- }
80
- wo.resizable_.storedSizes = storedSizes = ( vars.useStorage ?
81
- ts.storage( c.table, ts.css.resizableStorage ) :
82
- [] ) || [];
83
- ts.resizable.setWidths( c, wo, storedSizes );
84
- ts.resizable.updateStoredSizes( c, wo );
85
-
86
- wo.$resizable_container = $( '<div class="' + ts.css.resizableContainer + '">' )
87
- .css({ top : marginTop })
88
- .insertBefore( $table );
89
- // add container
90
- for ( column = 0; column < c.columns; column++ ) {
91
- $header = c.$headerIndexed[ column ];
92
- tmp = ts.getColumnData( c.table, c.headers, column );
93
- noResize = ts.getData( $header, tmp, 'resizable' ) === 'false';
94
- if ( !noResize ) {
95
- $( '<div class="' + ts.css.resizableHandle + '">' )
96
- .appendTo( wo.$resizable_container )
97
- .attr({
98
- 'data-column' : column,
99
- 'unselectable' : 'on'
100
- })
101
- .data( 'header', $header )
102
- .bind( 'selectstart', false );
14
+ // Add extra scroller css
15
+ $(function(){
16
+ var s = '<style>' +
17
+ 'body.' + ts.css.resizableNoSelect + ' { -ms-user-select: none; -moz-user-select: -moz-none;' +
18
+ '-khtml-user-select: none; -webkit-user-select: none; user-select: none; }' +
19
+ '.' + ts.css.resizableContainer + ' { position: relative; height: 1px; }' +
20
+ // make handle z-index > than stickyHeader z-index, so the handle stays above sticky header
21
+ '.' + ts.css.resizableHandle + ' { position: absolute; display: inline-block; width: 8px;' +
22
+ 'top: 1px; cursor: ew-resize; z-index: 3; user-select: none; -moz-user-select: none; }' +
23
+ '</style>';
24
+ $(s).appendTo('body');
25
+ });
26
+
27
+ ts.resizable = {
28
+ init : function( c, wo ) {
29
+ if ( c.$table.hasClass( 'hasResizable' ) ) { return; }
30
+ c.$table.addClass( 'hasResizable' );
31
+
32
+ var noResize, $header, column, storedSizes, tmp,
33
+ $table = c.$table,
34
+ $parent = $table.parent(),
35
+ marginTop = parseInt( $table.css( 'margin-top' ), 10 ),
36
+
37
+ // internal variables
38
+ vars = wo.resizable_vars = {
39
+ useStorage : ts.storage && wo.resizable !== false,
40
+ $wrap : $parent,
41
+ mouseXPosition : 0,
42
+ $target : null,
43
+ $next : null,
44
+ overflow : $parent.css('overflow') === 'auto' ||
45
+ $parent.css('overflow') === 'scroll' ||
46
+ $parent.css('overflow-x') === 'auto' ||
47
+ $parent.css('overflow-x') === 'scroll',
48
+ storedSizes : []
49
+ };
50
+
51
+ // set default widths
52
+ ts.resizableReset( c.table, true );
53
+
54
+ // now get measurements!
55
+ vars.tableWidth = $table.width();
56
+ // attempt to autodetect
57
+ vars.fullWidth = Math.abs( $parent.width() - vars.tableWidth ) < 20;
58
+
59
+ /*
60
+ // Hacky method to determine if table width is set to 'auto'
61
+ // http://stackoverflow.com/a/20892048/145346
62
+ if ( !vars.fullWidth ) {
63
+ tmp = $table.width();
64
+ $header = $table.wrap('<span>').parent(); // temp variable
65
+ storedSizes = parseInt( $table.css( 'margin-left' ), 10 ) || 0;
66
+ $table.css( 'margin-left', storedSizes + 50 );
67
+ vars.tableWidth = $header.width() > tmp ? 'auto' : tmp;
68
+ $table.css( 'margin-left', storedSizes ? storedSizes : '' );
69
+ $header = null;
70
+ $table.unwrap('<span>');
103
71
  }
104
- }
105
- $table.one('tablesorter-initialized', function() {
106
- ts.resizable.setHandlePosition( c, wo );
107
- ts.resizable.bindings( this.config, this.config.widgetOptions );
108
- });
109
- },
110
-
111
- updateStoredSizes : function( c, wo ) {
112
- var column, $header,
113
- len = c.columns,
114
- vars = wo.resizable_;
115
- vars.storedSizes = [];
116
- for ( column = 0; column < len; column++ ) {
117
- $header = c.$headerIndexed[ column ];
118
- vars.storedSizes[ column ] = $header.is(':visible') ? $header.width() : 0;
119
- }
120
- },
121
-
122
- setWidth : function( $el, width, overflow ) {
123
- // overflow tables need min & max width set as well
124
- $el.css({
125
- 'width' : width,
126
- 'min-width' : overflow ? width : '',
127
- 'max-width' : overflow ? width : ''
128
- });
129
- },
130
-
131
- setWidths : function( c, wo, storedSizes ) {
132
- var column, $temp,
133
- vars = wo.resizable_,
134
- $extra = $( c.namespace + '_extra_headers' ),
135
- $col = c.$table.children( 'colgroup' ).children( 'col' );
136
- storedSizes = storedSizes || vars.storedSizes || [];
137
- // process only if table ID or url match
138
- if ( storedSizes.length ) {
72
+ */
73
+
74
+ if ( vars.useStorage && vars.overflow ) {
75
+ // save table width
76
+ ts.storage( c.table, 'tablesorter-table-original-css-width', vars.tableWidth );
77
+ tmp = ts.storage( c.table, 'tablesorter-table-resized-width' ) || 'auto';
78
+ ts.resizable.setWidth( $table, tmp, true );
79
+ }
80
+ wo.resizable_vars.storedSizes = storedSizes = ( vars.useStorage ?
81
+ ts.storage( c.table, ts.css.resizableStorage ) :
82
+ [] ) || [];
83
+ ts.resizable.setWidths( c, wo, storedSizes );
84
+ ts.resizable.updateStoredSizes( c, wo );
85
+
86
+ wo.$resizable_container = $( '<div class="' + ts.css.resizableContainer + '">' )
87
+ .css({ top : marginTop })
88
+ .insertBefore( $table );
89
+ // add container
139
90
  for ( column = 0; column < c.columns; column++ ) {
140
- // set saved resizable widths
141
- ts.resizable.setWidth( c.$headerIndexed[ column ], storedSizes[ column ], vars.overflow );
142
- if ( $extra.length ) {
143
- // stickyHeaders needs to modify min & max width as well
144
- $temp = $extra.eq( column ).add( $col.eq( column ) );
145
- ts.resizable.setWidth( $temp, storedSizes[ column ], vars.overflow );
91
+ $header = c.$headerIndexed[ column ];
92
+ tmp = ts.getColumnData( c.table, c.headers, column );
93
+ noResize = ts.getData( $header, tmp, 'resizable' ) === 'false';
94
+ if ( !noResize ) {
95
+ $( '<div class="' + ts.css.resizableHandle + '">' )
96
+ .appendTo( wo.$resizable_container )
97
+ .attr({
98
+ 'data-column' : column,
99
+ 'unselectable' : 'on'
100
+ })
101
+ .data( 'header', $header )
102
+ .bind( 'selectstart', false );
146
103
  }
147
104
  }
148
- $temp = $( c.namespace + '_extra_table' );
149
- if ( $temp.length && !ts.hasWidget( c.table, 'scroller' ) ) {
150
- ts.resizable.setWidth( $temp, c.$table.outerWidth(), vars.overflow );
105
+ $table.one('tablesorter-initialized', function() {
106
+ ts.resizable.setHandlePosition( c, wo );
107
+ ts.resizable.bindings( this.config, this.config.widgetOptions );
108
+ });
109
+ },
110
+
111
+ updateStoredSizes : function( c, wo ) {
112
+ var column, $header,
113
+ len = c.columns,
114
+ vars = wo.resizable_vars;
115
+ vars.storedSizes = [];
116
+ for ( column = 0; column < len; column++ ) {
117
+ $header = c.$headerIndexed[ column ];
118
+ vars.storedSizes[ column ] = $header.is(':visible') ? $header.width() : 0;
151
119
  }
152
- }
153
- },
154
-
155
- setHandlePosition : function( c, wo ) {
156
- var startPosition,
157
- hasScroller = ts.hasWidget( c.table, 'scroller' ),
158
- tableHeight = c.$table.height(),
159
- $handles = wo.$resizable_container.children(),
160
- handleCenter = Math.floor( $handles.width() / 2 );
161
-
162
- if ( hasScroller ) {
163
- tableHeight = 0;
164
- c.$table.closest( '.' + ts.css.scrollerWrap ).children().each(function(){
165
- var $this = $(this);
166
- // center table has a max-height set
167
- tableHeight += $this.filter('[style*="height"]').length ? $this.height() : $this.children('table').height();
120
+ },
121
+
122
+ setWidth : function( $el, width, overflow ) {
123
+ // overflow tables need min & max width set as well
124
+ $el.css({
125
+ 'width' : width,
126
+ 'min-width' : overflow ? width : '',
127
+ 'max-width' : overflow ? width : ''
168
128
  });
169
- }
170
- // subtract out table left position from resizable handles. Fixes #864
171
- startPosition = c.$table.position().left;
172
- $handles.each( function() {
173
- var $this = $(this),
174
- column = parseInt( $this.attr( 'data-column' ), 10 ),
175
- columns = c.columns - 1,
176
- $header = $this.data( 'header' );
177
- if ( !$header ) { return; } // see #859
178
- if ( !$header.is(':visible') ) {
179
- $this.hide();
180
- } else if ( column < columns || column === columns && wo.resizable_addLastColumn ) {
181
- $this.css({
182
- display: 'inline-block',
183
- height : tableHeight,
184
- left : $header.position().left - startPosition + $header.outerWidth() - handleCenter
129
+ },
130
+
131
+ setWidths : function( c, wo, storedSizes ) {
132
+ var column, $temp,
133
+ vars = wo.resizable_vars,
134
+ $extra = $( c.namespace + '_extra_headers' ),
135
+ $col = c.$table.children( 'colgroup' ).children( 'col' );
136
+ storedSizes = storedSizes || vars.storedSizes || [];
137
+ // process only if table ID or url match
138
+ if ( storedSizes.length ) {
139
+ for ( column = 0; column < c.columns; column++ ) {
140
+ // set saved resizable widths
141
+ ts.resizable.setWidth( c.$headerIndexed[ column ], storedSizes[ column ], vars.overflow );
142
+ if ( $extra.length ) {
143
+ // stickyHeaders needs to modify min & max width as well
144
+ $temp = $extra.eq( column ).add( $col.eq( column ) );
145
+ ts.resizable.setWidth( $temp, storedSizes[ column ], vars.overflow );
146
+ }
147
+ }
148
+ $temp = $( c.namespace + '_extra_table' );
149
+ if ( $temp.length && !ts.hasWidget( c.table, 'scroller' ) ) {
150
+ ts.resizable.setWidth( $temp, c.$table.outerWidth(), vars.overflow );
151
+ }
152
+ }
153
+ },
154
+
155
+ setHandlePosition : function( c, wo ) {
156
+ var startPosition,
157
+ hasScroller = ts.hasWidget( c.table, 'scroller' ),
158
+ tableHeight = c.$table.height(),
159
+ $handles = wo.$resizable_container.children(),
160
+ handleCenter = Math.floor( $handles.width() / 2 );
161
+
162
+ if ( hasScroller ) {
163
+ tableHeight = 0;
164
+ c.$table.closest( '.' + ts.css.scrollerWrap ).children().each(function(){
165
+ var $this = $(this);
166
+ // center table has a max-height set
167
+ tableHeight += $this.filter('[style*="height"]').length ? $this.height() : $this.children('table').height();
185
168
  });
186
169
  }
187
- });
188
- },
189
-
190
- // prevent text selection while dragging resize bar
191
- toggleTextSelection : function( c, toggle ) {
192
- var namespace = c.namespace + 'tsresize';
193
- c.widgetOptions.resizable_.disabled = toggle;
194
- $( 'body' ).toggleClass( ts.css.resizableNoSelect, toggle );
195
- if ( toggle ) {
196
- $( 'body' )
197
- .attr( 'unselectable', 'on' )
198
- .bind( 'selectstart' + namespace, false );
199
- } else {
200
- $( 'body' )
201
- .removeAttr( 'unselectable' )
202
- .unbind( 'selectstart' + namespace );
203
- }
204
- },
205
-
206
- bindings : function( c, wo ) {
207
- var namespace = c.namespace + 'tsresize';
208
- wo.$resizable_container.children().bind( 'mousedown', function( event ) {
209
- // save header cell and mouse position
210
- var column,
211
- vars = wo.resizable_,
212
- $extras = $( c.namespace + '_extra_headers' ),
213
- $header = $( event.target ).data( 'header' );
214
-
215
- column = parseInt( $header.attr( 'data-column' ), 10 );
216
- vars.$target = $header = $header.add( $extras.filter('[data-column="' + column + '"]') );
217
- vars.target = column;
218
-
219
- // if table is not as wide as it's parent, then resize the table
220
- vars.$next = event.shiftKey || wo.resizable_targetLast ?
221
- $header.parent().children().not( '.resizable-false' ).filter( ':last' ) :
222
- $header.nextAll( ':not(.resizable-false)' ).eq( 0 );
170
+ // subtract out table left position from resizable handles. Fixes #864
171
+ startPosition = c.$table.position().left;
172
+ $handles.each( function() {
173
+ var $this = $(this),
174
+ column = parseInt( $this.attr( 'data-column' ), 10 ),
175
+ columns = c.columns - 1,
176
+ $header = $this.data( 'header' );
177
+ if ( !$header ) { return; } // see #859
178
+ if ( !$header.is(':visible') ) {
179
+ $this.hide();
180
+ } else if ( column < columns || column === columns && wo.resizable_addLastColumn ) {
181
+ $this.css({
182
+ display: 'inline-block',
183
+ height : tableHeight,
184
+ left : $header.position().left - startPosition + $header.outerWidth() - handleCenter
185
+ });
186
+ }
187
+ });
188
+ },
223
189
 
224
- column = parseInt( vars.$next.attr( 'data-column' ), 10 );
225
- vars.$next = vars.$next.add( $extras.filter('[data-column="' + column + '"]') );
226
- vars.next = column;
190
+ // prevent text selection while dragging resize bar
191
+ toggleTextSelection : function( c, toggle ) {
192
+ var namespace = c.namespace + 'tsresize';
193
+ c.widgetOptions.resizable_vars.disabled = toggle;
194
+ $( 'body' ).toggleClass( ts.css.resizableNoSelect, toggle );
195
+ if ( toggle ) {
196
+ $( 'body' )
197
+ .attr( 'unselectable', 'on' )
198
+ .bind( 'selectstart' + namespace, false );
199
+ } else {
200
+ $( 'body' )
201
+ .removeAttr( 'unselectable' )
202
+ .unbind( 'selectstart' + namespace );
203
+ }
204
+ },
227
205
 
228
- vars.mouseXPosition = event.pageX;
229
- ts.resizable.updateStoredSizes( c, wo );
230
- ts.resizable.toggleTextSelection( c, true );
231
- });
206
+ bindings : function( c, wo ) {
207
+ var namespace = c.namespace + 'tsresize';
208
+ wo.$resizable_container.children().bind( 'mousedown', function( event ) {
209
+ // save header cell and mouse position
210
+ var column,
211
+ vars = wo.resizable_vars,
212
+ $extras = $( c.namespace + '_extra_headers' ),
213
+ $header = $( event.target ).data( 'header' );
214
+
215
+ column = parseInt( $header.attr( 'data-column' ), 10 );
216
+ vars.$target = $header = $header.add( $extras.filter('[data-column="' + column + '"]') );
217
+ vars.target = column;
218
+
219
+ // if table is not as wide as it's parent, then resize the table
220
+ vars.$next = event.shiftKey || wo.resizable_targetLast ?
221
+ $header.parent().children().not( '.resizable-false' ).filter( ':last' ) :
222
+ $header.nextAll( ':not(.resizable-false)' ).eq( 0 );
223
+
224
+ column = parseInt( vars.$next.attr( 'data-column' ), 10 );
225
+ vars.$next = vars.$next.add( $extras.filter('[data-column="' + column + '"]') );
226
+ vars.next = column;
227
+
228
+ vars.mouseXPosition = event.pageX;
229
+ ts.resizable.updateStoredSizes( c, wo );
230
+ ts.resizable.toggleTextSelection( c, true );
231
+ });
232
232
 
233
- $( document )
234
- .bind( 'mousemove' + namespace, function( event ) {
235
- var vars = wo.resizable_;
236
- // ignore mousemove if no mousedown
237
- if ( !vars.disabled || vars.mouseXPosition === 0 || !vars.$target ) { return; }
238
- if ( wo.resizable_throttle ) {
239
- clearTimeout( vars.timer );
240
- vars.timer = setTimeout( function() {
233
+ $( document )
234
+ .bind( 'mousemove' + namespace, function( event ) {
235
+ var vars = wo.resizable_vars;
236
+ // ignore mousemove if no mousedown
237
+ if ( !vars.disabled || vars.mouseXPosition === 0 || !vars.$target ) { return; }
238
+ if ( wo.resizable_throttle ) {
239
+ clearTimeout( vars.timer );
240
+ vars.timer = setTimeout( function() {
241
+ ts.resizable.mouseMove( c, wo, event );
242
+ }, isNaN( wo.resizable_throttle ) ? 5 : wo.resizable_throttle );
243
+ } else {
241
244
  ts.resizable.mouseMove( c, wo, event );
242
- }, isNaN( wo.resizable_throttle ) ? 5 : wo.resizable_throttle );
243
- } else {
244
- ts.resizable.mouseMove( c, wo, event );
245
- }
246
- })
247
- .bind( 'mouseup' + namespace, function() {
248
- if (!wo.resizable_.disabled) { return; }
249
- ts.resizable.toggleTextSelection( c, false );
250
- ts.resizable.stopResize( c, wo );
245
+ }
246
+ })
247
+ .bind( 'mouseup' + namespace, function() {
248
+ if (!wo.resizable_vars.disabled) { return; }
249
+ ts.resizable.toggleTextSelection( c, false );
250
+ ts.resizable.stopResize( c, wo );
251
+ ts.resizable.setHandlePosition( c, wo );
252
+ });
253
+
254
+ // resizeEnd event triggered by scroller widget
255
+ $( window ).bind( 'resize' + namespace + ' resizeEnd' + namespace, function() {
251
256
  ts.resizable.setHandlePosition( c, wo );
252
257
  });
253
258
 
254
- // resizeEnd event triggered by scroller widget
255
- $( window ).bind( 'resize' + namespace + ' resizeEnd' + namespace, function() {
256
- ts.resizable.setHandlePosition( c, wo );
257
- });
259
+ // right click to reset columns to default widths
260
+ c.$table
261
+ .bind( 'columnUpdate' + namespace, function() {
262
+ ts.resizable.setHandlePosition( c, wo );
263
+ })
264
+ .find( 'thead:first' )
265
+ .add( $( c.namespace + '_extra_table' ).find( 'thead:first' ) )
266
+ .bind( 'contextmenu' + namespace, function() {
267
+ // $.isEmptyObject() needs jQuery 1.4+; allow right click if already reset
268
+ var allowClick = wo.resizable_vars.storedSizes.length === 0;
269
+ ts.resizableReset( c.table );
270
+ ts.resizable.setHandlePosition( c, wo );
271
+ wo.resizable_vars.storedSizes = [];
272
+ return allowClick;
273
+ });
258
274
 
259
- // right click to reset columns to default widths
260
- c.$table
261
- .bind( 'columnUpdate' + namespace, function() {
262
- ts.resizable.setHandlePosition( c, wo );
263
- })
264
- .find( 'thead:first' )
265
- .add( $( c.namespace + '_extra_table' ).find( 'thead:first' ) )
266
- .bind( 'contextmenu' + namespace, function() {
267
- // $.isEmptyObject() needs jQuery 1.4+; allow right click if already reset
268
- var allowClick = wo.resizable_.storedSizes.length === 0;
269
- ts.resizableReset( c.table );
270
- ts.resizable.setHandlePosition( c, wo );
271
- wo.resizable_.storedSizes = [];
272
- return allowClick;
273
- });
275
+ },
274
276
 
275
- },
276
-
277
- mouseMove : function( c, wo, event ) {
278
- if ( wo.resizable_.mouseXPosition === 0 || !wo.resizable_.$target ) { return; }
279
- // resize columns
280
- var column,
281
- total = 0,
282
- vars = wo.resizable_,
283
- $next = vars.$next,
284
- tar = vars.storedSizes[ vars.target ],
285
- leftEdge = event.pageX - vars.mouseXPosition;
286
- if ( vars.overflow ) {
287
- if ( tar + leftEdge > 0 ) {
288
- vars.storedSizes[ vars.target ] += leftEdge;
289
- ts.resizable.setWidth( vars.$target, vars.storedSizes[ vars.target ], true );
290
- // update the entire table width
291
- for ( column = 0; column < c.columns; column++ ) {
292
- total += vars.storedSizes[ column ];
277
+ mouseMove : function( c, wo, event ) {
278
+ if ( wo.resizable_vars.mouseXPosition === 0 || !wo.resizable_vars.$target ) { return; }
279
+ // resize columns
280
+ var column,
281
+ total = 0,
282
+ vars = wo.resizable_vars,
283
+ $next = vars.$next,
284
+ tar = vars.storedSizes[ vars.target ],
285
+ leftEdge = event.pageX - vars.mouseXPosition;
286
+ if ( vars.overflow ) {
287
+ if ( tar + leftEdge > 0 ) {
288
+ vars.storedSizes[ vars.target ] += leftEdge;
289
+ ts.resizable.setWidth( vars.$target, vars.storedSizes[ vars.target ], true );
290
+ // update the entire table width
291
+ for ( column = 0; column < c.columns; column++ ) {
292
+ total += vars.storedSizes[ column ];
293
+ }
294
+ ts.resizable.setWidth( c.$table.add( $( c.namespace + '_extra_table' ) ), total );
293
295
  }
294
- ts.resizable.setWidth( c.$table.add( $( c.namespace + '_extra_table' ) ), total );
296
+ if ( !$next.length ) {
297
+ // if expanding right-most column, scroll the wrapper
298
+ vars.$wrap[0].scrollLeft = c.$table.width();
299
+ }
300
+ } else if ( vars.fullWidth ) {
301
+ vars.storedSizes[ vars.target ] += leftEdge;
302
+ vars.storedSizes[ vars.next ] -= leftEdge;
303
+ ts.resizable.setWidths( c, wo );
304
+ } else {
305
+ vars.storedSizes[ vars.target ] += leftEdge;
306
+ ts.resizable.setWidths( c, wo );
295
307
  }
296
- if ( !$next.length ) {
297
- // if expanding right-most column, scroll the wrapper
298
- vars.$wrap[0].scrollLeft = c.$table.width();
308
+ vars.mouseXPosition = event.pageX;
309
+ // dynamically update sticky header widths
310
+ c.$table.trigger('stickyHeadersUpdate');
311
+ },
312
+
313
+ stopResize : function( c, wo ) {
314
+ var vars = wo.resizable_vars;
315
+ ts.resizable.updateStoredSizes( c, wo );
316
+ if ( vars.useStorage ) {
317
+ // save all column widths
318
+ ts.storage( c.table, ts.css.resizableStorage, vars.storedSizes );
319
+ ts.storage( c.table, 'tablesorter-table-resized-width', c.$table.width() );
299
320
  }
300
- } else if ( vars.fullWidth ) {
301
- vars.storedSizes[ vars.target ] += leftEdge;
302
- vars.storedSizes[ vars.next ] -= leftEdge;
303
- ts.resizable.setWidths( c, wo );
304
- } else {
305
- vars.storedSizes[ vars.target ] += leftEdge;
306
- ts.resizable.setWidths( c, wo );
321
+ vars.mouseXPosition = 0;
322
+ vars.$target = vars.$next = null;
323
+ // will update stickyHeaders, just in case, see #912
324
+ c.$table.trigger('stickyHeadersUpdate');
307
325
  }
308
- vars.mouseXPosition = event.pageX;
309
- // dynamically update sticky header widths
310
- c.$table.trigger('stickyHeadersUpdate');
311
- },
312
-
313
- stopResize : function( c, wo ) {
314
- var vars = wo.resizable_;
315
- ts.resizable.updateStoredSizes( c, wo );
316
- if ( vars.useStorage ) {
317
- // save all column widths
318
- ts.storage( c.table, ts.css.resizableStorage, vars.storedSizes );
319
- ts.storage( c.table, 'tablesorter-table-resized-width', c.$table.width() );
320
- }
321
- vars.mouseXPosition = 0;
322
- vars.$target = vars.$next = null;
323
- // will update stickyHeaders, just in case, see #912
324
- c.$table.trigger('stickyHeadersUpdate');
325
- }
326
- };
327
-
328
- // this widget saves the column widths if
329
- // $.tablesorter.storage function is included
330
- // **************************
331
- ts.addWidget({
332
- id: "resizable",
333
- priority: 40,
334
- options: {
335
- resizable : true, // save column widths to storage
336
- resizable_addLastColumn : false,
337
- resizable_widths : [],
338
- resizable_throttle : false, // set to true (5ms) or any number 0-10 range
339
- resizable_targetLast : false,
340
- resizable_fullWidth : null
341
- },
342
- init: function(table, thisWidget, c, wo) {
343
- ts.resizable.init( c, wo );
344
- },
345
- remove: function( table, c, wo, refreshing ) {
346
- if (wo.$resizable_container) {
347
- var namespace = c.namespace + 'tsresize';
348
- c.$table.add( $( c.namespace + '_extra_table' ) )
349
- .removeClass('hasResizable')
350
- .children( 'thead' ).unbind( 'contextmenu' + namespace );
326
+ };
327
+
328
+ // this widget saves the column widths if
329
+ // $.tablesorter.storage function is included
330
+ // **************************
331
+ ts.addWidget({
332
+ id: 'resizable',
333
+ priority: 40,
334
+ options: {
335
+ resizable : true, // save column widths to storage
336
+ resizable_addLastColumn : false,
337
+ resizable_widths : [],
338
+ resizable_throttle : false, // set to true (5ms) or any number 0-10 range
339
+ resizable_targetLast : false,
340
+ resizable_fullWidth : null
341
+ },
342
+ init: function(table, thisWidget, c, wo) {
343
+ ts.resizable.init( c, wo );
344
+ },
345
+ remove: function( table, c, wo, refreshing ) {
346
+ if (wo.$resizable_container) {
347
+ var namespace = c.namespace + 'tsresize';
348
+ c.$table.add( $( c.namespace + '_extra_table' ) )
349
+ .removeClass('hasResizable')
350
+ .children( 'thead' )
351
+ .unbind( 'contextmenu' + namespace );
351
352
 
352
353
  wo.$resizable_container.remove();
353
- ts.resizable.toggleTextSelection( c, false );
354
- ts.resizableReset( table, refreshing );
355
- $( document ).unbind( 'mousemove' + namespace + ' mouseup' + namespace );
354
+ ts.resizable.toggleTextSelection( c, false );
355
+ ts.resizableReset( table, refreshing );
356
+ $( document ).unbind( 'mousemove' + namespace + ' mouseup' + namespace );
357
+ }
356
358
  }
357
- }
358
- });
359
-
360
- ts.resizableReset = function( table, refreshing ) {
361
- $( table ).each(function(){
362
- var index, $t,
363
- c = this.config,
364
- wo = c && c.widgetOptions,
365
- vars = wo.resizable_;
366
- if ( table && c && c.$headerIndexed.length ) {
367
- // restore the initial table width
368
- if ( vars.overflow && vars.tableWidth ) {
369
- ts.resizable.setWidth( c.$table, vars.tableWidth, true );
370
- if ( vars.useStorage ) {
371
- ts.storage( table, 'tablesorter-table-resized-width', 'auto' );
359
+ });
360
+
361
+ ts.resizableReset = function( table, refreshing ) {
362
+ $( table ).each(function(){
363
+ var index, $t,
364
+ c = this.config,
365
+ wo = c && c.widgetOptions,
366
+ vars = wo.resizable_vars;
367
+ if ( table && c && c.$headerIndexed.length ) {
368
+ // restore the initial table width
369
+ if ( vars.overflow && vars.tableWidth ) {
370
+ ts.resizable.setWidth( c.$table, vars.tableWidth, true );
371
+ if ( vars.useStorage ) {
372
+ ts.storage( table, 'tablesorter-table-resized-width', 'auto' );
373
+ }
372
374
  }
373
- }
374
- for ( index = 0; index < c.columns; index++ ) {
375
- $t = c.$headerIndexed[ index ];
376
- if ( wo.resizable_widths && wo.resizable_widths[ index ] ) {
377
- ts.resizable.setWidth( $t, wo.resizable_widths[ index ], vars.overflow );
378
- } else if ( !$t.hasClass( 'resizable-false' ) ) {
379
- // don't clear the width of any column that is not resizable
380
- ts.resizable.setWidth( $t, '', vars.overflow );
375
+ for ( index = 0; index < c.columns; index++ ) {
376
+ $t = c.$headerIndexed[ index ];
377
+ if ( wo.resizable_widths && wo.resizable_widths[ index ] ) {
378
+ ts.resizable.setWidth( $t, wo.resizable_widths[ index ], vars.overflow );
379
+ } else if ( !$t.hasClass( 'resizable-false' ) ) {
380
+ // don't clear the width of any column that is not resizable
381
+ ts.resizable.setWidth( $t, '', vars.overflow );
382
+ }
381
383
  }
382
- }
383
384
 
384
- // reset stickyHeader widths
385
- c.$table.trigger( 'stickyHeadersUpdate' );
386
- if ( ts.storage && !refreshing ) {
387
- ts.storage( this, ts.css.resizableStorage, {} );
385
+ // reset stickyHeader widths
386
+ c.$table.trigger( 'stickyHeadersUpdate' );
387
+ if ( ts.storage && !refreshing ) {
388
+ ts.storage( this, ts.css.resizableStorage, {} );
389
+ }
388
390
  }
389
- }
390
- });
391
- };
391
+ });
392
+ };
392
393
 
393
394
  })( jQuery, window );