Make WordPress Core

Changeset 36719


Ignore:
Timestamp:
02/26/2016 12:51:01 AM (9 years ago)
Author:
iseulde
Message:

TinyMCE: textpattern: clean up

  • Use editor.once instead of storing into variables.
  • Add pattern for hr.

See #33300.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js

    r36627 r36719  
    2626            { start: '#####', format: 'h5' },
    2727            { start: '######', format: 'h6' },
    28             { start: '>', format: 'blockquote' }
     28            { start: '>', format: 'blockquote' },
     29            { regExp: /^\s*(?:(?:\* ?){3,}|(?:_ ?){3,}|(?:- ?){3,})\s*$/, element: 'hr' }
    2930        ];
    3031
     
    3839
    3940        var canUndo;
    40         var refNode;
    41         var refPattern;
    4241        var chars = [];
    43         var zeroWidthSpaceNode;
    4442
    4543        tinymce.each( inlinePatterns, function( pattern ) {
     
    5250
    5351        editor.on( 'selectionchange', function() {
    54             var offset;
    55 
    5652            canUndo = null;
    57 
    58             if ( zeroWidthSpaceNode ) {
    59                 offset = zeroWidthSpaceNode.data.indexOf( '\u200b' );
    60 
    61                 if ( offset !== -1 ) {
    62                     zeroWidthSpaceNode.deleteData( offset, offset + 1 );
    63                 }
    64             }
    6553        } );
    6654
     
    7361
    7462            if ( event.keyCode === VK.ENTER && ! VK.modifierPressed( event ) ) {
    75                 watchEnter();
     63                enter();
    7664            }
    7765        }, true );
     
    8068            if ( event.keyCode === VK.SPACEBAR && ! event.ctrlKey && ! event.metaKey && ! event.altKey ) {
    8169                space();
    82             } else if ( event.keyCode === VK.ENTER && ! VK.modifierPressed( event ) ) {
    83                 enter();
    8470            } else if ( event.keyCode > 47 && ! ( event.keyCode >= 91 && event.keyCode <= 93 ) ) {
    8571                inline();
     
    156142                setTimeout( function() {
    157143                    canUndo = 'space';
    158                     zeroWidthSpaceNode = zero;
     144
     145                    editor.once( 'selectionchange', function() {
     146                        var offset;
     147
     148                        if ( zero ) {
     149                            offset = zero.data.indexOf( '\u200b' );
     150
     151                            if ( offset !== -1 ) {
     152                                zero.deleteData( offset, offset + 1 );
     153                            }
     154                        }
     155                    } );
    159156                } );
    160157            }
     
    234231        }
    235232
    236         function watchEnter() {
     233        function enter() {
    237234            var rng = editor.selection.getRng(),
    238235                start = rng.startContainer,
     
    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
     
    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
     
    283282                    canUndo = 'enter';
    284283                } );
    285             }
    286 
    287             refNode = null;
    288             refPattern = null;
     284            } );
     285        }
     286
     287        function ltrim( text ) {
     288            return text ? text.replace( /^\s+/, '' ) : '';
    289289        }
    290290    } );
  • trunk/tests/qunit/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js

    r36627 r36719  
    307307
    308308    QUnit.test( 'Inline: no change.', function( assert ) {
    309         type( '******', function() {
    310             assert.equal( editor.getContent(), '<p>******</p>' );
     309        type( 'test ******', function() {
     310            assert.equal( editor.getContent(), '<p>test ******</p>' );
     311        }, assert.async() );
     312    } );
     313
     314    QUnit.test( 'Horizontal Rule', function( assert ) {
     315        type( '   ---   \n', function() {
     316            assert.equal( editor.getContent(), '<hr />\n<p>&nbsp;</p>' );
    311317        }, assert.async() );
    312318    } );
Note: See TracChangeset for help on using the changeset viewer.