Pager: ensure filteredRows is current on page move. See #745

This commit is contained in:
Mottie 2014-10-09 16:49:49 -05:00
parent 0ee530de30
commit cdaa65f041
2 changed files with 38 additions and 32 deletions

View File

@ -131,17 +131,10 @@
}
},
updatePageDisplay = function(table, p, completed) {
if ( !p.initialized ) { return; }
var s, $out, regex,
c = table.config,
f = c.$table.hasClass('hasFilters'),
t = [],
sz = p.size || 10; // don't allow dividing by zero
t = [ (c.widgetOptions && c.widgetOptions.filter_filteredRow || 'filtered'), c.selectorRemove.replace(/^(\w+\.)/g,'') ];
if (p.countChildRows) { t.push(c.cssChildRow); }
regex = new RegExp( '(' + t.join('|') + ')' );
if (f && !p.ajaxUrl) {
calcFilters = function(table, p) {
var c = table.config,
hasFilters = c.$table.hasClass('hasFilters');
if (hasFilters && !p.ajaxUrl) {
if ($.isEmptyObject(c.cache)) {
// delayInit: true so nothing is in the cache
p.filteredRows = p.totalRows = c.$tbodies.eq(0).children('tr').not( p.countChildRows ? '' : '.' + c.cssChildRow ).length;
@ -151,11 +144,20 @@
p.filteredRows += p.regexRows.test(el[c.columns].$row[0].className) ? 0 : 1;
});
}
} else if (!f) {
} else if (!hasFilters) {
p.filteredRows = p.totalRows;
}
},
updatePageDisplay = function(table, p, completed) {
if ( !p.initialized ) { return; }
var s, t, $out,
c = table.config,
sz = p.size || 10; // don't allow dividing by zero
if (p.countChildRows) { t.push(c.cssChildRow); }
p.totalPages = Math.ceil( p.totalRows / sz ); // needed for "pageSize" method
c.totalRows = p.totalRows;
calcFilters(table, p);
c.filteredRows = p.filteredRows;
p.filteredPages = Math.ceil( p.filteredRows / sz ) || 0;
if ( Math.min( p.totalPages, p.filteredPages ) >= 0 ) {
@ -220,7 +222,7 @@
// Filter the options page number link array if it's larger than 'maxOptionSize'
// as large page set links will slow the browser on large dom inserts
var i, central_focus_size, focus_option_pages, insert_index, option_length, focus_length,
pg = Math.min( p.totalPages, p.filteredPages ),
pg = Math.min( p.totalPages, p.filteredPages ) || 1,
// make skip set size multiples of 5
skip_set_size = Math.ceil( ( pg / p.maxOptionSize ) / 5 ) * 5,
large_collection = pg > p.maxOptionSize,
@ -646,13 +648,14 @@
moveToPage = function(table, p, pageMoved) {
if ( p.isDisabled ) { return; }
var c = table.config,
var pg, c = table.config,
$t = $(table),
l = p.last,
pg = Math.min( p.totalPages, p.filteredPages ) || 1;
l = p.last;
if ( pageMoved !== false && p.initialized && $.isEmptyObject(c.cache)) {
return updateCache(table);
}
calcFilters(table, p);
pg = Math.min( p.totalPages, p.filteredPages );
if ( p.page < 0 ) { p.page = 0; }
if ( p.page > ( pg - 1 ) && pg !== 0 ) { p.page = pg - 1; }
// fixes issue where one currentFilter is [] and the other is ['','',''],

View File

@ -352,18 +352,10 @@ tsp = ts.pager = {
}
},
updatePageDisplay: function(table, c, completed) {
var s, $out, regex,
wo = c.widgetOptions,
p = c.pager,
f = c.$table.hasClass('hasFilters'),
t = [],
sz = p.size || 10; // don't allow dividing by zero
t = [ wo && wo.filter_filteredRow || 'filtered', c.selectorRemove.replace(/^(\w+\.)/g,'') ];
if (wo.pager_countChildRows) { t.push(c.cssChildRow); }
regex = new RegExp( '(' + t.join('|') + ')' );
p.$size.add(p.$goto).removeClass(wo.pager_css.disabled).removeAttr('disabled').attr('aria-disabled', 'false');
if (f && !wo.pager_ajaxUrl) {
calcFilters: function(table, c) {
var p = c.pager,
hasFilters = c.$table.hasClass('hasFilters');
if (hasFilters && !p.ajaxUrl) {
if ($.isEmptyObject(c.cache)) {
// delayInit: true so nothing is in the cache
p.filteredRows = p.totalRows = c.$tbodies.eq(0).children('tr').not( c.widgetOptions.pager_countChildRows ? '' : '.' + c.cssChildRow ).length;
@ -373,11 +365,21 @@ tsp = ts.pager = {
p.filteredRows += p.regexRows.test(el[c.columns].$row[0].className) ? 0 : 1;
});
}
} else if (!f) {
} else if (!hasFilters) {
p.filteredRows = p.totalRows;
}
},
updatePageDisplay: function(table, c, completed) {
var s, t, $out, regex,
wo = c.widgetOptions,
p = c.pager,
sz = p.size || 10; // don't allow dividing by zero
if (wo.pager_countChildRows) { t.push(c.cssChildRow); }
p.$size.add(p.$goto).removeClass(wo.pager_css.disabled).removeAttr('disabled').attr('aria-disabled', 'false');
p.totalPages = Math.ceil( p.totalRows / sz ); // needed for "pageSize" method
c.totalRows = p.totalRows;
tsp.calcFilters(table, c);
c.filteredRows = p.filteredRows;
p.filteredPages = Math.ceil( p.filteredRows / sz ) || 0;
if ( Math.min( p.totalPages, p.filteredPages ) >= 0 ) {
@ -878,10 +880,11 @@ tsp = ts.pager = {
if ( pageMoved !== false && p.initialized && $.isEmptyObject(table.config.cache)) {
return tsp.updateCache(table);
}
var c = table.config,
var pg, c = table.config,
wo = c.widgetOptions,
l = p.last,
pg = Math.min( p.totalPages, p.filteredPages ) || 1;
l = p.last
tsp.calcFilters(table, c);
pg = Math.min( p.totalPages, p.filteredPages );
if ( p.page < 0 ) { p.page = 0; }
if ( p.page > ( pg - 1 ) && pg !== 0 ) { p.page = pg - 1; }
// fixes issue where one current filter is [] and the other is ['','',''],