diff --git a/apps/server/src/share/content_renderer.spec.ts b/apps/server/src/share/content_renderer.spec.ts index aaa4316f2..8f3f70622 100644 --- a/apps/server/src/share/content_renderer.spec.ts +++ b/apps/server/src/share/content_renderer.spec.ts @@ -47,15 +47,13 @@ describe("content_renderer", () => { `; const note = buildShareNote({ content, - attachments: [ { id: "q14s2Id7V6pp" } ] + attachments: [ { id: "q14s2Id7V6pp", title: "5863845791835102555.mp4" } ] }); const result = getContent(note); expect(result.content).toStrictEqual(trimIndentation`\
- - 5863845791835102555.mp4 - + 5863845791835102555.mp4
`); diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index cc5c5a0d9..35fb841b0 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -1,4 +1,4 @@ -import { parse, HTMLElement } from "node-html-parser"; +import { parse, HTMLElement, TextNode } from "node-html-parser"; import shaca from "./shaca/shaca.js"; import assetPath from "../services/asset_path.js"; import shareRoot from "./share_root.js"; @@ -79,13 +79,13 @@ function renderText(result: Result, note: SNote) { const includedResult = getContent(note); if (typeof includedResult.content !== "string") continue; - const includedDocument = parse(includedResult.content).querySelector("body"); + const includedDocument = parse(includedResult.content).childNodes; if (includedDocument) { - includeNoteEl.replaceWith(includedDocument); + includeNoteEl.replaceWith(...includedDocument); } } - result.isEmpty = document.querySelector("body")?.textContent?.trim().length === 0 && document.querySelectorAll("img").length === 0; + result.isEmpty = document.textContent?.trim().length === 0 && document.querySelectorAll("img").length === 0; if (!result.isEmpty) { for (const linkEl of document.querySelectorAll("a")) { @@ -101,7 +101,7 @@ function renderText(result: Result, note: SNote) { } } - result.content = document.querySelector("body")?.innerHTML ?? ""; + result.content = document.innerHTML ?? ""; if (result.content.includes(``)) { result.header += ` @@ -134,7 +134,7 @@ function handleAttachmentLink(linkEl: HTMLElement, href: string) { linkEl.classList.add(`attachment-link`); linkEl.classList.add(`role-${attachment.role}`); linkEl.childNodes.length = 0; - linkEl.append(attachment.title); + linkEl.appendChild(new TextNode(attachment.title)); } else { linkEl.removeAttribute("href"); } @@ -168,7 +168,7 @@ export function renderCode(result: Result) { result.isEmpty = true; } else { const preEl = new HTMLElement("pre", {}); - preEl.append(result.content); + preEl.appendChild(new TextNode(result.content)); result.content = preEl.outerHTML; } }