JSFiddle - React, Tailwind, and code Playground
by taylorbuley
JavaScript
function paginate(current_page, total) {
var PADDING = 2, x = 0, xlen = 0, all_left = [], all_right = [], left = [], right = [];
//get left
for ( x = 1; x < current_page; x += 1 ) {
if ( current_page !== 1 ) { all_left.push( x ); }
}
xlen = all_left.length;
if ( xlen > PADDING ) {
left = all_left.slice(-(PADDING));
left.unshift(1,'...');
} else {
for ( x = 0; x < xlen; x += 1 ) {
left.push( all_left[ x ] );
}
}
//get right
for ( x = current_page + 1; x <= total; x += 1 ) {
if ( current_page !== total ) { all_right.push( x ); }
}
xlen = all_right.length - 1;
if ( xlen > PADDING ) {
for ( x = 0 ; x < PADDING; x += 1 ) {
right.push( all_right[ x ] );
}
if ( xlen === PADDING + 1 && total !== all_right[ x ] ) {
right.push( all_right[ x ] );
} else {
right.push( '...' );
}
} else {
for ( x = 0 ; x < xlen; x += 1 ) {
if ( total !== all_right[ x ] ) { right.push( all_right[ x ] ); }
}
}
if ( total !== current_page ) { right.push( total ); }
//combine around current
var all = [].concat( left, [ current_page ], right );
return all;
}
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',...