diff --git a/README.md b/README.md index 7cbbba7a0..7afc9dff5 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ export default { | `setContent` | `content, emitUpdate, parseOptions` | Replace the current content. You can pass an HTML string or a JSON document. `emitUpdate` defaults to `false`. `parseOptions` defaults to those provided in constructor. | | `clearContent` | `emitUpdate` | Clears the current content. `emitUpdate` defaults to `false`. | | `setOptions` | `options` | Overwrites the current editor properties. | -| `registerPlugin` | `plugin` | Register a Prosemirror plugin. | +| `registerPlugin` | `plugin`, `handlePlugins` | Register a Prosemirror plugin. You can pass a function `handlePlugins` with parameters `(plugin, oldPlugins)` to define an order in which `newPlugins` will be called. `handlePlugins` defaults to pushing `plugin` to front of `oldPlugins`. | | `getJSON` | – | Get the current content as JSON. | | `getHTML` | – | Get the current content as HTML. | | `focus` | – | Focus the editor. | diff --git a/packages/tiptap/src/Editor.js b/packages/tiptap/src/Editor.js index d423bc188..97e630d35 100644 --- a/packages/tiptap/src/Editor.js +++ b/packages/tiptap/src/Editor.js @@ -498,14 +498,10 @@ export default class Editor extends Emitter { }), {}) } - registerPlugin(plugin = null) { - if (!plugin) { - return - } - - const newState = this.state.reconfigure({ - plugins: this.state.plugins.concat([plugin]), - }) + registerPlugin(plugin = null, handlePlugins) { + const plugins = typeof handlePlugins === 'function' + ? handlePlugins(plugin, this.state.plugins) : [...plugin, this.state.plugins] + const newState = this.state.reconfigure({ plugins }) this.view.updateState(newState) }