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