WordPress.org

Make WordPress Core

Changeset 29246


Ignore:
Timestamp:
07/19/2014 07:29:34 AM (7 years ago)
Author:
azaozz
Message:

TinyMCE wpView: better removal of views, replace a selected view when pasting. Props avryl, fixes #28913.

File:
1 edited

Legend:

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

    r29236 r29246  
    102102    }
    103103
     104    function removeView( view ) {
     105        // TODO: trigger an event to 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,
     
    184193        if ( ! event.content ) {
    185194            return;
     195        }
     196
     197        if ( selected ) {
     198            removeView( selected );
    186199        }
    187200
     
    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                }
     
    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;
     
    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 ) {
     
    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;
    448                     }
    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;
    456                 }
    457             }
    458 
    459             if ( ! view ) {
     459                    }
     460                }
    460461                return;
    461462            }
     
    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 ) {
     
    535533    editor.on( 'keyup', function() {
    536534        if ( toRemove ) {
    537             editor.dom.remove( toRemove );
     535            removeView( toRemove );
    538536            toRemove = false;
    539537        }
Note: See TracChangeset for help on using the changeset viewer.