Skip to content

Commit d35d073

Browse files
committed
✨ add search keyboard shortcut
1 parent cc4b84d commit d35d073

File tree

1 file changed

+23
-5
lines changed

1 file changed

+23
-5
lines changed

frontend/javascript/navbar.ts

+23-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import transitionDone from './misc/await-transition'
22

3-
const header = document.querySelector('#header')!
3+
const header = document.querySelector('#header')
44
let counter = 0
55

6-
header.querySelectorAll<HTMLElement>('.nav-toggle-menu').forEach((el) =>
6+
header?.querySelectorAll<HTMLElement>('.nav-toggle-menu').forEach((el) =>
77
el.addEventListener('click', async () => {
88
const targetName = el.dataset.target
99
if (targetName == null) return
@@ -93,11 +93,29 @@ function updateDropdowns(): void {
9393
window.addEventListener('resize', updateDropdowns)
9494
updateDropdowns()
9595

96-
const navSearch = header.querySelector<HTMLElement>('.nav-search')!
96+
const navSearch = header?.querySelector<HTMLElement>('.nav-search')
9797
const searchUrls = [
98-
...navSearch.querySelector<HTMLSelectElement>('select')!
98+
...(navSearch?.querySelector<HTMLSelectElement>('select') ?? [])
9999
].map((el) => el.value)
100100

101101
if (searchUrls.includes(window.location.pathname)) {
102-
navSearch.classList.add('nav-search-redundant')
102+
navSearch?.remove()
103+
document.querySelector('#menu-user-nav')?.classList.add('ms-md-auto')
103104
}
105+
106+
const input = navSearch?.querySelector('input')
107+
const placeholder = input?.getAttribute('placeholder') ?? ''
108+
const isMac = navigator.userAgent.includes('Mac OS X')
109+
if (isMac) {
110+
// macOS
111+
input?.setAttribute('placeholder', `${placeholder} (⌘ + K)`)
112+
} else {
113+
input?.setAttribute('placeholder', `${placeholder} (Ctrl + K)`)
114+
}
115+
116+
document.addEventListener('keydown', (e) => {
117+
if ((isMac ? e.metaKey : e.ctrlKey) && e.key === 'k') {
118+
e.preventDefault()
119+
input?.focus()
120+
}
121+
})

0 commit comments

Comments
 (0)