diff --git a/src/services/import/markdown.spec.ts b/src/services/import/markdown.spec.ts index 5d5ccd33c..b6cddcc2b 100644 --- a/src/services/import/markdown.spec.ts +++ b/src/services/import/markdown.spec.ts @@ -62,10 +62,16 @@ Title code block 1 second line 2 \`\`\` + +* Hello +* world + +1. Hello +2. World `; const expected = `\

Heading 1

Title

code block 1
-second line 2
`; +second line 2
  1. Hello
  2. World
`; expect(markdownService.renderToHtml(input, "Troubleshooting")).toBe(expected); }); diff --git a/src/services/import/markdown.ts b/src/services/import/markdown.ts index bff72e592..42462dfa2 100644 --- a/src/services/import/markdown.ts +++ b/src/services/import/markdown.ts @@ -2,6 +2,9 @@ import { parse, Renderer, type Tokens } from "marked"; +/** + * Keep renderer code up to date with https://github.com/markedjs/marked/blob/master/src/Renderer.ts. + */ class CustomMarkdownRenderer extends Renderer { heading(data: Tokens.Heading): string { @@ -12,13 +15,23 @@ class CustomMarkdownRenderer extends Renderer { return super.paragraph(data).trimEnd(); } - code({ text, lang, escaped }: Tokens.Code): string { + code({ text, lang }: Tokens.Code): string { if (!text) { - return ""; - } + return ""; + } - const ckEditorLanguage = getNormalizedMimeFromMarkdownLanguage(lang); - return `
${text}
`; + const ckEditorLanguage = getNormalizedMimeFromMarkdownLanguage(lang); + return `
${text}
`; + } + + list(token: Tokens.List): string { + return super.list(token) + .replace("\n", "") // we replace the first one only. + .trimEnd(); + } + + listitem(item: Tokens.ListItem): string { + return super.listitem(item).trimEnd(); } blockquote({ tokens }: Tokens.Blockquote): string { @@ -42,7 +55,6 @@ class CustomMarkdownRenderer extends Renderer { } -// Keep renderer code up to date with https://github.com/markedjs/marked/blob/master/src/Renderer.ts. const renderer = new CustomMarkdownRenderer({ async: false }); import htmlSanitizer from "../html_sanitizer.js";