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)
}