diff --git a/CHANGELOG.md b/CHANGELOG.md index 09b18de32af2dea6fda0d8d0034962b30e420e88..db162b92527ce937fca6e6eecc0f1f66c22dc2e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed (for any bug fixes) +* Fixed saving of text properties that were changed in the Source-Editing mode + of the WYSIWYG editor. + ### Security (in case of vulnerabilities) ### Documentation (for notable additions or changes of the documentation) @@ -40,7 +43,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * Optional WYSIWYG editor with markdown output for text properties. Controled by the `BUILD_MODULE_EXT_EDITMODE_WYSIWYG_TEXT` build variable which is set do `DISABLED` by default. - - Added button to version history panel that allows restoring old versions +* Added button to version history panel that allows restoring old versions ### Changed (for changes in existing functionality) diff --git a/src/core/js/ext_editmode_wysiwyg_text.js b/src/core/js/ext_editmode_wysiwyg_text.js index f784dbd5d998ffeb95b4d594c907ff725441eadd..d5cd88a85084c76fd92c8710d9845bd80f09fb95 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,7 +64,7 @@ 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(); }); } catch (error) { @@ -70,7 +72,23 @@ 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") { + 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 @@ -107,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 {