From 69a3b22e54a14e0a7484d9fa869a35dc3adf1d00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Ku=CC=88hn?= Date: Tue, 30 Oct 2018 09:44:21 +0100 Subject: [PATCH] check for editable on commands --- packages/tiptap/src/utils/Editor.js | 1 + packages/tiptap/src/utils/ExtensionManager.js | 30 +++++++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) 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) + } } }) }