From bd1d6cfd027e9307b81e2a9d22b22db31fe846ef Mon Sep 17 00:00:00 2001 From: Ticruz Date: Tue, 19 Nov 2024 18:25:03 +0100 Subject: [PATCH 1/2] fix double link matchin --- src/app/editor/LinkExtension.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/app/editor/LinkExtension.ts b/src/app/editor/LinkExtension.ts index 5616e097a..47942df8f 100644 --- a/src/app/editor/LinkExtension.ts +++ b/src/app/editor/LinkExtension.ts @@ -23,6 +23,7 @@ export const LinkExtension = Node.create({ name: "inlineLink", group: "inline", inline: true, + inclusive: false, selectable: true, draggable: true, priority: 1000, @@ -65,8 +66,10 @@ export const LinkExtension = Node.create({ return [ new InputRule({ find: text => { + const realText = this.editor.state.doc.textContent const match = last(Array.from(text.matchAll(LINK_REGEX))) - if (match && text.length === match.index + match[0].length + 1) { + const realMatch = last(Array.from(realText.matchAll(LINK_REGEX))) + if (match && realMatch && text.length === match.index + match[0].length + 1) { return { index: match.index!, text: match[0], @@ -78,13 +81,14 @@ export const LinkExtension = Node.create({ return null }, - handler: ({state, range, match}) => { + handler: ({state, range, match, chain}) => { const {tr} = state if (match[0]) { try { - tr.insert(range.from - 1, this.type.create(match.data)) - .delete(tr.mapping.map(range.from - 1), tr.mapping.map(range.to)) - .insertText(last(Array.from(match.input!))) + chain() + .deleteRange({from: range.from - 1, to: range.from - 1 + match[0].length}) + .insertLink({url: match[0]}) + .run() } catch (e) { // If the node was already linkified, the above code breaks for whatever reason } From 9e9ecbddc531570027ee59d893c61b3c0e3bca7f Mon Sep 17 00:00:00 2001 From: Ticruz Date: Wed, 20 Nov 2024 13:14:29 +0100 Subject: [PATCH 2/2] fix #473 and improved behaviour --- src/app/editor/LinkExtension.ts | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/app/editor/LinkExtension.ts b/src/app/editor/LinkExtension.ts index 47942df8f..e8168a9ed 100644 --- a/src/app/editor/LinkExtension.ts +++ b/src/app/editor/LinkExtension.ts @@ -74,27 +74,28 @@ export const LinkExtension = Node.create({ index: match.index!, text: match[0], data: { - url: match[0], + url: match[0].trim(), }, } } return null }, - handler: ({state, range, match, chain}) => { - const {tr} = state + handler: ({range, match, chain}) => { if (match[0]) { - try { - chain() - .deleteRange({from: range.from - 1, to: range.from - 1 + match[0].length}) - .insertLink({url: match[0]}) - .run() - } catch (e) { - // If the node was already linkified, the above code breaks for whatever reason + const lastChar = last(Array.from(match.input!)) + const chainCommand = chain() + .deleteRange({from: range.from - 1, to: range.from - 1 + match[0].length}) + .insertLink({url: match[0]}) + + if (lastChar === "\n") { + chainCommand.splitBlock() + } else { + chainCommand.insertContent(" ") } - } - tr.scrollIntoView() + chainCommand.run() + } }, }), ]