js/plugins/drupalentity/plugin.js | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/js/plugins/drupalentity/plugin.js b/js/plugins/drupalentity/plugin.js index 8bdc616..94b4f12 100644 --- a/js/plugins/drupalentity/plugin.js +++ b/js/plugins/drupalentity/plugin.js @@ -116,25 +116,16 @@ }, destroy: function() { - this._tearDownEditables(); + this._tearDownDynamicEditables(); }, data: function (event) { if (this._previewNeedsUpdate()) { - this._tearDownEditables(); + editor.fire('lockSnapshot'); + this._tearDownDynamicEditables(); this._loadPreview(function (widget) { - // Now that the caption is available in the DOM, make it editable. - widget.initEditable('caption', widget.definition.editables.caption); - // And ensure that any changes made to it are persisted. - var captionDomNode = widget.editables.caption.$; - var config = { characterData: true, attributes: false, childList: true, subtree: true }; - widget.captionEditableMutationObserver = new MutationObserver(function() { - var entityAttributes = CKEDITOR.tools.clone(widget.data.attributes); - entityAttributes['data-caption'] = captionDomNode.innerHTML; - widget.setData('attributes', entityAttributes); - }); - widget.captionEditableMutationObserver.observe(captionDomNode, config); + widget._setUpDynamicEditables(); editor.fire('updateSnapshot'); }); } @@ -154,7 +145,22 @@ return downcastElement; }, - _tearDownEditables() { + _setUpDynamicEditables() { + // Now that the caption is available in the DOM, make it editable. + this.initEditable('caption', this.definition.editables.caption); + // And ensure that any changes made to it are persisted. + var captionDomNode = this.editables.caption.$; + var config = { characterData: true, attributes: false, childList: true, subtree: true }; + var widget = this; + this.captionEditableMutationObserver = new MutationObserver(function() { + var entityAttributes = CKEDITOR.tools.clone(widget.data.attributes); + entityAttributes['data-caption'] = captionDomNode.innerHTML; + widget.setData('attributes', entityAttributes); + }); + this.captionEditableMutationObserver.observe(captionDomNode, config); + }, + + _tearDownDynamicEditables() { if (this.captionEditableMutationObserver) { this.captionEditableMutationObserver.disconnect(); }