UNPKG

vuikit

Version:

A responsive Vue UI library for web site interfaces based on UIkit

63 lines (58 loc) 1.71 kB
/** * 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;