import EventEmitter from 'eventemitter3'; import type Delta from 'quill-delta-enhanced'; import type { ICanvasContext, EnumListType } from '@fast-editor/core'; import type { IEditorConfig } from './IEditorConfig'; import './styles/editor.scss'; export declare enum EditorEvent { EDITOR_CHANGE_SIZE = "EDITOR_CHANGE_SIZE", DOCUMENT_FIRST_RENDERED = "DOCUMENT_FIRST_RENDERED", DOCUMENT_FIRST_LAYOUT = "DOCUMENT_FIRST_LAYOUT" } /** * 编辑器类 */ export declare class Editor extends EventEmitter { config: IEditorConfig; scrollTop: number; cvsOffsetX: number; container: HTMLDivElement; toolbarContainer: HTMLDivElement; docContentContainer: HTMLDivElement; cvsDoc: HTMLCanvasElement; cvsCover: HTMLCanvasElement; domElementContainerWrapper: HTMLDivElement; domElementContainer: HTMLDivElement; docContentHeight: number; /** * 编辑器画布 context 对象 */ ctx: ICanvasContext; private heightPlaceholderContainer; private heightPlaceholder; private divCursor; private textInput; private composing; /** * 编辑器画布 DOM 元素 */ private doc; private needRender; private isPointerHoverDoc; private currentPointerScreenX; private currentPointerScreenY; private selectionService; private searchService; private contentService; private historyStackService; private tableService; private tableController; private paragraphService; private quoteBlockService; private codeBlockService; private listService; private contentController; private toolbarController; private setEditorHeight; private changeCursorStatus; /** * 编辑器构造函数 * @param container 编辑器容器 DOM 元素 * @param config 编辑器配置数据实例 */ constructor(container: HTMLDivElement, config: IEditorConfig); /** * 通过 delta 初始化文档内容 * @param delta change 数组 */ readFromChanges(delta: Delta): void; closeDocument(): void; /** * 在指定位置用输入法开始插入内容 * @param selection 要开始输入法输入的选区范围 * @param attr 输入的格式 */ startComposition(): void; /** * 更新输入法输入的内容 * @param content 输入法中最新的输入内容 * @param attr 输入的格式 */ updateComposition(event: Event): void; /** * 结束输入法输入 * @param length 输入法输入内容的长度 */ endComposition(event: { data: string; }): void; /** * 清除文档内容 */ clearData(): void; /** * 滚动可视区域到指定位置 */ scrollTo(posY: number): void; /** * 搜索指定字符串 */ search(keywords: string, caseSensitive: boolean): void; /** * 清除搜索 */ clearSearch(): void; /** * 选中下一个搜索结果 */ nextSearchResult(): void; /** * 选中上一个搜索结果 */ prevSearchResult(): void; /** * 替换 */ replace(replaceWords: string, all?: boolean): void; /** * undo */ undo(): void; /** * redo */ redo(): void; /** * 开始绘制任务 * @param {boolean} fast 是否为快速绘制 */ startDrawing(fast?: boolean): void; setFormat(data: { [key: string]: any; }): void; clearFormat(): void; setIndent(direction: boolean): void; setQuoteBlock(): void; setCodeBlock(): void; setLink(url: string, text: string): void; onSetList(listType: EnumListType): void; onSetParagraph(): void; insertImage(url: string, originalWidth: number, originalHeight: number): void; insertTable(rowCount: number, colCount: number): void; /** * 把指定的绝对坐标滚动到可视区域 */ private scrollToViewPort; private bindBasicEvents; /** * 绑定阅读文档所需的相关事件 */ private bindReadEvents; /** * 绑定编辑文档所需的相关事件 */ private bindEditEvents; private bindToolbarEvents; /** * init some basic dom structure */ private initDOM; /** * 绘制文档内容 */ private render; private onEditorScroll; private onMouseDown; private onMouseMove; private onMouseUp; private onClick; private calOffsetDocPos; private onSelectionChange; private onDocumentContentChange; private onDocumentNeedDraw; private onSearchNeedDraw; private onSearchResultChange; private updateCursorStatus; private openLink; }