JSFiddle - React, Tailwind, and code Playground
by taylorbuley
JavaScript
function paginate(current_page, total) {
var PADDING = 2,
x, front = [],
tail = [],
head = [],
step1a, step2a, step1b, step2b;
for (x = 1; x <= total; x += 1) {
front.push(x);
}
step1a = (front.slice(0, current_page - 1));
step2a = step1a.slice(-(PADDING), current_page - 1);
step1b = (front.slice(current_page, total));
step2b = step1b.slice(0, PADDING);
if (step1a.length !== step2a.length) {
switch (step1a.length - step2a.length) {
case 1: head = [1]; break;
case 2: head = [1, 2]; break;
default: head = [1, '...']; break;
}
}
if (step1b.length !== step2b.length) {
switch (step1b.length - step2b.length) {
case 1: tail = [total]; break;
case 2: tail = [total - 1, total]; break;
default: tail = ['...', total]; break;
}
}
return [].concat(head, step2a, [current_page], step2b, tail);
}
console.log('1, 11', paginate(1, 11));
console.log('2, 11', paginate(2, 11));
console.log('3, 11', paginate(3, 11));
console.log('4, 11', paginate(4, 11));
console.log('5, 11', paginate(5, 11));
console.log('6, 11', paginate(6, 11));
console.log('7, 11', paginate(7, 11));
console.log('8, 11', paginate(8, 11));
console.log('9, 11', paginate(9, 11));
console.log('10, 11', paginate(10, 11));
console.log('11, 11', paginate(11, 11));
console.log('3, 11', paginate(3, 11));
console.log('7, 11', paginate(7, 11));
console.log('11, 11', paginate(11, 11));
console.log('1, 3', paginate(1, 3));
console.log('1, 4', paginate(1, 4));
console.log('1, 5', paginate(1, 5));
console.log('1, 6', paginate(1, 6));
console.log('1, 7', paginate(1, 7));
console.log('1, 8', paginate(1, 8));
console.log('1, 9', paginate(1, 9));
console.log('1, 10', paginate(1, 10));
console.log('3, 3', paginate(3, 3).join(','));
console.log('3, 4', paginate(3, 4).join(','));
console.log('3, 5', paginate(3, 5).join(','));
console.log('3,...