UNPKG

vant-fork

Version:

Lightweight Mobile UI Components built on Vue

162 lines (144 loc) 4.44 kB
"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;