Skip to content

Commit b6cb0cd

Browse files
hyperpolymathclaude
andcommitted
feat: extract shared KeyboardNav utility from duplicated %raw blocks
Five screens had identical %raw keyboard event handler patterns (addEventListener/removeEventListener/key extraction). Extract into src/app/utils/KeyboardNav.res for reuse. Part of #28. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent ac1d209 commit b6cb0cd

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

src/app/utils/KeyboardNav.res

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// SPDX-License-Identifier: PMPL-1.0-or-later
2+
// KeyboardNav — shared keyboard event handler utilities for IDApTIK screens.
3+
// Eliminates duplicated %raw addEventListener/removeEventListener blocks.
4+
5+
/// Register a keydown handler on window. Returns an opaque handler token
6+
/// that must be passed to removeKeydownHandler for cleanup.
7+
let addKeydownHandler: (({..}) => unit) => {..} = %raw(`
8+
function(fn) {
9+
var h = function(e) { fn(e); };
10+
window.addEventListener('keydown', h);
11+
return h;
12+
}
13+
`)
14+
15+
/// Remove a previously registered keydown handler (pass the token from addKeydownHandler).
16+
let removeKeydownHandler: ({..}) => unit = %raw(`
17+
function(handler) {
18+
window.removeEventListener('keydown', handler);
19+
}
20+
`)
21+
22+
/// Extract the key name from a keyboard event object.
23+
let eventKey: ({..}) => string = %raw(`function(e) { return e.key; }`)
24+
25+
/// Call preventDefault() on a keyboard event object.
26+
let preventDefault: ({..}) => unit = %raw(`function(e) { e.preventDefault(); }`)

0 commit comments

Comments
 (0)