- Fix the inline toolbar on images in iOS, move it out of the way so the default inline toolbar is not over it.
- Fix selecting images on touch in the editor (iOS Safari fails to select them most of the time).

Fixes #34557.
Built from https://develop.svn.wordpress.org/trunk@35607


git-svn-id: http://core.svn.wordpress.org/trunk@35571 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Andrew Ozz 2015-11-11 03:27:25 +00:00
parent d3f30288e9
commit 7e1c68ea78
6 changed files with 50 additions and 21 deletions

View File

@ -739,32 +739,40 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) {
spaceBottom = windowHeight - iframeRect.top - selection.bottom - blockedBottom, spaceBottom = windowHeight - iframeRect.top - selection.bottom - blockedBottom,
editorHeight = windowHeight - blockedTop - blockedBottom, editorHeight = windowHeight - blockedTop - blockedBottom,
className = '', className = '',
iosOffsetTop = 0,
iosOffsetBottom = 0,
top, left; top, left;
if ( spaceTop >= editorHeight || spaceBottom >= editorHeight ) { if ( spaceTop >= editorHeight || spaceBottom >= editorHeight ) {
return this.hide(); return this.hide();
} }
// Add offset in iOS to move the menu over the image, out of the way of the default iOS menu.
if ( tinymce.Env.iOS && currentSelection.nodeName === 'IMG' ) {
iosOffsetTop = 54;
iosOffsetBottom = 46;
}
if ( this.bottom ) { if ( this.bottom ) {
if ( spaceBottom >= spaceNeeded ) { if ( spaceBottom >= spaceNeeded ) {
className = ' mce-arrow-up'; className = ' mce-arrow-up';
top = selection.bottom + iframeRect.top + scrollY; top = selection.bottom + iframeRect.top + scrollY - iosOffsetBottom;
} else if ( spaceTop >= spaceNeeded ) { } else if ( spaceTop >= spaceNeeded ) {
className = ' mce-arrow-down'; className = ' mce-arrow-down';
top = selection.top + iframeRect.top + scrollY - toolbarHeight - margin; top = selection.top + iframeRect.top + scrollY - toolbarHeight - margin + iosOffsetTop;
} }
} else { } else {
if ( spaceTop >= spaceNeeded ) { if ( spaceTop >= spaceNeeded ) {
className = ' mce-arrow-down'; className = ' mce-arrow-down';
top = selection.top + iframeRect.top + scrollY - toolbarHeight - margin; top = selection.top + iframeRect.top + scrollY - toolbarHeight - margin + iosOffsetTop;
} else if ( spaceBottom >= spaceNeeded && editorHeight / 2 > selection.bottom + iframeRect.top - blockedTop ) { } else if ( spaceBottom >= spaceNeeded && editorHeight / 2 > selection.bottom + iframeRect.top - blockedTop ) {
className = ' mce-arrow-up'; className = ' mce-arrow-up';
top = selection.bottom + iframeRect.top + scrollY; top = selection.bottom + iframeRect.top + scrollY - iosOffsetBottom;
} }
} }
if ( typeof top === 'undefined' ) { if ( typeof top === 'undefined' ) {
top = scrollY + blockedTop + buffer; top = scrollY + blockedTop + buffer + iosOffsetBottom;
} }
left = selectionMiddle - toolbarWidth / 2 + iframeRect.left + scrollX; left = selectionMiddle - toolbarWidth / 2 + iframeRect.left + scrollX;
@ -784,6 +792,11 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) {
left = selection.right - toolbarWidth + iframeRect.left + scrollX; left = selection.right - toolbarWidth + iframeRect.left + scrollX;
} }
// No up/down arrows on the menu over images in iOS.
if ( tinymce.Env.iOS && currentSelection.nodeName === 'IMG' ) {
className = className.replace( / ?mce-arrow-(up|down)/g, '' );
}
toolbar.className = toolbar.className.replace( / ?mce-arrow-[\w]+/g, '' ) + className; toolbar.className = toolbar.className.replace( / ?mce-arrow-[\w]+/g, '' ) + className;
DOM.setStyles( toolbar, { DOM.setStyles( toolbar, {

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
/* global tinymce */ /* global tinymce */
tinymce.PluginManager.add( 'wpeditimage', function( editor ) { tinymce.PluginManager.add( 'wpeditimage', function( editor ) {
var toolbar, serializer, var toolbar, serializer, touchOnImage,
each = tinymce.each, each = tinymce.each,
trim = tinymce.trim, trim = tinymce.trim,
iOS = tinymce.Env.iOS; iOS = tinymce.Env.iOS;
@ -79,13 +79,28 @@ tinymce.PluginManager.add( 'wpeditimage', function( editor ) {
} }
} ); } );
// Safari on iOS fails to select image nodes in contentEditoble mode on touch/click. // Safari on iOS fails to select images in contentEditoble mode on touch.
// Select them again. // Select them again.
if ( iOS ) { if ( iOS ) {
editor.on( 'click', function( event ) { editor.on( 'init', function() {
editor.on( 'touchstart', function( event ) {
if ( event.target.nodeName === 'IMG' ) { if ( event.target.nodeName === 'IMG' ) {
touchOnImage = true;
}
});
editor.dom.bind( editor.getDoc(), 'touchmove', function( event ) {
if ( event.target.nodeName === 'IMG' ) {
touchOnImage = false;
}
});
editor.on( 'touchend', function( event ) {
if ( touchOnImage && event.target.nodeName === 'IMG' ) {
var node = event.target; var node = event.target;
touchOnImage = false;
window.setTimeout( function() { window.setTimeout( function() {
editor.selection.select( node ); editor.selection.select( node );
editor.nodeChanged(); editor.nodeChanged();
@ -94,6 +109,7 @@ tinymce.PluginManager.add( 'wpeditimage', function( editor ) {
toolbar.hide(); toolbar.hide();
} }
}); });
});
} }
function parseShortcode( content ) { function parseShortcode( content ) {

File diff suppressed because one or more lines are too long

View File

@ -4,7 +4,7 @@
* *
* @global string $wp_version * @global string $wp_version
*/ */
$wp_version = '4.4-beta3-35606'; $wp_version = '4.4-beta3-35607';
/** /**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.