From d1a1aaa6ae08d8395df1df664d47bfe4fe821869 Mon Sep 17 00:00:00 2001 From: junestars <107550628+junestars@users.noreply.github.com> Date: Sat, 17 Aug 2024 22:00:18 +0800 Subject: [PATCH] feat: add location property to executeLocationControl api #753 Co-authored-by: Hufe921 --- docs/en/guide/command-execute.md | 2 +- docs/guide/command-execute.md | 2 +- src/editor/core/command/CommandAdapt.ts | 17 ++++++++++++++--- src/editor/dataset/enum/Common.ts | 5 +++++ src/editor/index.ts | 5 +++-- src/editor/interface/Control.ts | 5 +++++ 6 files changed, 29 insertions(+), 7 deletions(-) diff --git a/docs/en/guide/command-execute.md b/docs/en/guide/command-execute.md index f1a6d35..4b0aaa6 100644 --- a/docs/en/guide/command-execute.md +++ b/docs/en/guide/command-execute.md @@ -929,7 +929,7 @@ Feature: Positioning and activating control Usage: ```javascript -instance.command.executeLocationControl(controlId: string) +instance.command.executeLocationControl(controlId: string, options?: ILocationControlOption) ``` ## executeInsertControl diff --git a/docs/guide/command-execute.md b/docs/guide/command-execute.md index c62ad20..c28090b 100644 --- a/docs/guide/command-execute.md +++ b/docs/guide/command-execute.md @@ -929,7 +929,7 @@ instance.command.executeSetControlHighlight(payload: ISetControlHighlightOption) 用法: ```javascript -instance.command.executeLocationControl(controlId: string) +instance.command.executeLocationControl(controlId: string, options?: ILocationControlOption) ``` ## executeInsertControl diff --git a/src/editor/core/command/CommandAdapt.ts b/src/editor/core/command/CommandAdapt.ts index 3cd51d8..e848279 100644 --- a/src/editor/core/command/CommandAdapt.ts +++ b/src/editor/core/command/CommandAdapt.ts @@ -10,7 +10,7 @@ import { titleSizeMapping } from '../../dataset/constant/Title' import { defaultWatermarkOption } from '../../dataset/constant/Watermark' -import { ImageDisplay } from '../../dataset/enum/Common' +import { ImageDisplay, LocationPosition } from '../../dataset/enum/Common' import { ControlComponent } from '../../dataset/enum/Control' import { EditorContext, @@ -31,6 +31,7 @@ import { DeepRequired } from '../../interface/Common' import { IGetControlValueOption, IGetControlValueResult, + ILocationControlOption, ISetControlExtensionOption, ISetControlHighlightOption, ISetControlProperties, @@ -2468,7 +2469,8 @@ export class CommandAdapt { return this.draw.getControl().getList() } - public locationControl(controlId: string) { + public locationControl(controlId: string, options?: ILocationControlOption) { + const isLocationAfter = options?.position === LocationPosition.AFTER function location( elementList: IElement[], zone: EditorZone @@ -2502,7 +2504,16 @@ export class CommandAdapt { } } if (element?.controlId !== controlId) continue - const curIndex = i - 1 + let curIndex = i - 1 + if (isLocationAfter) { + curIndex -= 1 + if ( + element.controlComponent !== ControlComponent.PLACEHOLDER && + element.controlComponent !== ControlComponent.POSTFIX + ) { + continue + } + } return { zone, range: { diff --git a/src/editor/dataset/enum/Common.ts b/src/editor/dataset/enum/Common.ts index 0b310cf..4922f55 100644 --- a/src/editor/dataset/enum/Common.ts +++ b/src/editor/dataset/enum/Common.ts @@ -15,3 +15,8 @@ export enum ImageDisplay { FLOAT_TOP = 'float-top', FLOAT_BOTTOM = 'float-bottom' } + +export enum LocationPosition { + BEFORE = 'before', + AFTER = 'after' +} diff --git a/src/editor/index.ts b/src/editor/index.ts index 2cb398c..4cf9a1b 100644 --- a/src/editor/index.ts +++ b/src/editor/index.ts @@ -6,7 +6,7 @@ import { Command } from './core/command/Command' import { CommandAdapt } from './core/command/CommandAdapt' import { Listener } from './core/listener/Listener' import { RowFlex } from './dataset/enum/Row' -import { ImageDisplay } from './dataset/enum/Common' +import { ImageDisplay, LocationPosition } from './dataset/enum/Common' import { ElementType } from './dataset/enum/Element' import { formatElementList } from './utils/element' import { Register } from './core/register/Register' @@ -171,7 +171,8 @@ export { BackgroundRepeat, BackgroundSize, TextDecorationStyle, - LineNumberType + LineNumberType, + LocationPosition } // 对外类型 diff --git a/src/editor/interface/Control.ts b/src/editor/interface/Control.ts index 018d4cd..2d38ec7 100644 --- a/src/editor/interface/Control.ts +++ b/src/editor/interface/Control.ts @@ -1,3 +1,4 @@ +import { LocationPosition } from '../dataset/enum/Common' import { ControlType, ControlIndentation } from '../dataset/enum/Control' import { EditorZone } from '../dataset/enum/Editor' import { MoveDirection } from '../dataset/enum/Observer' @@ -168,3 +169,7 @@ export interface INextControlContext { export interface IInitNextControlOption { direction?: MoveDirection } + +export interface ILocationControlOption { + position: LocationPosition +}