|
import {
|
|
limitedScopeApplications,
|
|
MODULE_NAME,
|
|
themedApps,
|
|
systemSheets,
|
|
excludedApplications,
|
|
moduleWindowApps,
|
|
} from "./consts.js";
|
|
import { isPremiumApplication } from "./premium-module-hooks.js";
|
|
|
|
export function lookupThemeAndSchemeForKey(key) {
|
|
switch (key) {
|
|
case "opaque":
|
|
return { dorakoUiTheme: "opaque", colorScheme: null };
|
|
case "crb":
|
|
return { dorakoUiTheme: "crb", colorScheme: null };
|
|
case "crb-light":
|
|
return { dorakoUiTheme: "crb", colorScheme: "light" };
|
|
case "crb-dark":
|
|
return { dorakoUiTheme: "crb", colorScheme: "dark" };
|
|
case "foundry2":
|
|
return { dorakoUiTheme: "foundry2", colorScheme: "dark" };
|
|
case "bg3":
|
|
return { dorakoUiTheme: "bg3", colorScheme: "dark" };
|
|
case "bg3-brown":
|
|
return { dorakoUiTheme: "bg3-brown", colorScheme: "dark" };
|
|
case "bg3-blue":
|
|
return { dorakoUiTheme: "bg3-blue", colorScheme: "dark" };
|
|
case "discord":
|
|
return { dorakoUiTheme: "discord", colorScheme: "dark" };
|
|
case "discord-light":
|
|
return { dorakoUiTheme: "discord-light", colorScheme: "light" };
|
|
case "discord-dark":
|
|
return { dorakoUiTheme: "discord-dark", colorScheme: "dark" };
|
|
case "custom-light":
|
|
return { dorakoUiTheme: "custom-light", colorScheme: "light" };
|
|
case "custom-dark":
|
|
return { dorakoUiTheme: "custom-dark", colorScheme: "dark" };
|
|
default:
|
|
return "", "";
|
|
}
|
|
}
|
|
|
|
Hooks.on("renderSvelteApplication", (app, html, data) => {
|
|
const theme = game.settings.get("pf2e-dorako-ui", "theme.window-app-theme");
|
|
if (theme === "no-theme") return;
|
|
const uiTheme = lookupThemeAndSchemeForKey(theme);
|
|
if (uiTheme === null) return;
|
|
const excludeString = game.settings.get("pf2e-dorako-ui", "customization.excluded-applications");
|
|
const excludeList = excludeString.split(/[\s,]+/);
|
|
if (excludeList.includes(app.constructor.name) || excludedApplications.includes(app.constructor.name)) {
|
|
console.debug(`${MODULE_NAME} | render${app.constructor.name} | is included in excluded applications`);
|
|
return;
|
|
}
|
|
const { dorakoUiTheme, colorScheme } = uiTheme;
|
|
app.element[0].dataset.theme = dorakoUiTheme;
|
|
app.element[0].dataset.colorScheme = colorScheme;
|
|
app.element[0].dataset.dorakoUiScope = "unlimited";
|
|
});
|
|
|
|
for (const appName of [...themedApps]) {
|
|
Hooks.on("render" + appName, (app, html, data) => {
|
|
const theme = game.settings.get("pf2e-dorako-ui", "theme.app-theme");
|
|
if (theme === "no-theme") return;
|
|
const uiTheme = lookupThemeAndSchemeForKey(theme);
|
|
if (uiTheme === null) return;
|
|
const { dorakoUiTheme, colorScheme } = uiTheme;
|
|
const excludeString = game.settings.get("pf2e-dorako-ui", "customization.excluded-applications");
|
|
const excludeList = excludeString.split(/[\s,]+/);
|
|
if (excludeList.includes(app.constructor.name) || excludedApplications.includes(app.constructor.name)) {
|
|
console.debug(
|
|
`${MODULE_NAME} | render${app.constructor.name} | is included in excluded applications string ${excludeString} => do not set dorako-ui-theme to ${dorakoUiTheme}`
|
|
);
|
|
return;
|
|
}
|
|
|
|
app.element[0].dataset.theme = dorakoUiTheme;
|
|
console.debug(`${MODULE_NAME} | render${app.constructor.name} | [data-theme='${dorakoUiTheme}']`);
|
|
});
|
|
}
|
|
|
|
for (const appName of [...systemSheets, ...moduleWindowApps]) {
|
|
Hooks.on("render" + appName, (app, html, data) => {
|
|
const theme = game.settings.get("pf2e-dorako-ui", "theme.window-app-theme");
|
|
if (theme === "no-theme") return;
|
|
const uiTheme = lookupThemeAndSchemeForKey(theme);
|
|
if (uiTheme === null) return;
|
|
const { dorakoUiTheme, colorScheme } = uiTheme;
|
|
const excludeString = game.settings.get("pf2e-dorako-ui", "customization.excluded-applications");
|
|
const excludeList = excludeString.split(/[\s,]+/);
|
|
if (excludeList.includes(app.constructor.name)) {
|
|
console.debug(
|
|
`${MODULE_NAME} | render${app.constructor.name} | is included in excluded applications string ${excludeString} => do not set dorako-ui-theme to ${dorakoUiTheme}`
|
|
);
|
|
return;
|
|
}
|
|
if (
|
|
theme == "crb-light" &&
|
|
(app.constructor.name === "PartySheetPF2e" || app.constructor.name === "FamiliarSheetPF2e")
|
|
)
|
|
return;
|
|
if (theme == "discord-light" && app.constructor.name === "PartySheetPF2e") return;
|
|
|
|
app.element[0].dataset.theme = dorakoUiTheme;
|
|
app.element[0].dataset.colorScheme = colorScheme;
|
|
app.element[0].dataset.dorakoUiScope = "unlimited";
|
|
console.debug(
|
|
`${MODULE_NAME} | render${app.constructor.name} | [data-theme='${dorakoUiTheme}'] [data-color-scheme='${colorScheme}'] [data-dorako-ui-scope='unlimited']`
|
|
);
|
|
});
|
|
}
|
|
|
|
Hooks.on("renderApplication", (app, html, data) => {
|
|
let html0 = html[0];
|
|
if (html0.classList.contains("editable")) return;
|
|
if (!html0.classList.contains("window-app")) return;
|
|
if (isPremiumApplication(app, html, data, app.constructor.name)) return;
|
|
const theme = game.settings.get("pf2e-dorako-ui", "theme.window-app-theme");
|
|
if (theme === "no-theme") return;
|
|
const uiTheme = lookupThemeAndSchemeForKey(theme);
|
|
if (uiTheme === null) return;
|
|
const { dorakoUiTheme, colorScheme } = uiTheme;
|
|
const excludeString =
|
|
game.settings.get("pf2e-dorako-ui", "customization.excluded-applications") +
|
|
", EnhancedJournal" +
|
|
", SceneActorsLayer" +
|
|
", SmallTimeApp" +
|
|
", SceneDarknessAdjuster" +
|
|
", AutorecMenuApp" +
|
|
", ImagePopout";
|
|
const excludeList = excludeString.split(/[\s,]+/);
|
|
if (excludeList.includes(app.constructor.name) || excludedApplications.includes(app.constructor.name)) {
|
|
console.debug(
|
|
`${MODULE_NAME} | render${app.constructor.name} | is included in excluded applications string ${excludeString} => do not set dorako-ui-theme to ${dorakoUiTheme}`
|
|
);
|
|
return;
|
|
}
|
|
|
|
const fakeDialogPatterns = ["popup", "dialog"];
|
|
for (const fakeDialogPattern of [...fakeDialogPatterns]) {
|
|
if (app.constructor.name.toLowerCase().includes(fakeDialogPattern)) {
|
|
console.debug(
|
|
`${MODULE_NAME} | render${app.constructor.name} | constructor includes '${fakeDialogPattern}' => add .dialog`
|
|
);
|
|
html.addClass("dialog");
|
|
}
|
|
}
|
|
app.element[0].dataset.theme = dorakoUiTheme;
|
|
app.element[0].dataset.colorScheme = colorScheme;
|
|
app.element[0].dataset.dorakoUiScope = "unlimited";
|
|
});
|
|
|
|
// Hooks.on("renderDialog", (app, html, data) => {
|
|
// const theme = game.settings.get("pf2e-dorako-ui", "theme.window-app-theme");
|
|
// if (theme === "no-theme") return;
|
|
// const uiTheme = getUiTheme();
|
|
// if (uiTheme === null) return;
|
|
// const { dorakoUiTheme, colorScheme } = uiTheme;
|
|
// console.debug(`${MODULE_NAME} | render${app.constructor.name} | set dorako-ui-theme to ${dorakoUiTheme}`);
|
|
// app.element[0].dataset.theme = dorakoUiTheme;
|
|
// app.element[0].dataset.colorScheme = colorScheme;
|
|
// app.element[0].dataset.dorakoUiScope = "unlimited";
|
|
// });
|
|
|
|
for (const appName of [...limitedScopeApplications]) {
|
|
Hooks.on("render" + appName, (app, html, data) => {
|
|
const theme = game.settings.get("pf2e-dorako-ui", "theme.window-app-theme");
|
|
if (theme === "no-theme") return;
|
|
const uiTheme = lookupThemeAndSchemeForKey(theme);
|
|
if (uiTheme === null) return;
|
|
const excludeString = game.settings.get("pf2e-dorako-ui", "customization.excluded-applications");
|
|
const excludeList = excludeString.split(/[\s,]+/);
|
|
if (excludeList.includes(app.constructor.name)) {
|
|
console.debug(
|
|
`${MODULE_NAME} | render${app.constructor.name} | is included in excluded applications string ${excludeString} => do not set data-dorako-ui-scope to 'limited'`
|
|
);
|
|
return;
|
|
}
|
|
console.debug(
|
|
`${MODULE_NAME} | render${app.constructor.name} | theme: ${theme} => set data-dorako-ui-scope to 'limited'`
|
|
);
|
|
app.element[0].dataset.dorakoUiScope = "limited";
|
|
});
|
|
}
|
|
|
|
for (const appName of ["CharacterSheetPF2e", "VehicleSheetPF2e"]) {
|
|
Hooks.on("render" + appName, (app, html, data) => {
|
|
const theme = game.settings.get("pf2e-dorako-ui", "theme.sheet-theme-color");
|
|
if (theme === "default") return;
|
|
app.element[0].dataset.themeColor = theme;
|
|
});
|
|
}
|
|
|
|
Hooks.on("render" + "ItemSheetPF2e", (app, html, data) => {
|
|
const rarity = app?.object?.rarity;
|
|
if (rarity) app.element[0].dataset.rarity = rarity;
|
|
});
|
|
|
|
Hooks.on("render" + "NPCSheetPF2e", (app, html, data) => {
|
|
const rarity = app?.object?.rarity;
|
|
if (rarity) app.element[0].dataset.rarity = rarity;
|
|
});
|
|
|
|
Hooks.on("render" + "ChatMessage", (app, html, data) => {
|
|
const footer = html.find("footer")[0];
|
|
if (footer) html[0].dataset.hasFooter = "";
|
|
});
|
|
|
|
Hooks.on("render" + "ChatLogPF2e", (app, html, data) => {
|
|
const theme = game.settings.get("pf2e-dorako-ui", "theme.app-theme");
|
|
if (theme === "no-theme") return;
|
|
app.element[0].dataset.chatInterfaceTheme = theme;
|
|
});
|
|
|
|
Hooks.on("render" + "Sidebar", (app, html, data) => {
|
|
const theme = game.settings.get("pf2e-dorako-ui", "theme.app-theme");
|
|
if (theme === "no-theme") return;
|
|
if (theme === "bg3") {
|
|
app.element[0].dataset.chatInterfaceTheme = "bg3-translucent";
|
|
} else {
|
|
app.element[0].dataset.chatInterfaceTheme = theme;
|
|
}
|
|
});
|
|
|
|
Hooks.on("render" + "Sidebar", (app, html, data) => {
|
|
const excludeString = game.settings.get("pf2e-dorako-ui", "customization.excluded-applications");
|
|
const excludeList = excludeString.split(/[\s,]+/);
|
|
if (excludeList.includes(app.constructor.name)) {
|
|
console.debug(`${MODULE_NAME} | render${app.constructor.name} | is included in excluded applications string`);
|
|
return;
|
|
}
|
|
|
|
$("#sidebar-tabs").attr("data-theme", "");
|
|
app.element[0].dataset.dorakoUiScope = "sidebar";
|
|
});
|