From aa8d58d01ff7f94deea1012c4e609ebf08fa259d Mon Sep 17 00:00:00 2001 From: Honey Date: Tue, 19 May 2026 20:00:23 +0200 Subject: [PATCH] fix: null guard in hideCtxMenu and scroll/touchmove listeners hideCtxMenu now guards against null #ctx-menu element. scroll/touchmove listeners only fire when menu is actually visible, preventing spurious calls on every scroll event. Co-Authored-By: Claude Sonnet 4.6 --- src/ui.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/ui.js b/src/ui.js index 0c719c2..9210c97 100644 --- a/src/ui.js +++ b/src/ui.js @@ -153,13 +153,21 @@ export function showCtxMenu(e, song, list, idx) { } export function hideCtxMenu() { const m = document.getElementById('ctx-menu'); + if (!m) return; m.style.display='none'; m.innerHTML=''; } document.addEventListener('click', e => { - if(!document.getElementById('ctx-menu').contains(e.target)) hideCtxMenu(); + const m = document.getElementById('ctx-menu'); + if (m && !m.contains(e.target)) hideCtxMenu(); }); -document.addEventListener('scroll', () => hideCtxMenu(), { passive: true, capture: true }); -document.addEventListener('touchmove', () => hideCtxMenu(), { passive: true, capture: true }); +document.addEventListener('scroll', () => { + const m = document.getElementById('ctx-menu'); + if (m && m.style.display !== 'none') hideCtxMenu(); +}, { passive: true, capture: true }); +document.addEventListener('touchmove', () => { + const m = document.getElementById('ctx-menu'); + if (m && m.style.display !== 'none') hideCtxMenu(); +}, { passive: true, capture: true }); document.addEventListener('keydown', e => { if(e.key==='Escape') hideCtxMenu(); }); // ─── PLAYLIST MODAL (Add to / Create) ───