META-INF.resources.primefaces.mobile.widgets.paginator.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of primefaces Show documentation
Show all versions of primefaces Show documentation
PrimeFaces is one of the most popular UI libraries in Java EE Ecosystem and widely used by software companies, world renowned brands, banks, financial institutions, insurance companies, universities and more.
/**
* PrimeFaces Mobile Paginator Widget
*
*/
PrimeFaces.widget.Paginator = PrimeFaces.widget.BaseWidget.extend({
init: function(cfg) {
this.cfg = cfg;
this.jq = $();
var $this = this;
$.each(this.cfg.id, function(index, id){
$this.jq = $this.jq.add($(PrimeFaces.escapeClientId(id)));
});
//elements
this.controlGroups = this.jq.find('> .ui-controlgroup > .ui-controlgroup-controls');
this.pageLinks = this.controlGroups.children('.ui-paginator-page');
this.firstLink = this.controlGroups.children('.ui-paginator-first');
this.prevLink = this.controlGroups.children('.ui-paginator-prev');
this.nextLink = this.controlGroups.children('.ui-paginator-next');
this.endLink = this.controlGroups.children('.ui-paginator-last');
//metadata
this.cfg.rows = (this.cfg.rows === 0) ? this.cfg.rowCount : this.cfg.rows;
this.cfg.pageCount = Math.ceil(this.cfg.rowCount / this.cfg.rows)||1;
this.cfg.pageLinks = this.cfg.pageLinks||10;
this.cfg.currentPageTemplate = this.cfg.currentPageTemplate||'({currentPage} of {totalPages})';
//event bindings
this.bindEvents();
},
bindEvents: function() {
var $this = this;
//page links
this.bindPageLinkEvents();
//First page link
this.firstLink.click(function() {
PrimeFaces.clearSelection();
if(!$(this).hasClass("ui-state-disabled")){
$this.setPage(0);
}
});
//Prev page link
this.prevLink.click(function() {
PrimeFaces.clearSelection();
if(!$(this).hasClass("ui-state-disabled")){
$this.setPage($this.cfg.page - 1);
}
});
//Next page link
this.nextLink.click(function() {
PrimeFaces.clearSelection();
if(!$(this).hasClass("ui-state-disabled")){
$this.setPage($this.cfg.page + 1);
}
});
//Last page link
this.endLink.click(function() {
PrimeFaces.clearSelection();
if(!$(this).hasClass("ui-state-disabled")){
$this.setPage($this.cfg.pageCount - 1);
}
});
},
bindPageLinkEvents: function(){
var $this = this;
this.pageLinks.on('click.paginator', function(e) {
var link = $(this);
if(!link.hasClass('ui-state-disabled') &&! link.hasClass('ui-btn-active')) {
$this.setPage(parseInt(link.text()) - 1);
}
});
},
updateUI: function() {
//boundaries
if(this.cfg.page === 0) {
this.disableElement(this.firstLink);
this.disableElement(this.prevLink);
}
else {
this.enableElement(this.firstLink);
this.enableElement(this.prevLink);
}
if(this.cfg.page === (this.cfg.pageCount - 1)) {
this.disableElement(this.nextLink);
this.disableElement(this.endLink);
}
else {
this.enableElement(this.nextLink);
this.enableElement(this.endLink);
}
this.updatePageLinks();
},
updatePageLinks: function() {
var start, end, delta, j = 0;
//calculate visible page links
this.cfg.pageCount = Math.ceil(this.cfg.rowCount / this.cfg.rows)||1;
var visiblePages = Math.min(this.cfg.pageLinks, this.cfg.pageCount);
//calculate range, keep current in middle if necessary
start = Math.max(0, Math.ceil(this.cfg.page - ((visiblePages) / 2)));
end = Math.min(this.cfg.pageCount - 1, start + visiblePages - 1);
//check when approaching to last page
delta = this.cfg.pageLinks - (end - start + 1);
start = Math.max(0, start - delta);
//update dom
for(var i = start; i <= end; i++) {
var styleClass = 'ui-paginator-page ui-btn';
if(this.cfg.page === i) {
styleClass += " ui-btn-active";
}
this.pageLinks.eq(j).attr('class', styleClass).text(i + 1);
this.pageLinks.eq(parseInt(j + (this.pageLinks.length / 2))).attr('class', styleClass).text(i + 1);
j++;
}
},
setPage: function(p, silent) {
if(p >= 0 && p < this.cfg.pageCount && this.cfg.page != p){
var newState = {
first: this.cfg.rows * p,
rows: this.cfg.rows,
page: p
};
if(silent) {
this.cfg.page = p;
this.updateUI();
}
else {
this.cfg.paginate.call(this, newState);
}
}
},
setTotalRecords: function(value) {
this.cfg.rowCount = value;
this.cfg.pageCount = Math.ceil(value / this.cfg.rows)||1;
this.cfg.page = 0;
this.updateUI();
},
getCurrentPage: function() {
return this.cfg.page;
},
getFirst: function() {
return (this.cfg.rows * this.cfg.page);
},
getContainerHeight: function(margin) {
var height = 0;
for(var i = 0; i < this.jq.length; i++) {
height += this.jq.eq(i).outerHeight(margin);
}
return height;
},
disableElement: function(element) {
element.removeClass('ui-state-hover ui-state-focus ui-state-active').addClass('ui-state-disabled').attr('tabindex', -1);
element.removeClass('ui-state-hover ui-state-focus ui-state-active').addClass('ui-state-disabled').attr('tabindex', -1);
},
enableElement: function(element) {
element.removeClass('ui-state-disabled').attr('tabindex', 0);
}
});