diff --git a/src/wp-admin/js/common.js b/src/wp-admin/js/common.js index ddf172e78b..dda924791d 100644 --- a/src/wp-admin/js/common.js +++ b/src/wp-admin/js/common.js @@ -712,7 +712,8 @@ $(document).ready( function() { window.wpResponsive = { init: function() { - var self = this; + var self = this, + x, y; // Modify functionality based on custom activate/deactivate event $document.on( 'wp-responsive-activate.wp-responsive', function() { @@ -727,7 +728,7 @@ $(document).ready( function() { $( '#wp-admin-bar-menu-toggle' ).on( 'click.wp-responsive', function( event ) { event.preventDefault(); $wpwrap.toggleClass( 'wp-responsive-open' ); - if ( $wpwrap.hasClass( 'wp-responsive-open' ) ) { + if ( self.isOpen() ) { $(this).find('a').attr( 'aria-expanded', 'true' ); $( '#adminmenu a:first' ).focus(); } else { @@ -735,6 +736,37 @@ $(document).ready( function() { } } ); + $window.on( 'touchstart.wp-responsive', function( event ) { + var touches = event.originalEvent.touches; + + if ( 1 !== touches.length ) { + return; + } + + x = touches[0].clientX; + y = touches[0].clientY; + } ); + + $window.on( 'touchend.wp-responsive', function( event ) { + var touches = event.originalEvent.changedTouches, + isOpen = self.isOpen(), + distanceX; + + if ( 1 === touches.length && x && y ) { + if ( ( window.isRtl && isOpen ) || ( ! window.isRtl && ! isOpen ) ) { + distanceX = touches[0].clientX - x; + } else { + distanceX = x - touches[0].clientX; + } + + if ( distanceX > 30 && distanceX > Math.abs( touches[0].clientY - y ) ) { + $( '#wp-admin-bar-menu-toggle' ).trigger( 'click' ); + } + } + + x = y = 0; + } ); + // Add menu events $adminmenu.on( 'click.wp-responsive', 'li.wp-has-submenu > a', function( event ) { if ( ! $adminmenu.data('wp-responsive') ) { @@ -758,6 +790,10 @@ $(document).ready( function() { }); }, + isOpen: function() { + return $wpwrap.hasClass( 'wp-responsive-open' ); + }, + activate: function() { setPinMenu();