From 34d59bbb589b9bb38c74f00b66b734b6342dd440 Mon Sep 17 00:00:00 2001 From: Hufe921 Date: Sat, 27 Apr 2024 22:41:53 +0800 Subject: [PATCH] fix: paste elements boundary error --- src/editor/core/event/handlers/paste.ts | 20 +++++++++++++------- src/editor/utils/clipboard.ts | 12 ++++++++++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/editor/core/event/handlers/paste.ts b/src/editor/core/event/handlers/paste.ts index 24331ed..ed94602 100644 --- a/src/editor/core/event/handlers/paste.ts +++ b/src/editor/core/event/handlers/paste.ts @@ -3,7 +3,11 @@ import { VIRTUAL_ELEMENT_TYPE } from '../../../dataset/constant/Element' import { ElementType } from '../../../dataset/enum/Element' import { IElement } from '../../../interface/Element' import { IPasteOption } from '../../../interface/Event' -import { getClipboardData, removeClipboardData } from '../../../utils/clipboard' +import { + getClipboardData, + getIsClipboardContainFile, + removeClipboardData +} from '../../../utils/clipboard' import { formatElementContext, getElementListByHTML @@ -104,12 +108,14 @@ export function pasteByEvent(host: CanvasEvent, evt: ClipboardEvent) { paste(evt) return } - // 优先读取编辑器内部粘贴板数据 - const clipboardText = clipboardData.getData('text') - const editorClipboardData = getClipboardData() - if (clipboardText === editorClipboardData?.text) { - pasteElement(host, editorClipboardData.elementList) - return + // 优先读取编辑器内部粘贴板数据(粘贴板不包含文件时) + if (!getIsClipboardContainFile(clipboardData)) { + const clipboardText = clipboardData.getData('text') + const editorClipboardData = getClipboardData() + if (clipboardText === editorClipboardData?.text) { + pasteElement(host, editorClipboardData.elementList) + return + } } removeClipboardData() // 从粘贴板提取数据 diff --git a/src/editor/utils/clipboard.ts b/src/editor/utils/clipboard.ts index 4fc5936..cad8259 100644 --- a/src/editor/utils/clipboard.ts +++ b/src/editor/utils/clipboard.ts @@ -79,3 +79,15 @@ export function writeElementList( if (!text && !html && !elementList.length) return writeClipboardItem(text, html, zipElementList(elementList)) } + +export function getIsClipboardContainFile(clipboardData: DataTransfer) { + let isFile = false + for (let i = 0; i < clipboardData.items.length; i++) { + const item = clipboardData.items[i] + if (item.kind === 'file') { + isFile = true + break + } + } + return isFile +}