From c529b75886aada9d7c27127cf5c6e764daf46164 Mon Sep 17 00:00:00 2001 From: Helen Hou-Sandi Date: Wed, 3 Sep 2014 09:57:56 +0000 Subject: [PATCH] Editor scrolling: Remember and restore scroll position for visual and text modes. This prevents the editor from jumping off screen when the rendered visual content is significantly taller than plain text, e.g. when there are views present. This is also a close restoration of 3.9 behavior, some of which was browser-specific. props avryl. fixes #29338. git-svn-id: https://develop.svn.wordpress.org/trunk@29693 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/js/editor-expand.js | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/wp-admin/js/editor-expand.js b/src/wp-admin/js/editor-expand.js index 260ee25513..35f5ea5ac9 100644 --- a/src/wp-admin/js/editor-expand.js +++ b/src/wp-admin/js/editor-expand.js @@ -31,6 +31,8 @@ jQuery( document ).ready( function($) { fixedSideBottom = false, scrollTimer, lastScrollPosition = 0, + visualEditorScrollPosition = 0, + textEditorScrollPosition = 0, pageYOffsetAtTop = 130, pinnedToolsTop = 56, sidebarBottom = 20, @@ -224,20 +226,35 @@ jQuery( document ).ready( function($) { // Adjust when switching editor modes. function mceShow() { + textEditorScrollPosition = window.pageYOffset; + setTimeout( function() { + var top = $contentWrap.offset().top; + + if ( window.pageYOffset > top || visualEditorScrollPosition ) { + window.scrollTo( window.pageXOffset, visualEditorScrollPosition ? visualEditorScrollPosition : top - heights.adminBarHeight ); + } + editor.execCommand( 'wpAutoResize' ); adjust(); }, 300 ); + + adjust(); } function mceHide() { - var wrapHeight = $( '#wpwrap' ).height(); + visualEditorScrollPosition = window.pageYOffset; - textEditorResize(); + setTimeout( function() { + var top = $contentWrap.offset().top; - if ( wrapHeight && $window.scrollTop() > wrapHeight ) { - window.scrollTo( window.pageXOffset, wrapHeight - 1 ); - } + if ( window.pageYOffset > top || textEditorScrollPosition ) { + window.scrollTo( window.pageXOffset, textEditorScrollPosition ? textEditorScrollPosition : top - heights.adminBarHeight ); + } + + textEditorResize(); + adjust(); + }, 100 ); adjust(); }