From ce4b06fe3df6ee0f9dadc66091b8a1849b6e22ec Mon Sep 17 00:00:00 2001 From: Colin Maudry Date: Tue, 23 Jun 2026 16:14:20 +0200 Subject: [PATCH] refactor(tableaux): commentaires et nettoyage table_hscroll.js #82 Co-Authored-By: Claude Opus 4.8 --- src/assets/table_hscroll.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/assets/table_hscroll.js b/src/assets/table_hscroll.js index 626ae27..8cb8085 100644 --- a/src/assets/table_hscroll.js +++ b/src/assets/table_hscroll.js @@ -10,7 +10,6 @@ function setup(wrapper) { if (wrapper.dataset.hscrollReady === "1") return; const scrollEl = getScrollEl(wrapper); - if (!scrollEl) return; const bar = document.createElement("div"); bar.className = "dt-hscroll is-hidden"; @@ -19,6 +18,8 @@ bar.appendChild(inner); wrapper.insertBefore(bar, wrapper.firstChild); + // syncing évite les boucles dans la même pile d'exécution ; l'affectation de scrollLeft + // déclenche l'événement scroll de façon synchrone dans Chromium. let syncing = false; const onBar = () => { if (syncing) return; @@ -39,6 +40,7 @@ const total = scrollEl.scrollWidth; const visible = scrollEl.clientWidth; inner.style.width = total + "px"; + // +1 absorbe les erreurs d'arrondi sous-pixel bar.classList.toggle("is-hidden", total <= visible + 1); bar.scrollLeft = scrollEl.scrollLeft; }; @@ -46,6 +48,7 @@ // Recalcule quand le tableau change (pagination, tri, filtre, données). const obs = new MutationObserver(() => refresh()); obs.observe(scrollEl, { childList: true, subtree: true, attributes: true }); + // SPA : ce listener est intentionnellement conservé pour toute la durée de vie de la page. window.addEventListener("resize", refresh); wrapper.dataset.hscrollReady = "1";