Skip to content

Instantly share code, notes, and snippets.

@chrisk8er
Forked from kottenator/simple-pagination.js
Created June 23, 2021 04:45
Show Gist options
  • Save chrisk8er/ad56b9577d17f246b3915e8e70a40ef1 to your computer and use it in GitHub Desktop.
Save chrisk8er/ad56b9577d17f246b3915e8e70a40ef1 to your computer and use it in GitHub Desktop.

Revisions

  1. @kottenator kottenator created this gist Jul 13, 2015.
    61 changes: 61 additions & 0 deletions simple-pagination.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,61 @@
    // Implementation in ES6
    function pagination(c, m) {
    var current = c,
    last = m,
    delta = 2,
    left = current - delta,
    right = current + delta + 1,
    range = [],
    rangeWithDots = [],
    l;

    for (let i = 1; i <= last; i++) {
    if (i == 1 || i == last || i >= left && i < right) {
    range.push(i);
    }
    }

    for (let i of range) {
    if (l) {
    if (i - l === 2) {
    rangeWithDots.push(l + 1);
    } else if (i - l !== 1) {
    rangeWithDots.push('...');
    }
    }
    rangeWithDots.push(i);
    l = i;
    }

    return rangeWithDots;
    }

    /*
    Test it:
    for (let i = 1, l = 20; i <= l; i++)
    console.log(`Selected page ${i}:`, pagination(i, l));
    Expected output:
    Selected page 1: [1, 2, 3, "...", 20]
    Selected page 2: [1, 2, 3, 4, "...", 20]
    Selected page 3: [1, 2, 3, 4, 5, "...", 20]
    Selected page 4: [1, 2, 3, 4, 5, 6, "...", 20]
    Selected page 5: [1, 2, 3, 4, 5, 6, 7, "...", 20]
    Selected page 6: [1, "...", 4, 5, 6, 7, 8, "...", 20]
    Selected page 7: [1, "...", 5, 6, 7, 8, 9, "...", 20]
    Selected page 8: [1, "...", 6, 7, 8, 9, 10, "...", 20]
    Selected page 9: [1, "...", 7, 8, 9, 10, 11, "...", 20]
    Selected page 10: [1, "...", 8, 9, 10, 11, 12, "...", 20]
    Selected page 11: [1, "...", 9, 10, 11, 12, 13, "...", 20]
    Selected page 12: [1, "...", 10, 11, 12, 13, 14, "...", 20]
    Selected page 13: [1, "...", 11, 12, 13, 14, 15, "...", 20]
    Selected page 14: [1, "...", 12, 13, 14, 15, 16, "...", 20]
    Selected page 15: [1, "...", 13, 14, 15, 16, 17, "...", 20]
    Selected page 16: [1, "...", 14, 15, 16, 17, 18, 19, 20]
    Selected page 17: [1, "...", 15, 16, 17, 18, 19, 20]
    Selected page 18: [1, "...", 16, 17, 18, 19, 20]
    Selected page 19: [1, "...", 17, 18, 19, 20]
    Selected page 20: [1, "...", 18, 19, 20]
    */