Make WordPress Core

Ticket #27389: 27389-wpviews-undo-revamp.patch

File 27389-wpviews-undo-revamp.patch, 2.2 KB (added by gcorne, 10 years ago)
  • src/wp-includes/js/mce-view.js

    diff --git src/wp-includes/js/mce-view.js src/wp-includes/js/mce-view.js
    index d3af61e..27135cf 100644
    window.wp = window.wp || {}; 
    4141                                        doc = editor.getDoc();
    4242                                        $( doc ).find( '[data-wpview-text="' + this.encodedText + '"]' ).each(function (i, elem) {
    4343                                                var node = $( elem );
    44                                                 node.html( html );
     44                                                node.html( html ).append( '<span data-wp-view-end class="wp-view-end"></span>' );
    4545                                                $( self ).trigger( 'ready', elem );
    4646                                        });
    4747                                }
  • src/wp-includes/js/tinymce/plugins/wpview/plugin.js

    diff --git src/wp-includes/js/tinymce/plugins/wpview/plugin.js src/wp-includes/js/tinymce/plugins/wpview/plugin.js
    index 75f7047..e2ff4fa 100644
    tinymce.PluginManager.add( 'wpview', function( editor ) { 
    141141        }
    142142
    143143        editor.on( 'BeforeAddUndo', function( event ) {
    144                 if ( selected && ! toRemove ) {
    145                         event.preventDefault();
     144                var lastLevel = editor.undoManager.data[ editor.undoManager.data.length - 1 ],
     145                        replace,
     146                        previousContent,
     147                        content;
     148
     149                replace = function( content ) {
     150                        return content.replace(/(<div[^>]+wpview-wrap[^>]+>)([^]+)(<span[^>]+data-wp-view-end[^>]+><\/span><\/div>)/mg, '$`$1&nbsp;$3$\'' );
     151                };
     152
     153                if ( lastLevel ) {
     154                        previousContent = replace( lastLevel.content );
     155                        content = replace( event.level.content );
     156
     157                        if ( content === previousContent ) {
     158                                event.preventDefault();
     159                        }
    146160                }
    147161        });
    148162
    tinymce.PluginManager.add( 'wpview', function( editor ) { 
    157171                e.content = wp.mce.views.toViews( e.content );
    158172        });
    159173
     174        editor.on( 'VisualAid', function() {
     175                wp.mce.views.render();
     176        });
     177
    160178        // When the editor's content has been updated and the DOM has been
    161179        // processed, render the views in the document.
    162180        editor.on( 'SetContent', function( event ) {
    163181                var body, padNode;
    164182
    165                 // don't (re-)render views if the format of the content is raw
    166                 // to avoid adding additional undo levels on undo/redo
    167                 if ( event.format !== 'raw' ) {
    168                         wp.mce.views.render();
    169                 }
    170183
    171184                // Add padding <p> if the noneditable node is last
    172185                if ( event.load || ! event.set ) {