Ticket #37091: 37091.patch
File 37091.patch, 4.7 KB (added by , 9 years ago) |
---|
-
src/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js
35 35 36 36 var inlinePatterns = [ 37 37 { start: '`', end: '`', format: 'code' } 38 // { regExp: /(?:^|\s):-?\)/, text: '\ud83d\ude42' }, 39 // { regExp: /(?:^|\s)<3/, text: '\u2764\ufe0f' } 38 40 ]; 39 41 42 var smilies = { 43 ':)': '\ud83d\ude42' 44 }; 45 40 46 var canUndo; 41 47 var chars = []; 42 48 … … 48 54 } ); 49 55 } ); 50 56 57 tinymce.each( smilies, function( value, key ) { 58 var c = key.slice( -1 ); 59 60 if ( tinymce.inArray( chars, c ) === -1 ) { 61 chars.push( c ); 62 } 63 } ); 64 51 65 editor.on( 'selectionchange', function() { 52 66 canUndo = null; 53 67 } ); … … 75 89 var rng = editor.selection.getRng(); 76 90 var node = rng.startContainer; 77 91 var offset = rng.startOffset; 92 var findStart; 78 93 var startOffset; 79 94 var endOffset; 80 95 var pattern; … … 85 100 return; 86 101 } 87 102 103 // Fast check for matching characters. 88 104 if ( tinymce.inArray( chars, node.data.charAt( offset - 1 ) ) === -1 ) { 89 105 return; 90 106 } 91 107 92 f unction findStart( node ) {108 findStart = function( node ) { 93 109 var i = inlinePatterns.length; 94 110 var offset; 95 111 … … 101 117 return offset; 102 118 } 103 119 } 104 } 120 }; 105 121 106 122 startOffset = findStart( node ); 107 endOffset = node.data.lastIndexOf( pattern.end );108 123 109 if ( startOffset === endOffset || endOffset === -1 ) { 110 return; 111 } 112 113 if ( endOffset - startOffset <= pattern.start.length ) { 114 return; 115 } 124 if ( startOffset ) { 125 endOffset = node.data.lastIndexOf( pattern.end ); 116 126 117 if ( node.data.slice( startOffset + pattern.start.length, endOffset ).indexOf( pattern.start.slice( 0, 1 ) ) !== -1 ) { 118 return; 119 } 120 121 format = editor.formatter.get( pattern.format ); 127 if ( startOffset === endOffset || endOffset === -1 ) { 128 return; 129 } 122 130 123 if ( format && format[0].inline ) { 124 editor.undoManager.add(); 131 if ( endOffset - startOffset <= pattern.start.length ) { 132 return; 133 } 125 134 126 editor.undoManager.transact( function() { 127 node.insertData( offset, '\u200b' ); 135 if ( node.data.slice( startOffset + pattern.start.length, endOffset ).indexOf( pattern.start.slice( 0, 1 ) ) !== -1 ) { 136 return; 137 } 128 138 129 node = node.splitText( startOffset ); 130 zero = node.splitText( offset - startOffset ); 139 format = editor.formatter.get( pattern.format ); 131 140 132 node.deleteData( 0, pattern.start.length );133 node.deleteData( node.data.length - pattern.end.length, pattern.end.length);141 if ( format && format[0].inline ) { 142 editor.undoManager.add(); 134 143 135 editor.formatter.apply( pattern.format, {}, node ); 144 editor.undoManager.transact( function() { 145 node.insertData( offset, '\u200b' ); 136 146 137 editor.selection.setCursorLocation( zero, 1);138 });147 node = node.splitText( startOffset ); 148 zero = node.splitText( offset - startOffset ); 139 149 140 // We need to wait for native events to be triggered. 141 setTimeout( function() { 142 canUndo = 'space'; 150 node.deleteData( 0, pattern.start.length ); 151 node.deleteData( node.data.length - pattern.end.length, pattern.end.length ); 143 152 144 editor.once( 'selectionchange', function() { 145 var offset; 153 editor.formatter.apply( pattern.format, {}, node ); 146 154 147 if ( zero ) {148 offset = zero.data.indexOf( '\u200b');155 editor.selection.setCursorLocation( zero, 1 ); 156 } ); 149 157 150 if ( offset !== -1 ) { 151 zero.deleteData( offset, offset + 1 ); 158 // We need to wait for native events to be triggered. 159 setTimeout( function() { 160 canUndo = 'space'; 161 162 editor.once( 'selectionchange', function() { 163 var offset; 164 165 if ( zero ) { 166 offset = zero.data.indexOf( '\u200b' ); 167 168 if ( offset !== -1 ) { 169 zero.deleteData( offset, offset + 1 ); 170 } 152 171 } 153 } 172 } ); 154 173 } ); 155 } );174 } 156 175 } 176 177 findStart = function( node ) { 178 var key; 179 var offset; 180 181 for ( key in smilies ) { 182 offset = node.data.lastIndexOf( ' ' + key ); 183 184 if ( offset !== -1 ) { 185 editor.undoManager.add(); 186 187 editor.undoManager.transact( function() { 188 node.replaceData( offset + 1, key.length, smilies[ key ] ); 189 190 editor.selection.setCursorLocation( node, offset + 3 ); 191 } ); 192 193 // We need to wait for native events to be triggered. 194 setTimeout( function() { 195 canUndo = 'space'; 196 } ); 197 } 198 } 199 }; 200 201 findStart( node ); 157 202 } 158 203 159 204 function firstTextNode( node ) {