Arrow left/right navigate entries; Shift+arrow extends multi-selection

This commit is contained in:
2026-05-09 23:16:17 +01:00
parent 72d7d1015a
commit b0785fbe8d
+15 -4
View File
@@ -1409,19 +1409,30 @@ document.addEventListener('keydown', function(e) {
return; return;
} }
// Arrow up/down — navigate entries in vault // Arrow keys — navigate entries in vault
if ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && !isInput && document.getElementById('authSection').classList.contains('hidden')) { if ((e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === 'ArrowLeft' || e.key === 'ArrowRight') && !isInput && document.getElementById('authSection').classList.contains('hidden')) {
e.preventDefault(); e.preventDefault();
const filtered = getFilteredEntries(); const filtered = getFilteredEntries();
if (!filtered.length) return; if (!filtered.length) return;
const isNext = e.key === 'ArrowDown' || e.key === 'ArrowRight';
let idx = -1; let idx = -1;
if (selectedIds.size > 0) { if (selectedIds.size > 0) {
const firstId = [...selectedIds][0]; const firstId = [...selectedIds][0];
idx = filtered.findIndex(e => e.id == firstId); idx = filtered.findIndex(e => e.id == firstId);
} }
if (e.key === 'ArrowDown') idx = idx < filtered.length - 1 ? idx + 1 : 0; if (isNext) idx = idx < filtered.length - 1 ? idx + 1 : 0;
else idx = idx > 0 ? idx - 1 : filtered.length - 1; else idx = idx > 0 ? idx - 1 : filtered.length - 1;
selectedIds.clear(); selectedIds.add(filtered[idx].id); if (e.shiftKey) {
const anchorId = lastSelectedId !== null ? lastSelectedId : filtered[idx].id;
const anchor = filtered.findIndex(e => e.id == anchorId);
const start = Math.min(anchor, idx), end = Math.max(anchor, idx);
selectedIds.clear();
for (let i = start; i <= end; i++) selectedIds.add(filtered[i].id);
} else {
selectedIds.clear();
selectedIds.add(filtered[idx].id);
lastSelectedId = filtered[idx].id;
}
updateBatchBar(); render(); playSound('click'); updateBatchBar(); render(); playSound('click');
return; return;
} }