aurelia-materialize-bridge
Version:
Aurelia interface to http://materializecss.com/
87 lines (69 loc) • 1.97 kB
text/typescript
import * as au from "../aurelia";
.customElement("md-pagination")
.autoinject
export class MdPagination {
constructor(private element: Element) { }
.ato.bindable.numberMd({ defaultBindingMode: au.bindingMode.twoWay })
activePage: number = 1;
.ato.bindable.numberMd({ defaultBindingMode: au.bindingMode.oneWay })
pages: number = 5;
pagesChanged() {
this.setActivePage(1);
}
.ato.bindable.numberMd({ defaultBindingMode: au.bindingMode.oneWay })
visiblePageLinks: number = 15;
visiblePageLinksChanged() {
this.pageLinks = this.generatePageLinks();
}
.bindable({ defaultBindingMode: au.bindingMode.oneWay })
pageLinks: number[] = [];
.ato.bindable.booleanMd
showFirstLast: boolean = true;
.ato.bindable.booleanMd
showPrevNext: boolean = true;
.ato.bindable.booleanMd
showPageLinks: boolean = true;
bind() {
this.pageLinks = this.generatePageLinks();
}
setActivePage(page: number) {
this.activePage = page;
this.pageLinks = this.generatePageLinks();
au.fireMaterializeEvent(this.element, "page-changed", this.activePage);
}
setFirstPage() {
if (this.activePage > 1) {
this.setActivePage(1);
}
}
setLastPage() {
if (this.activePage < this.pages) {
this.setActivePage(this.pages);
}
}
setPreviousPage() {
if (this.activePage > 1) {
this.setActivePage(this.activePage - 1);
}
}
setNextPage() {
if (this.activePage < this.pages) {
this.setActivePage(this.activePage + 1);
}
}
generatePageLinks(): number[] {
let numberOfLinks = Math.min(this.visiblePageLinks, this.pages);
let midPoint = Math.ceil(numberOfLinks / 2);
let start = Math.max(this.activePage - midPoint, 0);
// respect visible links
if (start + midPoint * 2 > this.pages) {
start = Math.max(this.pages - midPoint * 2, 0);
}
let end = Math.min(start + numberOfLinks, this.pages);
let list: number[] = [];
for (let i = start; i < end; i++) {
list.push(i);
}
return list;
}
}