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