diff --git a/packages/tiptap/src/utils/Editor.js b/packages/tiptap/src/utils/Editor.js index bb7d71fd..cc35a2bc 100644 --- a/packages/tiptap/src/utils/Editor.js +++ b/packages/tiptap/src/utils/Editor.js @@ -83,6 +83,7 @@ export default class Editor { return this.extensions.commands({ schema: this.schema, view: this.view, + editable: this.options.editable, }) } diff --git a/packages/tiptap/src/utils/ExtensionManager.js b/packages/tiptap/src/utils/ExtensionManager.js index 13dfb04a..d17f1acd 100644 --- a/packages/tiptap/src/utils/ExtensionManager.js +++ b/packages/tiptap/src/utils/ExtensionManager.js @@ -86,7 +86,7 @@ export default class ExtensionManager { ]), []) } - commands({ schema, view }) { + commands({ schema, view, editable }) { return this.extensions .filter(extension => extension.commands) .reduce((allCommands, { name, type, commands: provider }) => { @@ -104,16 +104,36 @@ export default class ExtensionManager { if (Array.isArray(value)) { commands[name] = attrs => value - .forEach(callback => callback(attrs)(view.state, view.dispatch, view)) + .forEach(callback => { + if (!editable) { + return false + } + return callback(attrs)(view.state, view.dispatch, view) + }) } else if (typeof value === 'function') { - commands[name] = attrs => value(attrs)(view.state, view.dispatch, view) + commands[name] = attrs => { + if (!editable) { + return false + } + return value(attrs)(view.state, view.dispatch, view) + } } else if (typeof value === 'object') { Object.entries(value).forEach(([commandName, commandValue]) => { if (Array.isArray(commandValue)) { commands[commandName] = attrs => commandValue - .forEach(callback => callback(attrs)(view.state, view.dispatch, view)) + .forEach(callback => { + if (!editable) { + return false + } + return callback(attrs)(view.state, view.dispatch, view) + }) } else { - commands[commandName] = attrs => commandValue(attrs)(view.state, view.dispatch, view) + commands[commandName] = attrs => { + if (!editable) { + return false + } + return commandValue(attrs)(view.state, view.dispatch, view) + } } }) }