diff --git a/src/wp-includes/js/tinymce/plugins/wplink/plugin.js b/src/wp-includes/js/tinymce/plugins/wplink/plugin.js index 0083c1b28d..9f1a4eb91e 100644 --- a/src/wp-includes/js/tinymce/plugins/wplink/plugin.js +++ b/src/wp-includes/js/tinymce/plugins/wplink/plugin.js @@ -90,6 +90,8 @@ var previewInstance; var inputInstance; var linkNode; + var doingUndoRedo; + var doingUndoRedoTimer; var $ = window.jQuery; function getSelectedLink() { @@ -166,8 +168,10 @@ element.value = window.wpLink.getUrlFromSelection( selection ); } - element.focus(); - element.select(); + if ( ! doingUndoRedo ) { + element.focus(); + element.select(); + } } } ); } @@ -301,6 +305,25 @@ } }); + // When doing undo and redo with keyboard shortcuts (Ctrl|Cmd+Z, Ctrl|Cmd+Shift+Z, Ctrl|Cmd+Y), + // set a flag to not focus the inline dialog. The editor has to remain focused so the users can do consecutive undo/redo. + editor.on( 'keydown', function( event ) { + if ( event.altKey || ( tinymce.Env.mac && ( ! event.metaKey || event.ctrlKey ) ) || + ( ! tinymce.Env.mac && ! event.ctrlKey ) ) { + + return; + } + + if ( event.keyCode === 89 || event.keyCode === 90 ) { // Y or Z + doingUndoRedo = true; + + window.clearTimeout( doingUndoRedoTimer ); + doingUndoRedoTimer = window.setTimeout( function() { + doingUndoRedo = false; + }, 500 ); + } + } ); + editor.addButton( 'wp_link_preview', { type: 'WPLinkPreview', onPostRender: function() {