From f17dd8460c7ee428846f1dc7adb4382ae3f772f2 Mon Sep 17 00:00:00 2001 From: Andrew McClenaghan Date: Fri, 5 May 2023 14:40:56 +1000 Subject: [PATCH] feat: Add support for mentions --- packages/lib/src/AdfProcessing.ts | 17 +++++++++++++++++ .../lib/src/MarkdownTransformer/wikilinks.ts | 4 +++- packages/lib/src/MdToADF.ts | 5 ++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/packages/lib/src/AdfProcessing.ts b/packages/lib/src/AdfProcessing.ts index 7941ef15..18b4fc68 100644 --- a/packages/lib/src/AdfProcessing.ts +++ b/packages/lib/src/AdfProcessing.ts @@ -697,6 +697,23 @@ function processWikilinkToActualLink( } return node; } + if ( + typeof node.marks[0].attrs["href"] === "string" && + node.marks[0].attrs["href"].startsWith("mention:") + ) { + console.log({ node }); + const mentionUrl = new URL(node.marks[0].attrs["href"]); + + node = { + type: "mention", + attrs: { + id: mentionUrl.pathname, + text: node.text, + }, + }; + + return node; + } } return; }, diff --git a/packages/lib/src/MarkdownTransformer/wikilinks.ts b/packages/lib/src/MarkdownTransformer/wikilinks.ts index 2ffa7d4d..3b3f9a6c 100644 --- a/packages/lib/src/MarkdownTransformer/wikilinks.ts +++ b/packages/lib/src/MarkdownTransformer/wikilinks.ts @@ -54,7 +54,9 @@ export function wikilinks(state: StateInline): boolean { state.posMax = wikiLinkEnd; } - const href = `wikilinks:${linkToPage}${hashFragment ?? ""}`; + const href = linkToPage.startsWith("mention:") + ? linkToPage + : `wikilinks:${linkToPage}${hashFragment ?? ""}`; let token = state.push("link_open", "a", 1); token.attrs = [["href", href]]; diff --git a/packages/lib/src/MdToADF.ts b/packages/lib/src/MdToADF.ts index 933d6b36..4b343204 100644 --- a/packages/lib/src/MdToADF.ts +++ b/packages/lib/src/MdToADF.ts @@ -43,7 +43,10 @@ function processADF(adf: JSONDocNode): JSONDocNode { node.marks[0].attrs["href"] === "" || (!isSafeUrl(node.marks[0].attrs["href"]) && !(node.marks[0].attrs["href"] as string).startsWith( - "wikilink" + "wikilinks:" + ) && + !(node.marks[0].attrs["href"] as string).startsWith( + "mention:" )) ) { node.marks[0].attrs["href"] = "#";