Make WordPress Core

Ticket #58912: 58912.3.diff

File 58912.3.diff, 5.1 KB (added by joedolson, 8 months ago)

Combined patch to handle focus location & click behavior

  • src/js/_enqueues/admin/common.js

     
    17021702                                }
    17031703                        } );
    17041704
    1705                         // Close sidebar when focus moves outside of toggle and sidebar.
    1706                         $( '#wp-admin-bar-menu-toggle, #adminmenumain' ).on( 'focusout', function() {
    1707                                 var focusIsInToggle, focusIsInSidebar;
     1705                        // Close sidebar when target moves outside of toggle and sidebar.
     1706                        $( document ).on( 'click', function( e ) {
    17081707
    17091708                                if ( ! $wpwrap.hasClass( 'wp-responsive-open' ) || ! document.hasFocus() ) {
    17101709                                        return;
    17111710                                }
    1712                                 // A brief delay is required to allow focus to switch to another element.
    1713                                 setTimeout( function() {
    1714                                         focusIsInToggle  = $.contains( $( '#wp-admin-bar-menu-toggle' )[0], $( ':focus' )[0] );
    1715                                         focusIsInSidebar = $.contains( $( '#adminmenumain' )[0], $( ':focus' )[0] );
    17161711
    1717                                         if ( ! focusIsInToggle && ! focusIsInSidebar ) {
    1718                                                 $( '#wp-admin-bar-menu-toggle' ).trigger( 'click.wp-responsive' );
    1719                                         }
    1720                                 }, 10 );
     1712                                var focusIsInToggle  = $.contains( $( '#wp-admin-bar-menu-toggle' )[0], e.target );
     1713                                var focusIsInSidebar = $.contains( $( '#adminmenuwrap' )[0], e.target );
     1714
     1715                                if ( ! focusIsInToggle && ! focusIsInSidebar ) {
     1716                                        $( '#wp-admin-bar-menu-toggle' ).trigger( 'click.wp-responsive' );
     1717                                }
    17211718                        } );
    17221719
     1720                        // Close sidebar when a keypress completes outside of toggle and sidebar.
     1721                        $( document ).on( 'keyup', function( event ) {
     1722                                var toggleButton   = $( '#wp-admin-bar-menu-toggle' )[0];
     1723                                if ( ! $wpwrap.hasClass( 'wp-responsive-open' ) ) {
     1724                                    return;
     1725                                }
     1726                                if ( 27 === event.keyCode ) {
     1727                                        $( toggleButton ).trigger( 'click.wp-responsive' );
     1728                                        $( toggleButton ).find( 'a' ).trigger( 'focus' );
     1729                                } else {
     1730                                        if ( 9 === event.keyCode ) {
     1731                                                var sidebar        = $( '#adminmenuwrap' )[0];
     1732                                                var focusedElement = event.relatedTarget || document.activeElement;
     1733                                                // A brief delay is required to allow focus to switch to another element.
     1734                                                setTimeout( function() {
     1735                                                        var focusIsInToggle  = $.contains( toggleButton, focusedElement );
     1736                                                        var focusIsInSidebar = $.contains( sidebar, focusedElement );
     1737                                                       
     1738                                                        if ( ! focusIsInToggle && ! focusIsInSidebar ) {
     1739                                                                $( toggleButton ).trigger( 'click.wp-responsive' );
     1740                                                        }
     1741                                                }, 10 );
     1742                                        }
     1743                                }
     1744                        });
    17231745
    17241746                        // Add menu events.
    17251747                        $adminmenu.on( 'click.wp-responsive', 'li.wp-has-submenu > a', function( event ) {