(function($) { | |
$.extend({ | |
tablesorterPager: new function() { | |
function updatePageDisplay(c) { | |
var s = $(c.cssPageDisplay,c.container).val((c.page+1) + c.seperator + c.totalPages); | |
} | |
function setPageSize(table,size) { | |
var c = table.config; | |
c.size = size; | |
c.totalPages = Math.ceil(c.totalRows / c.size); | |
c.pagerPositionSet = false; | |
moveToPage(table); | |
fixPosition(table); | |
} | |
function fixPosition(table) { | |
var c = table.config; | |
if(!c.pagerPositionSet && c.positionFixed) { | |
var c = table.config, o = $(table); | |
if(o.offset) { | |
c.container.css({ | |
top: o.offset().top + o.height() + 'px', | |
position: 'absolute' | |
}); | |
} | |
c.pagerPositionSet = true; | |
} | |
} | |
function moveToFirstPage(table) { | |
var c = table.config; | |
c.page = 0; | |
moveToPage(table); | |
} | |
function moveToLastPage(table) { | |
var c = table.config; | |
c.page = (c.totalPages-1); | |
moveToPage(table); | |
} | |
function moveToNextPage(table) { | |
var c = table.config; | |
c.page++; | |
if(c.page >= (c.totalPages-1)) { | |
c.page = (c.totalPages-1); | |
} | |
moveToPage(table); | |
} | |
function moveToPrevPage(table) { | |
var c = table.config; | |
c.page--; | |
if(c.page <= 0) { | |
c.page = 0; | |
} | |
moveToPage(table); | |
} | |
function moveToPage(table) { | |
var c = table.config; | |
if(c.page < 0 || c.page > (c.totalPages-1)) { | |
c.page = 0; | |
} | |
renderTable(table,c.rowsCopy); | |
} | |
function renderTable(table,rows) { | |
var c = table.config; | |
var l = rows.length; | |
var s = (c.page * c.size); | |
var e = (s + c.size); | |
if(e > rows.length ) { | |
e = rows.length; | |
} | |
var tableBody = $(table.tBodies[0]); | |
// clear the table body | |
$.tablesorter.clearTableBody(table); | |
for(var i = s; i < e; i++) { | |
//tableBody.append(rows[i]); | |
var o = rows[i]; | |
var l = o.length; | |
for(var j=0; j < l; j++) { | |
tableBody[0].appendChild(o[j]); | |
} | |
} | |
fixPosition(table,tableBody); | |
$(table).trigger("applyWidgets"); | |
if( c.page >= c.totalPages ) { | |
moveToLastPage(table); | |
} | |
updatePageDisplay(c); | |
} | |
this.appender = function(table,rows) { | |
var c = table.config; | |
c.rowsCopy = rows; | |
c.totalRows = rows.length; | |
c.totalPages = Math.ceil(c.totalRows / c.size); | |
renderTable(table,rows); | |
}; | |
this.defaults = { | |
size: 10, | |
offset: 0, | |
page: 0, | |
totalRows: 0, | |
totalPages: 0, | |
container: null, | |
cssNext: '.next', | |
cssPrev: '.prev', | |
cssFirst: '.first', | |
cssLast: '.last', | |
cssPageDisplay: '.pagedisplay', | |
cssPageSize: '.pagesize', | |
seperator: "/", | |
positionFixed: true, | |
appender: this.appender | |
}; | |
this.construct = function(settings) { | |
return this.each(function() { | |
config = $.extend(this.config, $.tablesorterPager.defaults, settings); | |
var table = this, pager = config.container; | |
$(this).trigger("appendCache"); | |
config.size = parseInt($(".pagesize",pager).val()); | |
$(config.cssFirst,pager).click(function() { | |
moveToFirstPage(table); | |
return false; | |
}); | |
$(config.cssNext,pager).click(function() { | |
moveToNextPage(table); | |
return false; | |
}); | |
$(config.cssPrev,pager).click(function() { | |
moveToPrevPage(table); | |
return false; | |
}); | |
$(config.cssLast,pager).click(function() { | |
moveToLastPage(table); | |
return false; | |
}); | |
$(config.cssPageSize,pager).change(function() { | |
setPageSize(table,parseInt($(this).val())); | |
return false; | |
}); | |
}); | |
}; | |
} | |
}); | |
// extend plugin scope | |
$.fn.extend({ | |
tablesorterPager: $.tablesorterPager.construct | |
}); | |
})(jQuery); |