fix: remove frontmatter content before rendering

This commit is contained in:
Julien Calixte
2026-02-17 01:12:47 +01:00
parent ffa1a28e90
commit f017b4f0ff

View File

@@ -1,4 +1,4 @@
import markdownItLatex from "@vscode/markdown-it-katex" import markdownItKatex from "@vscode/markdown-it-katex"
import MarkdownIt, { Options } from "markdown-it" import MarkdownIt, { Options } from "markdown-it"
import blockEmbedPlugin from "markdown-it-block-embed" import blockEmbedPlugin from "markdown-it-block-embed"
import markdownItCheckbox from "markdown-it-checkbox" import markdownItCheckbox from "markdown-it-checkbox"
@@ -57,7 +57,7 @@ const md = new MarkdownIt({
}, },
}) })
.use(markdownItCheckbox) .use(markdownItCheckbox)
.use(markdownItLatex) .use(markdownItKatex)
.use(markdownItIframe, { .use(markdownItIframe, {
width: "100%", width: "100%",
}) })
@@ -116,17 +116,24 @@ const rules: RenderRuleRecord = {
md.renderer.rules = { ...md.renderer.rules, ...rules } md.renderer.rules = { ...md.renderer.rules, ...rules }
const stripFrontmatter = (content: string): string => {
const match = content.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/)
return match ? content.slice(match[0].length) : content
}
export const markdownBuilder = (defaultPrefix?: Ref<string> | string) => { export const markdownBuilder = (defaultPrefix?: Ref<string> | string) => {
const getRawContent = (content: string) => decodeBase64ToUTF8(content) const getRawContent = (content: string) => decodeBase64ToUTF8(content)
const renderFromUTF8 = (content: string, prefix?: string) => const renderFromUTF8 = (content: string, prefix?: string) => {
content return content
? md.render(content, { ? md.render(stripFrontmatter(content), {
docId: defaultPrefix ? toValue(defaultPrefix) : (prefix ?? ""), docId: defaultPrefix ? toValue(defaultPrefix) : (prefix ?? ""),
}) })
: "" : ""
}
return { return {
toHTML: (content: string) => (content ? md.render(content) : ""), toHTML: (content: string) =>
content ? md.render(stripFrontmatter(content)) : "",
render: (content: string, prefix?: string) => render: (content: string, prefix?: string) =>
renderFromUTF8(decodeBase64ToUTF8(content), prefix), renderFromUTF8(decodeBase64ToUTF8(content), prefix),
renderFromUTF8, renderFromUTF8,