@@ -107,7 +107,19 @@ export class CETMenuItem extends Disposable implements IMenuItem {
107
107
} ) ;
108
108
109
109
this . itemElement = append ( this . container , $ ( 'a.cet-action-menu-item' ) ) ;
110
- this . itemElement . setAttribute ( 'role' , 'menuitem' ) ;
110
+ let role = 'menuitem' ;
111
+ switch ( this . item . type ) {
112
+ case 'checkbox' :
113
+ case 'radio' :
114
+ role += this . item . type ;
115
+ break ;
116
+ case 'separator' :
117
+ role = this . item . type ;
118
+ break ;
119
+ case 'submenu' :
120
+ this . itemElement . setAttribute ( 'aria-haspopup' , 'true' ) ;
121
+ }
122
+ this . itemElement . setAttribute ( 'role' , role ) ;
111
123
112
124
if ( this . mnemonic ) {
113
125
this . itemElement . setAttribute ( 'aria-keyshortcuts' , `${ this . mnemonic } ` ) ;
@@ -327,11 +339,9 @@ export class CETMenuItem extends Disposable implements IMenuItem {
327
339
updateChecked ( ) : void {
328
340
if ( this . item . checked ) {
329
341
addClass ( this . itemElement , 'checked' ) ;
330
- this . itemElement . setAttribute ( 'role' , 'menuitemcheckbox' + this . item . type ) ;
331
342
this . itemElement . setAttribute ( 'aria-checked' , 'true' ) ;
332
343
} else {
333
344
removeClass ( this . itemElement , 'checked' ) ;
334
- this . itemElement . setAttribute ( 'role' , 'menuitem' ) ;
335
345
this . itemElement . setAttribute ( 'aria-checked' , 'false' ) ;
336
346
}
337
347
}
@@ -348,7 +358,6 @@ export class CETMenuItem extends Disposable implements IMenuItem {
348
358
menuItem . updateIcon ( ) ;
349
359
// updateChecked() *all* radio buttons in group
350
360
menuItem . updateChecked ( ) ;
351
- menuItem
352
361
// set the radioGroup property of all the other radio buttons since it was already calculated
353
362
if ( menuItem !== this ) {
354
363
menuItem . radioGroup = this . radioGroup ;
0 commit comments