83 lines
2.1 KiB
JavaScript
83 lines
2.1 KiB
JavaScript
import {
|
|
preloadTemplatePaths,
|
|
normalizeTemplatePaths,
|
|
MODULE_ID,
|
|
log,
|
|
} from "./module.js";
|
|
|
|
const TEMPLATE_FILES = ["actor.hbs", "actor-inline.hbs"];
|
|
const TEMPLATE_BASE = "embeds";
|
|
const TEMPLATES = normalizeTemplatePaths(TEMPLATE_FILES, TEMPLATE_BASE);
|
|
|
|
async function buildActorEmbedHTML(doc, content, config, options) {
|
|
// Types: community, pc, marker, npc, vehicle
|
|
// LIMITED access can see Name and Description
|
|
const noPermission = !doc.testUserPermission(
|
|
game.user,
|
|
CONST.DOCUMENT_OWNERSHIP_LEVELS.LIMITED,
|
|
);
|
|
if (noPermission) {
|
|
const broken = document.createElement("span");
|
|
broken.classList.add("broken", "content-embed");
|
|
const i = document.createElement("i");
|
|
i.classList.add("fa-solid", "fa-circle-exclamation");
|
|
i.inert = true;
|
|
broken.append(
|
|
i,
|
|
_loc(`${MODULE_ID}.embed.noPermission`, { uuid: doc.uuid }),
|
|
);
|
|
return broken;
|
|
}
|
|
let icon = "";
|
|
switch (doc.type) {
|
|
case "pc":
|
|
icon = "fa-solid fa-user";
|
|
break;
|
|
case "npc":
|
|
icon = "fa-solid fa-user-secret";
|
|
break;
|
|
case "community":
|
|
icon = "fa-solid fa-tree-city";
|
|
break;
|
|
case "marker":
|
|
icon = "fa-solid fa-thumbtack";
|
|
break;
|
|
case "vehicle":
|
|
icon = "fa-solid fa-car-side";
|
|
break;
|
|
default:
|
|
icon = "fa-solid fa-person";
|
|
}
|
|
const context = {
|
|
config: { ...config },
|
|
actor: doc,
|
|
basic: doc.system.basic,
|
|
pools: doc.system.pools,
|
|
options,
|
|
viewFullDocument: doc.testUserPermission(
|
|
game.user,
|
|
CONST.DOCUMENT_OWNERSHIP_LEVELS.OBSERVER,
|
|
),
|
|
icon,
|
|
user: game.user,
|
|
};
|
|
const template = config.inline
|
|
? TEMPLATES["actor-inline.hbs"]
|
|
: TEMPLATES["actor.hbs"];
|
|
const el = document.createElement(config.inline ? "span" : "div");
|
|
el.classList.add(`${MODULE_ID}-embed`, "content-embed");
|
|
let innerHTML = await renderTemplate(template, context);
|
|
el.innerHTML = innerHTML;
|
|
return el;
|
|
}
|
|
|
|
function initializeEmbeds() {
|
|
CONFIG.Actor.embedHandlers.push(buildActorEmbedHTML);
|
|
}
|
|
|
|
Hooks.once("init", async () => {
|
|
log(`Initializing ${MODULE_ID}`);
|
|
initializeEmbeds();
|
|
preloadTemplatePaths(TEMPLATES);
|
|
});
|