From 4567c721adfa73108fed181fc260323be241c693 Mon Sep 17 00:00:00 2001 From: Abdo Date: Wed, 11 Jun 2025 19:02:42 +0300 Subject: [PATCH] Use wantsExtendedPaste() for paste event --- ts/routes/editor/rich-text-input/data-transfer.ts | 12 +++++++++--- .../editor/rich-text-input/rich-text-resolve.ts | 4 +++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/ts/routes/editor/rich-text-input/data-transfer.ts b/ts/routes/editor/rich-text-input/data-transfer.ts index eca796d0b..721fd060f 100644 --- a/ts/routes/editor/rich-text-input/data-transfer.ts +++ b/ts/routes/editor/rich-text-input/data-transfer.ts @@ -38,11 +38,13 @@ function imageDataToUint8Array(data: ImageData): Uint8Array { return typeof data === "string" ? new TextEncoder().encode(data) : data; } -async function wantsExtendedPaste(event: MouseEvent | KeyboardEvent): Promise { +let isShiftPressed = false; + +async function wantsExtendedPaste(event: MouseEvent | KeyboardEvent | null = null): Promise { let stripHtml = (await getConfigBool({ key: ConfigKey_Bool.PASTE_STRIPS_FORMATTING, })).val; - if (shiftPressed(event)) { + if ((event && shiftPressed(event)) || isShiftPressed) { stripHtml = !stripHtml; } return !stripHtml; @@ -322,7 +324,7 @@ async function runPreFilter(html: string, internal = false): Promise { export async function handlePaste(event: ClipboardEvent) { // bridgeCommand("paste"); event.preventDefault(); - let html = await processDataTransferEvent(event, Promise.resolve(true)); + let html = await processDataTransferEvent(event, wantsExtendedPaste()); if (html) { html = await runPreFilter(html); pasteHTML(html, false, false); @@ -343,6 +345,10 @@ export async function handleDragover(event: DragEvent) { event.preventDefault(); } +export async function handleKeydown(event: KeyboardEvent) { + isShiftPressed = shiftPressed(event); +} + export function handleCutOrCopy() { bridgeCommand("cutOrCopy"); } diff --git a/ts/routes/editor/rich-text-input/rich-text-resolve.ts b/ts/routes/editor/rich-text-input/rich-text-resolve.ts index bb9ffd7da..8eac252eb 100644 --- a/ts/routes/editor/rich-text-input/rich-text-resolve.ts +++ b/ts/routes/editor/rich-text-input/rich-text-resolve.ts @@ -3,7 +3,7 @@ import { on } from "@tslib/events"; import { promiseWithResolver } from "@tslib/promise"; -import { handleCutOrCopy, handleDragover, handleDrop, handlePaste } from "./data-transfer"; +import { handleCutOrCopy, handleDragover, handleDrop, handleKeydown, handlePaste } from "./data-transfer"; function bridgeCopyPasteCommands(input: HTMLElement): { destroy(): void } { const removePaste = on(input, "paste", handlePaste); @@ -11,6 +11,7 @@ function bridgeCopyPasteCommands(input: HTMLElement): { destroy(): void } { const removeCut = on(input, "cut", handleCutOrCopy); const removeDragover = on(input, "dragover", handleDragover); const removeDrop = on(input, "drop", handleDrop); + const removeKeydown = on(input, "keydown", handleKeydown); return { destroy() { removePaste(); @@ -18,6 +19,7 @@ function bridgeCopyPasteCommands(input: HTMLElement): { destroy(): void } { removeCut(); removeDragover(); removeDrop(); + removeKeydown(); }, }; }