mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-15 17:25:26 -04:00
fix(notes): track + remove the select-mode Esc keydown listener so it doesn't leak per open (#2792)
This commit is contained in:
+17
-2
@@ -31,6 +31,9 @@ let _reminderTimer = null;
|
||||
// (previously leaked one per openPanel; on multi-open sessions this
|
||||
// stacked dozens of identical handlers).
|
||||
let _notesKeydownHandler = null;
|
||||
// Capture-phase "Esc cancels select mode" listener on document — tracked so it
|
||||
// is removed on close instead of leaking +1 per panel open/close cycle.
|
||||
let _notesSelectEscHandler = null;
|
||||
const REMINDER_FIRED_KEY = 'odysseus-notes-reminder-fired';
|
||||
// Note IDs already shown with the entry-glow once. Re-set when the user
|
||||
// reschedules the reminder so the new firing glows again on next open.
|
||||
@@ -54,6 +57,10 @@ function _forceCloseNotesPanel() {
|
||||
document.removeEventListener('keydown', _notesKeydownHandler);
|
||||
_notesKeydownHandler = null;
|
||||
}
|
||||
if (_notesSelectEscHandler) {
|
||||
document.removeEventListener('keydown', _notesSelectEscHandler, true);
|
||||
_notesSelectEscHandler = null;
|
||||
}
|
||||
if (_reminderTimer) {
|
||||
clearInterval(_reminderTimer);
|
||||
_reminderTimer = null;
|
||||
@@ -1270,13 +1277,17 @@ export function openPanel() {
|
||||
// than a *-bulk-cancel button, so the global Esc-cancel handler in
|
||||
// keyboard-shortcuts.js can't reach it — handle it here. Capture phase
|
||||
// + stopPropagation so Esc cancels select instead of closing the panel.
|
||||
document.addEventListener('keydown', (e) => {
|
||||
if (_notesSelectEscHandler) {
|
||||
document.removeEventListener('keydown', _notesSelectEscHandler, true);
|
||||
}
|
||||
_notesSelectEscHandler = (e) => {
|
||||
if (e.key === 'Escape' && _selectMode) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
_exitSelectMode();
|
||||
}
|
||||
}, true);
|
||||
};
|
||||
document.addEventListener('keydown', _notesSelectEscHandler, true);
|
||||
document.getElementById('notes-select-all').addEventListener('change', (e) => {
|
||||
if (e.target.checked) _notes.forEach(n => _selectedIds.add(n.id));
|
||||
else _selectedIds.clear();
|
||||
@@ -1580,6 +1591,10 @@ export function closePanel(direction) {
|
||||
document.removeEventListener('keydown', _notesKeydownHandler);
|
||||
_notesKeydownHandler = null;
|
||||
}
|
||||
if (_notesSelectEscHandler) {
|
||||
document.removeEventListener('keydown', _notesSelectEscHandler, true);
|
||||
_notesSelectEscHandler = null;
|
||||
}
|
||||
if (_reminderTimer) {
|
||||
clearInterval(_reminderTimer);
|
||||
_reminderTimer = null;
|
||||
|
||||
Reference in New Issue
Block a user