| name |
模板文本引擎 |
| description |
后台引擎:拦截文本 Wrap 逻辑,动态替换为 Template 数据。 |
| author |
ymjr |
| version |
1.0.0 |
| license |
MIT |
| usage |
后台常驻。为携带 `customData.template` 的文本元素提供底层的“运行时变量替换”能力,使得文字元素可以成为动态展示外部数据的容器。 |
| features |
拦截 `beforeWrapText` 钩子 |
根据元素 ID 到全局上下文 `window.templateMap` 中匹配对应渲染内容 |
|
| dependencies |
|
| autorun |
true |
/*
*/
var locales = {
zh: {
log_no_core: "EA_Core 未运行",
log_unmounted: "[{id}] 🔌 已卸载",
log_mounted: "[{id}] 🚀 挂载完毕"
},
en: {
log_no_core: "EA_Core not running",
log_unmounted: "[{id}] 🔌 Unmounted",
log_mounted: "[{id}] 🚀 Mounted successfully"
}
};
const SCRIPT_ID = "ymjr.feature.template-engine";
const handleBeforeWrapText = (hookCtx) => {
const { ea, api } = hookCtx;
if (!ea || !api) return;
const { textElement } = hookCtx;
if (textElement?.customData?.template) {
const templateMap = (window).templateMap || {};
const templateData = templateMap[textElement.id];
if (templateData && templateData.content) {
hookCtx.text = templateData.content;
}
if (textElement.customData.indent !== undefined) {
hookCtx.indent = textElement.customData.indent;
}
}
return false;
};
async function mountFeature() {
if (!window.EA_Core) return console.warn(t("log_no_core"));
if (typeof ExcalidrawAutomate.plugin[`disable_${SCRIPT_ID}`] === "function") ExcalidrawAutomate.plugin[`disable_${SCRIPT_ID}`]();
window.EA_Core.registerHook(SCRIPT_ID, 'beforeWrapText', handleBeforeWrapText, 60);
ExcalidrawAutomate.plugin[`disable_${SCRIPT_ID}`] = () => {
if (window.EA_Core) window.EA_Core.unregisterHook(SCRIPT_ID);
console.log(t("log_unmounted", { id: SCRIPT_ID }));
};
console.log(t("log_mounted", { id: SCRIPT_ID }));
}
mountFeature();