diff --git a/wp-includes/class-wp-editor.php b/wp-includes/class-wp-editor.php index 7bccc2f0f1..acd789532c 100644 --- a/wp-includes/class-wp-editor.php +++ b/wp-includes/class-wp-editor.php @@ -368,7 +368,8 @@ final class _WP_Editors { 'wpgallery', 'wplink', 'wpdialogs', - 'wpview', + 'wptextpattern', + 'wpview' ); if ( ! self::$has_medialib ) { diff --git a/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js b/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js new file mode 100644 index 0000000000..1b7df4fb4a --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js @@ -0,0 +1,100 @@ +( function( tinymce, setTimeout ) { + tinymce.PluginManager.add( 'wptextpattern', function( editor ) { + var $$ = editor.$, + patterns = [], + canUndo = false; + + function add( regExp, callback ) { + patterns.push( { + regExp: regExp, + callback: callback + } ); + } + + add( /^[*-]\s/, function() { + this.execCommand( 'InsertUnorderedList' ); + } ); + + add( /^1[.)]\s/, function() { + this.execCommand( 'InsertOrderedList' ); + } ); + + editor.on( 'selectionchange', function() { + canUndo = false; + } ); + + editor.on( 'keydown', function( event ) { + if ( canUndo && event.keyCode === tinymce.util.VK.BACKSPACE ) { + editor.undoManager.undo(); + event.preventDefault(); + } + } ); + + editor.on( 'keyup', function( event ) { + var rng, node, text, parent, child; + + if ( event.keyCode !== tinymce.util.VK.SPACEBAR ) { + return; + } + + rng = editor.selection.getRng(); + node = rng.startContainer; + text = node.nodeValue; + + if ( node.nodeType !== 3 ) { + return; + } + + parent = editor.dom.getParent( node, 'p' ); + + if ( ! parent ) { + return; + } + + while ( child = parent.firstChild ) { + if ( child.nodeType !== 3 ) { + parent = child; + } else { + break; + } + } + + if ( child !== node ) { + return; + } + + tinymce.each( patterns, function( pattern ) { + var replace = text.replace( pattern.regExp, '' ); + + if ( text === replace ) { + return; + } + + if ( rng.startOffset !== text.length - replace.length ) { + return; + } + + editor.undoManager.add(); + + editor.undoManager.transact( function() { + if ( replace ) { + $$( node ).replaceWith( document.createTextNode( replace ) ); + } else { + $$( node.parentNode ).empty().append( '
' ); + } + + editor.selection.setCursorLocation( parent ); + + pattern.callback.apply( editor ); + } ); + + // We need to wait for native events to be triggered. + setTimeout( function() { + canUndo = true; + } ); + + return false; + } ); + } ); + } ); +} )( window.tinymce, window.setTimeout ); diff --git a/wp-includes/js/tinymce/plugins/wptextpattern/plugin.min.js b/wp-includes/js/tinymce/plugins/wptextpattern/plugin.min.js new file mode 100644 index 0000000000..f6c31eca42 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wptextpattern/plugin.min.js @@ -0,0 +1 @@ +!function(a,b){a.PluginManager.add("wptextpattern",function(c){function d(a,b){f.push({regExp:a,callback:b})}var e=c.$,f=[],g=!1;d(/^[*-]\s/,function(){this.execCommand("InsertUnorderedList")}),d(/^1[.)]\s/,function(){this.execCommand("InsertOrderedList")}),c.on("selectionchange",function(){g=!1}),c.on("keydown",function(b){g&&b.keyCode===a.util.VK.BACKSPACE&&(c.undoManager.undo(),b.preventDefault())}),c.on("keyup",function(d){var h,i,j,k,l;if(d.keyCode===a.util.VK.SPACEBAR&&(h=c.selection.getRng(),i=h.startContainer,j=i.nodeValue,3===i.nodeType&&(k=c.dom.getParent(i,"p")))){for(;(l=k.firstChild)&&3!==l.nodeType;)k=l;l===i&&a.each(f,function(a){var d=j.replace(a.regExp,"");if(j!==d&&h.startOffset===j.length-d.length)return c.undoManager.add(),c.undoManager.transact(function(){d?e(i).replaceWith(document.createTextNode(d)):e(i.parentNode).empty().append("
"),c.selection.setCursorLocation(k),a.callback.apply(c)}),b(function(){g=!0}),!1})}})})}(window.tinymce,window.setTimeout); \ No newline at end of file diff --git a/wp-includes/js/tinymce/wp-tinymce.js.gz b/wp-includes/js/tinymce/wp-tinymce.js.gz index 423749b2a7..81c0cfe29f 100644 Binary files a/wp-includes/js/tinymce/wp-tinymce.js.gz and b/wp-includes/js/tinymce/wp-tinymce.js.gz differ diff --git a/wp-includes/version.php b/wp-includes/version.php index ae9fe5159e..59a70c760c 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.3-alpha-32698'; +$wp_version = '4.3-alpha-32699'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.