From 9e9bd78a41c4dbc6f08da5d55c3fb715946faec4 Mon Sep 17 00:00:00 2001 From: Jens Meisner Date: Tue, 4 Aug 2026 11:34:09 +0200 Subject: [PATCH] preserve set link target --- .../src/linktarget/LinkTargetModelView.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetModelView.ts b/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetModelView.ts index 488a49996d..a8fd39bf55 100644 --- a/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetModelView.ts +++ b/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetModelView.ts @@ -1,13 +1,13 @@ import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; import { getLinkAttributes, LinkAttributes } from "@coremedia/ckeditor5-link-common"; import type { - DifferItemAttribute, - ModelRange, - ModelWriter, DifferItem, + DifferItemAttribute, DifferItemInsert, ModelElement, ModelNode, + ModelRange, + ModelWriter, } from "ckeditor5"; import { Plugin } from "ckeditor5"; import { LINK_TARGET_MODEL, LINK_TARGET_VIEW } from "./Constants"; @@ -129,7 +129,10 @@ export default class LinkTargetModelView extends Plugin { * @param diffItem - the variable to check */ #isDiffItemInsert(diffItem: DifferItem): diffItem is DifferItemInsert { - return diffItem.type === "insert" && diffItem.attributes.has("linkHref"); + // an already set `linkTarget` (e.g., from paste) wins over the default. + return ( + diffItem.type === "insert" && diffItem.attributes.has("linkHref") && !diffItem.attributes.has(LINK_TARGET_MODEL) + ); } /** @@ -187,6 +190,9 @@ export default class LinkTargetModelView extends Plugin { * @private */ #computeLinkTargetForNode(child: ModelNode): string | undefined { + if (child.hasAttribute(LINK_TARGET_MODEL)) { + return undefined; + } const url = child.getAttribute("linkHref"); if (url && typeof url === "string") { return computeDefaultLinkTargetForUrl(url, this.editor.config);