From 3295e3711ae92f5503064691c5558afea99e3f0c Mon Sep 17 00:00:00 2001 From: Hufe921 Date: Mon, 6 Mar 2023 21:01:38 +0800 Subject: [PATCH] feat:open hyperlink shortcut --- .vscode/settings.json | 1 + src/editor/core/draw/particle/HyperlinkParticle.ts | 8 ++++++++ src/editor/core/event/handlers/mousedown.ts | 7 ++++++- src/editor/utils/hotkey.ts | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 58e37ab..c3c097c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -11,6 +11,7 @@ "dppx", "inputarea", "linebreak", + "noopener", "prismjs", "resizer", "richtext", diff --git a/src/editor/core/draw/particle/HyperlinkParticle.ts b/src/editor/core/draw/particle/HyperlinkParticle.ts index 686ee6e..cecb4cf 100644 --- a/src/editor/core/draw/particle/HyperlinkParticle.ts +++ b/src/editor/core/draw/particle/HyperlinkParticle.ts @@ -27,6 +27,7 @@ export class HyperlinkParticle { hyperlinkPopupContainer.classList.add(`${EDITOR_PREFIX}-hyperlink-popup`) const hyperlinkDom = document.createElement('a') hyperlinkDom.target = '_blank' + hyperlinkDom.rel = 'noopener' hyperlinkPopupContainer.append(hyperlinkDom) this.container.append(hyperlinkPopupContainer) return { hyperlinkPopupContainer, hyperlinkDom } @@ -51,6 +52,13 @@ export class HyperlinkParticle { this.hyperlinkPopupContainer.style.display = 'none' } + public openHyperlink(element: IElement) { + const newTab = window.open(element.url, '_blank') + if (newTab) { + newTab.opener = null + } + } + public render(ctx: CanvasRenderingContext2D, element: IRowElement, x: number, y: number) { ctx.save() ctx.font = element.style diff --git a/src/editor/core/event/handlers/mousedown.ts b/src/editor/core/event/handlers/mousedown.ts index 7a476bf..252ea18 100644 --- a/src/editor/core/event/handlers/mousedown.ts +++ b/src/editor/core/event/handlers/mousedown.ts @@ -1,6 +1,7 @@ import { ElementType } from '../../../dataset/enum/Element' import { MouseEventButton } from '../../../dataset/enum/Event' import { deepClone } from '../../../utils' +import { isMod } from '../../../utils/hotkey' import { CheckboxControl } from '../../draw/control/checkbox/CheckboxControl' import { CanvasEvent } from '../CanvasEvent' @@ -106,7 +107,11 @@ export function mousedown(evt: MouseEvent, host: CanvasEvent) { const hyperlinkParticle = draw.getHyperlinkParticle() hyperlinkParticle.clearHyperlinkPopup() if (curElement.type === ElementType.HYPERLINK) { - hyperlinkParticle.drawHyperlinkPopup(curElement, positionList[curIndex]) + if (isMod(evt)) { + hyperlinkParticle.openHyperlink(curElement) + } else { + hyperlinkParticle.drawHyperlinkPopup(curElement, positionList[curIndex]) + } } // 日期控件 const dateParticle = draw.getDateParticle() diff --git a/src/editor/utils/hotkey.ts b/src/editor/utils/hotkey.ts index 79ad217..fafa078 100644 --- a/src/editor/utils/hotkey.ts +++ b/src/editor/utils/hotkey.ts @@ -1,5 +1,5 @@ import { isApple } from './ua' -export function isMod(evt: KeyboardEvent) { +export function isMod(evt: KeyboardEvent | MouseEvent) { return isApple ? evt.metaKey : evt.ctrlKey } \ No newline at end of file