mirror of
https://github.com/Damillora/Shioriko.git
synced 2024-10-31 20:17:32 +00:00
64 lines
1.9 KiB
JavaScript
64 lines
1.9 KiB
JavaScript
// Implementation in ES6
|
|
// https://gist.github.com/kottenator/9d936eb3e4e3c3e02598
|
|
|
|
const paginate = (c, m) => {
|
|
let current = c,
|
|
last = m,
|
|
delta = 1,
|
|
left = current - delta,
|
|
right = current + delta + 1,
|
|
range = [],
|
|
rangeWithDots = [],
|
|
l;
|
|
|
|
for (let i = 1; i <= last; i++) {
|
|
if (i == 1 || i == last || i >= left && i < right) {
|
|
range.push(i);
|
|
}
|
|
}
|
|
|
|
for (let i of range) {
|
|
if (l) {
|
|
if (i - l === 2) {
|
|
rangeWithDots.push(l + 1);
|
|
} else if (i - l !== 1) {
|
|
rangeWithDots.push('...');
|
|
}
|
|
}
|
|
rangeWithDots.push(i);
|
|
l = i;
|
|
}
|
|
|
|
return rangeWithDots;
|
|
}
|
|
|
|
export { paginate };
|
|
/*
|
|
Test it:
|
|
|
|
for (let i = 1, l = 20; i <= l; i++)
|
|
console.log(`Selected page ${i}:`, pagination(i, l));
|
|
|
|
Expected output:
|
|
|
|
Selected page 1: [1, 2, 3, "...", 20]
|
|
Selected page 2: [1, 2, 3, 4, "...", 20]
|
|
Selected page 3: [1, 2, 3, 4, 5, "...", 20]
|
|
Selected page 4: [1, 2, 3, 4, 5, 6, "...", 20]
|
|
Selected page 5: [1, 2, 3, 4, 5, 6, 7, "...", 20]
|
|
Selected page 6: [1, "...", 4, 5, 6, 7, 8, "...", 20]
|
|
Selected page 7: [1, "...", 5, 6, 7, 8, 9, "...", 20]
|
|
Selected page 8: [1, "...", 6, 7, 8, 9, 10, "...", 20]
|
|
Selected page 9: [1, "...", 7, 8, 9, 10, 11, "...", 20]
|
|
Selected page 10: [1, "...", 8, 9, 10, 11, 12, "...", 20]
|
|
Selected page 11: [1, "...", 9, 10, 11, 12, 13, "...", 20]
|
|
Selected page 12: [1, "...", 10, 11, 12, 13, 14, "...", 20]
|
|
Selected page 13: [1, "...", 11, 12, 13, 14, 15, "...", 20]
|
|
Selected page 14: [1, "...", 12, 13, 14, 15, 16, "...", 20]
|
|
Selected page 15: [1, "...", 13, 14, 15, 16, 17, "...", 20]
|
|
Selected page 16: [1, "...", 14, 15, 16, 17, 18, 19, 20]
|
|
Selected page 17: [1, "...", 15, 16, 17, 18, 19, 20]
|
|
Selected page 18: [1, "...", 16, 17, 18, 19, 20]
|
|
Selected page 19: [1, "...", 17, 18, 19, 20]
|
|
Selected page 20: [1, "...", 18, 19, 20]
|
|
*/ |