From 383fe1ca8c13d2ced81b132b1519444466b139fe Mon Sep 17 00:00:00 2001 From: Claude Dev Date: Mon, 23 Mar 2026 22:14:35 +0100 Subject: [PATCH] Tutorial: Modal-Scroll mit scrollIntoView + scrollTop-Fallback scrollIntoView scrollt den naechsten scrollbaren Container (modal-body). Zusaetzlich wird scrollTop direkt gesetzt als Fallback via offsetTop-Berechnung. --- src/static/js/tutorial.js | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/static/js/tutorial.js b/src/static/js/tutorial.js index 7da2ecd..ae8cc51 100644 --- a/src/static/js/tutorial.js +++ b/src/static/js/tutorial.js @@ -1849,15 +1849,18 @@ const Tutorial = { var el = document.querySelector(selector); var modalBody = document.querySelector('#modal-new .modal-body'); if (!el || !modalBody) return Promise.resolve(); - // Element zentriert im sichtbaren Modal-Bereich anzeigen - var elRect = el.getBoundingClientRect(); - var bodyRect = modalBody.getBoundingClientRect(); - var bodyVisibleH = bodyRect.height; - var offset = elRect.top - bodyRect.top + modalBody.scrollTop; - var elCenter = offset + elRect.height / 2; - var targetScroll = elCenter - bodyVisibleH / 2; - modalBody.scrollTo({ top: Math.max(0, targetScroll), behavior: 'smooth' }); - return new Promise(function(resolve) { setTimeout(resolve, 500); }); + // scrollIntoView auf dem Element - scrollt den naechsten scrollbaren Container + try { el.scrollIntoView({ behavior: 'smooth', block: 'center' }); } catch(e) {} + // Fallback: manuell scrollTop setzen via offsetTop-Berechnung + var elTop = 0; + var node = el; + while (node && node !== modalBody) { + elTop += node.offsetTop || 0; + node = node.offsetParent; + } + var targetScroll = elTop - modalBody.clientHeight / 2 + el.offsetHeight / 2; + modalBody.scrollTop = Math.max(0, targetScroll); + return new Promise(function(resolve) { setTimeout(resolve, 400); }); }, // Helfer: Modal scrollen UND Bubble neu positionieren