codex-team / editor.js

A block-style editor with clean JSON output
https://editorjs.io
Apache License 2.0
28.39k stars 2.07k forks source link

Tunes with wrappers aren't calling didMutated, when changing tune value #2691

Open VelssLacis opened 5 months ago

VelssLacis commented 5 months ago

Creating a custom tune, if a wrapper element is used, it will not call didMutated, and because of it, onChange is also not called. Issue comes from v2.27.0-rc.5 : https://github.com/codex-team/editor.js/commit/b7b00fd0606330ae41876bd481b2c57fe4e99640#diff-3a2e107229dbebf0e0b7e00160e7faec0cf71e6baf51872078e031789692c8b5R934

On data mutation, it will check if block element contains the mutated wrapper tune element, and will always fail, as it is a wrapper, and not a child of the block.

https://github.com/kaaaaaaaaaaai/editorjs-alignment-blocktune/issues/12 https://github.com/kaaaaaaaaaaai/editorjs-alignment-blocktune/pull/13

Steps to reproduce:

  1. Create a tune with a wrapper element / install editorjs-alignment-blocktune mentioned above
  2. Try setting a tune for the block
  3. onChange is not called

Expected behavior: if this is intended, should all tunes use dispatchChange() on tune change starting from v2.27.0-rc.5? if not, then, I think the onChange should be called regardless if mutated element is part of a block. (E.g. What happens if there is some button outside of EditorJS container, that would, change a tune for all blocks (backgrounds, alignments, etc.)?)

Screenshots: image The ce-tune-alignment--center is the tune wrapper element, and ce-paragraph is the block element, didMutated will not be called whenever wrapper is mutated, as it is not part of block element.

Device, Browser, OS: any

Editor.js version: v2.27.0-rc.5 and above

Plugins you use with their versions: https://github.com/kaaaaaaaaaaai/editorjs-alignment-blocktune 1.0.3

chf-gh commented 3 months ago

手动触发: this.block.dispatchChange();