diff --git a/example.html b/example.html index 7e9f607..36a6f20 100644 --- a/example.html +++ b/example.html @@ -23,12 +23,20 @@ \ No newline at end of file diff --git a/index.js b/index.js index b4f1e23..e85e322 100644 --- a/index.js +++ b/index.js @@ -133,6 +133,20 @@ Pager.prototype.total = function(n){ return this; }; +/** + * Create a page link for index `i`. + * + * @param {Number} i + * @api private + */ + +Pager.prototype.createPageLink = function(i){ + var n = i + 1; + return this.current == i + ? '
  • ' + n + '
  • ' + : '
  • ' + n + '
  • '; +}; + /** * Render the pager. * @@ -150,14 +164,63 @@ Pager.prototype.render = function(){ var links = ''; // remove old - el.find('li.page').remove(); + el.find('li.pager-page').remove(); + el.find('span.pager-dots').remove(); // page links - for (var i = 0; i < pages; ++i) { - var n = i + 1; - links += curr == i - ? '
  • ' + n + '
  • ' - : '
  • ' + n + '
  • '; + if (pages > 7) { + // when there are more than 7 pages + + // the ugly code following determines + // which links should be shown + // where and when to put the dots + + var needle = curr; + links += this.createPageLink(0); + if (needle > 3) { + if (needle < pages-4) { + links += '...'; + } + else if (needle >= pages-4) { + needle = pages-3; + links += '...'; + links += this.createPageLink(needle-2); + } + } + else { + needle = 2; + } + + links += this.createPageLink(needle-1); + if (needle != 0 && needle != pages-1) links += this.createPageLink(needle); + + if (needle >= 2) { + links += this.createPageLink(needle+1); + } + else if (curr > pages-3) { + // + } + else { + links += '...'; + links += this.createPageLink(Math.floor(pages/2)); + links += '...'; + } + + if (curr <= 3) { + links += this.createPageLink(needle+2); + } + + if (needle+1 < pages-3) { + links += '...'; + } + + links += this.createPageLink(pages-1); + } + else { + // in series + for (var i = 0; i < pages; ++i) { + links += this.createPageLink(i); + } } // insert