From 87d74e4bdf3b4bddc32b732d33cb8ed7fb1724b4 Mon Sep 17 00:00:00 2001 From: Benjamin Kroeger Date: Fri, 14 Oct 2022 13:01:13 +0200 Subject: [PATCH 1/4] checks whenNotEditable condition in clickHandler --- packages/extension-link/src/helpers/clickHandler.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/extension-link/src/helpers/clickHandler.ts b/packages/extension-link/src/helpers/clickHandler.ts index c74313e9f0f..a36cc3202df 100644 --- a/packages/extension-link/src/helpers/clickHandler.ts +++ b/packages/extension-link/src/helpers/clickHandler.ts @@ -4,6 +4,7 @@ import { Plugin, PluginKey } from 'prosemirror-state' type ClickHandlerOptions = { type: MarkType, + whenNotEditable: boolean } export function clickHandler(options: ClickHandlerOptions): Plugin { @@ -11,6 +12,10 @@ export function clickHandler(options: ClickHandlerOptions): Plugin { key: new PluginKey('handleClickLink'), props: { handleClick: (view, pos, event) => { + if (options.whenNotEditable && view.editable) { + return false + } + const attrs = getAttributes(view.state, options.type.name) const link = (event.target as HTMLElement)?.closest('a') From 7c635700d8e90a81c322e42fa566d3d725eb248a Mon Sep 17 00:00:00 2001 From: Benjamin Kroeger Date: Fri, 14 Oct 2022 13:05:41 +0200 Subject: [PATCH 2/4] passes whenNotEditable option from to helper --- packages/extension-link/src/link.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/extension-link/src/link.ts b/packages/extension-link/src/link.ts index 94f0c5fec9a..a35b24e8850 100644 --- a/packages/extension-link/src/link.ts +++ b/packages/extension-link/src/link.ts @@ -18,7 +18,7 @@ export interface LinkOptions { /** * If enabled, links will be opened on click. */ - openOnClick: boolean, + openOnClick: boolean | 'whenNotEditable', /** * Adds a link to the current selection if the pasted content only contains an url. */ @@ -175,6 +175,7 @@ export const Link = Mark.create({ if (this.options.openOnClick) { plugins.push(clickHandler({ type: this.type, + whenNotEditable: this.options.openOnClick === 'whenNotEditable', })) } From 82735f680886814180a5b858470eaadd7703d29b Mon Sep 17 00:00:00 2001 From: Benjamin Kroeger Date: Fri, 14 Oct 2022 13:08:53 +0200 Subject: [PATCH 3/4] adds docs for whenNotEditable --- docs/api/marks/link.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/api/marks/link.md b/docs/api/marks/link.md index 4182c72763f..6cd68b9b0fe 100644 --- a/docs/api/marks/link.md +++ b/docs/api/marks/link.md @@ -53,6 +53,14 @@ Link.configure({ }) ``` +If set to `'whenNotEditable'`, links will be opened on click only when editor is not editable. + +```js +Link.configure({ + openOnClick: 'whenNotEditable', +}) +``` + ### linkOnPaste Adds a link to the current selection if the pasted content only contains an url. From 565767ef93c54fad02a519fba6c93f5adb3160c2 Mon Sep 17 00:00:00 2001 From: Benjamin Kroeger Date: Tue, 10 Oct 2023 11:31:27 +0200 Subject: [PATCH 4/4] adds to ClickHandlerOptions type --- packages/extension-link/src/helpers/clickHandler.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/extension-link/src/helpers/clickHandler.ts b/packages/extension-link/src/helpers/clickHandler.ts index 4d78acb08ec..6aae66eab68 100644 --- a/packages/extension-link/src/helpers/clickHandler.ts +++ b/packages/extension-link/src/helpers/clickHandler.ts @@ -4,6 +4,7 @@ import { Plugin, PluginKey } from '@tiptap/pm/state' type ClickHandlerOptions = { type: MarkType, + whenNotEditable: boolean, } export function clickHandler(options: ClickHandlerOptions): Plugin {