From d376e00a1ebafd08eca2bba36ba4733e7d793196 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Thu, 25 Jun 2026 09:45:50 +0500 Subject: [PATCH] editor: cleanup nn:// links when pasted Ensure that we remove any styles added to deep links. This is done especially for iOS where pasted link html get's wrapped into custom div with some hard coded styles making the link not match style with the rest of content. --- .../src/extensions/clipboard/clipboard-dom-parser.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/editor/src/extensions/clipboard/clipboard-dom-parser.ts b/packages/editor/src/extensions/clipboard/clipboard-dom-parser.ts index f118c15d6..c78e2b170 100644 --- a/packages/editor/src/extensions/clipboard/clipboard-dom-parser.ts +++ b/packages/editor/src/extensions/clipboard/clipboard-dom-parser.ts @@ -44,6 +44,7 @@ export class ClipboardDOMParser extends ProsemirrorDOMParser { convertBrToSingleSpacedParagraphs(dom); removeRestrictedFeatures(dom); removeBlockId(dom); + cleanupPastedNNLinkHtml(dom); } return super.parseSlice(dom, options); } @@ -55,6 +56,7 @@ export class ClipboardDOMParser extends ProsemirrorDOMParser { convertBrToSingleSpacedParagraphs(dom); removeRestrictedFeatures(dom); removeBlockId(dom); + cleanupPastedNNLinkHtml(dom); } return super.parse(dom, options); } @@ -66,6 +68,15 @@ export function removeBlockId(dom: HTMLElement | Document) { } } +export function cleanupPastedNNLinkHtml(dom: HTMLElement | Document) { + const isNNLink = dom.querySelectorAll(`[href^="nn://"]`).length === 1; + if (isNNLink) { + for (const element of dom.querySelectorAll("[style]")) { + element.removeAttribute("style"); + } + } +} + export function formatCodeblocks(dom: HTMLElement | Document) { for (const pre of dom.querySelectorAll("pre")) { pre.innerHTML = pre.innerHTML?.replaceAll(//g, "\n");