Files
basic_aura_highlighting/scripts/module.js
T

80 lines
2.5 KiB
JavaScript
Raw Normal View History

2026-05-07 14:11:48 -05:00
const MODULE_ID = "basic_aura_highlighting";
const AURA_TAB = "basic-aura-highlighting-aura";
Hooks.on("renderTokenConfig", injectAuraTab);
Hooks.on("renderPrototypeTokenConfig", injectAuraTab);
function injectAuraTab(app, element) {
const root = getRootElement(element);
if (!root || root.querySelector(`[data-tab="${AURA_TAB}"]`)) return;
const tabsNav = findTabsNav(root);
const existingTab = findExistingTab(root, tabsNav);
if (!tabsNav || !existingTab) {
console.warn(`${MODULE_ID} | Could not find token config tabs to add Aura tab.`);
return;
}
const group = tabsNav.dataset.group || existingTab.dataset.group || "sheet";
const auraTabButton = createAuraTabButton(group);
tabsNav.append(auraTabButton);
const auraPanel = createAuraTabPanel(group);
existingTab.after(auraPanel);
auraTabButton.addEventListener("click", (event) => {
event.preventDefault();
event.stopPropagation();
activateAuraTab(root, group);
});
}
function getRootElement(element) {
if (element instanceof HTMLElement) return element;
if (element?.[0] instanceof HTMLElement) return element[0];
return null;
}
function findTabsNav(root) {
return root.querySelector(`nav.tabs[data-group], .tabs[data-group], nav.tabs, .tabs`);
}
function findExistingTab(root, tabsNav) {
const group = tabsNav?.dataset.group;
const selector = group ? `.tab[data-group="${group}"][data-tab]` : `.tab[data-tab]`;
return root.querySelector(selector) || root.querySelector(`.tab[data-tab]`);
}
function createAuraTabButton(group) {
const button = document.createElement("a");
button.classList.add("item");
button.dataset.tab = AURA_TAB;
button.dataset.group = group;
button.dataset.action = "tab";
button.innerHTML = `<i class="fa-solid fa-bullseye"></i> ${game.i18n.localize("BASIC_AURA_HIGHLIGHTING.tabs.aura")}`;
return button;
}
function createAuraTabPanel(group) {
const panel = document.createElement("section");
panel.classList.add("tab");
panel.dataset.tab = AURA_TAB;
panel.dataset.group = group;
panel.innerHTML = `
<div class="form-group">
<p class="hint">${game.i18n.localize("BASIC_AURA_HIGHLIGHTING.tabs.auraHint")}</p>
</div>
`;
return panel;
}
function activateAuraTab(root, group) {
for (const tab of root.querySelectorAll(`.tab[data-group="${group}"], .tab[data-tab]`)) {
tab.classList.toggle("active", tab.dataset.tab === AURA_TAB);
}
for (const item of root.querySelectorAll(`[data-group="${group}"][data-tab], .tabs [data-tab]`)) {
item.classList.toggle("active", item.dataset.tab === AURA_TAB);
}
}