function formatRemaining(totalSeconds) { const seconds = Math.max(0, Math.ceil(totalSeconds)); const minutes = Math.floor(seconds / 60); const rest = seconds % 60; return `${minutes}:${String(rest).padStart(2, "0")}`; } function updateTimers() { const now = Date.now() / 1000; document.querySelectorAll("[data-auto-off-at]").forEach((item) => { const target = Number(item.dataset.autoOffAt || 0); if (!target) { return; } const remaining = target - now; if (remaining <= 0) { item.textContent = item.dataset.expiredLabel || "Automatic turn-off pending"; item.classList.add("timer-expired"); return; } item.textContent = `${item.dataset.prefix || "Automatic turn-off in"} ${formatRemaining(remaining)}`; }); } document.addEventListener("submit", (event) => { const form = event.target; if (!(form instanceof HTMLFormElement) || form.dataset.requiresAck !== "true") { return; } const message = form.dataset.ackMessage || "Confirm this action"; if (!window.confirm(message)) { event.preventDefault(); } }); updateTimers(); setInterval(updateTimers, 1000);