Make WordPress Core

Changeset 29978


Ignore:
Timestamp:
10/21/2014 06:11:07 AM (10 years ago)
Author:
azaozz
Message:

Admin menu:

  • Fix scrolling the pinned menu with a mouse wheel.
  • Fix pinning when the menu is only slightly taller than the viewport.
  • Disable pinning on IE8, updating CSS top makes it jump when scrolling with a mouse wheel.

See #29806

File:
1 edited

Legend:

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

    r29898 r29978  
    178178        isIOS = /iPhone|iPad|iPod/.test( navigator.userAgent ),
    179179        isAndroid = navigator.userAgent.indexOf( 'Android' ) !== -1,
     180        isIE8 = $( document.documentElement ).hasClass( 'ie8' ),
    180181        $document = $( document ),
    181182        $window = $( window ),
     
    196197        height = {
    197198            window: $window.height(),
     199            wpwrap: $wpwrap.height(),
    198200            adminbar: $adminbar.height(),
    199201            menu: $adminMenuWrap.height()
     
    536538        var windowPos = $window.scrollTop();
    537539
    538         if ( isIOS || $adminmenu.data('wp-responsive') ) {
     540        if ( isIOS || isIE8 || $adminmenu.data( 'wp-responsive' ) ) {
     541            return;
     542        }
     543
     544        if ( height.menu + height.adminbar + 20 > height.wpwrap ) { // 20px "buffer"
     545            unpinMenu();
    539546            return;
    540547        }
     
    546553                    // let it scroll
    547554                    pinnedMenuTop = false;
    548                     menuTop = $adminMenuWrap.offset().top - height.adminbar;
     555                    menuTop = $adminMenuWrap.offset().top - height.adminbar - ( windowPos - lastScrollPosition );
     556
     557                    if ( menuTop + height.menu + height.adminbar < windowPos + height.window ) {
     558                        menuTop = windowPos + height.window - height.menu - height.adminbar;
     559                    }
    549560
    550561                    $adminMenuWrap.css({
     
    568579                    // let it scroll
    569580                    pinnedMenuBottom = false;
    570                     menuTop = $adminMenuWrap.offset().top - height.adminbar;
     581                    menuTop = $adminMenuWrap.offset().top - height.adminbar + ( lastScrollPosition - windowPos );
     582
     583                    if ( menuTop + height.menu > windowPos + height.window ) {
     584                        menuTop = windowPos;
     585                    }
    571586
    572587                    $adminMenuWrap.css({
     
    588603                // Resizing
    589604                pinnedMenuTop = pinnedMenuBottom = false;
    590                 menuTop = $adminMenuWrap.offset().top - height.adminbar;
    591 
    592                 $adminMenuWrap.css({
    593                     position: 'absolute',
    594                     top: menuTop,
    595                     bottom: ''
    596                 });
     605                menuTop = windowPos + height.window - height.menu - height.adminbar - 1;
     606
     607                if ( menuTop > 0 ) {
     608                    $adminMenuWrap.css({
     609                        position: 'absolute',
     610                        top: menuTop,
     611                        bottom: ''
     612                    });
     613                } else {
     614                    unpinMenu();
     615                }
    597616            }
    598617        }
     
    627646    }
    628647
    629     setPinMenu();
    630 
    631648    if ( ! isIOS ) {
    632649        $window.on( 'scroll.pin-menu', pinMenu );
    633650    }
    634 
    635     $document.on( 'wp-window-resized.pin-menu', function() {
    636         height.window = $window.height();
    637         height.adminbar = $adminbar.height();
    638         setPinMenu();
    639     }).on( 'wp-collapse-menu.pin-menu', function() {
    640         height.menu = $adminMenuWrap.height();
    641         setPinMenu();
    642     });
    643651
    644652    window.wpResponsive = {
     
    776784
    777785    window.wpResponsive.init();
     786    setPinMenu();
     787
     788    $document.on( 'wp-window-resized.pin-menu postboxes-columnchange.pin-menu postbox-toggled.pin-menu', function() {
     789        height.wpwrap = $wpwrap.height();
     790        height.window = $window.height();
     791        height.adminbar = $adminbar.height();
     792        setPinMenu();
     793    }).on( 'wp-collapse-menu.pin-menu', function() {
     794        height.wpwrap = $wpwrap.height();
     795        height.menu = $adminMenuWrap.height();
     796        setPinMenu();
     797    });
     798
    778799});
    779800
Note: See TracChangeset for help on using the changeset viewer.