Skip to content

Commit d0cf139

Browse files
authored
fix: Fix Escape handling in menus (videojs#8916)
Fixes that Escape being pressed isn't closing menus due to incorrect `event.key` name.
1 parent ecef37c commit d0cf139

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

src/js/menu/menu-button.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ class MenuButton extends Component {
297297
handleKeyDown(event) {
298298

299299
// Escape or Tab unpress the 'button'
300-
if (event.key === 'Esc' || event.key === 'Tab') {
300+
if (event.key === 'Escape' || event.key === 'Tab') {
301301
if (this.buttonPressed_) {
302302
this.unpressButton();
303303
}
@@ -328,7 +328,7 @@ class MenuButton extends Component {
328328
*/
329329
handleMenuKeyUp(event) {
330330
// Escape hides popup menu
331-
if (event.key === 'Esc' || event.key === 'Tab') {
331+
if (event.key === 'Escape' || event.key === 'Tab') {
332332
this.removeClass('vjs-hover');
333333
}
334334
}
@@ -356,7 +356,7 @@ class MenuButton extends Component {
356356
*/
357357
handleSubmenuKeyDown(event) {
358358
// Escape or Tab unpress the 'button'
359-
if (event.key === 'Esc' || event.key === 'Tab') {
359+
if (event.key === 'Escape' || event.key === 'Tab') {
360360
if (this.buttonPressed_) {
361361
this.unpressButton();
362362
}

test/unit/menu.test.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ QUnit.test('should remove old event listeners when the menu item adds to the new
235235

236236
assert.ok(clickListenerSpy.calledOnce, 'click event listener should be called');
237237
assert.strictEqual(clickListenerSpy.getCall(0).args[0].target, menuItem.el(), 'event target should be the `menuItem`');
238-
assert.ok(unpressButtonSpy.calledOnce, '`menuButton`.`unpressButtion` has been called');
238+
assert.ok(unpressButtonSpy.calledOnce, '`menuButton`.`unpressButton` has been called');
239239
assert.ok(focusSpy.calledOnce, '`menuButton`.`focus` has been called');
240240

241241
unpressButtonSpy.restore();
@@ -265,3 +265,21 @@ QUnit.test('should remove old event listeners when the menu item adds to the new
265265
oldMenu.dispose();
266266
menuButton.dispose();
267267
});
268+
269+
QUnit.test('Escape should close menu', function(assert) {
270+
const player = TestHelpers.makePlayer();
271+
const menuButton = new MenuButton(player, {});
272+
const unpressButtonSpy = sinon.spy(menuButton, 'unpressButton');
273+
274+
menuButton.createItems = () => [new MenuItem(player, {})];
275+
menuButton.update();
276+
menuButton.handleClick(new window.PointerEvent('click'));
277+
menuButton.menu.children()[0].el_.dispatchEvent(new window.KeyboardEvent('keydown', {
278+
key: 'Escape',
279+
bubbles: true,
280+
cancelable: true
281+
}));
282+
283+
assert.ok(unpressButtonSpy.calledOnce, '`menuButton`.`unpressButton` has been called');
284+
285+
});

0 commit comments

Comments
 (0)