diff --git a/src/api.ts b/src/api.ts index 0351a5e..f85b259 100644 --- a/src/api.ts +++ b/src/api.ts @@ -28,7 +28,11 @@ import { getMDFileName, getRelatedNoteIds, } from "./modules/sync/api"; -import { runTemplate, runItemTemplate } from "./modules/template/api"; +import { + runTemplate, + runTextTemplate, + runItemTemplate, +} from "./modules/template/api"; import { getTemplateKeys, getTemplateText, @@ -90,6 +94,7 @@ const template = { SYSTEM_TEMPLATE_NAMES, DEFAULT_TEMPLATES, runTemplate, + runTextTemplate, runItemTemplate, getTemplateKeys, getTemplateText, diff --git a/src/modules/template/api.ts b/src/modules/template/api.ts index 6f2da5d..69b9bf9 100644 --- a/src/modules/template/api.ts +++ b/src/modules/template/api.ts @@ -3,7 +3,7 @@ import { getString } from "../../utils/locale"; import { copyEmbeddedImagesInHTML, renderNoteHTML } from "../../utils/note"; import { fill, slice } from "../../utils/str"; -export { runTemplate, runItemTemplate }; +export { runTemplate, runTextTemplate, runItemTemplate }; const AsyncFunction = Object.getPrototypeOf(async function () {}).constructor; @@ -89,6 +89,26 @@ async function runTemplate( } } +async function runTextTemplate( + key: string, + options: { + targetNoteId?: number; + dryRun?: boolean; + } +) { + let { targetNoteId, dryRun } = options; + const targetNoteItem = Zotero.Items.get(targetNoteId || -1); + const sharedObj = {}; + return await runTemplate( + key, + "targetNoteItem, sharedObj", + [targetNoteItem, sharedObj], + { + dryRun, + } + ); +} + async function runItemTemplate( key: string, options: { diff --git a/src/modules/template/picker.ts b/src/modules/template/picker.ts index 6778b5f..02578ad 100644 --- a/src/modules/template/picker.ts +++ b/src/modules/template/picker.ts @@ -85,7 +85,9 @@ async function insertTemplateCallback(name: string) { targetNoteId: targetNoteItem.id, }); } else { - html = await addon.api.template.runTemplate(name, "", []); + html = await addon.api.template.runTextTemplate(name, { + targetNoteId: targetNoteItem.id, + }); } await addLineToNote( targetNoteItem, diff --git a/src/modules/template/preview.ts b/src/modules/template/preview.ts index b3c688e..7dbf49c 100644 --- a/src/modules/template/preview.ts +++ b/src/modules/template/preview.ts @@ -12,7 +12,9 @@ async function renderTemplatePreview( inputItems = ZoteroPane.getSelectedItems(); } if (templateName.startsWith("[Text]")) { - html = await addon.api.template.runTemplate(templateName, "", []); + html = await addon.api.template.runTextTemplate(templateName, { + dryRun: true, + }); } else if (templateName.startsWith("[Item]")) { const data = inputItems?.map((item) => item.id); html = await addon.api.template.runItemTemplate(templateName, {