Merge pull request #20350 from llamafilm/17824-hotkeys
Some checks failed
CI / build (20.x, 3.10) (push) Has been cancelled
CI / build (20.x, 3.11) (push) Has been cancelled
CI / build (20.x, 3.12) (push) Has been cancelled
CodeQL / Analyze (${{ matrix.language }}) (none, actions) (push) Has been cancelled
CodeQL / Analyze (${{ matrix.language }}) (none, javascript-typescript) (push) Has been cancelled
CodeQL / Analyze (${{ matrix.language }}) (none, python) (push) Has been cancelled

add global search hotkey
This commit is contained in:
bctiemann 2025-09-17 13:59:37 -04:00 committed by GitHub
commit 3c09ee8b11
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 31 additions and 0 deletions

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,29 @@
const HOTKEYS: Record<string, () => void> = {
'/': focusGlobalSearch,
};
function focusGlobalSearch(): void {
const searchInput = document.querySelector<HTMLInputElement>('header input[name="q"]')!;
if (searchInput) {
searchInput.focus();
}
}
function handleKeydown(event: KeyboardEvent): void {
// Ignore hotkeys when focused on form elements or when modal is open
if ((event.target as Element).matches('input, textarea, select') || document.body.classList.contains('modal-open')) {
return;
}
const handler = HOTKEYS[event.key];
if (!handler) {
return;
}
event.preventDefault();
handler();
}
export function initHotkeys(): void {
document.addEventListener('keydown', handleKeydown);
}

View File

@ -14,6 +14,7 @@ import { initDashboard } from './dashboard';
import { initRackElevation } from './racks'; import { initRackElevation } from './racks';
import { initHtmx } from './htmx'; import { initHtmx } from './htmx';
import { initSavedFilterSelect } from './forms/savedFiltersSelect'; import { initSavedFilterSelect } from './forms/savedFiltersSelect';
import { initHotkeys } from './hotkeys';
function initDocument(): void { function initDocument(): void {
for (const init of [ for (const init of [
@ -33,6 +34,7 @@ function initDocument(): void {
initRackElevation, initRackElevation,
initHtmx, initHtmx,
initSavedFilterSelect, initSavedFilterSelect,
initHotkeys,
]) { ]) {
init(); init();
} }