Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Improvements for querystring (issues josecebe#125 and josecebe#127 fi…
…xed) + tests
  • Loading branch information
Eugene Simakin committed Sep 25, 2016
1 parent a80bbc8 commit 9e2b60e
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 5 deletions.
2 changes: 2 additions & 0 deletions examples/index.html
Expand Up @@ -19,6 +19,8 @@
var obj = $('#pagination').twbsPagination({
totalPages: 35,
visiblePages: 10,
href: true,
pageVariable: 'page',
onPageClick: function (event, page) {
console.info(page);
}
Expand Down
38 changes: 33 additions & 5 deletions jquery.twbsPagination.js
Expand Up @@ -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;
}
}

Expand Down Expand Up @@ -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;
}

};
Expand Down
32 changes: 32 additions & 0 deletions tests/test.js
Expand Up @@ -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&param=taram'), 3);
equal(pag1.twbsPagination('getPageFromQueryString', '?page=4&param=test&opilki'), 4);
equal(pag1.twbsPagination('getPageFromQueryString', '?page=5&param=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&param=taram'), '?page=3&param=taram');
equal(pag1.twbsPagination('generateQueryString', 4, '?page=3&param=test&opilki'), '?page=4&param=test&opilki');
equal(pag1.twbsPagination('generateQueryString', 5, '?page=4&param=test or not&opilki='), '?page=5&param=test or not&opilki=');
equal(pag1.twbsPagination('generateQueryString', 6, '?ID=1&keyWord=net&page=50'), '?ID=1&keyWord=net&page=6');
});

})(window.jQuery);

0 comments on commit 9e2b60e

Please sign in to comment.