Fixes #559
This commit is contained in:
+10
-5
@@ -16,7 +16,7 @@ export async function renderTemplate(
|
||||
templateText: string,
|
||||
pageMeta: PageMeta,
|
||||
data: any = {},
|
||||
): Promise<string> {
|
||||
): Promise<{ frontmatter?: string; text: string }> {
|
||||
const tree = await markdown.parseMarkdown(templateText);
|
||||
const frontmatter: Partial<TemplateObject> = await extractFrontmatter(tree, {
|
||||
removeFrontmatterSection: true,
|
||||
@@ -24,15 +24,20 @@ export async function renderTemplate(
|
||||
});
|
||||
templateText = renderToText(tree).trimStart();
|
||||
// If a 'frontmatter' key was specified in the frontmatter, use that as the frontmatter
|
||||
let frontmatterText: string | undefined;
|
||||
if (frontmatter.frontmatter) {
|
||||
if (typeof frontmatter.frontmatter === "string") {
|
||||
templateText = "---\n" + frontmatter.frontmatter + "---\n" + templateText;
|
||||
frontmatterText = frontmatter.frontmatter;
|
||||
} else {
|
||||
templateText = "---\n" + (await YAML.stringify(frontmatter.frontmatter)) +
|
||||
"---\n" + templateText;
|
||||
frontmatterText = await YAML.stringify(frontmatter.frontmatter);
|
||||
}
|
||||
}
|
||||
return handlebars.renderTemplate(templateText, data, { page: pageMeta });
|
||||
return {
|
||||
frontmatter: frontmatterText,
|
||||
text: await handlebars.renderTemplate(templateText, data, {
|
||||
page: pageMeta,
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -5,7 +5,7 @@ export function renderTemplate(
|
||||
templateText: string,
|
||||
pageMeta: PageMeta,
|
||||
data: any = {},
|
||||
): Promise<string> {
|
||||
): Promise<{ frontmatter?: string; text: string }> {
|
||||
return system.invokeFunction(
|
||||
"template.renderTemplate",
|
||||
templateText,
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
import { editor, handlebars, markdown, space, YAML } from "$sb/syscalls.ts";
|
||||
import { extractFrontmatter } from "$sb/lib/frontmatter.ts";
|
||||
import {
|
||||
extractFrontmatter,
|
||||
prepareFrontmatterDispatch,
|
||||
} from "$sb/lib/frontmatter.ts";
|
||||
import { renderToText } from "$sb/lib/tree.ts";
|
||||
import { niceDate, niceTime } from "$sb/lib/dates.ts";
|
||||
import { readSettings } from "$sb/lib/settings_page.ts";
|
||||
@@ -29,13 +32,26 @@ export async function templateSlashComplete(
|
||||
export async function insertSlashTemplate(slashCompletion: SlashCompletion) {
|
||||
const pageObject = await loadPageObject(slashCompletion.pageName);
|
||||
|
||||
let templateText = await space.readPage(slashCompletion.templatePage);
|
||||
templateText = await renderTemplate(templateText, pageObject);
|
||||
const templateText = await space.readPage(slashCompletion.templatePage);
|
||||
let { frontmatter, text } = await renderTemplate(templateText, pageObject);
|
||||
|
||||
const cursorPos = await editor.getCursor();
|
||||
const carretPos = templateText.indexOf("|^|");
|
||||
templateText = templateText.replace("|^|", "");
|
||||
await editor.insertAtCursor(templateText);
|
||||
|
||||
if (frontmatter) {
|
||||
frontmatter = frontmatter.trim();
|
||||
const pageText = await editor.getText();
|
||||
const tree = await markdown.parseMarkdown(pageText);
|
||||
|
||||
const dispatch = await prepareFrontmatterDispatch(tree, frontmatter);
|
||||
if (cursorPos === 0) {
|
||||
dispatch.selection = { anchor: frontmatter.length + 9 };
|
||||
}
|
||||
await editor.dispatch(dispatch);
|
||||
}
|
||||
|
||||
const carretPos = text.indexOf("|^|");
|
||||
text = text.replace("|^|", "");
|
||||
await editor.insertAtCursor(text);
|
||||
if (carretPos !== -1) {
|
||||
await editor.moveCursor(cursorPos + carretPos);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user