Menu: Properly remove submenu carat icons and menu dividers during destroy and add a test for this functionality

This commit is contained in:
kborchers 2012-06-01 00:03:16 -05:00
parent 6e7ee98603
commit 2da2ae5070
2 changed files with 17 additions and 4 deletions

View File

@ -46,6 +46,9 @@ test("destroy", function() {
domEqual("#menu1", function() { domEqual("#menu1", function() {
$("#menu1").menu().menu("destroy"); $("#menu1").menu().menu("destroy");
}); });
domEqual("#menu2", function() {
$("#menu2").menu().menu("destroy");
});
domEqual("#menu5", function() { domEqual("#menu5", function() {
$("#menu5").menu().menu("destroy"); $("#menu5").menu().menu("destroy");
}); });

18
ui/jquery.ui.menu.js vendored
View File

@ -137,7 +137,7 @@ $.widget( "ui.menu", {
this.element this.element
.removeAttr( "aria-activedescendant" ) .removeAttr( "aria-activedescendant" )
.find( ".ui-menu" ).andSelf() .find( ".ui-menu" ).andSelf()
.removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all" ) .removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
.removeAttr( "role" ) .removeAttr( "role" )
.removeAttr( "tabIndex" ) .removeAttr( "tabIndex" )
.removeAttr( "aria-labelledby" ) .removeAttr( "aria-labelledby" )
@ -157,7 +157,16 @@ $.widget( "ui.menu", {
.removeClass( "ui-corner-all ui-state-hover" ) .removeClass( "ui-corner-all ui-state-hover" )
.removeAttr( "tabIndex" ) .removeAttr( "tabIndex" )
.removeAttr( "role" ) .removeAttr( "role" )
.removeAttr( "aria-haspopup" ); .removeAttr( "aria-haspopup" )
.children().each( function() {
var elem = $( this );
if ( elem.data( "ui-menu-submenu-carat" ) ) {
elem.remove();
}
});
// destroy menu dividers
this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
// unbind currentEventTarget click event handler // unbind currentEventTarget click event handler
$( currentEventTarget ).unbind( "click.menu" ); $( currentEventTarget ).unbind( "click.menu" );
@ -309,11 +318,12 @@ $.widget( "ui.menu", {
submenus.each(function() { submenus.each(function() {
var menu = $( this ), var menu = $( this ),
item = menu.prev( "a" ); item = menu.prev( "a" ),
submenuCarat = $( '<span class="ui-menu-icon ui-icon ui-icon-carat-1-e"></span>' ).data( "ui-menu-submenu-carat", true );
item item
.attr( "aria-haspopup", "true" ) .attr( "aria-haspopup", "true" )
.prepend( '<span class="ui-menu-icon ui-icon ui-icon-carat-1-e"></span>' ); .prepend( submenuCarat );
menu.attr( "aria-labelledby", item.attr( "id" ) ); menu.attr( "aria-labelledby", item.attr( "id" ) );
}); });
}, },