diff --git a/src/editor/core/cursor/CursorAgent.ts b/src/editor/core/cursor/CursorAgent.ts index 7944ef5..c199959 100644 --- a/src/editor/core/cursor/CursorAgent.ts +++ b/src/editor/core/cursor/CursorAgent.ts @@ -84,6 +84,7 @@ export class CursorAgent { let start = 0 while (start < pasteElementList.length) { const pasteElement = pasteElementList[start] + if (anchorElement.titleId && /^\n/.test(pasteElement.value)) break if (VIRTUAL_ELEMENT_TYPE.includes(pasteElement.type!)) { pasteElementList.splice(start, 1) if (pasteElement.valueList) { @@ -99,7 +100,9 @@ export class CursorAgent { start++ } } - formatElementContext(elementList, pasteElementList, startIndex) + formatElementContext(elementList, pasteElementList, startIndex, { + isBreakWhenWrap: true + }) } this.draw.insertElementList(pasteElementList) }) diff --git a/src/editor/utils/element.ts b/src/editor/utils/element.ts index aa6e6f2..751d1ec 100644 --- a/src/editor/utils/element.ts +++ b/src/editor/utils/element.ts @@ -563,11 +563,17 @@ export function getAnchorElement(elementList: IElement[], anchorIndex: number): : anchorElement } -export function formatElementContext(sourceElementList: IElement[], formatElementList: IElement[], anchorIndex: number) { +export interface IFormatElementContextOption { + isBreakWhenWrap: boolean; +} + +export function formatElementContext(sourceElementList: IElement[], formatElementList: IElement[], anchorIndex: number, options?: IFormatElementContextOption) { const copyElement = getAnchorElement(sourceElementList, anchorIndex) if (!copyElement) return + const { isBreakWhenWrap = false } = options || {} for (let e = 0; e < formatElementList.length; e++) { const targetElement = formatElementList[e] + if (isBreakWhenWrap && !copyElement.listId && /^\n/.test(targetElement.value)) break // 定位元素非列表,无需处理粘贴列表的上下文 if (!copyElement.listId && targetElement.type === ElementType.LIST) continue if (targetElement.valueList && targetElement.valueList.length) {