diff --git a/src/core/js/ext_editmode_wysiwyg_text.js b/src/core/js/ext_editmode_wysiwyg_text.js index 5f9a05210dd76c84784279b6452d0506f8fb7adb..e5840d65000204b441630380704740779977e4bb 100644 --- a/src/core/js/ext_editmode_wysiwyg_text.js +++ b/src/core/js/ext_editmode_wysiwyg_text.js @@ -39,6 +39,8 @@ */ var ext_editmode_wysiwyg_text = function ($, logger, ClassicEditor, edit_mode, getPropertyElements, getPropertyDatatype, getPropertyName) { + var _callOnSave = []; + var insertEditorInProperty = async function (prop) { if (!(getPropertyDatatype(prop) === 'TEXT')) { // Ignore anything that isn't a list property, even LIST<TEXT> @@ -62,16 +64,17 @@ 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. - editor.model.document.on("change:data", (e) => { + _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(); - } - }); + //// 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. @@ -79,28 +82,42 @@ var ext_editmode_wysiwyg_text = function ($, logger, ClassicEditor, edit_mode, g // 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'); + //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(); - }); - } - }); + //// 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(); + //}); + //} + //}); } catch (error) { logger.error(error.stack); } } + const proxySaveMethod = function (original) { + const result = function (entity) { + _callOnSave.forEach(cb => {cb();}); + if(typeof original === "function") { + return original(entity); + } + return undefined; + } + return result; + } + var replaceTextAreas = function (entity) { + // on save, call callbacks + edit_mode.app.onBeforeInsert = proxySaveMethod(edit_mode.app.onBeforeInsert); + edit_mode.app.onBeforeUpdate = proxySaveMethod(edit_mode.app.onBeforeUpdate); const properties = getPropertyElements(entity); for (let prop of properties) { // TODO(fspreck): This will be replaced by a whitelist of properties