WordPress.org

Make WordPress Core

Ticket #33300: 33300.3.patch

File 33300.3.patch, 3.1 KB (added by iseulde, 5 years ago)
  • src/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js

     
    2525                        { start: '####', format: 'h4' },
    2626                        { start: '#####', format: 'h5' },
    2727                        { start: '######', format: 'h6' },
    28                         { start: '>', format: 'blockquote' }
     28                        { start: '>', format: 'blockquote' },
     29                        { regExp: /^(?:[*-]\s?){3,}$/, element: 'hr' }
    2930                ];
    3031
    3132                var inlinePatterns = [
     
    3738                ];
    3839
    3940                var canUndo;
    40                 var refNode;
    41                 var refPattern;
    4241                var chars = [];
    4342                var zeroWidthSpaceNode;
    4443
     
    7271                        }
    7372
    7473                        if ( event.keyCode === VK.ENTER && ! VK.modifierPressed( event ) ) {
    75                                 watchEnter();
     74                                enter();
    7675                        }
    7776                }, true );
    7877
    7978                editor.on( 'keyup', function( event ) {
    8079                        if ( event.keyCode === VK.SPACEBAR && ! event.ctrlKey && ! event.metaKey && ! event.altKey ) {
    8180                                space();
    82                         } else if ( event.keyCode === VK.ENTER && ! VK.modifierPressed( event ) ) {
    83                                 enter();
    8481                        } else if ( event.keyCode > 47 && ! ( event.keyCode >= 91 && event.keyCode <= 93 ) ) {
    8582                                inline();
    8683                        }
     
    233230                        } );
    234231                }
    235232
    236                 function watchEnter() {
     233                function enter() {
    237234                        var rng = editor.selection.getRng(),
    238235                                start = rng.startContainer,
    239236                                node = firstTextNode( start ),
     
    247244                        text = node.data;
    248245
    249246                        while ( i-- ) {
    250                                  if ( text.indexOf( enterPatterns[ i ].start ) === 0 ) {
    251                                         pattern = enterPatterns[ i ];
    252                                         break;
    253                                  }
     247                                if ( enterPatterns[ i ].start ) {
     248                                        if ( text.indexOf( enterPatterns[ i ].start ) === 0 ) {
     249                                                pattern = enterPatterns[ i ];
     250                                                break;
     251                                        }
     252                                } else if ( enterPatterns[ i ].regExp ) {
     253                                        if ( enterPatterns[ i ].regExp.test( text ) ) {
     254                                                pattern = enterPatterns[ i ];
     255                                                break;
     256                                        }
     257                                }
    254258                        }
    255259
    256260                        if ( ! pattern ) {
     
    261265                                return;
    262266                        }
    263267
    264                         refNode = node;
    265                         refPattern = pattern;
    266                 }
    267 
    268                 function ltrim( text ) {
    269                         return text ? text.replace( /^\s+/, '' ) : '';
    270                 }
    271 
    272                 function enter() {
    273                         if ( refNode ) {
     268                        editor.once( 'keyup', function() {
    274269                                editor.undoManager.add();
    275270
    276271                                editor.undoManager.transact( function() {
    277                                         editor.formatter.apply( refPattern.format, {}, refNode );
    278                                         refNode.replaceData( 0, refNode.data.length, ltrim( refNode.data.slice( refPattern.start.length ) ) );
     272                                        if ( pattern.format ) {
     273                                                editor.formatter.apply( pattern.format, {}, node );
     274                                                node.replaceData( 0, node.data.length, ltrim( node.data.slice( pattern.start.length ) ) );
     275                                        } else if ( pattern.element ) {
     276                                                editor.getBody().replaceChild( document.createElement( pattern.element ), node.parentNode );
     277                                        }
    279278                                } );
    280279
    281280                                // We need to wait for native events to be triggered.
    282281                                setTimeout( function() {
    283282                                        canUndo = 'enter';
    284283                                } );
    285                         }
     284                        } );
     285                }
    286286
    287                         refNode = null;
    288                         refPattern = null;
     287                function ltrim( text ) {
     288                        return text ? text.replace( /^\s+/, '' ) : '';
    289289                }
    290290        } );
    291291} )( window.tinymce, window.setTimeout );