WordPress.org

Make WordPress Core

Ticket #20614: 20614-9.patch

File 20614-9.patch, 8.9 KB (added by azaozz, 17 months ago)
  • wp-admin/js/common.js

     
    160160}); 
    161161 
    162162$(document).ready( function() { 
    163         var lastClicked = false, checks, first, last, checked, menu = $('#adminmenu'), 
     163        var lastClicked = false, checks, first, last, checked, menu = $('#adminmenu'), mobileEvent, 
    164164                pageInput = $('input.current-page'), currentPage = pageInput.val(); 
    165165 
    166166        // when the menu is folded, make the fly-out submenu header clickable 
     
    196196        }); 
    197197 
    198198        if ( 'ontouchstart' in window || /IEMobile\/[1-9]/.test(navigator.userAgent) ) { // touch screen device 
     199                // iOS Safari works with touchstart, the rest work with click 
     200                mobileEvent = /Mobile\/.+Safari/.test(navigator.userAgent) ? 'touchstart' : 'click'; 
     201 
    199202                // close any open submenus when touch/click is not on the menu 
    200                 $(document.body).on('click.wp-mobile-hover', function(e) { 
     203                $(document.body).on( mobileEvent+'.wp-mobile-hover', function(e) { 
    201204                        if ( !$(e.target).closest('#adminmenu').length ) 
    202205                                menu.find('li.wp-has-submenu.opensub').removeClass('opensub'); 
    203206                }); 
    204207 
    205                 menu.find('li.wp-has-submenu').on('click.wp-mobile-hover', function(e) { 
    206                         var el = $(this); 
     208                menu.find('a.wp-has-submenu').on( mobileEvent+'.wp-mobile-hover', function(e) { 
     209                        var el = $(this), parent = el.parent(); 
    207210 
    208                         if ( !el.hasClass('opensub') ) { 
     211                        // Show the sub instead of following the link if: 
     212                        //      - the submenu is not open 
     213                        //      - the submenu is not shown inline or the menu is not folded 
     214                        if ( !parent.hasClass('opensub') && ( !parent.hasClass('wp-menu-open') || parent.width() < 40 ) ) { 
    209215                                e.preventDefault(); 
    210                                 menu.find('li.wp-has-submenu.opensub').removeClass('opensub'); 
    211                                 el.addClass('opensub'); 
     216                                menu.find('li.opensub').removeClass('opensub'); 
     217                                parent.addClass('opensub'); 
    212218                        } 
    213219                }); 
    214         } else { 
    215                 menu.find('li.wp-has-submenu').hoverIntent({ 
    216                         over: function(e){ 
    217                                 var b, h, o, f, m = $(this).find('.wp-submenu'), menutop, wintop, maxtop, top = parseInt( m.css('top'), 10 ); 
     220        } 
    218221 
    219                                 if ( isNaN(top) || top > -5 ) // meaning the submenu is visible 
    220                                         return; 
     222        menu.find('li.wp-has-submenu').hoverIntent({ 
     223                over: function(e){ 
     224                        var b, h, o, f, m = $(this).find('.wp-submenu'), menutop, wintop, maxtop, top = parseInt( m.css('top'), 10 ); 
    221225 
    222                                 menutop = $(this).offset().top; 
    223                                 wintop = $(window).scrollTop(); 
    224                                 maxtop = menutop - wintop - 30; // max = make the top of the sub almost touch admin bar 
     226                        if ( isNaN(top) || top > -5 ) // meaning the submenu is visible 
     227                                return; 
    225228 
    226                                 b = menutop + m.height() + 1; // Bottom offset of the menu 
    227                                 h = $('#wpwrap').height(); // Height of the entire page 
    228                                 o = 60 + b - h; 
    229                                 f = $(window).height() + wintop - 15; // The fold 
     229                        menutop = $(this).offset().top; 
     230                        wintop = $(window).scrollTop(); 
     231                        maxtop = menutop - wintop - 30; // max = make the top of the sub almost touch admin bar 
    230232 
    231                                 if ( f < (b - o) ) 
    232                                         o = b - f; 
     233                        b = menutop + m.height() + 1; // Bottom offset of the menu 
     234                        h = $('#wpwrap').height(); // Height of the entire page 
     235                        o = 60 + b - h; 
     236                        f = $(window).height() + wintop - 15; // The fold 
    233237 
    234                                 if ( o > maxtop ) 
    235                                         o = maxtop; 
     238                        if ( f < (b - o) ) 
     239                                o = b - f; 
    236240 
    237                                 if ( o > 1 ) 
    238                                         m.css('margin-top', '-'+o+'px'); 
    239                                 else 
    240                                         m.css('margin-top', ''); 
     241                        if ( o > maxtop ) 
     242                                o = maxtop; 
    241243 
    242                                 menu.find('li.menu-top').removeClass('opensub'); 
    243                                 $(this).addClass('opensub'); 
    244                         }, 
    245                         out: function(){ 
    246                                 $(this).removeClass('opensub').find('.wp-submenu').css('margin-top', ''); 
    247                         }, 
    248                         timeout: 200, 
    249                         sensitivity: 7, 
    250                         interval: 90 
    251                 }); 
     244                        if ( o > 1 ) 
     245                                m.css('margin-top', '-'+o+'px'); 
     246                        else 
     247                                m.css('margin-top', ''); 
    252248 
    253                 menu.on('focus.adminmenu', '.wp-submenu a', function(e){ 
    254                         $(e.target).closest('li.menu-top').addClass('opensub'); 
    255                 }).on('blur.adminmenu', '.wp-submenu a', function(e){ 
    256                         $(e.target).closest('li.menu-top').removeClass('opensub'); 
    257                 }); 
    258         } 
     249                        menu.find('li.menu-top').removeClass('opensub'); 
     250                        $(this).addClass('opensub'); 
     251                }, 
     252                out: function(){ 
     253                        $(this).removeClass('opensub').find('.wp-submenu').css('margin-top', ''); 
     254                }, 
     255                timeout: 200, 
     256                sensitivity: 7, 
     257                interval: 90 
     258        }); 
    259259 
     260        menu.on('focus.adminmenu', '.wp-submenu a', function(e){ 
     261                $(e.target).closest('li.menu-top').addClass('opensub'); 
     262        }).on('blur.adminmenu', '.wp-submenu a', function(e){ 
     263                $(e.target).closest('li.menu-top').removeClass('opensub'); 
     264        }); 
     265 
    260266        // Move .updated and .error alert boxes. Don't move boxes designed to be inline. 
    261267        $('div.wrap h2:first').nextAll('div.updated, div.error').addClass('below-h2'); 
    262268        $('div.updated, div.error').not('.below-h2, .inline').insertAfter( $('div.wrap h2:first') ); 
  • wp-includes/js/admin-bar.js

     
    44                (function(a){a.fn.hoverIntent=function(l,j){var m={sensitivity:7,interval:100,timeout:0};m=a.extend(m,j?{over:l,out:j}:l);var o,n,h,d;var e=function(f){o=f.pageX;n=f.pageY};var c=function(g,f){f.hoverIntent_t=clearTimeout(f.hoverIntent_t);if((Math.abs(h-o)+Math.abs(d-n))<m.sensitivity){a(f).unbind("mousemove",e);f.hoverIntent_s=1;return m.over.apply(f,[g])}else{h=o;d=n;f.hoverIntent_t=setTimeout(function(){c(g,f)},m.interval)}};var i=function(g,f){f.hoverIntent_t=clearTimeout(f.hoverIntent_t);f.hoverIntent_s=0;return m.out.apply(f,[g])};var b=function(q){var f=this;var g=(q.type=="mouseover"?q.fromElement:q.toElement)||q.relatedTarget;while(g&&g!=this){try{g=g.parentNode}catch(q){g=this}}if(g==this){if(a.browser.mozilla){if(q.type=="mouseout"){f.mtout=setTimeout(function(){k(q,f)},30)}else{if(f.mtout){f.mtout=clearTimeout(f.mtout)}}}return}else{if(f.mtout){f.mtout=clearTimeout(f.mtout)}k(q,f)}};var k=function(p,f){var g=jQuery.extend({},p);if(f.hoverIntent_t){f.hoverIntent_t=clearTimeout(f.hoverIntent_t)}if(p.type=="mouseover"){h=g.pageX;d=g.pageY;a(f).bind("mousemove",e);if(f.hoverIntent_s!=1){f.hoverIntent_t=setTimeout(function(){c(g,f)},m.interval)}}else{a(f).unbind("mousemove",e);if(f.hoverIntent_s==1){f.hoverIntent_t=setTimeout(function(){i(g,f)},m.timeout)}}};return this.mouseover(b).mouseout(b)}})(jQuery); 
    55 
    66        jQuery(document).ready(function($){ 
    7                 var adminbar = $('#wpadminbar'), refresh; 
     7                var adminbar = $('#wpadminbar'), refresh, touchOpen, touchClose, disableHoverIntent = false; 
    88 
    99                refresh = function(i, el){ // force the browser to refresh the tabbing index 
    1010                        var node = $(el), tab = node.attr('tabindex'); 
     
    1212                                node.attr('tabindex', '0').attr('tabindex', tab); 
    1313                }; 
    1414 
    15                 adminbar.removeClass('nojq').removeClass('nojs'); 
    16                  
    17                 if ( 'ontouchstart' in window || /IEMobile\/[1-9]/.test(navigator.userAgent) ) { // touch screen device 
    18                         // close any open drop-downs when the click/touch is not on the toolbar 
    19                         $(document.body).on('click.wp-mobile-hover', function(e) { 
    20                                 if ( !$(e.target).closest('#wpadminbar').length ) 
    21                                         adminbar.find('li.menupop.hover').removeClass('hover'); 
    22                         }); 
    23  
     15                touchOpen = function(unbind) { 
    2416                        adminbar.find('li.menupop').on('click.wp-mobile-hover', function(e) { 
    2517                                var el = $(this); 
    2618 
     
    2921                                        adminbar.find('li.menupop.hover').removeClass('hover'); 
    3022                                        el.addClass('hover'); 
    3123                                } 
     24 
     25                                if ( unbind ) { 
     26                                        $('li.menupop').off('click.wp-mobile-hover'); 
     27                                        disableHoverIntent = false; 
     28                                } 
    3229                        }); 
    33                 } else { 
    34                         adminbar.find('li.menupop').hoverIntent({ 
    35                                 over: function(e){ 
    36                                         $(this).addClass('hover'); 
    37                                 }, 
    38                                 out: function(e){ 
    39                                         $(this).removeClass('hover'); 
    40                                 }, 
    41                                 timeout: 180, 
    42                                 sensitivity: 7, 
    43                                 interval: 100 
     30                }; 
     31 
     32                touchClose = function() { 
     33                        var mobileEvent = /Mobile\/.+Safari/.test(navigator.userAgent) ? 'touchstart' : 'click'; 
     34                        // close any open drop-downs when the click/touch is not on the toolbar 
     35                        $(document.body).on( mobileEvent+'.wp-mobile-hover', function(e) { 
     36                                if ( !$(e.target).closest('#wpadminbar').length ) 
     37                                        adminbar.find('li.menupop.hover').removeClass('hover'); 
    4438                        }); 
     39                }; 
     40 
     41                adminbar.removeClass('nojq').removeClass('nojs'); 
     42 
     43                if ( 'ontouchstart' in window ) { 
     44                        adminbar.on('touchstart', function(){ 
     45                                touchOpen(true); 
     46                                disableHoverIntent = true; 
     47                        }); 
     48                        touchClose(); 
     49                } else if ( /IEMobile\/[1-9]/.test(navigator.userAgent) ) { 
     50                        touchOpen(); 
     51                        touchClose(); 
    4552                } 
    4653 
     54                adminbar.find('li.menupop').hoverIntent({ 
     55                        over: function(e){ 
     56                                if ( disableHoverIntent ) 
     57                                        return; 
     58 
     59                                $(this).addClass('hover'); 
     60                        }, 
     61                        out: function(e){ 
     62                                if ( disableHoverIntent ) 
     63                                        return; 
     64 
     65                                $(this).removeClass('hover'); 
     66                        }, 
     67                        timeout: 180, 
     68                        sensitivity: 7, 
     69                        interval: 100 
     70                }); 
     71 
    4772                $('#wp-admin-bar-get-shortlink').click(function(e){ 
    4873                        e.preventDefault(); 
    4974                        $(this).addClass('selected').children('.shortlink-input').blur(function(){