Skip to content

Commit

Permalink
fix(md-pagination): respect visible links
Browse files Browse the repository at this point in the history
- when navigating to the end of pages, link list got shorter
than visible link setting.
- Changed events fire when parsing to int on mdPages and
mdVisiblePageLinks when parsed in event handler.
Had to use local variables to stop this.
- number compare on showNext/showLast failed?? changed '===' to '=='
  • Loading branch information
Ullfis committed Aug 27, 2016
1 parent 1e06d0f commit e218e79
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 12 deletions.
6 changes: 3 additions & 3 deletions src/pagination/pagination.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@
<li md-waves click.delegate="setActivePage(p+1)" repeat.for="p of mdPageLinks" class="${ p+1 === mdActivePage ? 'active' : ''}">
<span if.bind="$first && p > 0">...</span>
<a>${p+1}</a>
<span if.bind="$last && p < mdPages - 1">...</span>
<span if.bind="$last && p < pages - 1">...</span>
</li>
</template>
<template if.bind="mdShowPrevNext">
<li md-waves click.delegate="setNextPage()" class="${ mdActivePage === mdPages ? 'disabled' : '' }"><a><i class="material-icons">chevron_right</i></a></li>
<li md-waves click.delegate="setNextPage()" class="${ mdActivePage == pages ? 'disabled' : '' }"><a><i class="material-icons">chevron_right</i></a></li>
</template>
<template if.bind="mdShowFirstLast">
<li md-waves click.delegate="setLastPage()" class="${ mdActivePage === mdPages ? 'disabled' : '' }"><a><i class="material-icons">last_page</i></a></li>
<li md-waves click.delegate="setLastPage()" class="${ mdActivePage == pages ? 'disabled' : '' }"><a><i class="material-icons">last_page</i></a></li>
</template>
</ul>
</template>
24 changes: 15 additions & 9 deletions src/pagination/pagination.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,23 +24,26 @@ export class MdPagination {
@bindable() mdShowPrevNext = true;
@bindable() mdShowPageLinks = true;

// local variables to stop Changed events when parsing to int
numberOfLinks = 15;
pages = 5;

constructor(element) {
this.element = element;
}

bind() {
// attached() throws unhandled exceptions
this.mdPages = parseInt(this.mdPages, 10);
this.pages = parseInt(this.mdPages, 10);
// We don't want mdVisiblePageLinks to be greater than mdPages
this.numberOfLinks = Math.min(parseInt(this.mdVisiblePageLinks, 10), this.mdPages);
this.numberOfLinks = Math.min(parseInt(this.mdVisiblePageLinks, 10), this.pages);
this.mdShowFirstLast = getBooleanFromAttributeValue(this.mdShowFirstLast);
this.mdShowPrevNext = getBooleanFromAttributeValue(this.mdShowPrevNext);
this.mdPageLinks = this.generatePageLinks();
}

setActivePage(page) {
this.mdActivePage = page;
this.mdActivePage = parseInt(page, 10);
this.mdPageLinks = this.generatePageLinks();
fireMaterializeEvent(this.element, 'page-changed', this.mdActivePage);
}
Expand All @@ -52,8 +55,8 @@ export class MdPagination {
}

setLastPage() {
if (this.mdActivePage < this.mdPages) {
this.setActivePage(this.mdPages);
if (this.mdActivePage < this.pages) {
this.setActivePage(this.pages);
}
}

Expand All @@ -64,25 +67,28 @@ export class MdPagination {
}

setNextPage() {
if (this.mdActivePage < this.mdPages) {
if (this.mdActivePage < this.pages) {
this.setActivePage(this.mdActivePage + 1);
}
}

mdPagesChanged() {
this.numberOfLinks = Math.min(parseInt(this.mdVisiblePageLinks, 10), this.mdPages);
this.pages = parseInt(this.mdPages, 10);
this.numberOfLinks = Math.min(parseInt(this.mdVisiblePageLinks, 10), this.pages);
this.setActivePage(1);
}

mdVisiblePageLinksChanged() {
this.numberOfLinks = parseInt(this.mdVisiblePageLinks, 10);
this.numberOfLinks = Math.min(parseInt(this.mdVisiblePageLinks, 10), this.pages);
this.mdPageLinks = this.generatePageLinks();
}

generatePageLinks() {
let midPoint = parseInt((this.numberOfLinks / 2), 10);
let start = Math.max(this.mdActivePage - midPoint, 0);
let end = Math.min(start + this.numberOfLinks, this.mdPages);
// respect visible links
if (start + midPoint * 2 > this.pages) start = this.pages - midPoint * 2;
let end = Math.min(start + this.numberOfLinks, this.pages);

let list = [];
for (let i = start; i < end; i++) {
Expand Down

0 comments on commit e218e79

Please sign in to comment.