From 9e2b60eb3d1c3ea67ab7f9940a73e5209fec8242 Mon Sep 17 00:00:00 2001 From: Eugene Simakin Date: Sun, 25 Sep 2016 16:15:19 +0300 Subject: [PATCH] Improvements for querystring (issues #125 and #127 fixed) + tests --- examples/index.html | 2 ++ jquery.twbsPagination.js | 38 +++++++++++++++++++++++++++++++++----- tests/test.js | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 5 deletions(-) diff --git a/examples/index.html b/examples/index.html index 687d461..9854100 100644 --- a/examples/index.html +++ b/examples/index.html @@ -19,6 +19,8 @@ var obj = $('#pagination').twbsPagination({ totalPages: 35, visiblePages: 10, + href: true, + pageVariable: 'page', onPageClick: function (event, page) { console.info(page); } diff --git a/jquery.twbsPagination.js b/jquery.twbsPagination.js index b68bd75..9d17d3c 100644 --- a/jquery.twbsPagination.js +++ b/jquery.twbsPagination.js @@ -46,10 +46,9 @@ } if (this.options.href) { - var match, regexp = this.options.href.replace(/[-\/\\^$*+?.|[\]]/g, '\\$&'); - regexp = regexp.replace(this.options.pageVariable, '(\\d+)'); - if ((match = new RegExp(regexp, 'i').exec(window.location.href)) != null) { - this.options.startPage = parseInt(match[1], 10); + this.options.startPage = this.getPageFromQueryString(); + if (!this.options.startPage) { + this.options.startPage = 1; } } @@ -227,12 +226,41 @@ }, makeHref: function (page) { - return this.options.href ? this.makeText(this.options.href, page) : "#"; + return this.options.href ? this.generateQueryString(page) : "#"; }, makeText: function (text, page) { return text.replace(this.options.pageVariable, page) .replace(this.options.totalPagesVariable, this.options.totalPages) + }, + getPageFromQueryString: function (searchStr) { + var search = this.getSearchString(searchStr), + regex = new RegExp(this.options.pageVariable + '(=([^&#]*)|&|#|$)'), + page = regex.exec(search); + if (!page || !page[2]) { + return null; + } + page = decodeURIComponent(page[2]); + page = parseInt(page); + if (isNaN(page)) { + return null; + } + return page; + }, + generateQueryString: function (pageNumber, searchStr) { + var search = this.getSearchString(searchStr), + regex = new RegExp(this.options.pageVariable + '=*[^&#]*'); + if (!search) return ''; + return '?' + search.replace(regex, this.options.pageVariable + '=' + pageNumber); + + }, + getSearchString: function (searchStr) { + var search = searchStr || window.location.search; + if (search === '') { + return null; + } + if (search.indexOf('?') === 0) search = search.substr(1); + return search; } }; diff --git a/tests/test.js b/tests/test.js index 708b3d4..46d5c72 100644 --- a/tests/test.js +++ b/tests/test.js @@ -149,4 +149,36 @@ equal(pag1.find('.last').text(), '(last)[2]'); }); + QUnit.test("Test 'getPageFromQueryString' method", function () { + pag1.twbsPagination('destroy'); + pag1.twbsPagination({pageVariable: 'page'}); + equal(pag1.twbsPagination('getPageFromQueryString', '?page=1'), 1); + equal(pag1.twbsPagination('getPageFromQueryString', '?page='), null); + equal(pag1.twbsPagination('getPageFromQueryString', '?page'), null); + equal(pag1.twbsPagination('getPageFromQueryString', '?'), null); + equal(pag1.twbsPagination('getPageFromQueryString', ''), null) + ; + equal(pag1.twbsPagination('getPageFromQueryString', '?page=2'), 2); + equal(pag1.twbsPagination('getPageFromQueryString', '?page=3¶m=taram'), 3); + equal(pag1.twbsPagination('getPageFromQueryString', '?page=4¶m=test&opilki'), 4); + equal(pag1.twbsPagination('getPageFromQueryString', '?page=5¶m=test or not&opilki='), 5); + equal(pag1.twbsPagination('getPageFromQueryString', '?ID=1&keyWord=net&page=6'), 6); + }); + + QUnit.test("Test 'generateQueryString' method", function () { + pag1.twbsPagination('destroy'); + pag1.twbsPagination({pageVariable: 'page'}); + equal(pag1.twbsPagination('generateQueryString', 1, '?page=1'), '?page=1'); + equal(pag1.twbsPagination('generateQueryString', 1, '?page='), '?page=1'); + equal(pag1.twbsPagination('generateQueryString', 1, '?page'), '?page=1'); + equal(pag1.twbsPagination('generateQueryString', 1, '?'), ''); + equal(pag1.twbsPagination('generateQueryString', 1, ''), window.location.search); + + equal(pag1.twbsPagination('generateQueryString', 2, '?page=1'), '?page=2'); + equal(pag1.twbsPagination('generateQueryString', 3, '?page=2¶m=taram'), '?page=3¶m=taram'); + equal(pag1.twbsPagination('generateQueryString', 4, '?page=3¶m=test&opilki'), '?page=4¶m=test&opilki'); + equal(pag1.twbsPagination('generateQueryString', 5, '?page=4¶m=test or not&opilki='), '?page=5¶m=test or not&opilki='); + equal(pag1.twbsPagination('generateQueryString', 6, '?ID=1&keyWord=net&page=50'), '?ID=1&keyWord=net&page=6'); + }); + })(window.jQuery); \ No newline at end of file