Skip to content
This repository was archived by the owner on Sep 5, 2024. It is now read-only.

Commit 98e259b

Browse files
marosoftSplaktar
authored andcommitted
fix(menuBar): close just nested menu when escape key is pressedfocus stays with the parent menu when nested one is closed instead of closing all the menusFixes #11678
1 parent 5a7e967 commit 98e259b

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

src/components/menu/js/menuServiceProvider.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,11 @@ function MenuProvider($$interimElementProvider) {
289289
var handled;
290290
switch (ev.keyCode) {
291291
case $mdConstant.KEY_CODE.ESCAPE:
292-
opts.mdMenuCtrl.close(false, { closeAll: true });
292+
if (opts.nestLevel) {
293+
opts.mdMenuCtrl.close();
294+
} else {
295+
opts.mdMenuCtrl.close(false, { closeAll: true });
296+
}
293297
handled = true;
294298
break;
295299
case $mdConstant.KEY_CODE.TAB:

src/components/menuBar/menu-bar.spec.js

+46-1
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,39 @@ describe('material.components.menuBar', function() {
226226
menuBar.remove();
227227
});
228228

229+
it('closes only current sub-menu with escape key', inject(function($mdConstant) {
230+
menuBar = setup();
231+
ctrl = menuBar.controller('mdMenuBar');
232+
menus = menuBar[0].querySelectorAll('md-menu md-menu');
233+
234+
angular.element(document.body).append(menuBar);
235+
236+
expect(getNumberOfOpenMenus()).toBe(0);
237+
238+
// Open the menu-bar menu
239+
ctrl.focusMenu(1);
240+
ctrl.openFocusedMenu();
241+
waitForMenuOpen();
242+
243+
expect(getNumberOfOpenMenus()).toBe(1);
244+
245+
// Open the first nested menu
246+
openSubMenu(0);
247+
waitForMenuOpen();
248+
expect(getOpenSubMenu().text().trim()).toBe('Sub 1 - Content');
249+
250+
expect(getNumberOfOpenMenus()).toBe(2);
251+
252+
// Close the first nested menu with escape key
253+
pressKey(getOpenSubMenu(), $mdConstant.KEY_CODE.ESCAPE);
254+
waitForMenuClose();
255+
256+
// Just main menu should be visible
257+
expect(getNumberOfOpenMenus()).toBe(1);
258+
259+
menuBar.remove();
260+
}));
261+
229262
function openSubMenu(index) {
230263
// If a menu is already open, trigger the mouse leave to close it
231264
if (subMenuOpen) {
@@ -252,7 +285,19 @@ describe('material.components.menuBar', function() {
252285
return angular.element(lastContainer.querySelector('md-menu-content'));
253286
}
254287

255-
function setup(){
288+
function getNumberOfOpenMenus() {
289+
var containers = document.body.querySelectorAll('.md-open-menu-container.md-active');
290+
return containers.length;
291+
}
292+
293+
function pressKey(el, code) {
294+
el.triggerHandler({
295+
type: 'keydown',
296+
keyCode: code
297+
});
298+
}
299+
300+
function setup() {
256301
var el;
257302
inject(function($compile, $rootScope) {
258303
el = $compile([

0 commit comments

Comments
 (0)