Dom,-safe

This commit is contained in:
2025-11-24 15:53:55 -05:00
parent 2e3927c53b
commit 2fa3b44682

View File

@@ -999,26 +999,42 @@ function flashTitle(finalTitle) {
}, 800);
}
// =======================================================================
// Tab Navigation
// Tab Navigation (DOM-safe)
// =======================================================================
document.addEventListener('DOMContentLoaded', () => {
const tabButtons = document.querySelectorAll(".tab-button");
const tabContents = document.querySelectorAll(".tab-content");
if (!tabButtons || !tabButtons.length || !tabContents || !tabContents.length) {
console.error("ScriptMonkey: no tab buttons or tab contents found.");
return;
}
tabButtons.forEach(btn => {
btn.addEventListener("click", () => {
// clear active state
tabButtons.forEach(b => b.classList.remove("active"));
tabContents.forEach(c => c.classList.remove("active"));
// set new active
btn.classList.add("active");
document.getElementById(btn.dataset.tab).classList.add("active");
const targetId = btn.dataset.tab;
const target = document.getElementById(targetId);
if (target) target.classList.add("active");
});
});
// initialize default tab on load
document.querySelector(".tab-button[data-tab='{{defaultPage}}Tab']").classList.add("active");
document.getElementById("{{defaultPage}}Tab").classList.add("active");
const defaultBtn = document.querySelector(".tab-button[data-tab='{{defaultPage}}Tab']");
const defaultTab = document.getElementById("{{defaultPage}}Tab");
if (defaultBtn) defaultBtn.classList.add("active");
if (defaultTab) defaultTab.classList.add("active");
});
// =======================================================================
// Task Trigger
@@ -1092,12 +1108,17 @@ function updateOffboardSelectAll() {
master.checked = Array.from(children).every(cb => cb.checked);
}
// Attach off-board checkbox change handlers
// Attach off-board checkbox change handlers (DOM-safe)
document.addEventListener('DOMContentLoaded', () => {
const offChildren = document.querySelectorAll(
'#offboardTab input[type=checkbox]:not(#offboardSelectAll)'
);
if (!offChildren || !offChildren.length) {
// This just means no off-boarding items were rendered; safe to ignore.
return;
}
offChildren.forEach(cb =>
cb.addEventListener('change', updateOffboardSelectAll)
);