jquery-tablesorter 1.15.0 → 1.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (22) 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 +71 -30
  5. data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.js +109 -65
  6. data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.widgets.js +83 -62
  7. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-range.js +93 -0
  8. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-input-select.js +6 -4
  9. data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-metric.js +1 -1
  10. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-columnSelector.js +4 -2
  11. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-html5.js +2 -2
  12. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-jui.js +2 -3
  13. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-select2.js +1 -1
  14. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-type-insideRange.js +42 -0
  15. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter.js +57 -45
  16. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-formatter.js +1 -1
  17. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-grouping.js +9 -7
  18. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-output.js +9 -1
  19. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-pager.js +68 -30
  20. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-scroller.js +41 -41
  21. data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-stickyHeaders.js +25 -16
  22. metadata +4 -2
@@ -1,4 +1,4 @@
1
- /* Output widget for TableSorter 2/9/2015 (v2.19.1)
1
+ /* Output widget for TableSorter 3/5/2015 (v2.21.0)
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?)
@@ -120,6 +120,13 @@ output = ts.output = {
120
120
 
121
121
  // all tbody rows
122
122
  $rows = $el.children('tbody').children('tr');
123
+
124
+ if (wo.output_includeFooter) {
125
+ // clone, to force the tfoot rows to the end of this selection of rows
126
+ // otherwise they appear after the thead (the order in the HTML)
127
+ $rows = $rows.add( $el.children('tfoot').children('tr').clone() );
128
+ }
129
+
123
130
  // get (f)iltered, (v)isible or all rows (look for the first letter only)
124
131
  $rows = /f/.test(wo.output_saveRows) ? $rows.not('.' + (wo.filter_filteredRow || 'filtered') ) :
125
132
  /v/.test(wo.output_saveRows) ? $rows.filter(':visible') : $rows;
@@ -287,6 +294,7 @@ ts.addWidget({
287
294
  options: {
288
295
  output_separator : ',', // set to "json", "array" or any separator
289
296
  output_ignoreColumns : [], // columns to ignore [0, 1,... ] (zero-based index)
297
+ output_includeFooter : false, // include footer rows in the output
290
298
  output_dataAttrib : 'data-name', // header attrib containing modified header name
291
299
  output_headerRows : false, // if true, include multiple header rows (JSON only)
292
300
  output_delivery : 'popup', // popup, download
@@ -1,4 +1,4 @@
1
- /* Pager widget for TableSorter 2/9/2015 (v2.19.1) - requires jQuery 1.7+ */
1
+ /* Pager widget for TableSorter 3/5/2015 (v2.21.0) - requires jQuery 1.7+ */
2
2
  /*jshint browser:true, jquery:true, unused:false */
3
3
  ;(function($){
4
4
  "use strict";
@@ -151,7 +151,7 @@ tsp = ts.pager = {
151
151
 
152
152
  p.isInitializing = true;
153
153
  if (c.debug) {
154
- ts.log('Pager initializing');
154
+ ts.log('Pager: Initializing');
155
155
  }
156
156
 
157
157
  p.size = $.data(table, 'pagerLastSize') || wo.pager_size;
@@ -196,7 +196,7 @@ tsp = ts.pager = {
196
196
  } else {
197
197
  p.ajax = false;
198
198
  // Regular pager; all rows stored in memory
199
- c.$table.trigger("appendCache", [{}, true]);
199
+ c.$table.trigger('appendCache', [{}, true]);
200
200
  }
201
201
 
202
202
  },
@@ -214,6 +214,9 @@ tsp = ts.pager = {
214
214
  p.initialized = true;
215
215
  p.initializing = false;
216
216
  p.isInitializing = false;
217
+ if (c.debug) {
218
+ ts.log('Pager: Triggering pagerInitialized');
219
+ }
217
220
  c.$table.trigger('pagerInitialized', c);
218
221
  // filter widget not initialized; it will update the output display & fire off the pagerComplete event
219
222
  if ( !( c.widgetOptions.filter_initialized && ts.hasWidget(table, 'filter') ) ) {
@@ -310,6 +313,9 @@ tsp = ts.pager = {
310
313
  // clicked controls
311
314
  ctrls = [ s.first, s.prev, s.next, s.last ];
312
315
  fxn = [ 'moveToFirstPage', 'moveToPrevPage', 'moveToNextPage', 'moveToLastPage' ];
316
+ if (c.debug && !p.$container.length) {
317
+ ts.log('Pager: >> Container not found');
318
+ }
313
319
  p.$container.find(ctrls.join(','))
314
320
  .attr("tabindex", 0)
315
321
  .off('click.pager')
@@ -336,6 +342,8 @@ tsp = ts.pager = {
336
342
  tsp.moveToPage(table, p, true);
337
343
  tsp.updatePageDisplay(table, c, false);
338
344
  });
345
+ } else if (c.debug) {
346
+ ts.log('Pager: >> Goto selector not found');
339
347
  }
340
348
 
341
349
  if ( p.$size.length ) {
@@ -351,6 +359,8 @@ tsp = ts.pager = {
351
359
  }
352
360
  return false;
353
361
  });
362
+ } else if (c.debug) {
363
+ ts.log('Pager: >> Size selector not found');
354
364
  }
355
365
 
356
366
  },
