feat(import/markdown): collapse unnecessary whitespace when importing

This commit is contained in:
Elian Doran 2025-03-14 19:50:26 +02:00
parent c892c95aae
commit a2f0896c2a
No known key found for this signature in database
2 changed files with 29 additions and 3 deletions

View File

@ -56,4 +56,22 @@ describe("markdown", () => {
`, "What's new") `, "What's new")
expect(result).toBe(`\n<p>Hi there</p>\n`); expect(result).toBe(`\n<p>Hi there</p>\n`);
}); });
it("trims unnecessary whitespace", () => {
const input = `\
## Heading 1
Title
\`\`\`
code block 1
second line 2
\`\`\`
`;
const expected = `\
<h2>Heading 1</h2><p>Title</p><pre><code class="language-text-x-trilium-auto">code block 1
second line 2</code></pre>`;
expect(markdownService.renderToHtml(input, "Troubleshooting")).toBe(expected);
});
}); });

View File

@ -1,6 +1,7 @@
"use strict"; "use strict";
import { parse, Renderer, type Tokens } from "marked"; import { parse, Renderer, type Tokens } from "marked";
import { minify as minifyHtml } from "html-minifier";
const renderer = new Renderer({ async: false }); const renderer = new Renderer({ async: false });
renderer.code = ({ text, lang, escaped }: Tokens.Code) => { 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"; import { getMimeTypeFromHighlightJs, MIME_TYPE_AUTO, normalizeMimeTypeForCKEditor } from "./mime_type_definitions.js";
function renderToHtml(content: string, title: string) { function renderToHtml(content: string, title: string) {
const html = parse(content, { let html = parse(content, {
async: false, async: false,
renderer: renderer renderer: renderer
}) as string; }) 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) { function getNormalizedMimeFromMarkdownLanguage(language: string | undefined) {