WordPress.org

Make WordPress Core

Ticket #31480: 31480.2.diff

File 31480.2.diff, 2.7 KB (added by mattheu, 5 years ago)
  • src/wp-includes/js/mce-view.js

    diff --git a/src/wp-includes/js/mce-view.js b/src/wp-includes/js/mce-view.js
    index 9817454..3f6641e 100644
    a b window.wp = window.wp || {}; 
    470470                                        var dom = editor.dom,
    471471                                                styles = '',
    472472                                                bodyClasses = editor.getBody().className || '',
    473                                                 iframe, iframeDoc, observer, i;
     473                                                iframe, iframeDoc, observer, i, resize;
    474474
    475475                                        tinymce.each( dom.$(
    476476                                                'link[rel="stylesheet"]',
    window.wp = window.wp || {}; 
    504504
    505505                                        iframeDoc = iframe.contentWindow.document;
    506506
     507                                        resize = _.debounce( function() {
     508
     509                                                var $iframe, iframeDocHeight;
     510
     511                                                // Make sure the iframe still exists.
     512                                                if ( iframe.contentWindow ) {
     513                                                        $iframe = $( iframe );
     514                                                        iframeDocHeight = $( iframeDoc.body ).height();
     515
     516                                                        if ( $iframe.height() !== iframeDocHeight ) {
     517                                                                $iframe.height( iframeDocHeight );
     518                                                                editor.nodeChanged();
     519                                                        }
     520                                                }
     521
     522                                        }, 100 );
     523
     524                                        if ( MutationObserver ) {
     525
     526                                                observer = new MutationObserver( function( mutations ) {
     527
     528                                                        resize;
     529
     530                                                        // Trigger resize after images have loaded.
     531                                                        mutations.forEach( function( mutation ) {
     532                                                                _.each( mutation.addedNodes, function( node ) {
     533                                                                        $(node).find('img').load( resize );
     534                                                                } );
     535                                                        });
     536
     537                                                } );
     538
     539                                                observer.observe( iframeDoc, {
     540                                                        attributes: true,
     541                                                        childList: true,
     542                                                        subtree: true
     543                                                } );
     544
     545                                                $( node ).one( 'wp-mce-view-unbind', function() {
     546                                                        observer.disconnect();
     547                                                } );
     548                                        } else {
     549                                                for ( i = 1; i < 6; i++ ) {
     550                                                        setTimeout( resize, i * 700 );
     551                                                }
     552                                        }
     553
    507554                                        iframeDoc.open();
    508555
    509556                                        iframeDoc.write(
    window.wp = window.wp || {}; 
    539586
    540587                                        iframeDoc.close();
    541588
    542                                         function resize() {
    543                                                 var $iframe, iframeDocHeight;
    544 
    545                                                 // Make sure the iframe still exists.
    546                                                 if ( iframe.contentWindow ) {
    547                                                         $iframe = $( iframe );
    548                                                         iframeDocHeight = $( iframeDoc.body ).height();
    549 
    550                                                         if ( $iframe.height() !== iframeDocHeight ) {
    551                                                                 $iframe.height( iframeDocHeight );
    552                                                                 editor.nodeChanged();
    553                                                         }
    554                                                 }
    555                                         }
    556 
    557                                         if ( MutationObserver ) {
    558                                                 observer = new MutationObserver( _.debounce( resize, 100 ) );
    559 
    560                                                 observer.observe( iframeDoc.body, {
    561                                                         attributes: true,
    562                                                         childList: true,
    563                                                         subtree: true
    564                                                 } );
    565 
    566                                                 $( node ).one( 'wp-mce-view-unbind', function() {
    567                                                         observer.disconnect();
    568                                                 } );
    569                                         } else {
    570                                                 for ( i = 1; i < 6; i++ ) {
    571                                                         setTimeout( resize, i * 700 );
    572                                                 }
    573                                         }
    574 
    575589                                        function classChange() {
    576590                                                iframeDoc.body.className = editor.getBody().className;
    577591                                        }