diff --git a/src/services/export/markdown.spec.ts b/src/services/export/markdown.spec.ts
index a344d975f..37e9bd82a 100644
--- a/src/services/export/markdown.spec.ts
+++ b/src/services/export/markdown.spec.ts
@@ -315,4 +315,10 @@ describe("Markdown export", () => {
expect(markdownExportService.toMarkdown(html)).toBe(expected);
});
+ it("preserves include note", () => {
+ const html = /*html*/``;
+ const expected = /*markdown*/``;
+ expect(markdownExportService.toMarkdown(html)).toBe(expected);
+ });
+
});
diff --git a/src/services/export/markdown.ts b/src/services/export/markdown.ts
index c4c71eee2..8f6e3fa00 100644
--- a/src/services/export/markdown.ts
+++ b/src/services/export/markdown.ts
@@ -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" ]);
}