diff --git a/engine/src/main/resources/org/archive/crawler/restlet/js/heritrix-ui.js b/engine/src/main/resources/org/archive/crawler/restlet/js/heritrix-ui.js index 5c396cb6..a42dfe5f 100644 --- a/engine/src/main/resources/org/archive/crawler/restlet/js/heritrix-ui.js +++ b/engine/src/main/resources/org/archive/crawler/restlet/js/heritrix-ui.js @@ -1,6 +1,33 @@ (function () { "use strict"; + // Implement invoker commands for older browsers like Firefox ESR + // This can likely be removed in April 2027 when ESR 115 ends + if (!("command" in HTMLButtonElement.prototype && + "commandForElement" in HTMLButtonElement.prototype)) { + // Delegate so buttons parsed after this script (including dialog close buttons) work. + document.addEventListener("click", function (event) { + var button = event.target.closest("button[command][commandfor]"); + if (!button || button.matches(":disabled") || event.defaultPrevented) { + return; + } + + var target = document.getElementById(button.getAttribute("commandfor")); + if (!target || target.localName !== "dialog") { + return; + } + + var command = button.getAttribute("command").toLowerCase(); + if (command === "show-modal" && typeof target.showModal === "function") { + event.preventDefault(); + target.showModal(); + } else if (command === "close" && typeof target.close === "function") { + event.preventDefault(); + target.close(); + } + }); + } + document.addEventListener("click", function (event) { var topbarToggle = event.target.closest(".top-bar .toggle-topbar a"); if (topbarToggle) {