diff --git a/src/core/js/ext_editmode_wysiwyg_text.js b/src/core/js/ext_editmode_wysiwyg_text.js index e5840d65000204b441630380704740779977e4bb..4470619e84b450b7dfd324c80854d5dd967cd640 100644 --- a/src/core/js/ext_editmode_wysiwyg_text.js +++ b/src/core/js/ext_editmode_wysiwyg_text.js @@ -64,40 +64,9 @@ var ext_editmode_wysiwyg_text = function ($, logger, ClassicEditor, edit_mode, g logger.debug('Initialized editor for ' + getPropertyName(prop)); // Manually implement saving the data since edit mode is not // a form to be submitted. - _callOnSave.push(() => { editor.updateSourceElement() }); - //editor.model.document.on("change:data", (e) => { - - //// console.log(editor.getData()); - //// console.log(editor.sourceElement.value); - //console.log(editor.getData() != editor.sourceElement.value); - //if (editor.getData() != editor.sourceElement.value) { - //console.log("Saving editor..."); - //editor.updateSourceElement(); - //} - //}); - // TODO(fspreck): Add an event listener to save also changes made in - // source mode. What event can we listen to? The following doesn't - // work either. - // document.body.addEventListener("input", e => { - // console.log("Saving after input..."); - // editor.updateSourceElement(); - // }, true); - //const sourceEditingPlugin = editor.plugins.get("SourceEditing"); - //sourceEditingPlugin.on("change:isSourceEditingMode", (e, name, isSourceEditingMode) => { - //if (isSourceEditingMode) { - //// Maybe this helps? - //console.log("Entering source editing"); - //const [domSourceEditingElementWrapper] = sourceEditingPlugin._replacedRoots.values(); - //const textarea = domSourceEditingElementWrapper.querySelector('textarea'); - - //// TODO(fspreck) this has to be more intelligent since it - //// leads to an infinite update loop... - //textarea.addEventListener("input", (e) => { - //console.log("Input in source mode"); - //// sourceEditingPlugin._updateEditorData(); - //}); - //} - //}); + _callOnSave.push(() => { + editor.updateSourceElement() + }); } catch (error) { logger.error(error.stack); } @@ -105,8 +74,10 @@ var ext_editmode_wysiwyg_text = function ($, logger, ClassicEditor, edit_mode, g const proxySaveMethod = function (original) { const result = function (entity) { - _callOnSave.forEach(cb => {cb();}); - if(typeof original === "function") { + _callOnSave.forEach(cb => { + cb(); + }); + if (typeof original === "function") { return original(entity); } return undefined; @@ -154,6 +125,12 @@ var ext_editmode_wysiwyg_text = function ($, logger, ClassicEditor, edit_mode, g logger.debug('Re-rendering ' + getPropertyName(e.target)); ext_editmode_wysiwyg_text.insertEditorInProperty(e.target); }, true); + + // Clear list of saving callbacks when leaving the edit mode (regardless + // of saving or cancelling) + document.body.addEventListener(edit_mode.end_edit.type, (e) => { + this._callOnSave = []; + }, true); }; return {