|
import { lookupThemeAndSchemeForKey } from "./ui-theme.js";
|
|
|
|
Hooks.on("renderChatMessage", (chatMessage, html, messageData) => {
|
|
if (html[0].hasAttribute("style")) {
|
|
html.css("border-color", "");
|
|
}
|
|
});
|
|
|
|
// Chat cards
|
|
Hooks.on("renderChatMessage", (chatMessage, html, messageData) => {
|
|
const isNarratorToolsMessage = chatMessage.flags["narrator-tools"];
|
|
const isMLDRoundMarker = chatMessage.flags["monks-little-details"]?.roundmarker;
|
|
const isMCDRoundMarker = chatMessage.flags["monks-combat-details"]?.roundmarker;
|
|
const isRoundMarker = isMLDRoundMarker || isMCDRoundMarker;
|
|
if (isNarratorToolsMessage || isRoundMarker) {
|
|
return;
|
|
}
|
|
|
|
let html0 = html[0];
|
|
html0.style.setProperty("--player-color", chatMessage?.user?.color ?? "#DAC0FB");
|
|
|
|
const isSecretDisposition =
|
|
game?.scenes?.get(chatMessage?.speaker?.scene)?.tokens?.get(chatMessage?.speaker?.token)?.disposition == -2;
|
|
const { dorakoUiTheme, colorScheme } =
|
|
chatMessage?.actor?.alliance === "opposition" && !isSecretDisposition
|
|
? lookupThemeAndSchemeForKey(game.settings.get("pf2e-dorako-ui", "theme.chat-message-opposition-theme"))
|
|
: lookupThemeAndSchemeForKey(game.settings.get("pf2e-dorako-ui", "theme.chat-message-standard-theme"));
|
|
html0.dataset.theme = dorakoUiTheme;
|
|
html0.dataset.colorScheme = colorScheme;
|
|
html0.dataset.dorakoUiScope = "unlimited";
|
|
|
|
const headerStyle = game.settings.get("pf2e-dorako-ui", "theme.chat-message-header-style");
|
|
if (dorakoUiTheme === "crb" && headerStyle !== "none") {
|
|
html0.dataset.hasHeader = "";
|
|
}
|
|
themeHeader(html, chatMessage);
|
|
});
|
|
|
|
function themeHeader(html, message) {
|
|
let messageHeader = html.find(".message-header")[0];
|
|
const headerColor = getHeaderColor(html, message);
|
|
messageHeader.style.setProperty("--header-color", headerColor);
|
|
|
|
let textColTheme = calcHeaderTextColor(headerColor);
|
|
html[0].dataset.headerTextColorScheme = textColTheme;
|
|
|
|
// some modules add different timestamps and hide the original, like dfce-simple-timestamp
|
|
let time = html.find("time")[0];
|
|
if (time) {
|
|
time.classList.add("header-meta");
|
|
}
|
|
}
|
|
|
|
const headerStyleColors = {
|
|
none: "none",
|
|
fallback: "#DAC0FB",
|
|
blue: "#191F65",
|
|
green: "#002A17",
|
|
red: "#540C06",
|
|
}
|
|
|
|
function getHeaderColor(html, message) {
|
|
const headerStyle = game.settings.get("pf2e-dorako-ui", "theme.chat-message-header-style");
|
|
if (headerStyle === "tint") {
|
|
return message?.user?.color ?? headerStyleColors.fallback;
|
|
}
|
|
return headerStyleColors[headerStyle] ?? headerStyleColors.fallback;
|
|
}
|
|
|
|
function invertColor(color) {
|
|
return color === "dark" ? "light" : "dark";
|
|
}
|
|
|
|
function calcHeaderTextColor(headerColor) {
|
|
if (headerColor === headerStyleColors.none) {
|
|
return "dark"
|
|
}
|
|
|
|
var r = parseInt(headerColor.substr(1, 2), 16);
|
|
var g = parseInt(headerColor.substr(3, 2), 16);
|
|
var b = parseInt(headerColor.substr(5, 2), 16);
|
|
var yiq = (r * 299 + g * 587 + b * 114) / 1000;
|
|
|
|
if (yiq >= 180) {
|
|
return "dark";
|
|
} else {
|
|
return "light";
|
|
}
|
|
}
|