From 019a6dee367336526110d8492bf1d2a6c740a582 Mon Sep 17 00:00:00 2001 From: Andrew Ozz Date: Wed, 11 Mar 2015 16:28:21 +0000 Subject: [PATCH] Allow swiping of the admin menu on touch devices. Props iseulde, ninnypants. See #31187. git-svn-id: https://develop.svn.wordpress.org/trunk@31720 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/js/common.js | 40 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) 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();