From bc804ae823a8a61e6cb02495759f75a104c77753 Mon Sep 17 00:00:00 2001 From: smizrahi Date: Tue, 2 Apr 2024 11:11:46 +0200 Subject: [PATCH] fix(core): Add timer to avoid spamming onEditorChanged for CKEditor 5. Fixes #5944. --- .../js/Common/sgCkeditor.component.js | 49 +++++++++++-------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/UI/WebServerResources/js/Common/sgCkeditor.component.js b/UI/WebServerResources/js/Common/sgCkeditor.component.js index eca03f1c2..a61faec98 100644 --- a/UI/WebServerResources/js/Common/sgCkeditor.component.js +++ b/UI/WebServerResources/js/Common/sgCkeditor.component.js @@ -211,6 +211,9 @@ var editor; var editorChanged = false; var modelChanged = false; + var editorChangedTimerValue = 2000; + var editorChangedTimer = null; + this.$onInit = function () { vm.ngModelCtrl.$render = function () { @@ -337,30 +340,36 @@ vm.editor.destroy(noUpdate); } - function onEditorChange () { - var html = vm.editor.getData(); + function onEditorChange() { + if (editorChangedTimer) + clearTimeout(editorChangedTimer); - var dom = document.createElement("DIV"); - dom.innerHTML = html; - var text = (dom.textContent || dom.innerText); + editorChangedTimer = setTimeout(function () { + var html = vm.editor.getData(); - if (text === '\n') { - text = ''; - } + var dom = document.createElement("DIV"); + dom.innerHTML = html; + var text = (dom.textContent || dom.innerText); - if (!modelChanged && html !== vm.ngModelCtrl.$viewValue) { - editorChanged = true; - vm.ngModelCtrl.$setViewValue(html); - validate(vm.checkTextLength ? text : html); - if (vm.onContentChanged) { - vm.onContentChanged({ - 'editor': vm.editor, - 'html': html, - 'text': text - }); + if (text === '\n') { + text = ''; } - } - modelChanged = false; + + if (!modelChanged && html !== vm.ngModelCtrl.$viewValue) { + editorChanged = true; + vm.ngModelCtrl.$setViewValue(html); + validate(vm.checkTextLength ? text : html); + if (vm.onContentChanged) { + vm.onContentChanged({ + 'editor': vm.editor, + 'html': html, + 'text': text + }); + } + } + modelChanged = false; + editorChangedTimer = null; + }, editorChangedTimerValue); } function onEditorPaste (event) {