WordPress.org

Make WordPress Core

Ticket #39337: 39337.3.patch

File 39337.3.patch, 3.2 KB (added by azaozz, 4 years ago)
  • src/wp-includes/js/mce-view.js

     
    8888                 *
    8989                 * @return {String} The string with markers.
    9090                 */
    91                 setMarkers: function( content ) {
     91                setMarkers: function( content, event ) {
    9292                        var pieces = [ { content: content } ],
    9393                                self = this,
     94                                context = '',
    9495                                instance, current;
    9596
    9697                        _.each( views, function( view, type ) {
     
    118119                                                instance = self.createInstance( type, result.content, result.options );
    119120                                                text = instance.loader ? '.' : instance.text;
    120121
     122                                                if ( event ) {
     123                                                        if ( event.initial ) {
     124                                                                context = ' data-wpview-context="initial"';
     125                                                        } else if ( ! event.load ) {
     126                                                                context = ' data-wpview-context="new"';
     127                                                        }
     128                                                }
     129
    121130                                                // Add the processed piece for the match.
    122131                                                pieces.push( {
    123                                                         content: instance.ignore ? text : '<p data-wpview-marker="' + instance.encodedText + '">' + text + '</p>',
     132                                                        content: instance.ignore ? text : '<p data-wpview-marker="' + instance.encodedText + '"' + context + '>' + text + '</p>',
    124133                                                        processed: true
    125134                                                } );
    126135
     
    428437                 */
    429438                replaceMarkers: function() {
    430439                        this.getMarkers( function( editor, node ) {
    431                                 var $viewNode;
     440                                var $viewNode, context;
     441                                var $node = editor.$( node )
    432442
    433443                                if ( ! this.loader && $( node ).text() !== this.text ) {
    434                                         editor.dom.setAttrib( node, 'data-wpview-marker', null );
     444                                        $node.attr({ 'data-wpview-marker': null, 'data-wpview-context': null });
    435445                                        return;
    436446                                }
    437447
     448                                context = $node.attr( 'data-wpview-context' );
     449
    438450                                $viewNode = editor.$(
    439451                                        '<div class="wpview wpview-wrap" data-wpview-text="' + this.encodedText + '" data-wpview-type="' + this.type + '" contenteditable="false"></div>'
    440452                                );
    441453
    442                                 editor.$( node ).replaceWith( $viewNode );
     454                                $node.replaceWith( $viewNode );
     455
     456                                 if ( context === 'new' ) {
     457                                        if ( ! $viewNode.next().length ) {
     458                                                editor.selection.select( $viewNode[0] );
     459
     460                                                setTimeout( function() {
     461                                                        editor.selection.collapse();
     462                                                } );
     463                                        }
     464                                } else if ( context === 'initial' && ! $viewNode.prev().length ) {
     465                                        // When the first element is a wpview node, make sure it is not (partially) selected.
     466                                        editor.selection.select( editor.getBody() );
     467                                        editor.selection.collapse( true );
     468                                }
    443469                        } );
    444470                },
    445471
     
    448474                 */
    449475                removeMarkers: function() {
    450476                        this.getMarkers( function( editor, node ) {
    451                                 editor.dom.setAttrib( node, 'data-wpview-marker', null );
     477                                editor.$( node ).attr({ 'data-wpview-marker': null, 'data-wpview-context': null });
    452478                        } );
    453479                },
    454480
  • src/wp-includes/js/tinymce/plugins/wpview/plugin.js

     
    8888                                }
    8989                        }
    9090
    91                         event.content = wp.mce.views.setMarkers( event.content );
     91                        event.content = wp.mce.views.setMarkers( event.content, event );
    9292                } );
    9393
    9494                // Replace any new markers nodes with views.