@@ -371,7 +381,8 @@ tsp = ts.pager = {
371
381
  },
372
382
 
373
383
  calcFilters: function(table, c) {
374
- var wo = c.widgetOptions,
384
+ var normalized, indx, len,
385
+ wo = c.widgetOptions,
375
386
  p = c.pager,
376
387
  hasFilters = c.$table.hasClass('hasFilters');
377
388
  if (hasFilters && !wo.pager_ajaxUrl) {
@@ -380,9 +391,11 @@ tsp = ts.pager = {
380
391
  p.filteredRows = p.totalRows = c.$tbodies.eq(0).children('tr').not( wo.pager_countChildRows ? '' : '.' + c.cssChildRow ).length;
381
392
  } else {
382
393
  p.filteredRows = 0;
383
- $.each(c.cache[0].normalized, function(i, el) {
384
- p.filteredRows += p.regexRows.test(el[c.columns].$row[0].className) ? 0 : 1;
385
- });
394
+ normalized = c.cache[0].normalized;
395
+ len = normalized.length;
396
+ for (indx = 0; indx < len; indx++) {
397
+ p.filteredRows += p.regexRows.test(normalized[indx][c.columns].$row[0].className) ? 0 : 1;
398
+ }
386
399
  }
387
400
  } else if (!hasFilters) {
388
401
  p.filteredRows = p.totalRows;
@@ -391,7 +404,7 @@ tsp = ts.pager = {
391
404
 
392
405
  updatePageDisplay: function(table, c, completed) {
393
406
  if ( c.pager.initializing ) { return; }
394
- var s, t, $out,
407
+ var s, t, $out, options, indx, len,
395
408
  wo = c.widgetOptions,
396
409
  p = c.pager,
397
410
  sz = p.size || p.setSize || 10; // don't allow dividing by zero
@@ -431,9 +444,11 @@ tsp = ts.pager = {
431
444
  });
432
445
  if ( p.$goto.length ) {
433
446
  t = '';
434
- $.each(tsp.buildPageSelect(p, c), function(i, opt){
435
- t += '<option value="' + opt + '">' + opt + '</option>';
436
- });
447
+ options = tsp.buildPageSelect(p, c);
448
+ len = options.length;
449
+ for (indx = 0; indx < len; indx++) {
450
+ t += '<option value="' + options[indx] + '">' + options[indx] + '</option>';
451
+ }
437
452
  // innerHTML doesn't work in IE9 - http://support2.microsoft.com/kb/276228
438
453
  p.$goto.html(t).val( p.page + 1 );
439
454
  }
@@ -450,6 +465,9 @@ tsp = ts.pager = {
450
465
  tsp.pagerArrows(c);
451
466
  tsp.fixHeight(table, c);
452
467
  if (p.initialized && completed !== false) {
468
+ if (c.debug) {
469
+ ts.log('Pager: Triggering pagerComplete');
470
+ }
453
471
  c.$table.trigger('pagerComplete', c);
454
472
  // save pager info to storage
455
473
  if (wo.pager_savePages && ts.storage) {
@@ -624,7 +642,7 @@ tsp = ts.pager = {
624
642
 
625
643
  if ( exception ) {
626
644
  if (c.debug) {
627
- ts.log('Ajax Error', xhr, exception);
645
+ ts.log('Pager: >> Ajax Error', xhr, exception);
628
646
  }
629
647
  ts.showError(table, exception.message + ' (' + xhr.status + ')');
630
648
  c.$tbodies.eq(0).children('tr').detach();
@@ -714,6 +732,9 @@ tsp = ts.pager = {
714
732
  // apply widgets after table has rendered & after a delay to prevent
715
733
  // multiple applyWidget blocking code from blocking this trigger
716
734
  setTimeout(function(){
735
+ if (c.debug) {
736
+ ts.log('Pager: Triggering pagerChange');
737
+ }
717
738
  $t
718
739
  .trigger('applyWidgets')
719
740
  .trigger('pagerChange', p);
@@ -755,49 +776,52 @@ tsp = ts.pager = {
755
776
  }
756
777
  };
757
778
  if (c.debug) {
758
- ts.log('ajax initialized', p.ajaxObject);
779
+ ts.log('Pager: Ajax initialized', p.ajaxObject);
759
780
  }
760
781
  $.ajax(p.ajaxObject);
761
782
  }
762
783
  },
763
784
 
764
785
  getAjaxUrl: function(table, c) {
765
- var p = c.pager,
786
+ var indx, len,
787
+ p = c.pager,
766
788
  wo = c.widgetOptions,
767
789
  url = (wo.pager_ajaxUrl) ? wo.pager_ajaxUrl
768
790
  // allow using "{page+1}" in the url string to switch to a non-zero based index
769
791
  .replace(/\{page([\-+]\d+)?\}/, function(s,n){ return p.page + (n ? parseInt(n, 10) : 0); })
770
792
  .replace(/\{size\}/g, p.size) : '',
771
- sl = c.sortList,
772
- fl = p.currentFilters || $(table).data('lastSearch') || [],
793
+ sortList = c.sortList,
794
+ filterList = p.currentFilters || $(table).data('lastSearch') || [],
773
795
  sortCol = url.match(/\{\s*sort(?:List)?\s*:\s*(\w*)\s*\}/),
774
796
  filterCol = url.match(/\{\s*filter(?:List)?\s*:\s*(\w*)\s*\}/),
775
797
  arry = [];
776
798
  if (sortCol) {
777
799
  sortCol = sortCol[1];
778
- $.each(sl, function(i,v){
779
- arry.push(sortCol + '[' + v[0] + ']=' + v[1]);
780
- });
800
+ len = sortList.length;
801
+ for (indx = 0; indx < len; indx++) {
802
+ arry.push(sortCol + '[' + sortList[indx][0] + ']=' + sortList[indx][1]);
803
+ }
781
804
  // if the arry is empty, just add the col parameter... "&{sortList:col}" becomes "&col"
782
805
  url = url.replace(/\{\s*sort(?:List)?\s*:\s*(\w*)\s*\}/g, arry.length ? arry.join('&') : sortCol );
783
806
  arry = [];
784
807
  }
785
808
  if (filterCol) {
786
809
  filterCol = filterCol[1];
787
- $.each(fl, function(i,v){
788
- if (v) {
789
- arry.push(filterCol + '[' + i + ']=' + encodeURIComponent(v));
810
+ len = filterList.length;
811
+ for (indx = 0; indx < len; indx++) {
812
+ if (filterList[indx]) {
813
+ arry.push(filterCol + '[' + indx + ']=' + encodeURIComponent(filterList[indx]));
790
814
  }
791
- });
815
+ }
792
816
  // if the arry is empty, just add the fcol parameter... "&{filterList:fcol}" becomes "&fcol"
793
817
  url = url.replace(/\{\s*filter(?:List)?\s*:\s*(\w*)\s*\}/g, arry.length ? arry.join('&') : filterCol );
794
- p.currentFilters = fl;
818
+ p.currentFilters = filterList;
795
819
  }
796
820
  if ( $.isFunction(wo.pager_customAjaxUrl) ) {
797
821
  url = wo.pager_customAjaxUrl(table, url);
798
822
  }
799
823
  if (c.debug) {
800
- ts.log('Pager ajax url: ' + url);
824
+ ts.log('Pager: Ajax url = ' + url);
801
825
  }
802
826
  return url;
803
827
  },
@@ -813,7 +837,7 @@ tsp = ts.pager = {
813
837
  e = p.size;
814
838
  if ( l < 1 ) {
815
839
  if (c.debug) {
816
- ts.log('Pager: no rows for pager to render');
840
+ ts.log('Pager: >> No rows for pager to render');
817
841
  }
818
842
  // empty table, abort!
819
843
  return;
@@ -824,7 +848,12 @@ tsp = ts.pager = {
824
848
  }
825
849
  p.cacheIndex = [];
826
850
  p.isDisabled = false; // needed because sorting will change the page and re-enable the pager
827
- if (p.initialized) { c.$table.trigger('pagerChange', c); }
851
+ if (p.initialized) {
852
+ if (c.debug) {
853
+ ts.log('Pager: Triggering pagerChange');
854
+ }
855
+ c.$table.trigger('pagerChange', c);
856
+ }
828
857
  if ( !wo.pager_removeRows ) {
829
858
  tsp.hideRows(table, c);
830
859
  } else {
@@ -853,6 +882,9 @@ tsp = ts.pager = {
853
882
  wo.pager_startPage = p.page;
854
883
  wo.pager_size = p.size;
855
884
  if (table.isUpdating) {
885
+ if (c.debug) {
886
+ ts.log('Pager: Triggering updateComplete');
887
+ }
856
888
  c.$table.trigger('updateComplete', [ table, true ]);
857
889
  }
858
890
 
@@ -877,7 +909,7 @@ tsp = ts.pager = {
877
909
  tsp.renderTable(table, c.rowsCopy);
878
910
  c.$table.trigger('applyWidgets');
879
911
  if (c.debug) {
880
- ts.log('pager disabled');
912
+ ts.log('Pager: Disabled');
881
913
  }
882
914
  }
883
915
  // disable size selector
@@ -940,7 +972,7 @@ tsp = ts.pager = {
940
972
  return;
941
973
  }
942
974
  if (c.debug) {
943
- ts.log('Pager changing to page ' + p.page);
975
+ ts.log('Pager: Changing to page ' + p.page);
944
976
  }
945
977
  p.last = {
946
978
  page : p.page,
@@ -959,10 +991,16 @@ tsp = ts.pager = {
959
991
  }
960
992
  $.data(table, 'pagerLastPage', p.page);
961
993
  if (p.initialized && pageMoved !== false) {
994
+ if (c.debug) {
995
+ ts.log('Pager: Triggering pageMoved');
996
+ }
962
997
  c.$table
963
998
  .trigger('pageMoved', c)
964
999
  .trigger('applyWidgets');
965
1000
  if (!p.ajax && table.isUpdating) {
1001
+ if (c.debug) {
1002
+ ts.log('Pager: Triggering updateComplete');
1003
+ }
966
1004
  c.$table.trigger('updateComplete', [ table, true ]);
967
1005
  }
968
1006
  }
@@ -1039,7 +1077,7 @@ tsp = ts.pager = {
1039
1077
  tsp.setPageSize(table, p.size, c);
1040
1078
  tsp.hideRowsSetup(table, c);
1041
1079
  if (c.debug) {
1042
- ts.log('pager enabled');
1080
+ ts.log('Pager: Enabled');
1043
1081
  }
1044
1082
  }
1045
1083
  },
@@ -10,7 +10,7 @@
10
10
 
11
11
  Resizable scroller widget for the jQuery tablesorter plugin
12
12
 
13
- Version 2.0 - modified by Rob Garrison 4/12/2013; updated 2/7/2015 (v2.19.0)
13
+ Version 2.0 - modified by Rob Garrison 4/12/2013; updated 3/5/2015 (v2.21.0)
14
14
  Requires jQuery v1.7+
15
15
  Requires the tablesorter plugin, v2.8+, available at http://mottie.github.com/tablesorter/docs/
16
16
 
@@ -57,10 +57,11 @@ $(function(){
57
57
  '.tablesorter-scroller { text-align: left; overflow: hidden; }' +
58
58
  '.tablesorter-scroller-header { overflow: hidden; }' +
59
59
  '.tablesorter-scroller-header table.tablesorter { margin-bottom: 0; }' +
60
+ '.tablesorter-scroller-footer table.tablesorter thead { visibility: hidden, height: 0; overflow: hidden; }' +
60
61
  '.tablesorter-scroller-table { overflow-y: scroll; }' +
61
- '.tablesorter-scroller-table table.tablesorter { margin-top: 0; overflow: scroll; } ' +
62
- '.tablesorter-scroller-table .tablesorter-filter-row, .tablesorter-scroller-table tfoot { display: none; }' +
63
- '.tablesorter-scroller-table table.tablesorter thead tr.tablesorter-headerRow * {' +
62
+ '.tablesorter-scroller-table table.tablesorter { margin-top: 0; margin-bottom: 0; overflow: scroll; } ' +
63
+ '.tablesorter-scroller-table .tablesorter-filter-row,.tablesorter-scroller-footer .tablesorter-filter-row,.tablesorter-scroller-table tfoot { display: none; }' +
64
+ '.tablesorter-scroller-table table.tablesorter thead tr.tablesorter-headerRow *,.tablesorter-scroller-footer table.tablesorter thead * {' +
64
65
  'line-height:0;height:0;border:none;background-image:none;padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;overflow:hidden;' +
65
66
  '}</style>';
66
67
  $(s).appendTo('body');
@@ -95,24 +96,37 @@ ts.addWidget({
95
96
  });
96
97
  },
97
98
  format: function(table, c, wo) {
98
- var maxHt, tbHt, $hdr, resize, getBarWidth, $cells,
99
+ var maxHt, tbHt, $hdr, $t, resize, getBarWidth, $hCells, $fCells,
100
+ $ft = [],
99
101
  // c.namespace contains a unique tablesorter ID, per table
100
102
  id = c.namespace.slice(1) + 'tsscroller',
101
103
  $win = $(window),
102
104
  $tbl = c.$table;
103
105
 
104
106
  if (!c.isScrolling) {
107
+ // force developer to set fixedWidth to maintain column widths
108
+ c.widthFixed = true;
105
109
  maxHt = wo.scroller_height || 300;
106
110
  tbHt = $tbl.children('tbody').height();
107
111
  if (tbHt !== 0 && maxHt > tbHt) { maxHt = tbHt + 10; } // Table is less than h px
108
112
 
109
113
  $hdr = $('<table class="' + $tbl.attr('class') + '" cellpadding=0 cellspacing=0>' +
110
- '<thead>' + $tbl.find('thead:first').html() + '</thead>' +
114
+ $tbl.children('thead')[0].outerHTML +
111
115
  '</table>');
116
+
117
+ $t = $tbl.children('tfoot');
118
+ if ($t.length) {
119
+ $ft = $('<table class="' + $tbl.attr('class') + '" cellpadding=0 cellspacing=0 style="margin-top:0"></table>')
120
+ .append( $t.clone(true) ) // maintain any bindings on the tfoot cells
121
+ .append( $tbl.children('thead')[0].outerHTML )
122
+ .wrap('<div class="tablesorter-scroller-footer"/>');
123
+ $fCells = $ft.children('tfoot').eq(0).children('tr').children();
124
+ }
125
+
112
126
  if (c.$extraTables && c.$extraTables.length) {
113
- c.$extraTables = c.$extraTables.add($hdr);
127
+ c.$extraTables = c.$extraTables.add($hdr).add($ft);
114
128
  } else {
115
- c.$extraTables = $hdr;
129
+ c.$extraTables = $hdr.add($ft);
116
130
  }
117
131
  $tbl
118
132
  .wrap('<div id="' + id + '" class="tablesorter-scroller" />')
@@ -120,15 +134,20 @@ ts.addWidget({
120
134
  // shrink filter row but don't completely hide it because the inputs/selectors may distort the columns
121
135
  .find('.tablesorter-filter-row').addClass('hideme');
122
136
 
123
- $cells = $hdr
124
- .wrap('<div class="tablesorter-scroller-header" style="width:' + $tbl.width() + ';" />')
137
+ if ($ft.length) {
138
+ // $ft.parent() to include <div> wrapper
139
+ $tbl.after( $ft.parent() );
140
+ }
141
+
142
+ $hCells = $hdr
143
+ .wrap('<div class="tablesorter-scroller-header" />')
125
144
  .find('.' + ts.css.header);
126
145
 
127
146
  // use max-height, so the height resizes dynamically while filtering
128
- $tbl.wrap('<div class="tablesorter-scroller-table" style="max-height:' + maxHt + 'px;width:' + $tbl.width() + ';" />');
147
+ $tbl.wrap('<div class="tablesorter-scroller-table" style="max-height:' + maxHt + 'px;" />');
129
148
 
130
149
  // make scroller header sortable
131
- ts.bindEvents(table, $cells);
150
+ ts.bindEvents(table, $hCells);
132
151
 
133
152
  // look for filter widget
134
153
  if ($tbl.hasClass('hasFilters')) {
@@ -145,7 +164,7 @@ ts.addWidget({
145
164
  };
146
165
 
147
166
  resize = function(){
148
- var d, b, $h, $th, w,
167
+ var d, b, $h, w,
149
168
  // Hide other scrollers so we can resize
150
169
  $div = $('div.tablesorter-scroller[id != "' + id + '"]').hide();
151
170
 
@@ -153,8 +172,7 @@ ts.addWidget({
153
172
  // only remove colgroup if it was added by the plugin
154
173
  // the $.tablesorter.fixColumnWidth() function already does this (v2.19.0)
155
174
  // but we need to get "accurate" resized measurements here - see issue #680
156
- $tbl.children('colgroup.tablesorter-colgroup').remove();
157
- $hdr.children('colgroup').remove();
175
+ $tbl.add( $hdr ).add( $ft ).children('colgroup').remove();
158
176
 
159
177
  // Reset sizes so parent can resize.
160
178
  $tbl
@@ -172,43 +190,24 @@ ts.addWidget({
172
190
 
173
191
  // Shrink a bit to accommodate scrollbar
174
192
  w = ( wo.scroller_barWidth || getBarWidth() ) + b;
175
-
176
193
  d.width( d.parent().innerWidth() - ( d.parent().hasScrollBar() ? w : 0 ) );
177
194
  w = d.innerWidth() - ( d.hasScrollBar() ? w : 0 );
178
- $tbl.width( w );
179
- $hdr.width( w );
180
- $hdr.parent().width( w );
195
+ $tbl.add( $hdr ).add( $hdr.parent() ).add( $ft ).width( w );
181
196
 
182
197
  $tbl
183
198
  .closest('.tablesorter-scroller')
184
199
  .find('.tablesorter-scroller-reset')
185
200
  .removeClass('tablesorter-scroller-reset');
186
201
 
187
- $h = $hdr.find('thead').children().children();
188
-
189
- // adjust cloned header to match original table width - includes wrappers, headers, and header inner div
190
- $tbl.children('thead').children().children().each(function(i, c){
191
- $th = $(c).find('.tablesorter-header-inner');
192
- if ($th.length) {
193
- // I have no idea why this is in here anymore LOL
194
- w = parseInt( $th.css('min-width').replace('auto', '0').replace(/(px|em)/, ''), 10 );
195
- if ( $th.width() < w ) {
196
- $th.width(w);
197
- } else {
198
- w = $th.width();
199
- }
200
-
201
- $h.eq(i)
202
- .parent()
203
- .width( $th.parent().width() - b );
204
- }
205
- });
206
-
207
202
  // refresh colgroup & copy to cloned header
208
203
  $.tablesorter.fixColumnWidth( table );
209
- $h = $tbl.children('colgroup').clone();
204
+ $h = $tbl.children('colgroup');
210
205
  if ($h.length) {
211
- $hdr.prepend($h);
206
+ b = $h[0].outerHTML;
207
+ $hdr.prepend(b);
208
+ if ($ft.length) {
209
+ $ft.prepend(b);
210
+ }
212
211
  }
213
212
 
214
213
  // hide filter row because filterEnd event fires
@@ -250,6 +249,7 @@ ts.addWidget({
250
249
  var $table = c.$table,
251
250
  namespace = c.namespace + 'tsscroller';
252
251
  $table.closest('.tablesorter-scroller').find('.tablesorter-scroller-header').remove();
252
+ $table.closest('.tablesorter-scroller').find('.tablesorter-scroller-footer').remove();
253
253
  $table
254
254
  .unwrap()
255
255
  .find('.tablesorter-filter-row').removeClass('hideme').end()