From 1ee51be420ebedd544b7bbdf8903947515288ffc Mon Sep 17 00:00:00 2001 From: pewdiepie-archdaemon Date: Wed, 10 Jun 2026 22:39:23 +0900 Subject: [PATCH] Sessions: Esc + outside-click also close the Move-to-folder submenu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The session-dropdown Esc handler only closed .session-dropdown-menu, leaving the .session-folder-submenu (Move to folder → folder list) orphaned on screen. Same gap on the click-away path. Extend both selectors to cover the submenu so a single Esc / outside-click dismisses the whole stack. --- static/js/sessions.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/static/js/sessions.js b/static/js/sessions.js index 15dfde08a..a337be105 100644 --- a/static/js/sessions.js +++ b/static/js/sessions.js @@ -2258,8 +2258,8 @@ if (document.readyState === 'loading') { // Shared global listener to close all session dropdowns on click-away or Escape function _initDropdownDismiss() { document.addEventListener('click', (e) => { - if (e.target.closest('.session-dropdown-menu')) return; - document.querySelectorAll('.session-dropdown-menu').forEach(d => d.style.display = 'none'); + if (e.target.closest('.session-dropdown-menu, .session-folder-submenu')) return; + document.querySelectorAll('.session-dropdown-menu, .session-folder-submenu').forEach(d => d.style.display = 'none'); }); // Watch the sidebar — when it's hidden (any path: hamburger, swipe, mobile // collapse), close any open session dropdowns so they don't orphan over @@ -2268,14 +2268,16 @@ function _initDropdownDismiss() { if (_sb) { new MutationObserver(() => { if (_sb.classList.contains('hidden')) { - document.querySelectorAll('.session-dropdown-menu, .folder-submenu').forEach(d => d.style.display = 'none'); + document.querySelectorAll('.session-dropdown-menu, .session-folder-submenu').forEach(d => d.style.display = 'none'); } }).observe(_sb, { attributes: true, attributeFilter: ['class'] }); } document.addEventListener('keydown', (e) => { - if (e.key === 'Escape') { - document.querySelectorAll('.session-dropdown-menu').forEach(d => d.style.display = 'none'); - } + if (e.key !== 'Escape') return; + // Esc must dismiss both the parent dropdown AND the Move-to-folder + // submenu in one keypress — previously only the dropdown closed and + // the submenu was left orphaned on screen. + document.querySelectorAll('.session-dropdown-menu, .session-folder-submenu').forEach(d => d.style.display = 'none'); }); }