dvant
Version:
A Vue.js 2.0 Mobile UI at dawnwin modified from Youzan
126 lines (109 loc) • 4.22 kB
JavaScript
'use strict';
exports.__esModule = true;
var _utils = require('../utils');
exports.default = (0, _utils.create)({
render: function render() {
var _vm = this;var _h = _vm.$createElement;var _c = _vm._self._c || _h;return _c('ul', { staticClass: "van-pagination", class: { 'van-pagination-simple': !_vm.isMultiMode } }, [_c('li', { staticClass: "van-pagination__item van-pagination__prev van-hairline", class: { 'van-pagination--disabled': _vm.value === 1 }, on: { "click": function click($event) {
_vm.selectPage(_vm.value - 1);
} } }, [_vm._v("\n " + _vm._s(_vm.prevText || _vm.$t('prev')) + "\n ")]), _vm._l(_vm.pages, function (page, index) {
return _vm.isMultiMode ? _c('li', { key: index, staticClass: "van-pagination__item van-pagination__page van-hairline", class: { 'van-pagination--active': page.active }, on: { "click": function click($event) {
_vm.selectPage(page.number);
} } }, [_vm._v("\n " + _vm._s(page.text) + "\n ")]) : _vm._e();
}), !_vm.isMultiMode ? _c('li', { staticClass: "van-pagination__page-desc" }, [_vm._t("pageDesc", [_vm._v(_vm._s(_vm.pageDesc))])], 2) : _vm._e(), _c('li', { staticClass: "van-pagination__item van-pagination__next van-hairline", class: { 'van-pagination--disabled': _vm.value === _vm.computedPageCount }, on: { "click": function click($event) {
_vm.selectPage(_vm.value + 1);
} } }, [_vm._v("\n " + _vm._s(_vm.nextText || _vm.$t('next')) + "\n ")])], 2);
},
name: 'van-pagination',
props: {
value: Number,
prevText: String,
nextText: String,
pageCount: Number,
forceEllipses: Boolean,
mode: {
type: String,
default: 'multi'
},
itemsPerPage: {
type: Number,
default: 10
},
showPageSize: {
type: Number,
default: 5
},
totalItems: {
type: Number,
default: 0
}
},
computed: {
isMultiMode: function isMultiMode() {
return this.mode === 'multi';
},
computedPageCount: function computedPageCount() {
var count = this.pageCount || Math.ceil(this.totalItems / this.itemsPerPage);
return Math.max(1, count);
},
pageDesc: function pageDesc() {
return this.value + '/' + this.computedPageCount;
},
pages: function pages() {
var pages = [];
var pageCount = this.computedPageCount;
// Default page limits
var startPage = 1;
var endPage = pageCount;
var isMaxSized = this.showPageSize !== undefined && this.showPageSize < pageCount;
// recompute if showPageSize
if (isMaxSized) {
// Current page is displayed in the middle of the visible ones
startPage = Math.max(this.value - Math.floor(this.showPageSize / 2), 1);
endPage = startPage + this.showPageSize - 1;
// Adjust if limit is exceeded
if (endPage > pageCount) {
endPage = pageCount;
startPage = endPage - this.showPageSize + 1;
}
}
// Add page number links
for (var number = startPage; number <= endPage; number++) {
var page = this.makePage(number, number, number === this.value);
pages.push(page);
}
// Add links to move between page sets
if (isMaxSized && this.showPageSize > 0 && this.forceEllipses) {
if (startPage > 1) {
var previousPageSet = this.makePage(startPage - 1, '...', false);
pages.unshift(previousPageSet);
}
if (endPage < pageCount) {
var nextPageSet = this.makePage(endPage + 1, '...', false);
pages.push(nextPageSet);
}
}
return pages;
}
},
created: function created() {
this.selectPage(this.value);
},
watch: {
value: function value(page) {
this.selectPage(page);
}
},
methods: {
selectPage: function selectPage(page) {
page = Math.max(1, page);
page = Math.min(this.computedPageCount, page);
if (this.value !== page) {
this.$emit('input', page);
this.$emit('change', page);
}
},
makePage: function makePage(number, text, active) {
return { number: number, text: text, active: active };
}
}
});