function TabulatrPagination(pageCount, tableId){
this.pageCount = pageCount;
this.tableId = tableId;
}
TabulatrPagination.prototype = {
constructor: TabulatrPagination,
createPaginationListItem: function(page, active){
var $page = $('
'+ page +'');
if(active){
$page.addClass('active');
}
return $page;
},
updatePagination: function(currentPage){
var $paginatorUl = $('.pagination[data-table='+ this.tableId +'] > ul');
$paginatorUl.html(this.createResetButton());
if(this.pageCount < 13){
for(var i = 1; i <= this.pageCount; i++){
$paginatorUl.append(this.createPaginationListItem(i, (i == currentPage)));
}
}else{
if(currentPage > 1){
$paginatorUl.append(this.createPaginationListItem(1, false));
}
var between = Math.floor((1 + currentPage) / 2);
if(between > 1 && between < currentPage - 2){
$paginatorUl.append('...');
$paginatorUl.append(this.createPaginationListItem(between, false));
}
if(currentPage > 4){
$paginatorUl.append('...');
}
if(currentPage > 3){
$paginatorUl.append(this.createPaginationListItem(currentPage-2, false));
}
if(currentPage > 2){
$paginatorUl.append(this.createPaginationListItem(currentPage-1, false));
}
$paginatorUl.append(this.createPaginationListItem(currentPage, true));
if(currentPage < this.pageCount - 1){
$paginatorUl.append(this.createPaginationListItem(currentPage+1, false));
}
if(currentPage < this.pageCount - 2){
$paginatorUl.append(this.createPaginationListItem(currentPage+2, false));
}
if(currentPage < this.pageCount - 3){
$paginatorUl.append('...');
}
between = Math.floor((currentPage + this.pageCount) / 2);
if(this.additionalPlaceholderNeeded(between, currentPage)){
$paginatorUl.append(this.createPaginationListItem(between, false));
$paginatorUl.append('...');
}
if(currentPage < this.pageCount){
$paginatorUl.append(this.createPaginationListItem(this.pageCount, false));
}
}
},
createResetButton: function() {
var html = '';
if($('table#'+ this.tableId).data('persistent')){
html = '';
}
return html;
},
additionalPlaceholderNeeded: function(pageToCompare, currentPage){
return pageToCompare > currentPage + 3 && pageToCompare < this.pageCount - 1;
}
}