feat(export/markdown): preserve include section

This commit is contained in:
Elian Doran 2025-04-11 20:00:32 +03:00
parent 539e3f1b6a
commit 2e4524361b
No known key found for this signature in database
2 changed files with 16 additions and 2 deletions

View File

@ -315,4 +315,10 @@ describe("Markdown export", () => {
expect(markdownExportService.toMarkdown(html)).toBe(expected);
});
it("preserves include note", () => {
const html = /*html*/`<section class="include-note" data-note-id="i4A5g9iOg9I0" data-box-size="full"> </section>`;
const expected = /*markdown*/`<section class="include-note" data-note-id="i4A5g9iOg9I0" data-box-size="full">&nbsp;</section>`;
expect(markdownExportService.toMarkdown(html)).toBe(expected);
});
});

View File

@ -37,7 +37,15 @@ function toMarkdown(content: string) {
if (instance === null) {
instance = new TurndownService({
headingStyle: "atx",
codeBlockStyle: "fenced"
codeBlockStyle: "fenced",
blankReplacement(content, node, options) {
if (node.nodeName === "SECTION" && (node as HTMLElement).classList.contains("include-note")) {
return (node as HTMLElement).outerHTML;
}
// Original implementation as per https://github.com/mixmark-io/turndown/blob/master/src/turndown.js.
return ("isBlock" in node && node.isBlock) ? '\n\n' : ''
}
});
// Filter is heavily based on: https://github.com/mixmark-io/turndown/issues/274#issuecomment-458730974
instance.addRule("fencedCodeBlock", fencedCodeBlockFilter);
@ -46,7 +54,7 @@ function toMarkdown(content: string) {
instance.addRule("inlineLink", buildInlineLinkFilter());
instance.addRule("figure", buildFigureFilter());
instance.addRule("math", buildMathFilter());
instance.addRule("li-1", buildListItemFilter());
instance.addRule("li", buildListItemFilter());
instance.use(gfm);
instance.keep([ "kbd" ]);
}