Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
(function () {
|
|
if (window.__paginationJumpBound) {
|
|
return;
|
|
}
|
|
window.__paginationJumpBound = true;
|
|
|
|
function clampPage(value, total) {
|
|
var page = parseInt(value, 10);
|
|
if (!page || page < 1) {
|
|
return 0;
|
|
}
|
|
if (total > 0 && page > total) {
|
|
return total;
|
|
}
|
|
return page;
|
|
}
|
|
|
|
function buildPageURL(page) {
|
|
var url = new URL(window.location.href);
|
|
url.pathname = url.pathname.replace(/\/page\/\d+\/?$/, "").replace(/\/$/, "");
|
|
url.searchParams.delete("page");
|
|
if (page > 1) url.pathname += "/page/" + page;
|
|
return url.pathname + url.search + url.hash;
|
|
}
|
|
|
|
document.addEventListener("submit", function (event) {
|
|
var form = event.target;
|
|
if (!form || !form.matches || !form.matches("[data-pagination-jump]")) {
|
|
return;
|
|
}
|
|
event.preventDefault();
|
|
|
|
var nav = form.closest("[data-pagination]");
|
|
var input = form.querySelector(".pagination-jump-input");
|
|
var total = nav ? parseInt(nav.getAttribute("data-total"), 10) : 0;
|
|
var current = nav ? parseInt(nav.getAttribute("data-page"), 10) : 0;
|
|
var page = clampPage(input && input.value, total);
|
|
if (!page || page === current) {
|
|
return;
|
|
}
|
|
window.location.href = buildPageURL(page);
|
|
});
|
|
})();
|