diff --git a/addons/pager/jquery.tablesorter.pager.js b/addons/pager/jquery.tablesorter.pager.js index abfa9c35..ec7535b7 100644 --- a/addons/pager/jquery.tablesorter.pager.js +++ b/addons/pager/jquery.tablesorter.pager.js @@ -206,6 +206,7 @@ } } pagerArrows(p); + fixHeight(table, p); if (p.initialized && completed !== false) { c.$table.trigger('pagerComplete', p); // save pager info to storage @@ -282,22 +283,28 @@ var d, h, c = table.config, $b = c.$tbodies.eq(0); - if (p.fixedHeight) { - $b.find('tr.pagerSavedHeightSpacer').remove(); + $b.find('tr.pagerSavedHeightSpacer').remove(); + if (p.fixedHeight && !p.isDisabled) { h = $.data(table, 'pagerSavedHeight'); if (h) { d = h - $b.height(); if ( d > 5 && $.data(table, 'pagerLastSize') === p.size && $b.children('tr:visible').length < p.size ) { - $b.append(''); + $b.append(''); } } } }, changeHeight = function(table, p) { - var $b = table.config.$tbodies.eq(0); + var h, + c = table.config, + $b = c.$tbodies.eq(0); $b.find('tr.pagerSavedHeightSpacer').remove(); - $.data(table, 'pagerSavedHeight', $b.height()); + if (!$b.children('tr:visible').length) { + $b.append(' '); + } + h = $b.children('tr').eq(0).height() * p.size; + $.data(table, 'pagerSavedHeight', h); fixHeight(table, p); $.data(table, 'pagerLastSize', p.size); }, @@ -455,7 +462,6 @@ p.last.currentFilters = p.currentFilters; p.last.sortList = (c.sortList || []).join(','); updatePageDisplay(table, p, true); - fixHeight(table, p); $t.trigger('updateCache', [function(){ if (p.initialized) { // apply widgets after table has rendered & after a delay to prevent @@ -597,7 +603,6 @@ ts.processTbody(table, $tb, false); } updatePageDisplay(table, p, true); - if ( !p.isDisabled ) { fixHeight(table, p); } if (table.isUpdating) { $t.trigger('updateComplete', [ table, true ]); } @@ -765,11 +770,11 @@ p.$container.find(p.cssPageDisplay).attr('id', info); c.$table.attr('aria-describedby', info); } + changeHeight(table, p); if ( triggered ) { c.$table.trigger('updateRows'); setPageSize(table, p.size, p); hideRowsSetup(table, p); - fixHeight(table, p); if (c.debug) { ts.log('pager enabled'); } @@ -839,11 +844,9 @@ // make sure we have a copy of all table rows once the cache has been built updateCache(table); } - // update page display first, so we update p.filteredPages - updatePageDisplay(table, p, false); moveToPage(table, p, false); c.$table.trigger('applyWidgets'); - fixHeight(table, p); + updatePageDisplay(table, p, false); } }) .bind('disable.pager', function(e){ @@ -862,7 +865,6 @@ e.stopPropagation(); // table can be unintentionally undefined in tablesorter v2.17.7 and earlier if ( !table || triggered ) { return; } - fixHeight(table, p); var $rows = c.$tbodies.eq(0).children('tr').not(c.selectorRemove); p.totalRows = $rows.length - ( p.countChildRows ? 0 : $rows.filter('.' + c.cssChildRow).length ); p.totalPages = Math.ceil( p.totalRows / p.size ); @@ -870,8 +872,12 @@ // make a copy of all table rows once the cache has been built updateCache(table); } - updatePageDisplay(table, p, true); + if ( p.page >= p.totalPages ) { + moveToLastPage(table, p); + } hideRows(table, p); + changeHeight(table, p); + updatePageDisplay(table, p, true); }) .bind('pageSize.pager', function(e,v){ e.stopPropagation(); @@ -955,8 +961,6 @@ hideRowsSetup(table, p); } - changeHeight(table, p); - // pager initialized if (!p.ajax) { p.initialized = true; diff --git a/docs/example-pager.html b/docs/example-pager.html index 2f7ed64b..19c14032 100644 --- a/docs/example-pager.html +++ b/docs/example-pager.html @@ -266,226 +266,28 @@ - - Student01 - Languages - male - 80 - 70 - 75 - 80 - - - - Student02 - Mathematics - male - 90 - 88 - 100 - 90 - - - - Student03 - Languages - female - 85 - 95 - 80 - 85 - - - - Student04 - Languages - male - 60 - 55 - 100 - 100 - - - - Student05 - Languages - female - 68 - 80 - 95 - 80 - - - - Student06 - Mathematics - male - 100 - 99 - 100 - 90 - - - - Student07 - Mathematics - male - 85 - 68 - 90 - 90 - - - - Student08 - Languages - male - 100 - 90 - 90 - 85 - - - - Student09 - Mathematics - male - 80 - 50 - 65 - 75 - - - - Student10 - Languages - male - 85 - 100 - 100 - 90 - - - - Student11 - Languages - male - 86 - 85 - 100 - 100 - - - - Student12 - Mathematics - female - 100 - 75 - 70 - 85 - - - - Student13 - Languages - female - 100 - 80 - 100 - 90 - - - - Student14 - Languages - female - 50 - 45 - 55 - 90 - - - - Student15 - Languages - male - 95 - 35 - 100 - 90 - - - - Student16 - Languages - female - 100 - 50 - 30 - 70 - - - - Student17 - Languages - female - 80 - 100 - 55 - 65 - - - - Student18 - Mathematics - male - 30 - 49 - 55 - 75 - - - - Student19 - Languages - male - 68 - 90 - 88 - 70 - - - - Student20 - Mathematics - male - 40 - 45 - 40 - 80 - - - - Student21 - Languages - male - 50 - 45 - 100 - 100 - - - - Student22 - Mathematics - male - 100 - 99 - 100 - 90 - - + Student01Languagesmale80707580 + Student02Mathematicsmale908810090 + Student03Languagesfemale85958085 + Student04Languagesmale6055100100 + Student05Languagesfemale68809580 + Student06Mathematicsmale1009910090 + Student07Mathematicsmale85689090 + Student08Languagesmale100909085 + Student09Mathematicsmale80506575 + Student10Languagesmale8510010090 + Student11Languagesmale8685100100 + Student12Mathematicsfemale100757085 + Student13Languagesfemale1008010090 + Student14Languagesfemale50455590 + Student15Languagesmale953510090 + Student16Languagesfemale100503070 + Student17Languagesfemale801005565 + Student18Mathematicsmale30495575 + Student19Languagesmale68908870 + Student20Mathematicsmale40454080 + Student21Languagesmale5045100100 + Student22Mathematicsmale1009910090 Student23Mathematicsmale8277079 Student24Languagesfemale100911382 Student25Mathematicsmale22968253 diff --git a/docs/example-widget-pager.html b/docs/example-widget-pager.html index 0f122b0c..ef3573d4 100644 --- a/docs/example-widget-pager.html +++ b/docs/example-widget-pager.html @@ -54,7 +54,7 @@ // if true, the table will remain the same height no matter how many records are displayed. The space is made up by an empty // table row set to a height to compensate; default is false - pager_fixedHeight: false, + pager_fixedHeight: true, // remove rows from the table to speed up the sort of large tables. // setting this to false, only hides the non-visible rows; needed if you plan to add/remove rows with the pager enabled. @@ -282,226 +282,28 @@ - - Student01 - Languages - male - 80 - 70 - 75 - 80 - - - - Student02 - Mathematics - male - 90 - 88 - 100 - 90 - - - - Student03 - Languages - female - 85 - 95 - 80 - 85 - - - - Student04 - Languages - male - 60 - 55 - 100 - 100 - - - - Student05 - Languages - female - 68 - 80 - 95 - 80 - - - - Student06 - Mathematics - male - 100 - 99 - 100 - 90 - - - - Student07 - Mathematics - male - 85 - 68 - 90 - 90 - - - - Student08 - Languages - male - 100 - 90 - 90 - 85 - - - - Student09 - Mathematics - male - 80 - 50 - 65 - 75 - - - - Student10 - Languages - male - 85 - 100 - 100 - 90 - - - - Student11 - Languages - male - 86 - 85 - 100 - 100 - - - - Student12 - Mathematics - female - 100 - 75 - 70 - 85 - - - - Student13 - Languages - female - 100 - 80 - 100 - 90 - - - - Student14 - Languages - female - 50 - 45 - 55 - 90 - - - - Student15 - Languages - male - 95 - 35 - 100 - 90 - - - - Student16 - Languages - female - 100 - 50 - 30 - 70 - - - - Student17 - Languages - female - 80 - 100 - 55 - 65 - - - - Student18 - Mathematics - male - 30 - 49 - 55 - 75 - - - - Student19 - Languages - male - 68 - 90 - 88 - 70 - - - - Student20 - Mathematics - male - 40 - 45 - 40 - 80 - - - - Student21 - Languages - male - 50 - 45 - 100 - 100 - - - - Student22 - Mathematics - male - 100 - 99 - 100 - 90 - - + Student01Languagesmale80707580 + Student02Mathematicsmale908810090 + Student03Languagesfemale85958085 + Student04Languagesmale6055100100 + Student05Languagesfemale68809580 + Student06Mathematicsmale1009910090 + Student07Mathematicsmale85689090 + Student08Languagesmale100909085 + Student09Mathematicsmale80506575 + Student10Languagesmale8510010090 + Student11Languagesmale8685100100 + Student12Mathematicsfemale100757085 + Student13Languagesfemale1008010090 + Student14Languagesfemale50455590 + Student15Languagesmale953510090 + Student16Languagesfemale100503070 + Student17Languagesfemale801005565 + Student18Mathematicsmale30495575 + Student19Languagesmale68908870 + Student20Mathematicsmale40454080 + Student21Languagesmale5045100100 + Student22Mathematicsmale1009910090 Student23Mathematicsmale8277079 Student24Languagesfemale100911382 Student25Mathematicsmale22968253 diff --git a/js/widgets/widget-pager.js b/js/widgets/widget-pager.js index 8729f688..855bf836 100644 --- a/js/widgets/widget-pager.js +++ b/js/widgets/widget-pager.js @@ -204,7 +204,6 @@ tsp = ts.pager = { initComplete: function(table, c){ var p = c.pager; - tsp.changeHeight(table, c); tsp.bindEvents(table, c); tsp.setPageSize(table, 0, c); // page size 0 is ignored @@ -237,12 +236,10 @@ tsp = ts.pager = { // make sure we have a copy of all table rows once the cache has been built tsp.updateCache(table); } - // update page display first, so we update p.filteredPages - tsp.updatePageDisplay(table, c, false); // tsp.moveToPage(table, p, false); <-- called when applyWidgets is triggered c.pager.last.page = -1; c.$table.trigger('applyWidgets'); - tsp.fixHeight(table, c); + tsp.updatePageDisplay(table, c, false); } }) .on('disable.pager', function(e){ @@ -261,7 +258,6 @@ tsp = ts.pager = { e.stopPropagation(); // table can be unintentionally undefined in tablesorter v2.17.7 and earlier if (!table || triggered) { return; } - tsp.fixHeight(table, c); var $rows = c.$tbodies.eq(0).children('tr').not(c.selectorRemove); p.totalRows = $rows.length - ( c.widgetOptions.pager_countChildRows ? 0 : $rows.filter('.' + c.cssChildRow).length ); p.totalPages = Math.ceil( p.totalRows / p.size ); @@ -269,8 +265,12 @@ tsp = ts.pager = { // make a copy of all table rows once the cache has been built tsp.updateCache(table); } - tsp.updatePageDisplay(table, c); + if ( p.page >= p.totalPages ) { + tsp.moveToLastPage(table, p); + } tsp.hideRows(table, c); + tsp.changeHeight(table, c); + tsp.updatePageDisplay(table, c); // make sure widgets are applied - fixes #450 c.$table.trigger('applyWidgets'); }) @@ -371,7 +371,7 @@ tsp = ts.pager = { }, updatePageDisplay: function(table, c, completed) { - var s, t, $out, regex, + var s, t, $out, wo = c.widgetOptions, p = c.pager, sz = p.size || 10; // don't allow dividing by zero @@ -418,7 +418,7 @@ tsp = ts.pager = { t += ''; }); // innerHTML doesn't work in IE9 - http://support2.microsoft.com/kb/276228 - p.$goto.html(t).val( p.page + 1 );; + p.$goto.html(t).val( p.page + 1 ); } // rebind startRow/page inputs $out.find('.ts-startRow, .ts-page').off('change').on('change', function(){ @@ -429,6 +429,7 @@ tsp = ts.pager = { } } tsp.pagerArrows(c); + tsp.fixHeight(table, c); if (p.initialized && completed !== false) { c.$table.trigger('pagerComplete', c); // save pager info to storage @@ -508,22 +509,26 @@ tsp = ts.pager = { p = c.pager, wo = c.widgetOptions, $b = c.$tbodies.eq(0); - if (wo.pager_fixedHeight) { - $b.find('tr.pagerSavedHeightSpacer').remove(); + $b.find('tr.pagerSavedHeightSpacer').remove(); + if (wo.pager_fixedHeight && !p.isDisabled) { h = $.data(table, 'pagerSavedHeight'); if (h) { d = h - $b.height(); if ( d > 5 && $.data(table, 'pagerLastSize') === p.size && $b.children('tr:visible').length < p.size ) { - $b.append(''); + $b.append(''); } } } }, changeHeight: function(table, c) { - var $b = c.$tbodies.eq(0); + var h, $b = c.$tbodies.eq(0); $b.find('tr.pagerSavedHeightSpacer').remove(); - $.data(table, 'pagerSavedHeight', $b.height()); + if (!$b.children('tr:visible').length) { + $b.append(' '); + } + h = $b.children('tr').eq(0).height() * c.pager.size; + $.data(table, 'pagerSavedHeight', h); tsp.fixHeight(table, c); $.data(table, 'pagerLastSize', c.pager.size); }, @@ -677,7 +682,6 @@ tsp = ts.pager = { p.last.currentFilters = p.currentFilters; p.last.sortList = (c.sortList || []).join(','); tsp.updatePageDisplay(table, c); - tsp.fixHeight(table, c); $t.trigger('updateCache', [function(){ if (p.initialized) { // apply widgets after table has rendered & after a delay to prevent @@ -815,7 +819,6 @@ tsp = ts.pager = { } tsp.updatePageDisplay(table, c); - if ( !p.isDisabled ) { tsp.fixHeight(table, c); } wo.pager_startPage = p.page; wo.pager_size = p.size; @@ -882,7 +885,7 @@ tsp = ts.pager = { } var pg, c = table.config, wo = c.widgetOptions, - l = p.last + l = p.last; tsp.calcFilters(table, c); pg = Math.min( p.totalPages, p.filteredPages ); if ( p.page < 0 ) { p.page = 0; } @@ -994,11 +997,11 @@ tsp = ts.pager = { p.$container.find(c.widgetOptions.pager_selectors.pageDisplay).attr('id', info); c.$table.attr('aria-describedby', info); } + tsp.changeHeight(table, c); if ( triggered ) { c.$table.trigger('updateRows'); tsp.setPageSize(table, p.size, c); tsp.hideRowsSetup(table, c); - tsp.fixHeight(table, c); if (c.debug) { ts.log('pager enabled'); }