@@ -39,6 +39,10 @@ return $.widget( "ui.selectmenu", {
39
39
defaultElement : "<select>" ,
40
40
options : {
41
41
appendTo : null ,
42
+ classes : {
43
+ "ui-selectmenu-button-open" : "ui-corner-top" ,
44
+ "ui-selectmenu-button-closed" : "ui-corner-all"
45
+ } ,
42
46
disabled : null ,
43
47
icons : {
44
48
button : "ui-icon-triangle-1-s"
@@ -78,7 +82,8 @@ return $.widget( "ui.selectmenu", {
78
82
} ,
79
83
80
84
_drawButton : function ( ) {
81
- var that = this ,
85
+ var icon ,
86
+ that = this ,
82
87
item = this . _parseOption (
83
88
this . element . find ( "option:selected" ) ,
84
89
this . element [ 0 ] . selectedIndex
@@ -98,7 +103,6 @@ return $.widget( "ui.selectmenu", {
98
103
99
104
// Create button
100
105
this . button = $ ( "<span>" , {
101
- "class" : "ui-selectmenu-button ui-widget ui-state-default ui-corner-all" ,
102
106
tabindex : this . options . disabled ? - 1 : 0 ,
103
107
id : this . ids . button ,
104
108
role : "combobox" ,
@@ -110,10 +114,11 @@ return $.widget( "ui.selectmenu", {
110
114
} )
111
115
. insertAfter ( this . element ) ;
112
116
113
- $ ( "<span>" , {
114
- "class" : "ui-icon " + this . options . icons . button
115
- } )
116
- . prependTo ( this . button ) ;
117
+ this . _addClass ( this . button , "ui-selectmenu-button ui-selectmenu-button-closed" ,
118
+ "ui-widget ui-state-default" ) ;
119
+
120
+ icon = $ ( "<span>" ) . prependTo ( this . button ) ;
121
+ this . _addClass ( icon , null , "ui-icon " + this . options . icons . button ) ;
117
122
118
123
this . buttonItem = this . _renderButtonItem ( item )
119
124
. appendTo ( this . button ) ;
@@ -146,15 +151,16 @@ return $.widget( "ui.selectmenu", {
146
151
} ) ;
147
152
148
153
// Wrap menu
149
- this . menuWrap = $ ( "<div>" , {
150
- "class" : "ui-selectmenu-menu ui-front"
151
- } )
152
- . append ( this . menu )
153
- . appendTo ( this . _appendTo ( ) ) ;
154
+ this . menuWrap = $ ( "<div>" ) . append ( this . menu ) ;
155
+ this . _addClass ( this . menuWrap , "ui-selectmenu-menu" , "ui-front" ) ;
156
+ this . menuWrap . appendTo ( this . _appendTo ( ) ) ;
154
157
155
158
// Initialize menu widget
156
159
this . menuInstance = this . menu
157
160
. menu ( {
161
+ classes : {
162
+ "ui-menu" : "ui-corner-bottom"
163
+ } ,
158
164
role : "listbox" ,
159
165
select : function ( event , ui ) {
160
166
event . preventDefault ( ) ;
@@ -184,11 +190,6 @@ return $.widget( "ui.selectmenu", {
184
190
} )
185
191
. menu ( "instance" ) ;
186
192
187
- // Adjust menu styles to dropdown
188
- this . menu
189
- . addClass ( "ui-corner-bottom" )
190
- . removeClass ( "ui-corner-all" ) ;
191
-
192
193
// Don't close the menu on mouseleave
193
194
this . menuInstance . _off ( this . menu , "mouseleave" ) ;
194
195
@@ -258,7 +259,7 @@ return $.widget( "ui.selectmenu", {
258
259
} else {
259
260
260
261
// Menu clears focus on close, reset focus to selected item
261
- this . menu . find ( ".ui-state-active" ) . removeClass ( "ui-state-active" ) ;
262
+ this . _removeClass ( this . menu . find ( ".ui-state-active" ) , null , "ui-state-active" ) ;
262
263
this . menuInstance . focus ( null , this . _getSelectedItem ( ) ) ;
263
264
}
264
265
@@ -304,10 +305,10 @@ return $.widget( "ui.selectmenu", {
304
305
} ,
305
306
306
307
_renderButtonItem : function ( item ) {
307
- var buttonItem = $ ( "<span>" , {
308
- "class" : "ui-selectmenu-text"
309
- } ) ;
308
+ var buttonItem = $ ( "<span>" ) ;
309
+
310
310
this . _setText ( buttonItem , item . label ) ;
311
+ this . _addClass ( buttonItem , "ui-selectmenu-text" ) ;
311
312
312
313
return buttonItem ;
313
314
} ,
@@ -317,15 +318,18 @@ return $.widget( "ui.selectmenu", {
317
318
currentOptgroup = "" ;
318
319
319
320
$ . each ( items , function ( index , item ) {
321
+ var li ;
322
+
320
323
if ( item . optgroup !== currentOptgroup ) {
321
- $ ( "<li>" , {
322
- "class" : "ui-selectmenu-optgroup ui-menu-divider" +
323
- ( item . element . parent ( "optgroup" ) . prop ( "disabled" ) ?
324
- " ui-state-disabled" :
325
- "" ) ,
324
+ li = $ ( "<li>" , {
326
325
text : item . optgroup
327
- } )
328
- . appendTo ( ul ) ;
326
+ } ) ;
327
+ that . _addClass ( li , "ui-selectmenu-optgroup" , "ui-menu-divider" +
328
+ ( item . element . parent ( "optgroup" ) . prop ( "disabled" ) ?
329
+ " ui-state-disabled" :
330
+ "" ) ) ;
331
+
332
+ li . appendTo ( ul ) ;
329
333
330
334
currentOptgroup = item . optgroup ;
331
335
}
@@ -345,7 +349,7 @@ return $.widget( "ui.selectmenu", {
345
349
} ) ;
346
350
347
351
if ( item . disabled ) {
348
- li . addClass ( "ui-state-disabled" ) ;
352
+ this . _addClass ( li , null , "ui-state-disabled" ) ;
349
353
}
350
354
this . _setText ( wrapper , item . label ) ;
351
355
@@ -542,9 +546,9 @@ return $.widget( "ui.selectmenu", {
542
546
543
547
_setOption : function ( key , value ) {
544
548
if ( key === "icons" ) {
545
- this . button . find ( "span.ui-icon" )
546
- . removeClass ( this . options . icons . button )
547
- . addClass ( value . button ) ;
549
+ var icon = this . button . find ( "span.ui-icon" ) ;
550
+ this . _removeClass ( icon , null , this . options . icons . button )
551
+ . _addClass ( icon , null , value . button ) ;
548
552
}
549
553
550
554
this . _super ( key , value ) ;
@@ -555,9 +559,8 @@ return $.widget( "ui.selectmenu", {
555
559
556
560
if ( key === "disabled" ) {
557
561
this . menuInstance . option ( "disabled" , value ) ;
558
- this . button
559
- . toggleClass ( "ui-state-disabled" , value )
560
- . attr ( "aria-disabled" , value ) ;
562
+ this . button . attr ( "aria-disabled" , value ) ;
563
+ this . _toggleClass ( this . button , null , "ui-state-disabled" , value ) ;
561
564
562
565
this . element . prop ( "disabled" , value ) ;
563
566
if ( value ) {
@@ -594,11 +597,17 @@ return $.widget( "ui.selectmenu", {
594
597
} ,
595
598
596
599
_toggleAttr : function ( ) {
597
- this . button
598
- . toggleClass ( "ui-corner-top" , this . isOpen )
599
- . toggleClass ( "ui-corner-all" , ! this . isOpen )
600
- . attr ( "aria-expanded" , this . isOpen ) ;
601
- this . menuWrap . toggleClass ( "ui-selectmenu-open" , this . isOpen ) ;
600
+ this . button . attr ( "aria-expanded" , this . isOpen ) ;
601
+
602
+ // We can't use two _toggleClass() calls here, because we need to make sure
603
+ // we always remove classes first and add them second, otherwise if both classes have the
604
+ // same theme class, it will be removed after we add it.
605
+ this . _removeClass ( this . button , "ui-selectmenu-button-" +
606
+ ( this . isOpen ? "closed" : "open" ) )
607
+ . _addClass ( this . button , "ui-selectmenu-button-" +
608
+ ( this . isOpen ? "open" : "closed" ) )
609
+ . _toggleClass ( this . menuWrap , "ui-selectmenu-open" , null , this . isOpen ) ;
610
+
602
611
this . menu . attr ( "aria-hidden" , ! this . isOpen ) ;
603
612
} ,
604
613
0 commit comments