Modularize bridge and improve control GUI
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
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 || "Auto-off pending";
|
||||
item.classList.add("timer-expired");
|
||||
return;
|
||||
}
|
||||
item.textContent = `${item.dataset.prefix || "Auto-off"} ${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);
|
||||
Reference in New Issue
Block a user