From 284bfd81b9d249721d599d039043dac083fd2bc9 Mon Sep 17 00:00:00 2001 From: Andrew Ozz Date: Mon, 15 Dec 2014 00:10:18 +0000 Subject: [PATCH] Improve the fix for menu shakiness when over-scrolling. Recalculate heights on editor auto-resize. See #30692. git-svn-id: https://develop.svn.wordpress.org/trunk@30852 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/js/common.js | 42 ++++++++++++++------------------------- 1 file changed, 15 insertions(+), 27 deletions(-) diff --git a/src/wp-admin/js/common.js b/src/wp-admin/js/common.js index e41c7e8998..01ce8945d4 100644 --- a/src/wp-admin/js/common.js +++ b/src/wp-admin/js/common.js @@ -193,11 +193,9 @@ $(document).ready( function() { lastScrollPosition = 0, pinnedMenuTop = false, pinnedMenuBottom = false, - isScrolling = false, - scrollTimer, menuTop = 0, + menuIsPinned = false, height = { - document: $document.height(), window: $window.height(), wpwrap: $wpwrap.height(), adminbar: $adminbar.height(), @@ -544,18 +542,22 @@ $(document).ready( function() { input.on('change', toggleUploadButton); })(); - function pinMenu() { - var windowPos = $window.scrollTop(); + function pinMenu( event ) { + var windowPos = $window.scrollTop(), + resizing = ! event || event.type !== 'scroll'; if ( isIOS || isIE8 || $adminmenu.data( 'wp-responsive' ) ) { return; } - if ( height.menu + height.adminbar + 20 > height.wpwrap ) { // 20px "buffer" + if ( height.menu + height.adminbar < height.window || + height.menu + height.adminbar + 20 > height.wpwrap ) { unpinMenu(); return; } + menuIsPinned = true; + if ( height.menu + height.adminbar > height.window ) { // Check for overscrolling if ( windowPos < 0 ) { @@ -571,7 +573,7 @@ $(document).ready( function() { } return; - } else if ( windowPos + height.window > height.document - 1 ) { + } else if ( windowPos + height.window > $document.height() - 1 ) { if ( ! pinnedMenuBottom ) { pinnedMenuBottom = true; pinnedMenuTop = false; @@ -638,7 +640,7 @@ $(document).ready( function() { bottom: '' }); } - } else { + } else if ( resizing ) { // Resizing pinnedMenuTop = pinnedMenuBottom = false; menuTop = windowPos + height.window - height.menu - height.adminbar - 1; @@ -660,7 +662,6 @@ $(document).ready( function() { function resetHeights() { height = { - document: $document.height(), window: $window.height(), wpwrap: $wpwrap.height(), adminbar: $adminbar.height(), @@ -669,11 +670,11 @@ $(document).ready( function() { } function unpinMenu() { - if ( isIOS ) { + if ( isIOS || ! menuIsPinned ) { return; } - pinnedMenuTop = pinnedMenuBottom = false; + pinnedMenuTop = pinnedMenuBottom = menuIsPinned = false; $adminMenuWrap.css({ position: '', top: '', @@ -696,23 +697,10 @@ $(document).ready( function() { } } - function scrollStart() { - if ( isScrolling ) { - window.clearTimeout( scrollTimer ); - - scrollTimer = window.setTimeout( function() { - isScrolling = false; - }, 200 ); - } else { - isScrolling = true; - $document.triggerHandler( 'wp-scroll-start' ); - } - } - if ( ! isIOS ) { - $window.on( 'scroll.pin-menu', function() { - scrollStart(); - pinMenu(); + $window.on( 'scroll.pin-menu', pinMenu ); + $document.on( 'tinymce-editor-init.pin-menu', function( event, editor ) { + editor.on( 'wp-autoresize', resetHeights ); }); }