import YAML = require("yamljs"); import { getNoteLink } from "../../utils/link"; export { renderTemplatePreview }; async function renderTemplatePreview( templateName: string, inputItems?: Zotero.Item[], ): Promise { let html: string = "

Preview rendering failed

"; if (!inputItems) { inputItems = ZoteroPane.getSelectedItems(); } if (templateName.toLowerCase().startsWith("[text]")) { html = await addon.api.template.runTextTemplate(templateName, { dryRun: true, }); } else if (templateName.toLowerCase().startsWith("[item]")) { const data = inputItems?.map((item) => item.id); html = await addon.api.template.runItemTemplate(templateName, { itemIds: data, dryRun: true, }); } else if (templateName.includes("ExportMDFileName")) { // noteItem const data = inputItems?.find((item) => item.isNote()); if (!data) { html = "

No note item selected

"; } else { html = await addon.api.template.runTemplate( templateName, "noteItem", [data], { dryRun: true, }, ); } } else if (templateName.includes("ExportMDFileHeader")) { // noteItem const data = inputItems?.find((item) => item.isNote()); if (!data) { html = "

No note item selected

"; } else { const raw = await addon.api.template.runTemplate( templateName, "noteItem", [data], { dryRun: true, }, ); const header = Object.assign({}, JSON.parse(raw), { version: data.version, libraryID: data.libraryID, itemKey: data.key, }); html = `
${YAML.stringify(header, 10)}
`; } } else if (templateName.includes("ExportMDFileContent")) { // noteItem const data = inputItems?.find((item) => item.isNote()); if (!data) { html = "

No note item selected

"; } else { html = `
${await addon.api.convert.note2md(
        data,
        Zotero.getTempDirectory().path,
        { withYAMLHeader: false, skipSavingImages: true, keepNoteLink: true },
      )}
`; } } else if (templateName.includes("QuickInsert")) { // link, linkText, subNoteItem, noteItem const data = inputItems?.find((item) => item.isNote()); if (!data) { html = "

No note item selected

"; } else { const link = getNoteLink(data); const linkText = data.getNoteTitle().trim() || link; const subNoteItem = data; const noteItem = new Zotero.Item("note"); html = await addon.api.template.runTemplate( templateName, "link, linkText, subNoteItem, noteItem", [link, linkText, subNoteItem, noteItem], { dryRun: true, }, ); } } else if (templateName.includes("QuickBackLink")) { // link, linkText, subNoteItem, noteItem const data = inputItems?.find((item) => item.isNote()); if (!data) { html = "

No note item selected

"; } else { const link = getNoteLink(data); const noteItem = new Zotero.Item("note"); const linkText = noteItem.getNoteTitle().trim() || "Workspace Note"; const subNoteItem = data; html = await addon.api.template.runTemplate( templateName, "link, linkText, subNoteItem, noteItem", [link, linkText, subNoteItem, noteItem], { dryRun: true, }, ); } } else if (templateName.includes("QuickImport")) { // link, noteItem const data = inputItems?.find((item) => item.isNote()); if (!data) { html = "

No note item selected

"; } else { const link = getNoteLink(data); const noteItem = new Zotero.Item("note"); html = await addon.api.template.runTemplate( templateName, "link, noteItem", [link, noteItem], { dryRun: true, }, ); } } else if (templateName.includes("QuickNote")) { // annotationItem, topItem, noteItem html = "

Preview not available for QuickNote

"; } else { html = `

Preview not available for template ${templateName}

`; } return html; }