@@ -15,14 +15,22 @@ function withinControls(selector: string): string {
1515 return `media-controls ${ selector } , .media-controls ${ selector } ` ;
1616}
1717
18- /** Scope a descendant selector to each comma-separated panel matcher. */
19- function withinMenuPanel ( panelSelector : string , descendant : string ) : string {
20- return panelSelector
18+ function unchecked ( selector : string ) : string {
19+ return selector
2120 . split ( ',' )
22- . map ( ( panel ) => `${ panel . trim ( ) } ${ descendant } ` )
21+ . map ( ( part ) => `${ part . trim ( ) } [aria-checked="false"] ` )
2322 . join ( ', ' ) ;
2423}
2524
25+ const menu = '[role="menu"]' ;
26+ const item = '[role="menuitem"]' ;
27+ const option = '[role="menuitemradio"]' ;
28+ const activeMenu = `${ menu } [data-menu-view-state="active"]` ;
29+ const playbackRateOptions = [
30+ `#playback-rate-menu ${ option } ` ,
31+ withinControls ( `.media-menu--playback-rate ${ option } ` ) ,
32+ ] . join ( ', ' ) ;
33+
2634export const SELECTORS = {
2735 // Player containers
2836 // HTML: <video-player>, React: wrapper div around VideoSkin
@@ -47,37 +55,16 @@ export const SELECTORS = {
4755 withinControls ( '.media-button--playback-rate' ) ,
4856 withinControls ( 'button[aria-haspopup="menu"][aria-label^="Playback rate"]:not(.media-menu__item)' ) ,
4957 ] . join ( ', ' ) ,
50- playbackRateMenuPanel : '#playback-rate-menu[role="menu"], [role="menu"]#playback-rate-menu' ,
51- playbackRateMenuRadioItems : withinMenuPanel (
52- '#playback-rate-menu[role="menu"], [role="menu"]#playback-rate-menu' ,
53- '[role="menuitemradio"]'
54- ) ,
55- /** Standalone playback rate menu items (HTML id + React open menu in controls). */
56- openPlaybackRateMenuRadioItems : [
57- withinMenuPanel ( '#playback-rate-menu[role="menu"], [role="menu"]#playback-rate-menu' , '[role="menuitemradio"]' ) ,
58- withinControls ( '[role="menu"] [role="menuitemradio"]' ) ,
59- ] . join ( ', ' ) ,
60- /** Currently visible settings submenu panel (HTML + React). */
61- activeMenuPanel : '[role="menu"][data-menu-view-state="active"]' ,
62- activeMenuRadioItems : '[role="menu"][data-menu-view-state="active"] [role="menuitemradio"]' ,
58+ playbackRateUncheckedOptions : unchecked ( playbackRateOptions ) ,
59+ activeMenuOptions : `${ activeMenu } ${ option } ` ,
60+ activeMenuUncheckedOptions : unchecked ( `${ activeMenu } ${ option } ` ) ,
6361 settingsButton : [
6462 withinControls ( '.media-button--settings' ) ,
6563 withinControls ( 'button[commandfor="settings-menu"]' ) ,
6664 withinControls ( 'button[aria-label="Settings"]' ) ,
6765 ] . join ( ', ' ) ,
68- settingsCaptionsItem : [
69- 'media-menu-item[commandfor="settings-captions-menu"]' ,
70- '[role="menuitem"]:has-text("Captions")' ,
71- ] . join ( ', ' ) ,
72- settingsSpeedItem : [ 'media-menu-item[commandfor="settings-speed-menu"]' , '[role="menuitem"]:has-text("Speed")' ] . join (
73- ', '
74- ) ,
75- settingsSpeedMenuPanel : '#settings-speed-menu[role="menu"], [role="menu"]#settings-speed-menu' ,
76- settingsCaptionsMenuPanel : '#settings-captions-menu[role="menu"], [role="menu"]#settings-captions-menu' ,
77- settingsCaptionsMenuRadioItems : withinMenuPanel (
78- '#settings-captions-menu[role="menu"], [role="menu"]#settings-captions-menu' ,
79- '[role="menuitemradio"]'
80- ) ,
66+ settingsCaptionsItem : `${ item } :has-text("Captions")` ,
67+ settingsSpeedItem : `${ item } :has-text("Speed")` ,
8168
8269 // Sliders
8370 // HTML: <media-time-slider>, React: horizontal .media-slider inside .media-time-controls
0 commit comments