Skip to content

Commit

Permalink
Added pager widget, pager cleanup & filter widget tweaks for ajax. Fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
Mottie committed Oct 18, 2013
1 parent a386ae2 commit c4f10de
Show file tree
Hide file tree
Showing 7 changed files with 1,817 additions and 21 deletions.
50 changes: 36 additions & 14 deletions addons/pager/jquery.tablesorter.pager.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*!
* tablesorter pager plugin
* updated 10/11/2013
* updated 10/17/2013
*/
/*jshint browser:true, jquery:true, unused:false */
/*global toString:true */
Expand Down Expand Up @@ -87,7 +87,12 @@
totalRows: 0,
totalPages: 0,
filteredRows: 0,
filteredPages: 0
filteredPages: 0,
currentFilters: [],
startRow: 0,
endRow: 0,
$size: null,
last: {}

};

Expand Down Expand Up @@ -121,7 +126,7 @@
p.endRow = Math.min( p.filteredRows, p.totalRows, p.size * ( p.page + 1 ) );
out = p.$container.find(p.cssPageDisplay);
// form the output string (can now get a new output string from the server)
s = ( p.ajaxData && p.ajaxData.hasOwnProperty('output') ? p.ajaxData.output || p.output : p.output )
s = ( p.ajaxData && p.ajaxData.output ? p.ajaxData.output || p.output : p.output )
// {page} = one-based index; {page+#} = zero based index +/- value
.replace(/\{page([\-+]\d+)?\}/gi, function(m,n){
return p.page + (n ? parseInt(n, 10) : 1);
Expand Down Expand Up @@ -242,7 +247,7 @@
c.$tbodies.eq(0).empty();
} else {
// process ajax object
if (toString.call(result) !== "[object Array]") {
if (!$.isArray(result)) {
p.ajaxData = result;
p.totalRows = result.total;
th = result.headers;
Expand Down Expand Up @@ -380,13 +385,18 @@
},

renderTable = function(table, rows, p) {
p.isDisabled = false; // needed because sorting will change the page and re-enable the pager
var i, j, o, $tb,
l = rows.length,
s = ( p.page * p.size ),
e = ( s + p.size );
l = rows && rows.length || 0, // rows may be undefined
s = ( p.page * p.size ),
e = ( s + p.size );
if ( l < 1 ) { return; } // empty table, abort!
if ( p.page >= p.totalPages ) {
// lets not render the table more than once
moveToLastPage(table, p);
}
p.isDisabled = false; // needed because sorting will change the page and re-enable the pager
if (p.initialized) { $(table).trigger('pagerChange', p); }

if ( !p.removeRows ) {
hideRows(table, p);
} else {
Expand All @@ -400,9 +410,7 @@
}
ts.processTbody(table, $tb, false);
}
if ( p.page >= p.totalPages ) {
moveToLastPage(table, p);
}

updatePageDisplay(table, p);
if ( !p.isDisabled ) { fixHeight(table, p); }
$(table).trigger('applyWidgets');
Expand All @@ -418,7 +426,7 @@
p.page = 0;
p.size = p.totalRows;
p.totalPages = 1;
$(table).find('tr.pagerSavedHeightSpacer').remove();
$(table).addClass('pagerDisabled').find('tr.pagerSavedHeightSpacer').remove();
renderTable(table, table.config.rowsCopy, p);
}
// disable size selector
Expand All @@ -429,9 +437,18 @@

moveToPage = function(table, p, flag) {
if ( p.isDisabled ) { return; }
var pg = Math.min( p.totalPages, p.filteredPages );
var l = p.last,
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; }
// don't allow rendering multiple times on the same page/size/totalpages/filters
if (l.page === p.page && l.size === p.size && l.total === p.totalPages && l.filters === p.currentFilters ) { return; }
p.last = {
page : p.page,
size : p.size,
totalPages : p.totalPages,
currentFilters : p.currentFilters
};
if (p.ajax) {
getAjax(table, p);
} else if (!p.ajax) {
Expand Down Expand Up @@ -483,7 +500,11 @@
showAllRows(table, p);
p.$container.hide(); // hide pager
table.config.appender = null; // remove pager appender function
p.initialized = false;
$(table).unbind('destroy.pager sortEnd.pager filterEnd.pager enable.pager disable.pager');
if (ts.storage) {
ts.storage(table, 'tablesorter-pager', '');
}
},

enablePager = function(table, p, triggered){
Expand Down Expand Up @@ -528,7 +549,7 @@
c.appender = $this.appender;

if (p.savePages && ts.storage) {
t = ts.storage(table, 'tablesorter-pager') || {};
t = ts.storage(table, 'tablesorter-pager') || {}; // fixes #387
p.page = isNaN(t.page) ? p.page : t.page;
p.size = isNaN(t.size) ? p.size : t.size;
}
Expand Down Expand Up @@ -610,6 +631,7 @@
.bind('change', function(){
p.page = $(this).val() - 1;
moveToPage(table, p);
updatePageDisplay(table, p, false)
});
}

Expand Down
Loading

0 comments on commit c4f10de

Please sign in to comment.