WordPress.org

Make WordPress Core

Ticket #36434: 36434.5.patch

File 36434.5.patch, 4.7 KB (added by azaozz, 5 years ago)
  • src/wp-includes/js/mce-view.js

     
    353353                unbind: function() {
    354354                        this.getNodes( function( editor, node ) {
    355355                                this.unbindNode.call( this, editor, node );
    356                                 $( node ).trigger( 'wp-mce-view-unbind' );
    357356                        }, true );
    358357                },
    359358
     
    394393                                                return rendered ? data : ! data;
    395394                                        } )
    396395                                        .each( function() {
    397                                                 callback.call( self, editor, this );
     396                                                callback.call( self, editor, this, this /* back compat */ );
    398397                                        } );
    399398                        } );
    400399                },
     
    429428                                }
    430429
    431430                                $viewNode = editor.$(
    432                                         '<div class="wpview" data-wpview-text="' + this.encodedText + '" data-wpview-type="' + this.type + '" contenteditable="false"></div>'
     431                                        '<div class="wpview wpview-wrap" data-wpview-text="' + this.encodedText + '" data-wpview-type="' + this.type + '" contenteditable="false"></div>'
    433432                                );
    434433
    435434                                editor.$( node ).replaceWith( $viewNode );
     
    485484                 * @param {Boolean}  rendered Only set for (un)rendered nodes. Optional.
    486485                 */
    487486                setIframes: function( head, body, callback, rendered ) {
    488                         var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,
    489                                 self = this;
     487                        var self = this;
    490488
    491489                        this.getNodes( function( editor, node ) {
    492490                                var dom = editor.dom,
     
    516514                                // Seems the browsers need a bit of time to insert/set the view nodes,
    517515                                // or the iframe will fail especially when switching Text => Visual.
    518516                                setTimeout( function() {
    519                                         var iframe, iframeDoc, observer, i, block;
     517                                        var iframe, iframeWin, iframeDoc, MutationObserver, observer, i, block;
    520518
    521519                                        editor.undoManager.transact( function() {
    522520                                                node.innerHTML = '';
     
    539537                                                dom.add( node, 'span', { 'class': 'wpview-end' } );
    540538                                        } );
    541539
    542                                         iframeDoc = iframe.contentWindow.document;
     540                                        iframeWin = iframe.contentWindow;
     541                                        iframeDoc = iframeWin.document;
    543542
    544543                                        iframeDoc.open();
    545544
     
    604603                                                }, 3000 );
    605604                                        }
    606605
    607                                         $( iframe.contentWindow ).on( 'load', resize );
     606                                        $( iframeWin ).on( 'load', resize );
    608607
     608                                        MutationObserver = iframeWin.MutationObserver || iframeWin.WebKitMutationObserver || iframeWin.MozMutationObserver;
     609
    609610                                        if ( MutationObserver ) {
    610611                                                observer = new MutationObserver( _.debounce( resize, 100 ) );
    611612
     
    614615                                                        childList: true,
    615616                                                        subtree: true
    616617                                                } );
    617 
    618                                                 $( node ).one( 'wp-mce-view-unbind', function() {
    619                                                         observer.disconnect();
    620                                                 } );
    621618                                        } else {
    622619                                                for ( i = 1; i < 6; i++ ) {
    623620                                                        setTimeout( resize, i * 700 );
     
    624621                                                }
    625622                                        }
    626623
    627                                         function classChange() {
    628                                                 iframeDoc.body.className = editor.getBody().className;
    629                                         }
    630 
    631                                         editor.on( 'wp-body-class-change', classChange );
    632 
    633                                         $( node ).one( 'wp-mce-view-unbind', function() {
    634                                                 editor.off( 'wp-body-class-change', classChange );
    635                                         } );
    636 
    637624                                        callback && callback.call( self, editor, node );
    638625                                }, 50 );
    639626                        }, rendered );
     
    718705                 */
    719706                remove: function( editor, node ) {
    720707                        this.unbindNode.call( this, editor, node );
    721                         $( node ).trigger( 'wp-mce-view-unbind' );
    722708                        editor.dom.remove( node );
    723709                        editor.focus();
    724710                }
  • src/wp-includes/js/tinymce/plugins/wpview/plugin.js

     
    3131                                .replace( /<p[^>]+data-wpview-marker="([^"]+)"[^>]*>[\s\S]*?<\/p>/g, callback );
    3232                }
    3333
     34                editor.on( 'init', function() {
     35                        var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
     36
     37                        if ( MutationObserver ) {
     38                                new MutationObserver( function() {
     39                                        editor.fire( 'wp-body-class-change' );
     40                                } )
     41                                .observe( editor.getBody(), {
     42                                        attributes: true,
     43                                        attributeFilter: ['class']
     44                                } );
     45                        }
     46
     47                        // Pass on body class name changes from the editor to the wpView iframes.
     48                        editor.on( 'wp-body-class-change', function() {
     49                                var className = editor.getBody().className;
     50
     51                                editor.$( 'iframe[class="wpview-sandbox"]' ).each( function( i, iframe ) {
     52                                        // Make sure it is a local iframe
     53                                        if ( ! iframe.src || iframe.src === 'javascript:""' ) {
     54                                                try {
     55                                                        iframe.contentWindow.document.body.className = className;
     56                                                } catch( er ) {}
     57                                        }
     58                                });
     59                        } );
     60                });
     61
    3462                // Scan new content for matching view patterns and replace them with markers.
    3563                editor.on( 'beforesetcontent', function( event ) {
    3664                        var node;