vant-fork
Version:
Lightweight Mobile UI Components built on Vue
162 lines (144 loc) • 4.44 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _create = _interopRequireDefault(require("../utils/create"));
var _default = (0, _create.default)({
render: function render() {
var _vm = this;
var _h = _vm.$createElement;
var _c = _vm._self._c || _h;
return _c('ul', {
class: _vm.b({
simple: !_vm.isMultiMode
})
}, [_c('li', {
staticClass: "van-hairline",
class: [_vm.b('item', {
disabled: _vm.value === 1
}), _vm.b('prev')],
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) {
return _vm.isMultiMode ? _c('li', {
staticClass: "van-hairline",
class: [_vm.b('item', {
active: page.active
}), _vm.b('page')],
on: {
"click": function click($event) {
_vm.selectPage(page.number);
}
}
}, [_vm._v("\n " + _vm._s(page.text) + "\n ")]) : _vm._e();
}), !_vm.isMultiMode ? _c('li', {
class: _vm.b('page-desc')
}, [_vm._t("pageDesc", [_vm._v(_vm._s(_vm.pageDesc))])], 2) : _vm._e(), _c('li', {
staticClass: "van-hairline",
class: [_vm.b('item', {
disabled: _vm.value === _vm.computedPageCount
}), _vm.b('next')],
on: {
"click": function click($event) {
_vm.selectPage(_vm.value + 1);
}
}
}, [_vm._v("\n " + _vm._s(_vm.nextText || _vm.$t('next')) + "\n ")])], 2);
},
name: '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;
}
},
watch: {
value: {
handler: function handler(page) {
this.selectPage(page || this.value);
},
immediate: true
}
},
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
};
}
}
});
exports.default = _default;