diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 48b0c91..95bfe60 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -61,6 +61,10 @@ export default defineConfig({ { text: '自定义右键菜单', link: '/guide/contextmenu-custom' } ] }, + { + text: '重写方法', + items: [{ text: '重写方法', link: '/guide/override' }] + }, { text: 'API', items: [{ text: '全局API', link: '/guide/api' }] @@ -140,6 +144,10 @@ export default defineConfig({ { text: 'custom', link: '/en/guide/contextmenu-custom' } ] }, + { + text: 'Override', + items: [{ text: 'override', link: '/en/guide/override' }] + }, { text: 'Api', items: [{ text: 'api', link: '/en/guide/api' }] diff --git a/docs/en/guide/override.md b/docs/en/guide/override.md new file mode 100644 index 0000000..07c8948 --- /dev/null +++ b/docs/en/guide/override.md @@ -0,0 +1,20 @@ +# Override + +## How to Use + +```javascript +import Editor from "@hufe921/canvas-editor" + +const instance = new Editor(container, data, options) +instance.override.overrideFunction = ()=>{} +``` + +## paste + +Feature: Override internal paste function + +Usage: + +```javascript +instance.override.paste = (evt: ClipboardEvent) => void +``` diff --git a/docs/guide/override.md b/docs/guide/override.md new file mode 100644 index 0000000..74bc20f --- /dev/null +++ b/docs/guide/override.md @@ -0,0 +1,20 @@ +# 重写方法 + +## 使用方式 + +```javascript +import Editor from "@hufe921/canvas-editor" + +const instance = new Editor(container, data, options) +instance.override.overrideFunction = ()=>{} +``` + +## paste + +功能:重写粘贴方法 + +用法: + +```javascript +instance.override.paste = (evt: ClipboardEvent) => void +``` diff --git a/src/editor/core/cursor/CursorAgent.ts b/src/editor/core/cursor/CursorAgent.ts index f7a5eff..898e561 100644 --- a/src/editor/core/cursor/CursorAgent.ts +++ b/src/editor/core/cursor/CursorAgent.ts @@ -57,6 +57,12 @@ export class CursorAgent { if (isReadonly) return const clipboardData = evt.clipboardData if (!clipboardData) return + // 自定义粘贴事件 + const { paste } = this.draw.getOverride() + if (paste) { + paste(evt) + return + } const rangeManager = this.draw.getRange() const { startIndex } = rangeManager.getRange() const elementList = this.draw.getElementList() diff --git a/src/editor/core/draw/Draw.ts b/src/editor/core/draw/Draw.ts index 8960086..9ddd693 100644 --- a/src/editor/core/draw/Draw.ts +++ b/src/editor/core/draw/Draw.ts @@ -83,6 +83,7 @@ import { WORD_LIKE_REG } from '../../dataset/constant/Regular' import { EventBus } from '../event/eventbus/EventBus' import { EventBusMap } from '../../interface/EventBus' import { Group } from './interactive/Group' +import { Override } from '../override/Override' export class Draw { private container: HTMLDivElement @@ -98,6 +99,7 @@ export class Draw { private elementList: IElement[] private listener: Listener private eventBus: EventBus + private override: Override private i18n: I18n private canvasEvent: CanvasEvent @@ -152,7 +154,8 @@ export class Draw { options: DeepRequired, data: IEditorData, listener: Listener, - eventBus: EventBus + eventBus: EventBus, + override: Override ) { this.container = this._wrapContainer(rootContainer) this.pageList = [] @@ -164,6 +167,7 @@ export class Draw { this.elementList = data.main this.listener = listener this.eventBus = eventBus + this.override = override this._formatContainer() this.pageContainer = this._createPageContainer() @@ -622,6 +626,10 @@ export class Draw { return this.eventBus } + public getOverride(): Override { + return this.override + } + public getCursor(): Cursor { return this.cursor } diff --git a/src/editor/core/override/Override.ts b/src/editor/core/override/Override.ts new file mode 100644 index 0000000..ab179ae --- /dev/null +++ b/src/editor/core/override/Override.ts @@ -0,0 +1,3 @@ +export class Override { + public paste: ((evt: ClipboardEvent) => void) | undefined +} diff --git a/src/editor/index.ts b/src/editor/index.ts index f6913e1..6f4668c 100644 --- a/src/editor/index.ts +++ b/src/editor/index.ts @@ -62,11 +62,13 @@ import { EventBusMap } from './interface/EventBus' import { IGroup } from './interface/Group' import { defaultGroupOption } from './dataset/constant/Group' import { IRangeStyle } from './interface/Listener' +import { Override } from './core/override/Override' export default class Editor { public command: Command public listener: Listener public eventBus: EventBus + public override: Override public register: Register public destroy: () => void public use: UsePlugin @@ -193,6 +195,8 @@ export default class Editor { this.listener = new Listener() // 事件 this.eventBus = new EventBus() + // 重写 + this.override = new Override() // 启动 const draw = new Draw( container, @@ -203,7 +207,8 @@ export default class Editor { footer: footerElementList }, this.listener, - this.eventBus + this.eventBus, + this.override ) // 命令 this.command = new Command(new CommandAdapt(draw))