diff --git a/server/utils/turndown/index.ts b/server/utils/turndown/index.ts index 120024c6f..990a17454 100644 --- a/server/utils/turndown/index.ts +++ b/server/utils/turndown/index.ts @@ -5,6 +5,7 @@ import emptyLists from "./emptyLists"; import emptyParagraph from "./emptyParagraph"; import frames from "./frames"; import images from "./images"; +import inlineLink from "./inlineLink"; import sanitizeLists from "./sanitizeLists"; import sanitizeTables from "./sanitizeTables"; import underlines from "./underlines"; @@ -24,6 +25,7 @@ const service = new TurndownService({ }) .remove(["script", "style", "title", "head"]) .use(gfm) + .use(inlineLink) .use(emptyParagraph) .use(sanitizeTables) .use(sanitizeLists) diff --git a/server/utils/turndown/inlineLink.ts b/server/utils/turndown/inlineLink.ts new file mode 100644 index 000000000..1c0920ada --- /dev/null +++ b/server/utils/turndown/inlineLink.ts @@ -0,0 +1,22 @@ +import TurndownService from "turndown"; + +/** + * A turndown plugin for converting anchors to inline links without a title. + * + * @param turndownService The TurndownService instance. + */ +export default function underlines(turndownService: TurndownService) { + turndownService.addRule("inlineLink", { + filter(node, options) { + return !!( + options.linkStyle === "inlined" && + node.nodeName === "A" && + node.getAttribute("href") + ); + }, + replacement(content, node: HTMLElement) { + const href = node.getAttribute("href"); + return "[" + content + "](" + href + ")"; + }, + }); +}