diff --git src/wp-includes/js/tinymce/plugins/wpview/plugin.js src/wp-includes/js/tinymce/plugins/wpview/plugin.js
index 9327859..6892249 100644
|
|
tinymce.PluginManager.add( 'wpview', function( editor ) { |
109 | 109 | |
110 | 110 | dom.unbind( selected, 'beforedeactivate focusin focusout click mouseup', _stop ); |
111 | 111 | dom.removeClass( selected, 'selected' ); |
112 | | |
113 | | editor.selection.select( selected.nextSibling ); |
114 | | editor.selection.collapse(); |
115 | | |
116 | 112 | } |
117 | 113 | |
118 | 114 | selected = null; |
… |
… |
tinymce.PluginManager.add( 'wpview', function( editor ) { |
176 | 172 | x = event.clientX; |
177 | 173 | y = event.clientY; |
178 | 174 | |
| 175 | // Detect events above or to the left if the first node is a wpview |
179 | 176 | if ( isView( firstNode ) && ( ( x < firstNode.offsetLeft && y < ( firstNode.offsetHeight - scrollTop ) ) || |
180 | 177 | y < firstNode.offsetTop ) ) { |
181 | | // detect events above or to the left of the first view |
182 | 178 | |
183 | 179 | padNode = createPadNode(); |
184 | 180 | body.insertBefore( padNode, firstNode ); |
| 181 | |
| 182 | // Detect events to the right and below the last view |
185 | 183 | } else if ( isView( lastNode ) && ( x > ( lastNode.offsetLeft + lastNode.offsetWidth ) || |
186 | 184 | ( ( scrollTop + y ) - ( lastNode.offsetTop + lastNode.offsetHeight ) ) > 0 ) ) { |
187 | | // detect events to the right and below the last view |
188 | 185 | |
189 | 186 | padNode = createPadNode(); |
190 | 187 | body.appendChild( padNode ); |
… |
… |
tinymce.PluginManager.add( 'wpview', function( editor ) { |
305 | 302 | editor.on( 'keydown', function( event ) { |
306 | 303 | var keyCode = event.keyCode, |
307 | 304 | body = editor.getBody(), |
308 | | view, padNode; |
| 305 | view, padNode, walker, node; |
309 | 306 | |
310 | 307 | // If a view isn't selected, let the event go on its merry way. |
311 | 308 | if ( ! selected ) { |
… |
… |
tinymce.PluginManager.add( 'wpview', function( editor ) { |
342 | 339 | editor.selection.setCursorLocation( body.firstChild, 0 ); |
343 | 340 | // Handle default case |
344 | 341 | } else { |
345 | | editor.selection.select( view.previousSibling, true ); |
| 342 | walker = new TreeWalker( view, body ); |
| 343 | node = walker.prev( true ); |
| 344 | editor.selection.select( node, true ); |
346 | 345 | editor.selection.collapse(); |
347 | 346 | } |
348 | 347 | } else if ( keyCode === VK.RIGHT || keyCode === VK.DOWN ) { |
… |
… |
tinymce.PluginManager.add( 'wpview', function( editor ) { |
357 | 356 | editor.selection.setCursorLocation( body.lastChild, 0 ); |
358 | 357 | // Handle default case where the next node is a non-wpview |
359 | 358 | } else { |
360 | | editor.selection.setCursorLocation( view.nextSibling.firstChild, 0 ); |
| 359 | walker = new TreeWalker( view, body ); |
| 360 | node = walker.next( true ); |
| 361 | editor.selection.select( node, true ); |
| 362 | editor.selection.collapse( true ); |
361 | 363 | } |
362 | 364 | } else if ( keyCode === VK.DELETE || keyCode === VK.BACKSPACE ) { |
363 | 365 | // If delete or backspace is pressed, delete the view. |
… |
… |
tinymce.PluginManager.add( 'wpview', function( editor ) { |
372 | 374 | var keyCode = event.keyCode, |
373 | 375 | range = editor.selection.getRng(), |
374 | 376 | body = editor.getBody(), |
| 377 | walker, |
| 378 | view, |
375 | 379 | node; |
376 | 380 | |
377 | 381 | if ( ! range.collapsed || event.metaKey || event.ctrlKey ) { |
378 | 382 | return; |
379 | 383 | } |
380 | 384 | |
381 | | if ( keyCode === VK.LEFT || keyCode === VK.UP ) { |
382 | | node = range.startContainer.parentNode === body ? range.startContainer : range.startContainer.parentNode; |
| 385 | if ( ( keyCode === VK.LEFT || keyCode === VK.UP ) && range.startOffset === 0 ) { |
| 386 | walker = new TreeWalker( range.startContainer, body ); |
| 387 | node = walker.prev(); |
383 | 388 | // The caret is directly after a wpview |
384 | | if ( range.startOffset === 0 && isView( node.previousSibling ) ) { |
385 | | select( node.previousSibling ); |
386 | | event.preventDefault(); |
| 389 | if ( isView( range.startContainer.previousSibling ) ) { |
| 390 | view = range.startContainer.previousSibling; |
| 391 | } else if ( isView( node ) ) { |
| 392 | view = node; |
387 | 393 | } |
388 | | } else if ( keyCode === VK.RIGHT || keyCode === VK.DOWN ) { |
389 | | node = range.startContainer.parentNode === body ? range.startContainer : range.startContainer.parentNode; |
| 394 | } else if ( ( keyCode === VK.RIGHT || keyCode === VK.DOWN ) && |
| 395 | ( ( range.startOffset === 0 && ! range.endContainer.length ) || ( range.startOffset === range.endContainer.length ) ) ) { |
| 396 | |
| 397 | walker = new TreeWalker( range.endContainer, body ); |
| 398 | node = walker.next(); |
| 399 | |
390 | 400 | // The caret is directly before a wpview |
391 | | if ( ( ( range.startOffset === 0 && ! range.endContainer.length ) || ( range.startOffset === range.endContainer.length ) ) && |
392 | | isView( node.nextSibling ) ) { |
393 | | select( node.nextSibling ); |
394 | | event.preventDefault(); |
| 401 | if ( isView( range.endContainer.nextSibling ) ) { |
| 402 | view = range.endContainer.nextSibling; |
| 403 | } else if ( isView( node ) ) { |
| 404 | view = node; |
395 | 405 | } |
396 | 406 | } |
| 407 | |
| 408 | if ( view ) { |
| 409 | select( view ); |
| 410 | event.preventDefault(); |
| 411 | } |
397 | 412 | }); |
398 | 413 | |
399 | 414 | editor.on( 'keyup', function( event ) { |
… |
… |
tinymce.PluginManager.add( 'wpview', function( editor ) { |
423 | 438 | // Allow an initial element in the document to be removed when it is before a view |
424 | 439 | if ( body.firstChild === range.startContainer && range.collapsed === true && |
425 | 440 | isView( range.startContainer.nextSibling ) && range.startOffset === 0 ) { |
426 | | |
427 | 441 | editor.dom.remove( range.startContainer ); |
428 | 442 | } |
429 | 443 | } |