This commit is contained in:
Zef Hemel
2023-11-13 15:49:21 +01:00
parent b9bc3b1298
commit 7fec3fe587
5 changed files with 53 additions and 19 deletions
+1 -1
View File
@@ -64,7 +64,7 @@ export async function templateDirectiveRenderer(
// if it's a template injection (not a literal "include")
if (directive === "use") {
newBody = await renderTemplate(newBody, pageMeta, parsedArgs);
newBody = (await renderTemplate(newBody, pageMeta, parsedArgs)).text;
// Recursively render directives
const tree = await markdown.parseMarkdown(newBody);
+10 -5
View File
@@ -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,
}),
};
}
/**
+1 -1
View File
@@ -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,
+22 -6
View File
@@ -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);
}