JSFiddle - React, Tailwind, and code Playground
by taylorbuley
JavaScript
function paginate(current_page, total) {
var PADDING = 2;
var min_num = current_page - ( PADDING + 1 ) ,
max_num = current_page + ( PADDING + 1 ) ;
if (max_num > total - ( PADDING + 1 ) ) {
max_num = total - ( PADDING + 1 ) ;
}
if (min_num < ( PADDING + 1 ) ) {
min_num = ( PADDING + 1 ) ;
}
var max_diff = total - max_num,
min_diff = min_num;
var pages = [1],
x, xlen;
//paginate if > 1 page
if (total !== 1) {
//from 1st to min_num
if (min_num > PADDING + 1 ) {
//from min_num to current w/ellipses
pages.push('...');
} else {
//from min_num to current w/no ellipses
for (x = 2; x < min_num; x += 1) {
pages.push(x);
}
}
// CURRENT
if (total !== current_page && 1 !== current_page) {
pages.push(current_page);
}
// END
pages.push(total);
}
return pages;
}
console.log('1, 11', paginate(1, 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));
console.log('3, 4', paginate(3, 4));
console.log('3, 5', paginate(3, 5));
console.log('3, 6', paginate(3, 6));
console.log('3, 7', paginate(3, 7));
console.log('3, 8', paginate(3, 8));
console.log('3, 9', paginate(3, 9));
console.log('3, 10', paginate(3, 10));