diff --git a/src/pagination.js b/src/pagination.js index bed225560a..c9f082a9a4 100644 --- a/src/pagination.js +++ b/src/pagination.js @@ -29,8 +29,7 @@ pagination.create = function (currentPage, pageCount, queryObj) { if (startPage > pageCount - 5) { startPage -= 2 - (pageCount - currentPage); } - let i; - for (i = 0; i < 5; i += 1) { + for (let i = 0; i < 5; i += 1) { pagesToShow.push(startPage + i); } @@ -45,10 +44,11 @@ pagination.create = function (currentPage, pageCount, queryObj) { return { page: page, active: page === currentPage, qs: qs.stringify(queryObj) }; }); - for (i = pages.length - 1; i > 0; i -= 1) { + for (let i = pages.length - 1; i > 0; i -= 1) { + const prevPage = pages[i].page - 1; if (pages[i].page - 2 === pages[i - 1].page) { - pages.splice(i, 0, { page: pages[i].page - 1, active: false, qs: qs.stringify(queryObj) }); - } else if (pages[i].page - 1 !== pages[i - 1].page) { + pages.splice(i, 0, { page: prevPage, active: false, qs: qs.stringify({ ...queryObj, page: prevPage }) }); + } else if (prevPage !== pages[i - 1].page) { pages.splice(i, 0, { separator: true }); } } diff --git a/test/pagination.js b/test/pagination.js index 3073728d8d..126208b276 100644 --- a/test/pagination.js +++ b/test/pagination.js @@ -26,6 +26,18 @@ describe('Pagination', () => { done(); }); + it('should create pagination for 18 pages and should not turn page 3 into separator', (done) => { + const data = pagination.create(6, 18); + // [1, 2, 3, 4, 5, (6), 7, 8, seperator, 17, 18] + assert.equal(data.pages.length, 11); + assert.equal(data.rel.length, 2); + assert.strictEqual(data.pages[2].qs, 'page=3'); + assert.equal(data.pageCount, 18); + assert.equal(data.prev.page, 5); + assert.equal(data.next.page, 7); + done(); + }); + it('should create pagination for 3 pages with query params', (done) => { const data = pagination.create(1, 3, { key: 'value' }); assert.equal(data.pages.length, 3);