routerconsole/jsp/js/netdb.js

/**
 * @module netdb
 * @description Handles auto-refresh and table sorting for the /netdb pages,
 * including country list, router entries, and leaseset views.
 * @author dr|z3d
 * @license AGPL3 or later
 */

import { refreshElements } from "/js/refreshElements.js";

(() => {
  document.addEventListener("DOMContentLoaded", () => {
    const countries = document.getElementById("netdbcountrylist");
    const hasLSContainer = document.getElementById("lsWrapper");
    const hasRI = document.querySelector(".netdbentry");
    const hasLS = document.querySelector(".leaseset");

    if (!countries && !hasLSContainer && !hasLS && !hasRI) { return; }

    const REFRESH_INTERVAL_SHORT = 10_000;
    const REFRESH_INTERVAL = 15_000;
    const url = window.location.href;
    const ccsorter = countries ? new Tablesort(countries, { descending: true }) : null;

    if (countries) {
      countries.addEventListener("beforeSort", () => {
        progressx.show(theme);
        progressx.progress(0.5);
      });
      countries.addEventListener("afterSort", () => progressx.hide());
    }

    /**
     * Initializes auto-refresh based on the current view type (countries, RI,
     * or LS). The remote leasesets listing uses the contentonly fragment mode;
     * the other views fall back to a full-page refresh.
     * @function initRefresh
     * @returns {void}
     */
    const initRefresh = () => {
      if (countries) { refreshElements("#netdboverview table tbody", url, REFRESH_INTERVAL_SHORT); }
      else if (hasLSContainer) { refreshElements("#lsWrapper", url, REFRESH_INTERVAL, false, false, "lsWrapper"); }
      else if (hasRI) { refreshElements(".netdbentry", url, REFRESH_INTERVAL); }
      else if (hasLS) { refreshElements(".leaseset", url, REFRESH_INTERVAL); }
    };

    document.addEventListener("refreshComplete", () => ccsorter?.refresh());

    initRefresh();
  });
})();