From 9f13e05b6422cadf0b4b386ef68b2c2fcc116d78 Mon Sep 17 00:00:00 2001 From: Ella Iseulde Van Dorpe Date: Mon, 8 Jun 2015 21:31:39 +0000 Subject: [PATCH] TinyMCE: wpviews: cache iframe heights Cache iframe heights per instance so it can be reused. This will prevent to content from moving in the editor when undoing or redoing changes. Fixes #32593. git-svn-id: https://develop.svn.wordpress.org/trunk@32711 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/js/mce-view.js | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/src/wp-includes/js/mce-view.js b/src/wp-includes/js/mce-view.js index 86638fcff6..cf2b247ac4 100644 --- a/src/wp-includes/js/mce-view.js +++ b/src/wp-includes/js/mce-view.js @@ -501,10 +501,17 @@ window.wp = window.wp || {}; } } ); + if ( self.iframeHeight ) { + dom.add( contentNode, 'div', { style: { + width: '100%', + height: self.iframeHeight + } } ); + } + // Seems the browsers need a bit of time to insert/set the view nodes, // or the iframe will fail especially when switching Text => Visual. setTimeout( function() { - var iframe, iframeDoc, observer, i; + var iframe, iframeDoc, observer, i, block; contentNode.innerHTML = ''; @@ -518,7 +525,8 @@ window.wp = window.wp || {}; style: { width: '100%', display: 'block' - } + }, + height: self.iframeHeight } ); dom.add( contentNode, 'div', { 'class': 'wpview-overlay' } ); @@ -561,20 +569,33 @@ window.wp = window.wp || {}; iframeDoc.close(); function resize() { - var $iframe, iframeDocHeight; + var $iframe; + + if ( block ) { + return; + } // Make sure the iframe still exists. if ( iframe.contentWindow ) { $iframe = $( iframe ); - iframeDocHeight = $( iframeDoc.body ).height(); + self.iframeHeight = $( iframeDoc.body ).height(); - if ( $iframe.height() !== iframeDocHeight ) { - $iframe.height( iframeDocHeight ); + if ( $iframe.height() !== self.iframeHeight ) { + $iframe.height( self.iframeHeight ); editor.nodeChanged(); } } } + if ( self.iframeHeight ) { + block = true; + + setTimeout( function() { + block = false; + resize(); + }, 3000 ); + } + $( iframe.contentWindow ).on( 'load', resize ); if ( MutationObserver ) {