From f63a57a147314137a8f329411a1d61d5d4a44c51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E4=BA=91=E9=A3=9E?= Date: Mon, 6 Jun 2022 17:32:17 +0800 Subject: [PATCH] feat:add word count web worker --- index.html | 1 + src/editor/core/command/Command.ts | 6 +++++ src/editor/core/command/CommandAdapt.ts | 7 ++++++ src/editor/core/draw/Draw.ts | 8 +++++++ src/editor/core/worker/WorkerManager.ts | 28 +++++++++++++++++++++++ src/editor/core/worker/works/wordCount.ts | 7 ++++++ src/main.ts | 5 ++++ 7 files changed, 62 insertions(+) create mode 100644 src/editor/core/worker/WorkerManager.ts create mode 100644 src/editor/core/worker/works/wordCount.ts diff --git a/index.html b/index.html index 30b2f62..38a7e7d 100644 --- a/index.html +++ b/index.html @@ -208,6 +208,7 @@ 可见页码:1 页面:1/1 + 字数:0
编辑模式
diff --git a/src/editor/core/command/Command.ts b/src/editor/core/command/Command.ts index f5894b9..84df0fc 100644 --- a/src/editor/core/command/Command.ts +++ b/src/editor/core/command/Command.ts @@ -57,6 +57,7 @@ export class Command { private static print: Function private static getImage: Function private static getValue: Function + private static getWordCount: Function private static pageMode: Function private static pageScaleRecovery: Function private static pageScaleMinus: Function @@ -112,6 +113,7 @@ export class Command { Command.print = adapt.print.bind(adapt) Command.getImage = adapt.getImage.bind(adapt) Command.getValue = adapt.getValue.bind(adapt) + Command.getWordCount = adapt.getWordCount.bind(adapt) Command.pageMode = adapt.pageMode.bind(adapt) Command.pageScaleRecovery = adapt.pageScaleRecovery.bind(adapt) Command.pageScaleMinus = adapt.pageScaleMinus.bind(adapt) @@ -315,6 +317,10 @@ export class Command { return Command.getValue() } + public getWordCount(): Promise { + return Command.getWordCount() + } + // 页面模式、页面缩放 public executePageMode(payload: PageMode) { return Command.pageMode(payload) diff --git a/src/editor/core/command/CommandAdapt.ts b/src/editor/core/command/CommandAdapt.ts index bdf320f..2ed2279 100644 --- a/src/editor/core/command/CommandAdapt.ts +++ b/src/editor/core/command/CommandAdapt.ts @@ -23,6 +23,7 @@ import { CanvasEvent } from '../event/CanvasEvent' import { HistoryManager } from '../history/HistoryManager' import { Position } from '../position/Position' import { RangeManager } from '../range/RangeManager' +import { WorkerManager } from '../worker/WorkerManager' export class CommandAdapt { @@ -37,6 +38,7 @@ export class CommandAdapt { private tableTool: TableTool private options: Required private control: Control + private workerManager: WorkerManager constructor(draw: Draw) { this.draw = draw @@ -47,6 +49,7 @@ export class CommandAdapt { this.tableTool = draw.getTableTool() this.options = draw.getOptions() this.control = draw.getControl() + this.workerManager = draw.getWorkerManager() } public mode(payload: EditorMode) { @@ -1243,6 +1246,10 @@ export class CommandAdapt { return this.draw.getValue() } + public getWordCount(): Promise { + return this.workerManager.getWordCount() + } + public pageMode(payload: PageMode) { this.draw.setPageMode(payload) } diff --git a/src/editor/core/draw/Draw.ts b/src/editor/core/draw/Draw.ts index fc03a8f..1b63299 100644 --- a/src/editor/core/draw/Draw.ts +++ b/src/editor/core/draw/Draw.ts @@ -41,6 +41,7 @@ import { CheckboxParticle } from './particle/CheckboxParticle' import { DeepRequired } from '../../interface/Common' import { ControlComponent } from '../../dataset/enum/Control' import { formatElementList } from '../../utils/element' +import { WorkerManager } from '../worker/WorkerManager' export class Draw { @@ -79,6 +80,7 @@ export class Draw { private subscriptParticle: SubscriptParticle private checkboxParticle: CheckboxParticle private control: Control + private workerManager: WorkerManager private rowList: IRow[] private painterStyle: IElementStyle | null @@ -138,6 +140,8 @@ export class Draw { const globalEvent = new GlobalEvent(this, this.canvasEvent) globalEvent.register() + this.workerManager = new WorkerManager(this) + this.rowList = [] this.painterStyle = null this.painterOptions = null @@ -363,6 +367,10 @@ export class Draw { return this.control } + public getWorkerManager(): WorkerManager { + return this.workerManager + } + public getRowCount(): number { return this.rowList.length } diff --git a/src/editor/core/worker/WorkerManager.ts b/src/editor/core/worker/WorkerManager.ts new file mode 100644 index 0000000..fc3db2d --- /dev/null +++ b/src/editor/core/worker/WorkerManager.ts @@ -0,0 +1,28 @@ +import { Draw } from '../draw/Draw' + +export class WorkerManager { + + private draw: Draw + private wordCountWorker: Worker + + constructor(draw: Draw) { + this.draw = draw + this.wordCountWorker = new Worker(new URL('./works/wordCount.ts', import.meta.url)) + } + + public getWordCount(): Promise { + return new Promise((resolve, reject) => { + this.wordCountWorker.onmessage = (evt) => { + resolve(evt.data) + } + + this.wordCountWorker.onerror = (evt) => { + reject(evt) + } + + const elementList = this.draw.getOriginalElementList() + this.wordCountWorker.postMessage(elementList) + }) + } + +} \ No newline at end of file diff --git a/src/editor/core/worker/works/wordCount.ts b/src/editor/core/worker/works/wordCount.ts new file mode 100644 index 0000000..45513c7 --- /dev/null +++ b/src/editor/core/worker/works/wordCount.ts @@ -0,0 +1,7 @@ +import { IElement } from '../../../interface/Element' + +onmessage = (evt) => { + const elementList = evt.data + // TODO: + postMessage(elementList.length) +} diff --git a/src/main.ts b/src/main.ts index 6b298aa..64818c6 100644 --- a/src/main.ts +++ b/src/main.ts @@ -754,6 +754,11 @@ window.onload = function () { activeMode.classList.add('active') } + instance.listener.contentChange = async function () { + const wordCount = await instance.command.getWordCount() + document.querySelector('.word-count')!.innerText = `${wordCount || 0}` + } + instance.listener.saved = function (payload) { console.log('elementList: ', payload) }