From 2659d6bde7b2ce7f221f93e5fcb4d4bef0f83d54 Mon Sep 17 00:00:00 2001 From: Hufe921 Date: Tue, 28 May 2024 19:32:07 +0800 Subject: [PATCH] feat: add executeInsertTitle api #604 --- docs/en/guide/command-execute.md | 10 +++++++ docs/guide/command-execute.md | 10 +++++++ src/editor/core/command/Command.ts | 2 ++ src/editor/core/command/CommandAdapt.ts | 40 +++++++++++++++++++++++-- 4 files changed, 59 insertions(+), 3 deletions(-) diff --git a/docs/en/guide/command-execute.md b/docs/en/guide/command-execute.md index 8e0c4cf..ddbae32 100644 --- a/docs/en/guide/command-execute.md +++ b/docs/en/guide/command-execute.md @@ -921,3 +921,13 @@ Usage: ```javascript instance.command.executeUpdateOptions(payload: IUpdateOption) ``` + +## executeInsertTitle + +Feature: Insert title + +Usage: + +```javascript +instance.command.executeInsertTitle(payload: IElement) +``` diff --git a/docs/guide/command-execute.md b/docs/guide/command-execute.md index 6bd0093..896ea56 100644 --- a/docs/guide/command-execute.md +++ b/docs/guide/command-execute.md @@ -921,3 +921,13 @@ instance.command.executeSetControlHighlight(payload: ISetControlHighlightOption) ```javascript instance.command.executeUpdateOptions(payload: IUpdateOption) ``` + +## executeInsertTitle + +功能:插入标题 + +用法: + +```javascript +instance.command.executeInsertTitle(payload: IElement) +``` diff --git a/src/editor/core/command/Command.ts b/src/editor/core/command/Command.ts index af62fe1..6d704f5 100644 --- a/src/editor/core/command/Command.ts +++ b/src/editor/core/command/Command.ts @@ -91,6 +91,7 @@ export class Command { public executeSetControlProperties: CommandAdapt['setControlProperties'] public executeSetControlHighlight: CommandAdapt['setControlHighlight'] public executeUpdateOptions: CommandAdapt['updateOptions'] + public executeInsertTitle: CommandAdapt['insertTitle'] public getCatalog: CommandAdapt['getCatalog'] public getImage: CommandAdapt['getImage'] public getOptions: CommandAdapt['getOptions'] @@ -207,6 +208,7 @@ export class Command { this.executeLocationGroup = adapt.locationGroup.bind(adapt) this.executeSetZone = adapt.setZone.bind(adapt) this.executeUpdateOptions = adapt.updateOptions.bind(adapt) + this.executeInsertTitle = adapt.insertTitle.bind(adapt) // 获取 this.getImage = adapt.getImage.bind(adapt) this.getOptions = adapt.getOptions.bind(adapt) diff --git a/src/editor/core/command/CommandAdapt.ts b/src/editor/core/command/CommandAdapt.ts index 1aa02dd..d3efb69 100644 --- a/src/editor/core/command/CommandAdapt.ts +++ b/src/editor/core/command/CommandAdapt.ts @@ -1,5 +1,10 @@ import { NBSP, WRAP, ZERO } from '../../dataset/constant/Common' -import { EDITOR_ELEMENT_STYLE_ATTR } from '../../dataset/constant/Element' +import { + EDITOR_ELEMENT_STYLE_ATTR, + EDITOR_ROW_ATTR, + LIST_CONTEXT_ATTR, + TABLE_CONTEXT_ATTR +} from '../../dataset/constant/Element' import { titleOrderNumberMapping, titleSizeMapping @@ -61,7 +66,13 @@ import { IGetTitleValueResult } from '../../interface/Title' import { IWatermark } from '../../interface/Watermark' -import { deepClone, downloadFile, getUUID, isObjectEqual } from '../../utils' +import { + cloneProperty, + deepClone, + downloadFile, + getUUID, + isObjectEqual +} from '../../utils' import { createDomFromElementList, formatElementContext, @@ -70,7 +81,8 @@ import { pickElementAttr, getElementListByHTML, getTextFromElementList, - zipElementList + zipElementList, + getAnchorElement } from '../../utils/element' import { mergeOption } from '../../utils/option' import { printImageBase64 } from '../../utils/print' @@ -716,6 +728,7 @@ export class CommandAdapt { } else { if (el.titleId) { delete el.titleId + delete el.title delete el.level delete el.size delete el.bold @@ -2496,4 +2509,25 @@ export class CommandAdapt { } return result } + + public insertTitle(payload: IElement) { + const isReadonly = this.draw.isReadonly() + if (isReadonly) return + const cloneElement = deepClone(payload) + // 格式化上下文信息 + const { startIndex } = this.range.getRange() + const elementList = this.draw.getElementList() + const copyElement = getAnchorElement(elementList, startIndex) + if (!copyElement) return + const cloneAttr = [ + ...TABLE_CONTEXT_ATTR, + ...EDITOR_ROW_ATTR, + ...LIST_CONTEXT_ATTR + ] + cloneElement.valueList?.forEach(valueItem => { + cloneProperty(cloneAttr, copyElement, valueItem) + }) + // 插入标题 + this.draw.insertElementList([cloneElement]) + } }