Make WordPress Core

Changeset 58449

Timestamp:
06/20/2024 07:39:50 PM (4 weeks ago)
Author:
joedolson
Message:

Administration: A11y: Use aria-haspopup only if item has popup behavior.

Update behavior of admin menu so that the aria-haspopup attribute is only applied in responsive mode, when there is a popup behavior present. Add aria-expanded attributes to report current popup state.

Props afercia, khokansardar, ryokuhi, joedolson.
Fixes #43095.

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/js/_enqueues/admin/common.js

    r58375 r58449  
    904904
    905905    /**
    906      * Handles the `aria-haspopup` attribute on the current menu item when it has a submenu.
    907      *
    908      * @since 4.4.0
    909      *
    910      * @return {void}
    911      */
    912     function currentMenuItemHasPopup() {
    913         var $current = $( 'a.wp-has-current-submenu' );
    914 
    915         if ( 'folded' === menuState ) {
    916             // When folded or auto-folded and not responsive view, the current menu item does have a fly-out sub-menu.
    917             $current.attr( 'aria-haspopup', 'true' );
    918         } else {
    919             // When expanded or in responsive view, reset aria-haspopup.
    920             $current.attr( 'aria-haspopup', 'false' );
    921         }
    922     }
    923 
    924     $document.on( 'wp-menu-state-set wp-collapse-menu wp-responsive-activate wp-responsive-deactivate', currentMenuItemHasPopup );
    925 
    926     /**
    927906     * Ensures an admin submenu is within the visual viewport.
    928907     *
     
    16961675            $document.on( 'wp-responsive-activate.wp-responsive', function() {
    16971676                self.activate();
     1677
    16981678            }).on( 'wp-responsive-deactivate.wp-responsive', function() {
    16991679                self.deactivate();
     1680
    17001681            });
    17011682
     
    17491730                            var focusIsInToggle  = $.contains( toggleButton, focusedElement );
    17501731                            var focusIsInSidebar = $.contains( sidebar, focusedElement );
    1751                            
     1732
    17521733                            if ( ! focusIsInToggle && ! focusIsInSidebar ) {
    17531734                                $( toggleButton ).trigger( 'click.wp-responsive' );
     
    17631744                    return;
    17641745                }
    1765 
     1746                let state = ( 'false' === $( this ).attr( 'aria-expanded' ) ) ? 'true' : 'false';
    17661747                $( this ).parent( 'li' ).toggleClass( 'selected' );
     1748
    17671749                $( this ).trigger( 'focus' );
    17681750                event.preventDefault();
     
    18361818
    18371819            this.maybeDisableSortables();
     1820
     1821
     1822
     1823
     1824
     1825
     1826
     1827
     1828
     1829
     1830
     1831
     1832
     1833
     1834
     1835
     1836
     1837
     1838
     1839
     1840
     1841
     1842
     1843
     1844
     1845
     1846
     1847
    18381848        },
    18391849
     
    20352045    setPinMenu();
    20362046    setMenuState();
    2037     currentMenuItemHasPopup();
    20382047    makeNoticesDismissible();
    20392048    aria_button_if_js();
  • trunk/src/wp-admin/menu-header.php

    r56175 r58449  
    9999            $class[] = 'wp-not-current-submenu';
    100100            if ( ! empty( $submenu_items ) ) {
    101                 $aria_attributes .= 'aria-haspopup="true"';
     101                $aria_attributes .= '';
    102102            }
    103103        }
Note: See TracChangeset for help on using the changeset viewer.