From 6f566ece6527adb80da6ec651453cf12722e72f0 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Sat, 28 Sep 2019 20:59:08 +0200 Subject: [PATCH] Fix text component issue on toolbar commands execution. Closes #2294 --- src/commands/view/SelectComponent.js | 3 ++- src/dom_components/view/ComponentTextView.js | 9 +++++---- src/dom_components/view/ToolbarButtonView.js | 8 ++++++-- src/dom_components/view/ToolbarView.js | 4 ++-- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/commands/view/SelectComponent.js b/src/commands/view/SelectComponent.js index d69d8b7fd..790324378 100644 --- a/src/commands/view/SelectComponent.js +++ b/src/commands/view/SelectComponent.js @@ -518,7 +518,8 @@ export default { this.toolbar = new Toolbar(toolbar); var toolbarView = new ToolbarView({ collection: this.toolbar, - editor: this.editor + editor: this.editor, + em }); toolbarEl.appendChild(toolbarView.render().el); } diff --git a/src/dom_components/view/ComponentTextView.js b/src/dom_components/view/ComponentTextView.js index 853fffabe..9a1fd14bb 100644 --- a/src/dom_components/view/ComponentTextView.js +++ b/src/dom_components/view/ComponentTextView.js @@ -45,7 +45,6 @@ export default ComponentView.extend({ } } - this.rteEnabled = 1; this.toggleEvents(1); }, @@ -67,7 +66,6 @@ export default ComponentView.extend({ this.syncContent(); } - this.rteEnabled = 0; this.toggleEvents(); }, @@ -141,14 +139,17 @@ export default ComponentView.extend({ * @param {Boolean} enable */ toggleEvents(enable) { - var method = enable ? 'on' : 'off'; + const { em } = this; const mixins = { on, off }; - this.em.setEditing(enable); + const method = enable ? 'on' : 'off'; + em.setEditing(enable); + this.rteEnabled = !!enable; // The ownerDocument is from the frame var elDocs = [this.el.ownerDocument, document]; mixins.off(elDocs, 'mousedown', this.disableEditing); mixins[method](elDocs, 'mousedown', this.disableEditing); + em[method]('toolbar:run:before', this.disableEditing); // Avoid closing edit mode on component click this.$el.off('mousedown', this.disablePropagation); diff --git a/src/dom_components/view/ToolbarButtonView.js b/src/dom_components/view/ToolbarButtonView.js index 164302e3f..21d7dd9d6 100644 --- a/src/dom_components/view/ToolbarButtonView.js +++ b/src/dom_components/view/ToolbarButtonView.js @@ -13,13 +13,17 @@ export default Backbone.View.extend({ return this.model.get('attributes'); }, - initialize(opts) { - this.editor = opts.config.editor; + initialize(opts = {}) { + const { config = {} } = opts; + this.em = config.em; + this.editor = config.editor; }, handleClick(event) { event.preventDefault(); event.stopPropagation(); + const { em } = this; + em.trigger('toolbar:run:before'); this.execCommand(event); }, diff --git a/src/dom_components/view/ToolbarView.js b/src/dom_components/view/ToolbarView.js index ff920b8b0..d786e1416 100644 --- a/src/dom_components/view/ToolbarView.js +++ b/src/dom_components/view/ToolbarView.js @@ -4,8 +4,8 @@ import ToolbarButtonView from './ToolbarButtonView'; export default DomainViews.extend({ itemView: ToolbarButtonView, - initialize(opts) { - this.config = { editor: opts.editor || '' }; + initialize(opts = {}) { + this.config = { editor: opts.editor || '', em: opts.em }; this.listenTo(this.collection, 'reset', this.render); } });