/**
* @module pageNav
* @file pageNav.js - AJAX page navigation for I2PSnark torrent listings.
* @description Intercepts clicks on pagination links in the I2PSnark UI, converts them
* to AJAX requests, and updates the browser history without full page reloads. Prevents
* duplicate listeners via a body class check.
* @author dr|z3d
* @license AGPL3 or later
*/
import {doRefresh} from "./refreshTorrents.js";
/**
* @function pageNav
* @description Initializes the AJAX pagination listener. Adds a delegated click handler
* on the document that intercepts clicks on #paginate links and triggers a refresh
* via the doRefresh function. Prevents duplicate listeners via a body class check.
* @returns {void}
*/
function pageNav() {
const bodyTag = document.body;
const active = bodyTag.classList.contains("pagenavListener");
const topNav = document.getElementById("navbar");
if (!topNav || active) {return;}
bodyTag.classList.add("pagenavListener");
document.addEventListener("click", pagenavListener);
}
/**
* @type {Function}
* @description Delegated click listener for pagination links. Prevents default navigation,
* extracts the URL, constructs an AJAX-compatible URL, updates browser history, and triggers
* a torrent refresh via doRefresh.
* @param {MouseEvent} event - The click event from a pagination link.
* @returns {void}
*/
let pagenavListener = function(event) {
const link = event.target.closest("#paginate a:not(disabled)");
if (!link) {return;}
event.preventDefault();
const pagenavURL = new URL(link.href);
const xhrPagenavURL = "/i2psnark/.ajax/xhr1.html" + pagenavURL.search;
history.replaceState({}, "", pagenavURL);
doRefresh({url: xhrPagenavURL});
};
document.addEventListener("DOMContentLoaded", pageNav);
export {pageNav};