contacts_events-8.x-1.x-dev/modules/village_allocation/js/components/pager.js
modules/village_allocation/js/components/pager.js
Vue.component('pager', {
props: ['pageNumber', 'totalPages'],
data() {
return {
showPreviousEllipses: false,
showNextEllipses: false,
}
},
computed: {
// The current pager is the page we are currently paged to.
pagerCurrent() { return this.pageNumber + 1; },
// The first pager is the first page listed by this pager piece (re quantity).
pagerFirst() { return this.pagerCurrent() - this.pagerMiddle + 1; },
// The last is the last page listed by this pager piece (re quantity).
pagerLast() { return this.pagerCurrent() + this.quantity - this.pagerMiddle; }
},
methods: {
calculatePages() {
let pages = [];
// How many pages to show before it generates ellipses.
let quantity = 9;
let pagerMiddle = Math.ceil(quantity / 2);
let pagerCurrent = this.pageNumber + 1;
let pagerFirst = pagerCurrent - pagerMiddle;
let pagerLast = pagerCurrent + quantity + pagerMiddle;
let pagerMax = this.totalPages;
let i = pagerFirst;
if (pagerLast > this.totalPages) {
i = i + (pagerMax - pagerLast);
pagerLast = pagerMax;
}
if (i <= 0) {
// Adjust "center" if at start of query.
pagerLast = pagerLast + (1 - i);
i = 1;
}
if (i !== pagerMax) {
if (i > 1) {
this.showPreviousEllipses = true;
}
for (; i <= pagerLast && i <= pagerMax; i++) {
pages.push(i);
}
if (i < pagerMax + 1) {
this.showNextEllipses = true;
}
}
return pages;
}
},
template: `<nav class="pager">
<ul class="pager__items js-pager__items">
<li v-if="pageNumber > 0" class="pager__item pager__item--first" >
<a href="javascript:void(0)" @click="$emit('navigate', 0)">« First</a>
</li>
<li v-if="pageNumber > 0" class="pager__item pager__item--previous">
<a href="javascript:void(0)" @click="$emit('navigate', pageNumber-1)">‹ Previous</a>
</li>
<li v-if="showPreviousEllipses" class="pager__item pager__item--ellipsis"></li>
<li v-for="page in calculatePages()" :key="page" :class="{ 'pager__item': true, 'is-active': page-1 == pageNumber }">
<a href="javascript:void(0)" @click="$emit('navigate', page - 1)">{{page}}</a>
</li>
<li v-if="showNextEllipses" class="pager__item pager__item--ellipsis">…</li>
<li v-if="pageNumber < (totalPages - 1)" class="pager__item pager__item--next">
<a href="javascript:void(0)" @click="$emit('navigate', pageNumber+1)">Next ›</a>
</li>
<li v-if="pageNumber < (totalPages - 1)" class="pager__item pager__item--last">
<a href="javascript:void(0)" @click="$emit('navigate', totalPages-1)">Last »</a>
</li>
</ul>
</nav>`,
});
