@@ -36,7 +36,8 @@ return $.widget( "ui.menu", {
36
36
"ui-menu-icon" : "" ,
37
37
"ui-menu-item" : "" ,
38
38
"ui-menu-divider" : "" ,
39
- "ui-menu-item-wrapper" : ""
39
+ "ui-menu-item-wrapper" : "" ,
40
+ "ui-menu-submenu-caret" : ""
40
41
} ,
41
42
icons : {
42
43
submenu : "ui-icon-caret-1-e"
@@ -67,13 +68,12 @@ return $.widget( "ui.menu", {
67
68
role : this . options . role ,
68
69
tabIndex : 0
69
70
} ) ;
70
- this . _addClass ( "ui-menu" , " ui-widget ui-widget-content" ) ;
71
- this [ "_" + ( ! ! this . element . find ( ".ui-icon" ) . length ? "add " : "remove " ) +
71
+ this . _addClass ( "ui-menu ui-widget ui-widget-content" ) ;
72
+ this [ ( ! ! this . element . find ( ".ui-icon" ) . length ? "_add " : "_remove " ) +
72
73
"Class" ] ( "ui-menu-icons" ) ;
73
74
if ( this . options . disabled ) {
74
- this . element
75
- . addClass ( "ui-state-disabled" )
76
- . attr ( "aria-disabled" , "true" ) ;
75
+ this . _addClass ( "ui-state-disabled" ) ;
76
+ this . element . attr ( "aria-disabled" , "true" ) ;
77
77
}
78
78
79
79
this . _on ( {
@@ -118,7 +118,7 @@ return $.widget( "ui.menu", {
118
118
var target = $ ( event . currentTarget ) ;
119
119
// Remove ui-state-active class from siblings of the newly focused menu item
120
120
// to avoid a jump caused by adjacent elements both having a class with a border
121
- target . siblings ( ) . children ( ".ui-state-active" ) . removeClass ( "ui-state-active" ) ;
121
+ this . _removeClass ( target . siblings ( ) . children ( ".ui-state-active" ) , "ui-state-active" ) ;
122
122
123
123
this . focus ( event , target ) ;
124
124
} ,
@@ -159,8 +159,17 @@ return $.widget( "ui.menu", {
159
159
} ,
160
160
161
161
_destroy : function ( ) {
162
+ var items = this . element . find ( ".ui-menu-item" )
163
+ . removeAttr ( "role" )
164
+ . removeAttr ( "aria-disabled" ) ,
165
+ submenus = items . children ( ".ui-menu-item-wrapper" )
166
+ . removeUniqueId ( )
167
+ . removeAttr ( "tabIndex" )
168
+ . removeAttr ( "role" )
169
+ . removeAttr ( "aria-haspopup" ) ;
170
+
162
171
// Destroy (sub)menus
163
- var menu = this . element
172
+ this . element
164
173
. removeAttr ( "aria-activedescendant" )
165
174
. find ( ".ui-menu" ) . addBack ( )
166
175
. removeAttr ( "role" )
@@ -171,30 +180,13 @@ return $.widget( "ui.menu", {
171
180
. removeAttr ( "aria-disabled" )
172
181
. removeUniqueId ( )
173
182
. 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" )
179
- . removeUniqueId ( )
180
- . removeAttr ( "tabIndex" )
181
- . removeAttr ( "role" )
182
- . removeAttr ( "aria-haspopup" ) ;
183
183
184
184
submenus . children ( ) . each ( function ( ) {
185
185
var elem = $ ( this ) ;
186
186
if ( elem . data ( "ui-menu-submenu-caret" ) ) {
187
187
elem . remove ( ) ;
188
188
}
189
189
} ) ;
190
-
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
-
195
- // Destroy menu dividers
196
- this . _removeClass ( this . element . find ( ".ui-menu-divider" ) , "ui-menu-divider" ,
197
- "ui-widget-content" ) ;
198
190
} ,
199
191
200
192
_keydown : function ( event ) {
@@ -293,7 +285,8 @@ return $.widget( "ui.menu", {
293
285
icon = this . options . icons . submenu ,
294
286
submenus = this . element . find ( this . options . menus ) ;
295
287
296
- this . element . toggleClass ( "ui-menu-icons" , ! ! this . element . find ( ".ui-icon" ) . length ) ;
288
+ this [ ( ! ! this . element . find ( ".ui-icon" ) . length ? "_add" : "_remove" ) +
289
+ "Class" ] ( "ui-menu-icons" ) ;
297
290
298
291
// Initialize nested menus
299
292
submenus . filter ( ":not(.ui-menu)" )
@@ -306,18 +299,18 @@ return $.widget( "ui.menu", {
306
299
. each ( function ( ) {
307
300
var menu = $ ( this ) ,
308
301
item = menu . prev ( ) ,
309
- submenuCaret = $ ( "<span>" )
310
- . addClass ( "ui-menu-icon ui-icon " + icon )
311
- . data ( "ui-menu-submenu-caret" , true ) ;
302
+ submenuCaret = $ ( "<span>" ) . data ( "ui-menu-submenu-caret" , true ) ;
303
+
304
+ that . _addClass ( submenuCaret , "ui-menu-icon ui-icon " + icon ) ;
312
305
313
306
item
314
307
. attr ( "aria-haspopup" , "true" )
315
308
. prepend ( submenuCaret ) ;
316
309
menu . attr ( "aria-labelledby" , item . attr ( "id" ) ) ;
317
310
} ) ;
318
311
319
- this . _addClass ( submenus . filter ( ":not(.ui-menu)" ) , "ui-menu" ,
320
- "ui-widget ui-widget-content ui-front" ) ;
312
+ this . _addClass ( submenus . filter ( ":not(.ui-menu)" ) ,
313
+ "ui-menu ui- widget ui-widget-content ui-front" ) ;
321
314
322
315
menus = submenus . add ( this . element ) ;
323
316
items = menus . find ( this . options . items ) ;
@@ -326,7 +319,7 @@ return $.widget( "ui.menu", {
326
319
items . not ( ".ui-menu-item" ) . each ( function ( ) {
327
320
var item = $ ( this ) ;
328
321
if ( that . _isDivider ( item ) ) {
329
- that . _addClass ( item , "ui-menu-divider" , " ui-widget-content" ) ;
322
+ that . _addClass ( item , "ui-menu-divider ui-widget-content" ) ;
330
323
}
331
324
} ) ;
332
325
@@ -360,28 +353,27 @@ return $.widget( "ui.menu", {
360
353
361
354
_setOption : function ( key , value ) {
362
355
if ( key === "icons" ) {
363
- this . element . find ( ".ui-menu-icon" )
364
- . removeClass ( this . options . icons . submenu )
365
- . addClass ( value . submenu ) ;
356
+ var icons = this . element . find ( ".ui-menu-icon" ) ;
357
+ this . _removeClass ( icons , this . options . icons . submenu ) ;
358
+ this . _addClass ( icons , value . submenu ) ;
366
359
}
367
360
if ( key === "disabled" ) {
368
- this . element
369
- . toggleClass ( "ui-state-disabled" , ! ! value )
370
- . attr ( "aria-disabled" , value ) ;
361
+ this . element . attr ( "aria-disabled" , value ) ;
362
+ this [ ( ! ! value ? "_add" : "_remove" ) + "Class" ] ( "ui-state-disabled" , ! ! value ) ;
371
363
}
372
364
this . _super ( key , value ) ;
373
365
} ,
374
366
375
367
focus : function ( event , item ) {
376
- var nested , focused ;
368
+ var nested , focused , highlight ;
377
369
this . blur ( event , event && event . type === "focus" ) ;
378
370
379
371
this . _scrollIntoView ( item ) ;
380
372
381
373
this . active = item . first ( ) ;
382
- focused = this . active . children ( ".ui-menu-item-wrapper" )
383
- . addClass ( "ui-state-focus" )
384
- . removeClass ( "ui-state-active" ) ;
374
+ focused = this . active . children ( ".ui-menu-item-wrapper" ) ;
375
+ this . _addClass ( focused , "ui-state-focus" ) ;
376
+ this . _removeClass ( focused , "ui-state-active" ) ;
385
377
386
378
// Only update aria-activedescendant if there's a role
387
379
// otherwise we assume focus is managed elsewhere
@@ -390,11 +382,12 @@ return $.widget( "ui.menu", {
390
382
}
391
383
392
384
// Highlight active parent menu item, if any
393
- this . active
385
+ highlight = this . active
394
386
. parent ( )
395
387
. closest ( ".ui-menu-item" )
396
- . children ( ".ui-menu-item-wrapper" )
397
- . addClass ( "ui-state-active" ) ;
388
+ . children ( ".ui-menu-item-wrapper" ) ;
389
+
390
+ this . _addClass ( highlight , "ui-state-active" ) ;
398
391
399
392
if ( event && event . type === "keydown" ) {
400
393
this . _close ( ) ;
@@ -440,7 +433,7 @@ return $.widget( "ui.menu", {
440
433
return ;
441
434
}
442
435
443
- this . active . children ( ".ui-menu-item-wrapper" ) . removeClass ( "ui-state-focus" ) ;
436
+ this . _removeClass ( this . active . children ( ".ui-menu-item-wrapper" ) , "ui-state-focus" ) ;
444
437
this . active = null ;
445
438
446
439
this . _trigger ( "blur" , event , { item : this . active } ) ;
@@ -504,14 +497,15 @@ return $.widget( "ui.menu", {
504
497
startMenu = this . active ? this . active . parent ( ) : this . element ;
505
498
}
506
499
507
- startMenu
500
+ var active = startMenu
508
501
. find ( ".ui-menu" )
509
502
. hide ( )
510
503
. attr ( "aria-hidden" , "true" )
511
504
. attr ( "aria-expanded" , "false" )
512
505
. end ( )
513
- . find ( ".ui-state-active" ) . not ( ".ui-state-focus" )
514
- . removeClass ( "ui-state-active" ) ;
506
+ . find ( ".ui-state-active" ) . not ( ".ui-state-focus" ) ;
507
+
508
+ this . _removeClass ( active , "ui-state-active" ) ;
515
509
} ,
516
510
517
511
_closeOnDocumentClick : function ( event ) {
0 commit comments