Skip to content

Commit

Permalink
Menu: Remove active class from top-level item when menu is blurred
Browse files Browse the repository at this point in the history
This issue was introduced by 0bbd156,
which reduced the use of ui-state-focus and ui-state-active to using
only ui-state-focus. This introduced the issue addressed here.

The fix is more of a workaround. With test test in place, we can
investigate a better solution in the future.

Fixes #14919
  • Loading branch information
jzaefferer committed Mar 11, 2016
1 parent 54cd451 commit 4866e14
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 8 deletions.
30 changes: 30 additions & 0 deletions tests/unit/menu/core.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,34 @@ asyncTest( "#9532: Need a way in Menu to keep ui-state-active class on selected
} );
} );

asyncTest( "active menu item styling", function( assert ) {
expect( 5 );
function isActive( item ) {
assert.hasClasses( item.children( ".ui-menu-item-wrapper" ), "ui-state-active" );
}
function isInactive( item ) {
assert.lacksClasses( item.children( ".ui-menu-item-wrapper" ), "ui-state-active" );
}
$.ui.menu.prototype.delay = 0;
var element = $( "#menu4" ).menu();
var parentItem = element.children( "li:eq(1)" );
var childItem = parentItem.find( "li:eq(0)" );
element.menu( "focus", null, parentItem );
setTimeout( function() {
isActive( parentItem );
element.menu( "focus", null, childItem );
setTimeout( function() {
isActive( parentItem );
isActive( childItem );
element.blur();
setTimeout( function() {
isInactive( parentItem );
isInactive( childItem );
$.ui.menu.prototype.delay = 300;
start();
}, 50 );
} );
} );
} );

} );
16 changes: 8 additions & 8 deletions ui/widgets/menu.js
Original file line number Diff line number Diff line change
Expand Up @@ -487,6 +487,10 @@ return $.widget( "ui.menu", {
this._close( currentMenu );

this.blur( event );

// Work around active item staying active after menu is blurred
this._removeClass( currentMenu.find( ".ui-state-active" ), null, "ui-state-active" );

this.activeMenu = currentMenu;
}, this.delay );
},
Expand All @@ -498,14 +502,10 @@ return $.widget( "ui.menu", {
startMenu = this.active ? this.active.parent() : this.element;
}

var active = startMenu
.find( ".ui-menu" )
.hide()
.attr( "aria-hidden", "true" )
.attr( "aria-expanded", "false" )
.end()
.find( ".ui-state-active" ).not( ".ui-menu-item-wrapper" );
this._removeClass( active, null, "ui-state-active" );
startMenu.find( ".ui-menu" )
.hide()
.attr( "aria-hidden", "true" )
.attr( "aria-expanded", "false" );
},

_closeOnDocumentClick: function( event ) {
Expand Down

0 comments on commit 4866e14

Please sign in to comment.