From d0e1bc540d4296f50a4c775f33f2abd9806db131 Mon Sep 17 00:00:00 2001 From: Abe Jellinek Date: Tue, 15 Oct 2024 11:00:11 -0400 Subject: [PATCH] EPUB/Snapshot: Implement link copying https://github.com/zotero/zotero/issues/3494#issuecomment-2411853436 --- src/dom/common/dom-view.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/dom/common/dom-view.tsx b/src/dom/common/dom-view.tsx index 9443ac51..63077bdc 100644 --- a/src/dom/common/dom-view.tsx +++ b/src/dom/common/dom-view.tsx @@ -822,9 +822,18 @@ abstract class DOMView { // Prevent native context menu event.preventDefault(); let br = this._iframe.getBoundingClientRect(); + let overlay; + let a = (event.target as Element).closest('a'); + if (a && this._isExternalLink(a)) { + overlay = { + type: 'external-link' as const, + url: a.href, + }; + } this._options.onOpenViewContextMenu({ x: br.x + event.clientX * this._iframeCoordScaleFactor, y: br.y + event.clientY * this._iframeCoordScaleFactor, + overlay, }); } @@ -1407,7 +1416,7 @@ export type DOMViewOptions = { onSetOverlayPopup: (params?: OverlayPopupParams) => void; onSetFindState: (state?: FindState) => void; onSetZoom?: (iframe: HTMLIFrameElement, zoom: number) => void; - onOpenViewContextMenu: (params: { x: number, y: number }) => void; + onOpenViewContextMenu: (params: { x: number, y: number, overlay?: { type: 'external-link', url: string } }) => void; onOpenAnnotationContextMenu: (params: { ids: string[], x: number, y: number, view: boolean }) => void; onFocus: () => void; onTabOut: (isShiftTab?: boolean) => void;