From 0d487599ee9a0ad224fd3cd1863a08548096b293 Mon Sep 17 00:00:00 2001 From: Zihua Li Date: Fri, 10 May 2024 12:09:09 +0800 Subject: [PATCH] Avoid emitting change events for void operations --- packages/quill/src/core/editor.ts | 2 + packages/quill/test/fuzz/editor.spec.ts | 2 +- packages/quill/test/unit/core/editor.spec.ts | 7 +++ packages/quill/test/unit/core/quill.spec.ts | 52 +++++++++++++++----- 4 files changed, 49 insertions(+), 14 deletions(-) diff --git a/packages/quill/src/core/editor.ts b/packages/quill/src/core/editor.ts index a19485840d..c2a0c3662a 100644 --- a/packages/quill/src/core/editor.ts +++ b/packages/quill/src/core/editor.ts @@ -310,6 +310,8 @@ class Editor { this.delta = this.getDelta(); if (!change || !isEqual(oldDelta.compose(change), this.delta)) { change = oldDelta.diff(this.delta, selectionInfo); + } else if (change) { + change = new Delta(change.ops.slice()).chop(); } } return change; diff --git a/packages/quill/test/fuzz/editor.spec.ts b/packages/quill/test/fuzz/editor.spec.ts index 78f7751dd7..e6389d7f0d 100644 --- a/packages/quill/test/fuzz/editor.spec.ts +++ b/packages/quill/test/fuzz/editor.spec.ts @@ -249,7 +249,7 @@ describe('editor', () => { const doc = quill.getContents(); const change = generateChange(doc, randomInt(4) + 1); const diff = quill.updateContents(change); - expect(change).toEqual(diff); + expect(change.chop()).toEqual(diff); } }); }); diff --git a/packages/quill/test/unit/core/editor.spec.ts b/packages/quill/test/unit/core/editor.spec.ts index 0c595332bb..a41bfe3d82 100644 --- a/packages/quill/test/unit/core/editor.spec.ts +++ b/packages/quill/test/unit/core/editor.spec.ts @@ -806,6 +806,13 @@ describe('Editor', () => { }); }); + describe('update()', () => { + test('chop off void ops', () => { + const editor = createEditor('

a

'); + expect(editor.update(new Delta().retain(1))).toEqual(new Delta()); + }); + }); + describe('insertContents', () => { const video = ''; diff --git a/packages/quill/test/unit/core/quill.spec.ts b/packages/quill/test/unit/core/quill.spec.ts index c128c0dc12..c33ac136a4 100644 --- a/packages/quill/test/unit/core/quill.spec.ts +++ b/packages/quill/test/unit/core/quill.spec.ts @@ -114,19 +114,45 @@ describe('Quill', () => { return { quill, oldDelta }; }; - test('deleteText()', () => { - const { quill, oldDelta } = setup(); - quill.deleteText(3, 2); - const change = new Delta().retain(3).delete(2); - expect(quill.root.innerHTML).toMatchInlineSnapshot( - '"

012567

"', - ); - expect(quill.emitter.emit).toHaveBeenCalledWith( - Emitter.events.TEXT_CHANGE, - change, - oldDelta, - Emitter.sources.API, - ); + describe('deleteText()', () => { + test('delete text', () => { + const { quill, oldDelta } = setup(); + quill.deleteText(3, 2); + const change = new Delta().retain(3).delete(2); + expect(quill.root.innerHTML).toMatchInlineSnapshot( + '"

012567

"', + ); + expect(quill.emitter.emit).toHaveBeenCalledWith( + Emitter.events.TEXT_CHANGE, + change, + oldDelta, + Emitter.sources.API, + ); + }); + + test('delete 0 length', () => { + const { quill } = setup(); + const delta = quill.deleteText(3, 0); + expect(delta).toEqual(new Delta()); + expect(quill.emitter.emit).not.toHaveBeenCalledWith( + Emitter.events.TEXT_CHANGE, + expect.anything(), + expect.anything(), + expect.anything(), + ); + }); + + test('delete after trailing', () => { + const { quill } = setup(); + const delta = quill.deleteText(100000, 10); + expect(delta).toEqual(new Delta()); + expect(quill.emitter.emit).not.toHaveBeenCalledWith( + Emitter.events.TEXT_CHANGE, + expect.anything(), + expect.anything(), + expect.anything(), + ); + }); }); test('format()', () => {