vuikit
Version:
A responsive Vue UI library for web site interfaces based on UIkit
63 lines (58 loc) • 1.71 kB
JavaScript
/**
* Vuikit 0.8.10
* (c) 2018 Miljan Aleksic
* @license MIT
**/
/* Substantial part of the code is adapted from UIkit,
Copyright (c) 2013-2018 YOOtheme GmbH, getuikit.com */
import { range } from '../util/misc';
function paginationMatrix (ref) {
if ( ref === void 0 ) ref = {};
var total = ref.total; if ( total === void 0 ) total = 200;
var page = ref.page; if ( page === void 0 ) page = 1;
var perPage = ref.perPage; if ( perPage === void 0 ) perPage = 10;
var range$$1 = ref.range; if ( range$$1 === void 0 ) range$$1 = 3;
var matrix = [];
var totalPages = Math.ceil(total / perPage);
if (totalPages < 2) {
return [1]
}
var mainPages = getMainPages({ page: page, range: range$$1, totalPages: totalPages });
var first = mainPages[0];
var last = mainPages[mainPages.length - 1];
var prePages = range(1, (first <= 3) ? first : 2);
var postPages = range(
last >= (totalPages - 2) ? last + 1 : totalPages,
totalPages + 1
);
var nextPage = 1
;[].concat(prePages, mainPages, postPages).forEach(function (p) {
if (p === nextPage) {
matrix.push(p);
nextPage++;
} else {
matrix.push('...');
matrix.push(p);
nextPage = p + 1;
}
});
return matrix
}
var getMainPages = function (ref) {
var page = ref.page;
var range$$1 = ref.range;
var totalPages = ref.totalPages;
var start = page - range$$1;
var end = page + range$$1;
if (end > totalPages) {
end = totalPages;
start = totalPages - (range$$1 * 2);
start = start < 1 ? 1 : start;
}
if (start <= 1) {
start = 1;
end = Math.min((range$$1 * 2) + 1, totalPages);
}
return range(start, end + 1)
};
export default paginationMatrix;