Fix Ctrl+N/T: use e.key instead of e.code, remove duplicate guard

Switched from e.code (physical key position) to e.key (character value) which is more reliable across keyboard layouts and browsers. Also removed duplicate Ctrl guard line.
This commit is contained in:
2026-05-09 19:44:44 +01:00
parent bfe20d29ec
commit eb82bd416d
+3 -10
View File
@@ -1374,13 +1374,7 @@ document.addEventListener('keypress', e => { if (e.key === 'Enter') { if (docume
document.getElementById('genModal').addEventListener('click', e => { if (e.target === e.currentTarget) closeGen(); }); document.getElementById('genModal').addEventListener('click', e => { if (e.target === e.currentTarget) closeGen(); });
document.getElementById('editModal').addEventListener('click', e => { if (e.target === e.currentTarget) closeEdit(); }); document.getElementById('editModal').addEventListener('click', e => { if (e.target === e.currentTarget) closeEdit(); });
// ==================== KEYBOARD SHORTCUTS ==================== // ==================== KEYBOARD SHORTCUTS ====================
// Window capture handler for browser-level shortcuts (Ctrl+N/T) that must be intercepted before chrome // Prevent browser Ctrl+N/T — use capture on documentElement + fallback on document for reliability
window.addEventListener('keydown', function(e) {
if (!e.ctrlKey || e.shiftKey || e.altKey || e.metaKey) return;
const inVault = document.getElementById('authSection').classList.contains('hidden');
if (e.code === 'KeyN' && inVault) { e.preventDefault(); if (!document.getElementById('addModal').classList.contains('show')) openAdd(); }
if (e.code === 'KeyT' && inVault) { e.preventDefault(); toggleTrash(); }
}, true);
document.addEventListener('keydown', function(e) { document.addEventListener('keydown', function(e) {
const tag = document.activeElement?.tagName; const tag = document.activeElement?.tagName;
const isInput = tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT'; const isInput = tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT';
@@ -1425,14 +1419,14 @@ document.addEventListener('keydown', function(e) {
} }
// Ctrl+N — New entry (before generic guard to prevent browser new window) // Ctrl+N — New entry (before generic guard to prevent browser new window)
if (e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey && e.code === 'KeyN' && !isInput && !document.getElementById('addModal').classList.contains('show') && document.getElementById('authSection').classList.contains('hidden')) { if (e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey && (e.key === 'n' || e.key === 'N') && !isInput && !document.getElementById('addModal').classList.contains('show') && document.getElementById('authSection').classList.contains('hidden')) {
e.preventDefault(); e.preventDefault();
openAdd(); openAdd();
return; return;
} }
// Ctrl+T — Toggle trash (before generic guard to prevent browser new tab) // Ctrl+T — Toggle trash (before generic guard to prevent browser new tab)
if (e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey && e.code === 'KeyT' && !isInput && document.getElementById('authSection').classList.contains('hidden')) { if (e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey && (e.key === 't' || e.key === 'T') && !isInput && document.getElementById('authSection').classList.contains('hidden')) {
e.preventDefault(); e.preventDefault();
toggleTrash(); toggleTrash();
return; return;
@@ -1440,7 +1434,6 @@ document.addEventListener('keydown', function(e) {
// Only handle Ctrl+[key], no Shift/Alt/Meta // Only handle Ctrl+[key], no Shift/Alt/Meta
if (!e.ctrlKey || e.shiftKey || e.altKey || e.metaKey) return; if (!e.ctrlKey || e.shiftKey || e.altKey || e.metaKey) return;
if (!e.ctrlKey || e.shiftKey || e.altKey || e.metaKey) return;
// Prevent browser defaults for ALL our shortcuts BEFORE dispatching // Prevent browser defaults for ALL our shortcuts BEFORE dispatching
const code = e.code; const code = e.code;