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',...