From 769beae4ee484f27ab92058d1315ccd2fdcaf0a1 Mon Sep 17 00:00:00 2001 From: Pontoporeia Date: Fri, 24 Apr 2026 13:27:47 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20drop=20hx-trigger=20once=20=E2=80=94=20r?= =?UTF-8?q?ely=20on=20browser=20cache=20for=20dedup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/public/repertoire.php | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/app/templates/public/repertoire.php b/app/templates/public/repertoire.php index c3019a3..5434bb6 100644 --- a/app/templates/public/repertoire.php +++ b/app/templates/public/repertoire.php @@ -21,34 +21,18 @@ popover.style.top = top + 'px'; } - // After htmx swaps content in, show and position the popover - document.body.addEventListener('htmx:afterSwap', function (e) { - if (e.detail.target !== popover) return; - popover.hidden = false; - if (currentAnchor) position(currentAnchor); - }); - - // On subsequent hovers (already cached by browser / htmx once), - // just reposition and show — htmx won't re-fire due to `once`, - // so we handle show/position on mouseenter ourselves. document.body.addEventListener('mouseenter', function (e) { var a = e.target.closest('[data-student-name]'); if (!a) return; currentAnchor = a; - // If popover already has this student's content, just show it - if (popover.dataset.loadedFor === a.dataset.studentName) { - position(a); - popover.hidden = false; - } }, true); - // Mark which student is loaded after swap document.body.addEventListener('htmx:afterSwap', function (e) { - if (e.detail.target !== popover || !currentAnchor) return; - popover.dataset.loadedFor = currentAnchor.dataset.studentName; + if (e.detail.target !== popover) return; + if (currentAnchor) position(currentAnchor); + popover.hidden = false; }); - // Hide on mouse leave (both anchor and popover) document.body.addEventListener('mouseleave', function (e) { if (!e.target.closest('[data-student-name]') && !e.target.closest('#student-popover')) return; setTimeout(function () {