WordPress.org

Make WordPress Core

Ticket #31187: 31187.4.diff

File 31187.4.diff, 4.0 KB (added by ninnypants, 5 years ago)
  • src/wp-admin/js/common.js

     
    707707
    708708        window.wpResponsive = {
    709709                init: function() {
    710                         var self = this;
     710                        var self = this,
     711                        wpTouchMenu = {
     712                                started: false,
     713                                tracking: false,
     714                                startX: 0,
     715                                startY: 0,
     716                                open: false,
     717                                rtl: ( 'rtl' === document.documentElement.getAttribute( 'dir' ) )
     718                        };
    711719
    712720                        // Modify functionality based on custom activate/deactivate event
    713721                        $document.on( 'wp-responsive-activate.wp-responsive', function() {
     
    725733                                if ( $wpwrap.hasClass( 'wp-responsive-open' ) ) {
    726734                                        $(this).find('a').attr( 'aria-expanded', 'true' );
    727735                                        $( '#adminmenu a:first' ).focus();
     736                                        wpTouchMenu.open = true;
    728737                                } else {
    729738                                        $(this).find('a').attr( 'aria-expanded', 'false' );
     739                                        wpTouchMenu.open = false;
    730740                                }
    731741                        } );
    732742
     743                        $( window ).on( 'touchstart.wp-responsive', function( e ) {
     744                                var touches = e.originalEvent.touches,
     745                                touch,
     746                                winWidth = Math.max( window.innerWidth, document.documentElement.clientWidth );
     747
     748                                // if it's multi touch bail
     749                                if ( 1 !== touches.length ) {
     750                                        return;
     751                                }
     752
     753                                touch = touches[0];
     754                                console.log( touch );
     755
     756                                // start swipe interaction
     757                                wpTouchMenu.started = true;
     758                                wpTouchMenu.startX = touch.clientX;
     759                                wpTouchMenu.startY = touch.clientY;
     760                        } );
     761
     762                        $( window ).on( 'touchmove.wp-responsive', function( e ) {
     763                                var touches, touch;
     764                                // if it didn't qualify for potential menu
     765                                // open bail
     766                                if ( ! wpTouchMenu.started ) {
     767                                        return;
     768                                }
     769
     770                                touches = e.originalEvent.changedTouches;
     771
     772                                // no multitouch
     773                                if ( 1 !== touches.length ) {
     774                                        wpTouchMenu.started = false;
     775                                        wpTouchMenu.startX = 0;
     776                                        wpTouchMenu.startY = 0;
     777                                        return;
     778                                }
     779
     780                                touch = touches[0];
     781
     782                                // cancel open/close if we're not going in the right direction
     783                                if (
     784                                        ( ! wpTouchMenu.rtl && ! wpTouchMenu.open && touch.clientX <= wpTouchMenu.startX ) ||
     785                                        ( ! wpTouchMenu.rtl && wpTouchMenu.open && wpTouchMenu.startX <= touch.clientX ) ||
     786                                        ( wpTouchMenu.rtl && ! wpTouchMenu.open && wpTouchMenu.startX <= touch.clientX ) ||
     787                                        ( wpTouchMenu.rtl && wpTouchMenu.open && touch.clientX <= wpTouchMenu.startX )
     788                                ) {
     789                                        wpTouchMenu.started = false;
     790                                        wpTouchMenu.startPosition = 0;
     791                                        return;
     792                                }
     793
     794                                wpTouchMenu.tracking = true;
     795                        } );
     796
     797                        $( window ).on( 'touchend.wp-responsive', function( e ) {
     798                                var touches = e.originalEvent.changedTouches,
     799                                touch,
     800                                movedX = 0,
     801                                movedY = 0;
     802
     803                                // only process if we're tracking and it's not multi touch
     804                                if ( ! wpTouchMenu.tracking || 1 !== touches.length ) {
     805                                        wpTouchMenu.started = false;
     806                                        wpTouchMenu.startX = 0;
     807                                        wpTouchMenu.startY = 0;
     808                                        wpTouchMenu.tracking = false;
     809                                        return;
     810                                }
     811
     812                                touch = touches[0];
     813                                // calculate how far along the x axis has been moved
     814                                if ( wpTouchMenu.rtl ) {
     815                                        if ( wpTouchMenu.open ) {
     816                                                movedX = touch.clientX - wpTouchMenu.startX;
     817                                        } else {
     818                                                movedX = wpTouchMenu.startX - touch.clientX;
     819                                        }
     820                                } else {
     821                                        if ( wpTouchMenu.open ) {
     822                                                movedX = wpTouchMenu.startX - touch.clientX;
     823                                        } else {
     824                                                movedX = touch.clientX - wpTouchMenu.startX;
     825                                        }
     826                                }
     827
     828                                // calculate y axis movement this should always be positive
     829                                if ( touch.clientY < wpTouchMenu.startY ) {
     830                                        movedY = wpTouchMenu.startY - touch.clientY;
     831                                } else {
     832                                        movedY = touch.clientY - wpTouchMenu.startY;
     833                                }
     834
     835                                // if it's 20% or more trigger the menu
     836                                if ( movedY < movedX ) {
     837                                        $( '#wp-admin-bar-menu-toggle' ).trigger( 'click' );
     838                                }
     839
     840                                // reset our values
     841                                wpTouchMenu.started = false;
     842                                wpTouchMenu.startX = 0;
     843                                wpTouchMenu.startY = 0;
     844                                wpTouchMenu.tracking = false;
     845                        } );
     846
    733847                        // Add menu events
    734848                        $adminmenu.on( 'click.wp-responsive', 'li.wp-has-submenu > a', function( event ) {
    735849                                if ( ! $adminmenu.data('wp-responsive') ) {