From 89931ca2f00596ffce041ec479fd25f082c5dbbf Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 10 Jan 2024 21:19:39 -0500 Subject: [PATCH] fix: Improve reliability of inter-linking documents through importer. closes OLN-156 --- server/utils/turndown/index.ts | 2 ++ server/utils/turndown/inlineLink.ts | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 server/utils/turndown/inlineLink.ts 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 + ")"; + }, + }); +}