Skip to content

Commit f11dd2a

Browse files
authored
Merge pull request #80 from akenneth/file_input_support
Allow hotkeys when focusing on `file` input elements
2 parents 24fa9ae + 408ce14 commit f11dd2a

2 files changed

Lines changed: 15 additions & 2 deletions

File tree

src/utils.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@ export function isFormField(element: Node): boolean {
88
return (
99
name === 'select' ||
1010
name === 'textarea' ||
11-
(name === 'input' && type !== 'submit' && type !== 'reset' && type !== 'checkbox' && type !== 'radio') ||
11+
(name === 'input' &&
12+
type !== 'submit' &&
13+
type !== 'reset' &&
14+
type !== 'checkbox' &&
15+
type !== 'radio' &&
16+
type !== 'file') ||
1217
element.isContentEditable
1318
)
1419
}

test/test.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,18 @@ describe('hotkey', function () {
7272
setHTML(`
7373
<button id="button1" data-hotkey="b">Button 1</button>
7474
<input id="textfield" />`)
75-
document.getElementById('textfield').dispatchEvent(new KeyboardEvent('keydown', {key: 'b'}))
75+
document.getElementById('textfield').dispatchEvent(new KeyboardEvent('keydown', {bubbles: true, key: 'b'}))
7676
assert.deepEqual(elementsActivated, [])
7777
})
7878

79+
it('triggers when user is focused on a file input', function () {
80+
setHTML(`
81+
<button id="button1" data-hotkey="b">Button 1</button>
82+
<input id="filefield" type="file" />`)
83+
document.getElementById('filefield').dispatchEvent(new KeyboardEvent('keydown', {bubbles: true, key: 'b'}))
84+
assert.deepEqual(elementsActivated, ['button1'])
85+
})
86+
7987
it('handles multiple keys in a hotkey combination', function () {
8088
setHTML('<button id="button3" data-hotkey="Control+c">Button 3</button>')
8189
document.dispatchEvent(new KeyboardEvent('keydown', {key: 'c', ctrlKey: true}))

0 commit comments

Comments
 (0)