diff --git a/src/services/import/markdown.spec.ts b/src/services/import/markdown.spec.ts index 623ad7e41..9c22667cd 100644 --- a/src/services/import/markdown.spec.ts +++ b/src/services/import/markdown.spec.ts @@ -56,4 +56,22 @@ describe("markdown", () => { `, "What's new") expect(result).toBe(`\n
Hi there
\n`); }); + + it("trims unnecessary whitespace", () => { + const input = `\ +## Heading 1 + +Title + +\`\`\` +code block 1 +second line 2 +\`\`\` +`; + const expected = `\ +Title
code block 1
+second line 2
`;
+ expect(markdownService.renderToHtml(input, "Troubleshooting")).toBe(expected);
+ });
+
});
diff --git a/src/services/import/markdown.ts b/src/services/import/markdown.ts
index 8969357c3..f64ce295a 100644
--- a/src/services/import/markdown.ts
+++ b/src/services/import/markdown.ts
@@ -1,6 +1,7 @@
"use strict";
import { parse, Renderer, type Tokens } from "marked";
+import { minify as minifyHtml } from "html-minifier";
const renderer = new Renderer({ async: false });
renderer.code = ({ text, lang, escaped }: Tokens.Code) => {
@@ -17,12 +18,19 @@ import importUtils from "./utils.js";
import { getMimeTypeFromHighlightJs, MIME_TYPE_AUTO, normalizeMimeTypeForCKEditor } from "./mime_type_definitions.js";
function renderToHtml(content: string, title: string) {
- const html = parse(content, {
+ let html = parse(content, {
async: false,
renderer: renderer
}) as string;
- const h1Handled = importUtils.handleH1(html, title); // h1 handling needs to come before sanitization
- return htmlSanitizer.sanitize(h1Handled);
+
+ // h1 handling needs to come before sanitization
+ html = importUtils.handleH1(html, title);
+ html = htmlSanitizer.sanitize(html);
+ html = minifyHtml(html, {
+ collapseWhitespace: true
+ });
+
+ return html;
}
function getNormalizedMimeFromMarkdownLanguage(language: string | undefined) {