@@ -30,6 +30,14 @@ return $.widget( "ui.menu", {
3030 defaultElement : "<ul>" ,
3131 delay : 300 ,
3232 options : {
33+ classes : {
34+ "ui-menu" : "" ,
35+ "ui-menu-icons" : "" ,
36+ "ui-menu-icon" : "" ,
37+ "ui-menu-item" : "" ,
38+ "ui-menu-divider" : "" ,
39+ "ui-menu-item-wrapper" : ""
40+ } ,
3341 icons : {
3442 submenu : "ui-icon-caret-1-e"
3543 } ,
@@ -55,13 +63,13 @@ return $.widget( "ui.menu", {
5563 this . mouseHandled = false ;
5664 this . element
5765 . uniqueId ( )
58- . addClass ( "ui-menu ui-widget ui-widget-content" )
59- . toggleClass ( "ui-menu-icons" , ! ! this . element . find ( ".ui-icon" ) . length )
6066 . attr ( {
6167 role : this . options . role ,
6268 tabIndex : 0
6369 } ) ;
64-
70+ this . _addClass ( "ui-menu" , "ui-widget ui-widget-content" ) ;
71+ this [ "_" + ( ! ! this . element . find ( ".ui-icon" ) . length ? "add" : "remove" ) +
72+ "Class" ] ( "ui-menu-icons" ) ;
6573 if ( this . options . disabled ) {
6674 this . element
6775 . addClass ( "ui-state-disabled" )
@@ -152,39 +160,41 @@ return $.widget( "ui.menu", {
152160
153161 _destroy : function ( ) {
154162 // Destroy (sub)menus
155- this . element
156- . removeAttr ( "aria-activedescendant" )
157- . find ( ".ui-menu" ) . addBack ( )
158- . removeClass ( "ui-menu ui-widget ui-widget-content ui-menu-icons ui-front" )
163+ var menu = this . element
164+ . removeAttr ( "aria-activedescendant" )
165+ . find ( ".ui-menu" ) . addBack ( )
159166 . removeAttr ( "role" )
160167 . removeAttr ( "tabIndex" )
161168 . removeAttr ( "aria-labelledby" )
162169 . removeAttr ( "aria-expanded" )
163170 . removeAttr ( "aria-hidden" )
164171 . removeAttr ( "aria-disabled" )
165172 . removeUniqueId ( )
166- . show ( ) ;
167-
168- // Destroy menu items
169- this . element . find ( ".ui-menu-item" )
170- . removeClass ( "ui-menu-item" )
171- . removeAttr ( "role" )
172- . removeAttr ( "aria-disabled" )
173- . children ( ".ui-menu-item-wrapper" )
173+ . show ( ) ,
174+ items = this . element . find ( ".ui-menu-item" )
175+ . removeClass ( "ui-menu-item" )
176+ . removeAttr ( "role" )
177+ . removeAttr ( "aria-disabled" ) ,
178+ submenus = items . children ( ".ui-menu-item-wrapper" )
174179 . removeUniqueId ( )
175- . removeClass ( "ui-menu-item-wrapper ui-state-hover" )
176180 . removeAttr ( "tabIndex" )
177181 . removeAttr ( "role" )
178- . removeAttr ( "aria-haspopup" )
179- . children ( ) . each ( function ( ) {
182+ . removeAttr ( "aria-haspopup" ) ;
183+
184+ submenus . children ( ) . each ( function ( ) {
180185 var elem = $ ( this ) ;
181186 if ( elem . data ( "ui-menu-submenu-caret" ) ) {
182187 elem . remove ( ) ;
183188 }
184189 } ) ;
185190
191+ this . _removeClass ( menu , "ui-menu ui-menu-icons" , "ui-widget ui-widget-content ui-front" ) ;
192+ this . _removeClass ( items , "ui-menu-item" ) ;
193+ this . _removeClass ( submenus , "ui-menu-item-wrapper" , "ui-state-hover ui-state" ) ;
194+
186195 // Destroy menu dividers
187- this . element . find ( ".ui-menu-divider" ) . removeClass ( "ui-menu-divider ui-widget-content" ) ;
196+ this . _removeClass ( this . element . find ( ".ui-menu-divider" ) , "ui-menu-divider" ,
197+ "ui-widget-content" ) ;
188198 } ,
189199
190200 _keydown : function ( event ) {
@@ -278,7 +288,7 @@ return $.widget( "ui.menu", {
278288 } ,
279289
280290 refresh : function ( ) {
281- var menus , items ,
291+ var menus , items , newSubmenus , newItems ,
282292 that = this ,
283293 icon = this . options . icons . submenu ,
284294 submenus = this . element . find ( this . options . menus ) ;
@@ -287,7 +297,6 @@ return $.widget( "ui.menu", {
287297
288298 // Initialize nested menus
289299 submenus . filter ( ":not(.ui-menu)" )
290- . addClass ( "ui-menu ui-widget ui-widget-content ui-front" )
291300 . hide ( )
292301 . attr ( {
293302 role : this . options . role ,
@@ -307,28 +316,31 @@ return $.widget( "ui.menu", {
307316 menu . attr ( "aria-labelledby" , item . attr ( "id" ) ) ;
308317 } ) ;
309318
319+ this . _addClass ( submenus . filter ( ":not(.ui-menu)" ) , "ui-menu" ,
320+ "ui-widget ui-widget-content ui-front" ) ;
321+
310322 menus = submenus . add ( this . element ) ;
311323 items = menus . find ( this . options . items ) ;
312324
313325 // Initialize menu-items containing spaces and/or dashes only as dividers
314326 items . not ( ".ui-menu-item" ) . each ( function ( ) {
315327 var item = $ ( this ) ;
316328 if ( that . _isDivider ( item ) ) {
317- item . addClass ( "ui-widget-content ui-menu-divider " ) ;
329+ that . _addClass ( item , "ui-menu-divider" , " ui-widget-content " ) ;
318330 }
319331 } ) ;
320332
321333 // Don't refresh list items that are already adapted
322- items . not ( ".ui-menu-item, .ui-menu-divider" )
323- . addClass ( "ui-menu-item" )
324- . children ( )
334+ newItems = items . not ( ".ui-menu-item, .ui-menu-divider" ) ;
335+ newSubmenus = newItems . children ( )
325336 . not ( ".ui-menu" )
326- . addClass ( "ui-menu-item-wrapper" )
327337 . uniqueId ( )
328338 . attr ( {
329339 tabIndex : - 1 ,
330340 role : this . _itemRole ( )
331341 } ) ;
342+ this . _addClass ( newItems , "ui-menu-item" ) ;
343+ this . _addClass ( newSubmenus , "ui-menu-item-wrapper" ) ;
332344
333345 // Add aria-disabled attribute to any disabled menu item
334346 items . filter ( ".ui-state-disabled" ) . attr ( "aria-disabled" , "true" ) ;
0 commit comments