Make WordPress Core

Changeset 29770


Ignore:
Timestamp:
09/26/2014 11:01:52 PM (12 years ago)
Author:
azaozz
Message:

Fix tapping on the menu in iOS and Android, fixes #29365 for trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/js/common.js

    r29518 r29770  
    176176                menu = $('#adminmenu'),
    177177                pageInput = $('input.current-page'),
    178                 currentPage = pageInput.val();
     178                currentPage = pageInput.val(),
     179                isIOS = /iPhone|iPad|iPod/.test( navigator.userAgent ),
     180                isAndroid = navigator.userAgent.indexOf( 'Android' ) !== -1;
    179181
    180182        // when the menu is folded, make the fly-out submenu header clickable
    … …  
    225227        if ( 'ontouchstart' in window || /IEMobile\/[1-9]/.test(navigator.userAgent) ) { // touch screen device
    226228                // iOS Safari works with touchstart, the rest work with click
    227                 mobileEvent = /Mobile\/.+Safari/.test(navigator.userAgent) ? 'touchstart' : 'click';
     229                mobileEvent = isIOS ? 'touchstart' : 'click';
    228230
    229231                // close any open submenus when touch/click is not on the menu
    … …  
    283285        }
    284286
    285         menu.find('li.wp-has-submenu').hoverIntent({
    286                 over: function() {
    287                         var b, h, o, f, m = $(this).find('.wp-submenu'), menutop, wintop, maxtop, top = parseInt( m.css('top'), 10 );
    288 
    289                         if ( isNaN(top) || top > -5 ) { // meaning the submenu is visible
    290                                 return;
    291                         }
    292 
     287        if ( ! isIOS && ! isAndroid ) {
     288                menu.find('li.wp-has-submenu').hoverIntent({
     289                        over: function() {
     290                                var b, h, o, f, m = $(this).find('.wp-submenu'), menutop, wintop, maxtop, top = parseInt( m.css('top'), 10 );
     291
     292                                if ( isNaN(top) || top > -5 ) { // meaning the submenu is visible
     293                                        return;
     294                                }
     295
     296                                if ( menu.data('wp-responsive') ) {
     297                                        // The menu is in responsive mode, bail
     298                                        return;
     299                                }
     300
     301                                menutop = $(this).offset().top;
     302                                wintop = $(window).scrollTop();
     303                                maxtop = menutop - wintop - 30; // max = make the top of the sub almost touch admin bar
     304
     305                                b = menutop + m.height() + 1; // Bottom offset of the menu
     306                                h = $('#wpwrap').height(); // Height of the entire page
     307                                o = 60 + b - h;
     308                                f = $(window).height() + wintop - 15; // The fold
     309
     310                                if ( f < (b - o) ) {
     311                                        o = b - f;
     312                                }
     313
     314                                if ( o > maxtop ) {
     315                                        o = maxtop;
     316                                }
     317
     318                                if ( o > 1 ) {
     319                                        m.css('margin-top', '-'+o+'px');
     320                                } else {
     321                                        m.css('margin-top', '');
     322                                }
     323
     324                                menu.find('li.menu-top').removeClass('opensub');
     325                                $(this).addClass('opensub');
     326                        },
     327                        out: function(){
     328                                if ( menu.data('wp-responsive') ) {
     329                                        // The menu is in responsive mode, bail
     330                                        return;
     331                                }
     332
     333                                $(this).removeClass('opensub').find('.wp-submenu').css('margin-top', '');
     334                        },
     335                        timeout: 200,
     336                        sensitivity: 7,
     337                        interval: 90
     338                });
     339
     340                menu.on('focus.adminmenu', '.wp-submenu a', function(e){
    293341                        if ( menu.data('wp-responsive') ) {
    294342                                // The menu is in responsive mode, bail
    … …  
    296344                        }
    297345
    298                         menutop = $(this).offset().top;
    299                         wintop = $(window).scrollTop();
    300                         maxtop = menutop - wintop - 30; // max = make the top of the sub almost touch admin bar
    301 
    302                         b = menutop + m.height() + 1; // Bottom offset of the menu
    303                         h = $('#wpwrap').height(); // Height of the entire page
    304                         o = 60 + b - h;
    305                         f = $(window).height() + wintop - 15; // The fold
    306 
    307                         if ( f < (b - o) ) {
    308                                 o = b - f;
    309                         }
    310 
    311                         if ( o > maxtop ) {
    312                                 o = maxtop;
    313                         }
    314 
    315                         if ( o > 1 ) {
    316                                 m.css('margin-top', '-'+o+'px');
    317                         } else {
    318                                 m.css('margin-top', '');
    319                         }
    320 
    321                         menu.find('li.menu-top').removeClass('opensub');
    322                         $(this).addClass('opensub');
    323                 },
    324                 out: function(){
     346                        $(e.target).closest('li.menu-top').addClass('opensub');
     347                }).on('blur.adminmenu', '.wp-submenu a', function(e){
    325348                        if ( menu.data('wp-responsive') ) {
    326349                                // The menu is in responsive mode, bail
    … …  
    328351                        }
    329352
    330                         $(this).removeClass('opensub').find('.wp-submenu').css('margin-top', '');
    331                 },
    332                 timeout: 200,
    333                 sensitivity: 7,
    334                 interval: 90
    335         });
    336 
    337         menu.on('focus.adminmenu', '.wp-submenu a', function(e){
    338                 if ( menu.data('wp-responsive') ) {
    339                         // The menu is in responsive mode, bail
    340                         return;
    341                 }
    342 
    343                 $(e.target).closest('li.menu-top').addClass('opensub');
    344         }).on('blur.adminmenu', '.wp-submenu a', function(e){
    345                 if ( menu.data('wp-responsive') ) {
    346                         // The menu is in responsive mode, bail
    347                         return;
    348                 }
    349 
    350                 $(e.target).closest('li.menu-top').removeClass('opensub');
    351         });
     353                        $(e.target).closest('li.menu-top').removeClass('opensub');
     354                });
     355        }
    352356
    353357        // Move .updated and .error alert boxes. Don't move boxes designed to be inline.
Note: See TracChangeset for help on using the changeset viewer.