From a64695bcc12deafa8c1dd78a64f1785c145b41e4 Mon Sep 17 00:00:00 2001 From: Ron Lucke <lucke@elan-ev.de> Date: Mon, 13 Mar 2023 13:20:00 +0000 Subject: [PATCH] fix #1749 Closes #1749 Merge request studip/studip!1547 --- resources/assets/javascripts/lib/wysiwyg.js | 39 ++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/resources/assets/javascripts/lib/wysiwyg.js b/resources/assets/javascripts/lib/wysiwyg.js index 7b18313e661..3704e8bef75 100644 --- a/resources/assets/javascripts/lib/wysiwyg.js +++ b/resources/assets/javascripts/lib/wysiwyg.js @@ -61,6 +61,7 @@ function replaceTextarea(textarea) { const $textarea = textarea instanceof jQuery ? textarea : $(textarea); let options = {}; + if ($textarea.attr('data-editor')) { const parsed = parseOptions($textarea.attr('data-editor')); @@ -124,7 +125,43 @@ function replaceTextarea(textarea) { .then(emitLoadEvent); function createEditor(ClassicEditor) { - return ClassicEditor.create(textarea, options); + return ClassicEditor.create(textarea, options).then(editor => { + function getViewportOffsetTop() { + const topBar = document.getElementById('top-bar'); + const responsiveContentbar = document.getElementById('responsive-contentbar'); + + let top = topBar.clientHeight + topBar.clientTop; + if (responsiveContentbar) { + top += responsiveContentbar?.clientHeight + responsiveContentbar.clientTop; + } + + return top; + } + + function updateOffsetTop() { + // This needs to be delayed since some events will fire before + // changing the DOM + setTimeout(() => { + editor.ui.viewportOffset = {top: getViewportOffsetTop()}; + editor.ui.update(); + }, 50); + } + + // Set initial offset top + updateOffsetTop(); + + // Listen to relevant events that may require the sticky panel to be misplaced + STUDIP.eventBus.on('toggle-compact-navigation', updateOffsetTop); + STUDIP.eventBus.on('switch-focus-mode', updateOffsetTop); + + // Stop listening if editor is destroyed + editor.on('destroy', () => { + STUDIP.eventBus.off('toggle-compact-navigation', updateOffsetTop); + STUDIP.eventBus.off('switch-focus-mode', updateOffsetTop); + }); + + return editor; + }); } function setEditorInstance(ckeditor) { -- GitLab