jquery-tablesorter 1.15.0 → 1.16.0

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.
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()