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));