Make WordPress Core

Ticket #28913: 28913.6.patch

File 28913.6.patch, 4.4 KB (added by iseulde, 11 years ago)
  • src/wp-includes/js/tinymce/plugins/wpview/plugin.js

     
    101101                editor.nodeChanged();
    102102        }
    103103
     104        function removeView( view ) {
     105                // TODO: trigger an event or run a clean up function.
     106                // Maybe `jQuery( view ).trigger( 'remove' );`?
     107                editor.undoManager.transact( function() {
     108                        handleEnter( view );
     109                        editor.dom.remove( view );
     110                });
     111        }
     112
    104113        function select( viewNode ) {
    105114                var clipboard,
    106115                        dom = editor.dom;
     
    185194                        return;
    186195                }
    187196
     197                if ( selected ) {
     198                        removeView( selected );
     199                }
     200
    188201                if ( ! event.initial ) {
    189202                        wp.mce.views.unbind( editor );
    190203                }
     
    293306                                        if ( editor.dom.hasClass( event.target, 'edit' ) ) {
    294307                                                wp.mce.views.edit( view );
    295308                                        } else if ( editor.dom.hasClass( event.target, 'remove' ) ) {
    296                                                 editor.dom.remove( view );
     309                                                removeView( view );
    297310                                        }
    298311                                }
    299312
     
    340353                        dom = editor.dom,
    341354                        selection = editor.selection,
    342355                        node, view, cursorBefore, cursorAfter,
    343                         range, clonedRange, tempRange, remove;
     356                        range, clonedRange, tempRange;
    344357
    345358                if ( selected ) {
    346                         // Let key presses that involve the command or control keys through.
    347                         // Also, let any of the F# keys through.
    348                         if ( event.metaKey || event.ctrlKey || ( key >= 112 && key <= 123 ) ) {
    349                                 // But remove the view when cmd/ctrl + x/backspace are pressed.
    350                                 if ( ( event.metaKey || event.ctrlKey ) && ( key === 88 || key === VK.BACKSPACE ) ) {
    351                                         // We'll remove a cut view on keyup, otherwise the browser can't copy the content.
    352                                         if ( key === 88 ) {
    353                                                 toRemove = selected;
    354                                         } else {
    355                                                 editor.dom.remove( selected );
    356                                         }
     359                        // Ignore key presses that involve the command or control key, but continue when in combination with backspace or v.
     360                        // Also ignore the F# keys.
     361                        if ( ( ( event.metaKey || event.ctrlKey ) && key !== VK.BACKSPACE && key !== 86 ) || ( key >= 112 && key <= 123 ) ) {
     362                                // Remove the view when pressing cmd/ctrl+x on keyup, otherwise the browser can't copy the content.
     363                                if ( ( event.metaKey || event.ctrlKey ) && key === 88 ) {
     364                                        toRemove = selected;
    357365                                }
    358366                                return;
    359367                        }
     
    399407                                event.preventDefault();
    400408                        // Ignore keys that don't insert anything.
    401409                        } else if ( ( key > 47 || VK.SPACEBAR || key === VK.ENTER || key === VK.DELETE || key === VK.BACKSPACE ) && key !== 144 && key !== 145 ) {
    402                                 editor.undoManager.transact( function() {
    403                                         remove = selected;
    404                                         handleEnter( selected );
    405                                         dom.remove( remove );
    406                                 });
     410                                removeView( selected );
    407411
    408412                                if ( key === VK.ENTER || key === VK.DELETE || key === VK.BACKSPACE ) {
    409413                                        event.preventDefault();
     
    437441                                }
    438442                        }
    439443
    440                         // Make sure we don't eat any content.
    441                         if ( event.keyCode === VK.BACKSPACE ) {
    442                                 if ( editor.dom.isEmpty( node ) ) {
    443                                         if ( view = getView( node.previousSibling ) ) {
     444                        if ( ! view ) {
     445                                // Make sure we don't eat any content.
     446                                if ( event.keyCode === VK.BACKSPACE ) {
     447                                        if ( editor.dom.isEmpty( node ) ) {
     448                                                if ( view = getView( node.previousSibling ) ) {
     449                                                        setViewCursor( false, view );
     450                                                        editor.dom.remove( node );
     451                                                        event.preventDefault();
     452                                                }
     453                                        } else if ( ( range = selection.getRng() ) &&
     454                                                        range.startOffset === 0 &&
     455                                                        range.endOffset === 0 &&
     456                                                        ( view = getView( node.previousSibling ) ) ) {
    444457                                                setViewCursor( false, view );
    445                                                 editor.dom.remove( node );
    446458                                                event.preventDefault();
    447                                                 return;
    448459                                        }
    449                                 } else if ( ( range = selection.getRng() ) &&
    450                                                 range.startOffset === 0 &&
    451                                                 range.endOffset === 0 &&
    452                                                 ( view = getView( node.previousSibling ) ) ) {
    453                                         setViewCursor( false, view );
    454                                         event.preventDefault();
    455                                         return;
    456460                                }
    457                         }
    458 
    459                         if ( ! view ) {
    460461                                return;
    461462                        }
    462463
     
    515516                                select( view );
    516517                                event.preventDefault();
    517518                        } else if ( cursorAfter && key === VK.BACKSPACE ) {
    518                                 editor.undoManager.transact( function() {
    519                                         handleEnter( view );
    520                                         dom.remove( view );
    521                                 });
     519                                removeView( view );
    522520                                event.preventDefault();
    523521                        } else if ( cursorAfter ) {
    524522                                handleEnter( view );
     
    534532
    535533        editor.on( 'keyup', function() {
    536534                if ( toRemove ) {
    537                         editor.dom.remove( toRemove );
     535                        removeView( toRemove );
    538536                        toRemove = false;
    539537                }
    540538        });