From 3c176318e079d8f793367df552c1a3c6a6294840 Mon Sep 17 00:00:00 2001 From: Hufe921 Date: Wed, 28 Aug 2024 20:58:41 +0800 Subject: [PATCH] feat: add executeFocus api #796 --- 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 | 21 +++++++++++++++++++++ src/editor/interface/Editor.ts | 6 +++++- 5 files changed, 48 insertions(+), 1 deletion(-) diff --git a/docs/en/guide/command-execute.md b/docs/en/guide/command-execute.md index 241022d..0fdf7e4 100644 --- a/docs/en/guide/command-execute.md +++ b/docs/en/guide/command-execute.md @@ -961,3 +961,13 @@ Usage: ```javascript instance.command.executeInsertTitle(payload: IElement) ``` + +## executeFocus + +Feature: focus + +Usage: + +```javascript +instance.command.executeFocus(payload?: IFocusOption) +``` diff --git a/docs/guide/command-execute.md b/docs/guide/command-execute.md index dd51078..b7a82ff 100644 --- a/docs/guide/command-execute.md +++ b/docs/guide/command-execute.md @@ -961,3 +961,13 @@ instance.command.executeUpdateOptions(payload: IUpdateOption) ```javascript instance.command.executeInsertTitle(payload: IElement) ``` + +## executeFocus + +功能:光标聚焦 + +用法: + +```javascript +instance.command.executeFocus(payload?: IFocusOption) +``` diff --git a/src/editor/core/command/Command.ts b/src/editor/core/command/Command.ts index aadab4d..38076e7 100644 --- a/src/editor/core/command/Command.ts +++ b/src/editor/core/command/Command.ts @@ -95,6 +95,7 @@ export class Command { public executeInsertControl: CommandAdapt['insertControl'] public executeUpdateOptions: CommandAdapt['updateOptions'] public executeInsertTitle: CommandAdapt['insertTitle'] + public executeFocus: CommandAdapt['focus'] public getCatalog: CommandAdapt['getCatalog'] public getImage: CommandAdapt['getImage'] public getOptions: CommandAdapt['getOptions'] @@ -214,6 +215,7 @@ export class Command { this.executeSetZone = adapt.setZone.bind(adapt) this.executeUpdateOptions = adapt.updateOptions.bind(adapt) this.executeInsertTitle = adapt.insertTitle.bind(adapt) + this.executeFocus = adapt.focus.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 8ab6588..68b7b31 100644 --- a/src/editor/core/command/CommandAdapt.ts +++ b/src/editor/core/command/CommandAdapt.ts @@ -22,6 +22,7 @@ import { import { ElementType } from '../../dataset/enum/Element' import { ElementStyleKey } from '../../dataset/enum/ElementStyle' import { ListStyle, ListType } from '../../dataset/enum/List' +import { MoveDirection } from '../../dataset/enum/Observer' import { RowFlex } from '../../dataset/enum/Row' import { TableBorder, TdBorder, TdSlash } from '../../dataset/enum/table/Table' import { TitleLevel } from '../../dataset/enum/Title' @@ -52,6 +53,7 @@ import { IEditorOption, IEditorResult, IEditorText, + IFocusOption, ISetValueOption, IUpdateOption } from '../../interface/Editor' @@ -2726,4 +2728,23 @@ export class CommandAdapt { // 插入标题 this.draw.insertElementList([cloneElement]) } + + public focus(payload?: IFocusOption) { + const { position = LocationPosition.AFTER } = payload || {} + const curIndex = + position === LocationPosition.BEFORE + ? 0 + : this.draw.getOriginalMainElementList().length - 1 + this.range.setRange(curIndex, curIndex) + this.draw.render({ + curIndex, + isCompute: false, + isSubmitHistory: false + }) + const positionList = this.draw.getPosition().getPositionList() + this.draw.getCursor().moveCursorToVisible({ + cursorPosition: positionList[curIndex], + direction: MoveDirection.DOWN + }) + } } diff --git a/src/editor/interface/Editor.ts b/src/editor/interface/Editor.ts index f926eca..7d26670 100644 --- a/src/editor/interface/Editor.ts +++ b/src/editor/interface/Editor.ts @@ -1,4 +1,4 @@ -import { IElement } from '..' +import { IElement, LocationPosition } from '..' import { EditorMode, PageMode, @@ -125,3 +125,7 @@ export type IUpdateOption = Omit< export interface ISetValueOption { isSetCursor?: boolean } + +export interface IFocusOption { + position?: LocationPosition +}