Edit File by line
/home/zeestwma/richards.../wp-inclu.../js/tinymce/plugins/wordpres...
File: plugin.js
doc = editor.getDoc(),
[500] Fix | Delete
dom = editor.dom;
[501] Fix | Delete
[502] Fix | Delete
if ( env.iOS ) {
[503] Fix | Delete
dom.addClass( doc.documentElement, 'ios' );
[504] Fix | Delete
}
[505] Fix | Delete
[506] Fix | Delete
if ( editor.getParam( 'directionality' ) === 'rtl' ) {
[507] Fix | Delete
bodyClass.push('rtl');
[508] Fix | Delete
dom.setAttrib( doc.documentElement, 'dir', 'rtl' );
[509] Fix | Delete
}
[510] Fix | Delete
[511] Fix | Delete
dom.setAttrib( doc.documentElement, 'lang', editor.getParam( 'wp_lang_attr' ) );
[512] Fix | Delete
[513] Fix | Delete
if ( env.ie ) {
[514] Fix | Delete
if ( parseInt( env.ie, 10 ) === 9 ) {
[515] Fix | Delete
bodyClass.push('ie9');
[516] Fix | Delete
} else if ( parseInt( env.ie, 10 ) === 8 ) {
[517] Fix | Delete
bodyClass.push('ie8');
[518] Fix | Delete
} else if ( env.ie < 8 ) {
[519] Fix | Delete
bodyClass.push('ie7');
[520] Fix | Delete
}
[521] Fix | Delete
} else if ( env.webkit ) {
[522] Fix | Delete
bodyClass.push('webkit');
[523] Fix | Delete
}
[524] Fix | Delete
[525] Fix | Delete
bodyClass.push('wp-editor');
[526] Fix | Delete
[527] Fix | Delete
each( bodyClass, function( cls ) {
[528] Fix | Delete
if ( cls ) {
[529] Fix | Delete
dom.addClass( doc.body, cls );
[530] Fix | Delete
}
[531] Fix | Delete
});
[532] Fix | Delete
[533] Fix | Delete
// Remove invalid parent paragraphs when inserting HTML.
[534] Fix | Delete
editor.on( 'BeforeSetContent', function( event ) {
[535] Fix | Delete
if ( event.content ) {
[536] Fix | Delete
event.content = event.content.replace( /<p>\s*<(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre)( [^>]*)?>/gi, '<$1$2>' )
[537] Fix | Delete
.replace( /<\/(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre)>\s*<\/p>/gi, '</$1>' );
[538] Fix | Delete
}
[539] Fix | Delete
});
[540] Fix | Delete
[541] Fix | Delete
if ( $ ) {
[542] Fix | Delete
// Run on DOM ready. Otherwise TinyMCE may initialize earlier and handlers attached
[543] Fix | Delete
// on DOM ready of after the `tinymce.init()` call may not get triggered.
[544] Fix | Delete
$( function() {
[545] Fix | Delete
$( document ).triggerHandler( 'tinymce-editor-init', [editor] );
[546] Fix | Delete
});
[547] Fix | Delete
}
[548] Fix | Delete
[549] Fix | Delete
if ( window.tinyMCEPreInit && window.tinyMCEPreInit.dragDropUpload ) {
[550] Fix | Delete
dom.bind( doc, 'dragstart dragend dragover drop', function( event ) {
[551] Fix | Delete
if ( $ ) {
[552] Fix | Delete
// Trigger the jQuery handlers.
[553] Fix | Delete
$( document ).trigger( new $.Event( event ) );
[554] Fix | Delete
}
[555] Fix | Delete
});
[556] Fix | Delete
}
[557] Fix | Delete
[558] Fix | Delete
if ( editor.getParam( 'wp_paste_filters', true ) ) {
[559] Fix | Delete
editor.on( 'PastePreProcess', function( event ) {
[560] Fix | Delete
// Remove trailing <br> added by WebKit browsers to the clipboard.
[561] Fix | Delete
event.content = event.content.replace( /<br class="?Apple-interchange-newline"?>/gi, '' );
[562] Fix | Delete
[563] Fix | Delete
// In WebKit this is handled by removeWebKitStyles().
[564] Fix | Delete
if ( ! tinymce.Env.webkit ) {
[565] Fix | Delete
// Remove all inline styles.
[566] Fix | Delete
event.content = event.content.replace( /(<[^>]+) style="[^"]*"([^>]*>)/gi, '$1$2' );
[567] Fix | Delete
[568] Fix | Delete
// Put back the internal styles.
[569] Fix | Delete
event.content = event.content.replace(/(<[^>]+) data-mce-style=([^>]+>)/gi, '$1 style=$2' );
[570] Fix | Delete
}
[571] Fix | Delete
});
[572] Fix | Delete
[573] Fix | Delete
editor.on( 'PastePostProcess', function( event ) {
[574] Fix | Delete
// Remove empty paragraphs.
[575] Fix | Delete
editor.$( 'p', event.node ).each( function( i, node ) {
[576] Fix | Delete
if ( dom.isEmpty( node ) ) {
[577] Fix | Delete
dom.remove( node );
[578] Fix | Delete
}
[579] Fix | Delete
});
[580] Fix | Delete
[581] Fix | Delete
if ( tinymce.isIE ) {
[582] Fix | Delete
editor.$( 'a', event.node ).find( 'font, u' ).each( function( i, node ) {
[583] Fix | Delete
dom.remove( node, true );
[584] Fix | Delete
});
[585] Fix | Delete
}
[586] Fix | Delete
});
[587] Fix | Delete
}
[588] Fix | Delete
});
[589] Fix | Delete
[590] Fix | Delete
editor.on( 'SaveContent', function( event ) {
[591] Fix | Delete
// If editor is hidden, we just want the textarea's value to be saved.
[592] Fix | Delete
if ( ! editor.inline && editor.isHidden() ) {
[593] Fix | Delete
event.content = event.element.value;
[594] Fix | Delete
return;
[595] Fix | Delete
}
[596] Fix | Delete
[597] Fix | Delete
// Keep empty paragraphs :(
[598] Fix | Delete
event.content = event.content.replace( /<p>(?:<br ?\/?>|\u00a0|\uFEFF| )*<\/p>/g, '<p>&nbsp;</p>' );
[599] Fix | Delete
[600] Fix | Delete
if ( hasWpautop ) {
[601] Fix | Delete
event.content = wp.editor.removep( event.content );
[602] Fix | Delete
} else {
[603] Fix | Delete
// Restore formatting of block boundaries.
[604] Fix | Delete
event.content = event.content.replace( /-->\s*<!-- wp:/g, '-->\n\n<!-- wp:' );
[605] Fix | Delete
}
[606] Fix | Delete
});
[607] Fix | Delete
[608] Fix | Delete
editor.on( 'preInit', function() {
[609] Fix | Delete
var validElementsSetting = '@[id|accesskey|class|dir|lang|style|tabindex|' +
[610] Fix | Delete
'title|contenteditable|draggable|dropzone|hidden|spellcheck|translate],' + // Global attributes.
[611] Fix | Delete
'i,' + // Don't replace <i> with <em> and <b> with <strong> and don't remove them when empty.
[612] Fix | Delete
'b,' +
[613] Fix | Delete
'script[src|async|defer|type|charset|crossorigin|integrity]'; // Add support for <script>.
[614] Fix | Delete
[615] Fix | Delete
editor.schema.addValidElements( validElementsSetting );
[616] Fix | Delete
[617] Fix | Delete
if ( tinymce.Env.iOS ) {
[618] Fix | Delete
editor.settings.height = 300;
[619] Fix | Delete
}
[620] Fix | Delete
[621] Fix | Delete
each( {
[622] Fix | Delete
c: 'JustifyCenter',
[623] Fix | Delete
r: 'JustifyRight',
[624] Fix | Delete
l: 'JustifyLeft',
[625] Fix | Delete
j: 'JustifyFull',
[626] Fix | Delete
q: 'mceBlockQuote',
[627] Fix | Delete
u: 'InsertUnorderedList',
[628] Fix | Delete
o: 'InsertOrderedList',
[629] Fix | Delete
m: 'WP_Medialib',
[630] Fix | Delete
t: 'WP_More',
[631] Fix | Delete
d: 'Strikethrough',
[632] Fix | Delete
p: 'WP_Page',
[633] Fix | Delete
x: 'WP_Code'
[634] Fix | Delete
}, function( command, key ) {
[635] Fix | Delete
editor.shortcuts.add( 'access+' + key, '', command );
[636] Fix | Delete
} );
[637] Fix | Delete
[638] Fix | Delete
editor.addShortcut( 'meta+s', '', function() {
[639] Fix | Delete
if ( wp && wp.autosave ) {
[640] Fix | Delete
wp.autosave.server.triggerSave();
[641] Fix | Delete
}
[642] Fix | Delete
} );
[643] Fix | Delete
[644] Fix | Delete
// Alt+Shift+Z removes a block in the block editor, don't add it to the Classic block.
[645] Fix | Delete
if ( ! editor.settings.classic_block_editor ) {
[646] Fix | Delete
editor.addShortcut( 'access+z', '', 'WP_Adv' );
[647] Fix | Delete
}
[648] Fix | Delete
[649] Fix | Delete
// Workaround for not triggering the global help modal in the block editor by the Classic block shortcut.
[650] Fix | Delete
editor.on( 'keydown', function( event ) {
[651] Fix | Delete
var match;
[652] Fix | Delete
[653] Fix | Delete
if ( tinymce.Env.mac ) {
[654] Fix | Delete
match = event.ctrlKey && event.altKey && event.code === 'KeyH';
[655] Fix | Delete
} else {
[656] Fix | Delete
match = event.shiftKey && event.altKey && event.code === 'KeyH';
[657] Fix | Delete
}
[658] Fix | Delete
[659] Fix | Delete
if ( match ) {
[660] Fix | Delete
editor.execCommand( 'WP_Help' );
[661] Fix | Delete
event.stopPropagation();
[662] Fix | Delete
event.stopImmediatePropagation();
[663] Fix | Delete
return false;
[664] Fix | Delete
}
[665] Fix | Delete
[666] Fix | Delete
return true;
[667] Fix | Delete
});
[668] Fix | Delete
[669] Fix | Delete
if ( window.getUserSetting( 'editor_plain_text_paste_warning' ) > 1 ) {
[670] Fix | Delete
editor.settings.paste_plaintext_inform = false;
[671] Fix | Delete
}
[672] Fix | Delete
[673] Fix | Delete
// Change the editor iframe title on MacOS, add the correct help shortcut.
[674] Fix | Delete
if ( tinymce.Env.mac ) {
[675] Fix | Delete
tinymce.$( editor.iframeElement ).attr( 'title', __( 'Rich Text Area. Press Control-Option-H for help.' ) );
[676] Fix | Delete
}
[677] Fix | Delete
} );
[678] Fix | Delete
[679] Fix | Delete
editor.on( 'PastePlainTextToggle', function( event ) {
[680] Fix | Delete
// Warn twice, then stop.
[681] Fix | Delete
if ( event.state === true ) {
[682] Fix | Delete
var times = parseInt( window.getUserSetting( 'editor_plain_text_paste_warning' ), 10 ) || 0;
[683] Fix | Delete
[684] Fix | Delete
if ( times < 2 ) {
[685] Fix | Delete
window.setUserSetting( 'editor_plain_text_paste_warning', ++times );
[686] Fix | Delete
}
[687] Fix | Delete
}
[688] Fix | Delete
});
[689] Fix | Delete
[690] Fix | Delete
editor.on( 'beforerenderui', function() {
[691] Fix | Delete
if ( editor.theme.panel ) {
[692] Fix | Delete
each( [ 'button', 'colorbutton', 'splitbutton' ], function( buttonType ) {
[693] Fix | Delete
replaceButtonsTooltips( editor.theme.panel.find( buttonType ) );
[694] Fix | Delete
} );
[695] Fix | Delete
[696] Fix | Delete
addShortcutsToListbox();
[697] Fix | Delete
}
[698] Fix | Delete
} );
[699] Fix | Delete
[700] Fix | Delete
function prepareTooltips() {
[701] Fix | Delete
var access = 'Shift+Alt+';
[702] Fix | Delete
var meta = 'Ctrl+';
[703] Fix | Delete
[704] Fix | Delete
wpTooltips = {};
[705] Fix | Delete
[706] Fix | Delete
// For MacOS: ctrl = \u2303, cmd = \u2318, alt = \u2325.
[707] Fix | Delete
if ( tinymce.Env.mac ) {
[708] Fix | Delete
access = '\u2303\u2325';
[709] Fix | Delete
meta = '\u2318';
[710] Fix | Delete
}
[711] Fix | Delete
[712] Fix | Delete
// Some tooltips are translated, others are not...
[713] Fix | Delete
if ( editor.settings.wp_shortcut_labels ) {
[714] Fix | Delete
each( editor.settings.wp_shortcut_labels, function( value, tooltip ) {
[715] Fix | Delete
var translated = editor.translate( tooltip );
[716] Fix | Delete
[717] Fix | Delete
value = value.replace( 'access', access ).replace( 'meta', meta );
[718] Fix | Delete
wpTooltips[ tooltip ] = value;
[719] Fix | Delete
[720] Fix | Delete
// Add the translated so we can match all of them.
[721] Fix | Delete
if ( tooltip !== translated ) {
[722] Fix | Delete
wpTooltips[ translated ] = value;
[723] Fix | Delete
}
[724] Fix | Delete
} );
[725] Fix | Delete
}
[726] Fix | Delete
}
[727] Fix | Delete
[728] Fix | Delete
function getTooltip( tooltip ) {
[729] Fix | Delete
var translated = editor.translate( tooltip );
[730] Fix | Delete
var label;
[731] Fix | Delete
[732] Fix | Delete
if ( ! wpTooltips ) {
[733] Fix | Delete
prepareTooltips();
[734] Fix | Delete
}
[735] Fix | Delete
[736] Fix | Delete
if ( wpTooltips.hasOwnProperty( translated ) ) {
[737] Fix | Delete
label = wpTooltips[ translated ];
[738] Fix | Delete
} else if ( wpTooltips.hasOwnProperty( tooltip ) ) {
[739] Fix | Delete
label = wpTooltips[ tooltip ];
[740] Fix | Delete
}
[741] Fix | Delete
[742] Fix | Delete
return label ? translated + ' (' + label + ')' : translated;
[743] Fix | Delete
}
[744] Fix | Delete
[745] Fix | Delete
function replaceButtonsTooltips( buttons ) {
[746] Fix | Delete
[747] Fix | Delete
if ( ! buttons ) {
[748] Fix | Delete
return;
[749] Fix | Delete
}
[750] Fix | Delete
[751] Fix | Delete
each( buttons, function( button ) {
[752] Fix | Delete
var tooltip;
[753] Fix | Delete
[754] Fix | Delete
if ( button && button.settings.tooltip ) {
[755] Fix | Delete
tooltip = getTooltip( button.settings.tooltip );
[756] Fix | Delete
button.settings.tooltip = tooltip;
[757] Fix | Delete
[758] Fix | Delete
// Override the aria label with the translated tooltip + shortcut.
[759] Fix | Delete
if ( button._aria && button._aria.label ) {
[760] Fix | Delete
button._aria.label = tooltip;
[761] Fix | Delete
}
[762] Fix | Delete
}
[763] Fix | Delete
} );
[764] Fix | Delete
}
[765] Fix | Delete
[766] Fix | Delete
function addShortcutsToListbox() {
[767] Fix | Delete
// listbox for the "blocks" drop-down.
[768] Fix | Delete
each( editor.theme.panel.find( 'listbox' ), function( listbox ) {
[769] Fix | Delete
if ( listbox && listbox.settings.text === 'Paragraph' ) {
[770] Fix | Delete
each( listbox.settings.values, function( item ) {
[771] Fix | Delete
if ( item.text && wpTooltips.hasOwnProperty( item.text ) ) {
[772] Fix | Delete
item.shortcut = '(' + wpTooltips[ item.text ] + ')';
[773] Fix | Delete
}
[774] Fix | Delete
} );
[775] Fix | Delete
}
[776] Fix | Delete
} );
[777] Fix | Delete
}
[778] Fix | Delete
[779] Fix | Delete
/**
[780] Fix | Delete
* Experimental: create a floating toolbar.
[781] Fix | Delete
* This functionality will change in the next releases. Not recommended for use by plugins.
[782] Fix | Delete
*/
[783] Fix | Delete
editor.on( 'preinit', function() {
[784] Fix | Delete
var Factory = tinymce.ui.Factory,
[785] Fix | Delete
settings = editor.settings,
[786] Fix | Delete
activeToolbar,
[787] Fix | Delete
currentSelection,
[788] Fix | Delete
timeout,
[789] Fix | Delete
container = editor.getContainer(),
[790] Fix | Delete
wpAdminbar = document.getElementById( 'wpadminbar' ),
[791] Fix | Delete
mceIframe = document.getElementById( editor.id + '_ifr' ),
[792] Fix | Delete
mceToolbar,
[793] Fix | Delete
mceStatusbar,
[794] Fix | Delete
wpStatusbar,
[795] Fix | Delete
cachedWinSize;
[796] Fix | Delete
[797] Fix | Delete
if ( container ) {
[798] Fix | Delete
mceToolbar = tinymce.$( '.mce-toolbar-grp', container )[0];
[799] Fix | Delete
mceStatusbar = tinymce.$( '.mce-statusbar', container )[0];
[800] Fix | Delete
}
[801] Fix | Delete
[802] Fix | Delete
if ( editor.id === 'content' ) {
[803] Fix | Delete
wpStatusbar = document.getElementById( 'post-status-info' );
[804] Fix | Delete
}
[805] Fix | Delete
[806] Fix | Delete
function create( buttons, bottom ) {
[807] Fix | Delete
var toolbar,
[808] Fix | Delete
toolbarItems = [],
[809] Fix | Delete
buttonGroup;
[810] Fix | Delete
[811] Fix | Delete
each( buttons, function( item ) {
[812] Fix | Delete
var itemName;
[813] Fix | Delete
var tooltip;
[814] Fix | Delete
[815] Fix | Delete
function bindSelectorChanged() {
[816] Fix | Delete
var selection = editor.selection;
[817] Fix | Delete
[818] Fix | Delete
if ( itemName === 'bullist' ) {
[819] Fix | Delete
selection.selectorChanged( 'ul > li', function( state, args ) {
[820] Fix | Delete
var i = args.parents.length,
[821] Fix | Delete
nodeName;
[822] Fix | Delete
[823] Fix | Delete
while ( i-- ) {
[824] Fix | Delete
nodeName = args.parents[ i ].nodeName;
[825] Fix | Delete
[826] Fix | Delete
if ( nodeName === 'OL' || nodeName == 'UL' ) {
[827] Fix | Delete
break;
[828] Fix | Delete
}
[829] Fix | Delete
}
[830] Fix | Delete
[831] Fix | Delete
item.active( state && nodeName === 'UL' );
[832] Fix | Delete
} );
[833] Fix | Delete
}
[834] Fix | Delete
[835] Fix | Delete
if ( itemName === 'numlist' ) {
[836] Fix | Delete
selection.selectorChanged( 'ol > li', function( state, args ) {
[837] Fix | Delete
var i = args.parents.length,
[838] Fix | Delete
nodeName;
[839] Fix | Delete
[840] Fix | Delete
while ( i-- ) {
[841] Fix | Delete
nodeName = args.parents[ i ].nodeName;
[842] Fix | Delete
[843] Fix | Delete
if ( nodeName === 'OL' || nodeName === 'UL' ) {
[844] Fix | Delete
break;
[845] Fix | Delete
}
[846] Fix | Delete
}
[847] Fix | Delete
[848] Fix | Delete
item.active( state && nodeName === 'OL' );
[849] Fix | Delete
} );
[850] Fix | Delete
}
[851] Fix | Delete
[852] Fix | Delete
if ( item.settings.stateSelector ) {
[853] Fix | Delete
selection.selectorChanged( item.settings.stateSelector, function( state ) {
[854] Fix | Delete
item.active( state );
[855] Fix | Delete
}, true );
[856] Fix | Delete
}
[857] Fix | Delete
[858] Fix | Delete
if ( item.settings.disabledStateSelector ) {
[859] Fix | Delete
selection.selectorChanged( item.settings.disabledStateSelector, function( state ) {
[860] Fix | Delete
item.disabled( state );
[861] Fix | Delete
} );
[862] Fix | Delete
}
[863] Fix | Delete
}
[864] Fix | Delete
[865] Fix | Delete
if ( item === '|' ) {
[866] Fix | Delete
buttonGroup = null;
[867] Fix | Delete
} else {
[868] Fix | Delete
if ( Factory.has( item ) ) {
[869] Fix | Delete
item = {
[870] Fix | Delete
type: item
[871] Fix | Delete
};
[872] Fix | Delete
[873] Fix | Delete
if ( settings.toolbar_items_size ) {
[874] Fix | Delete
item.size = settings.toolbar_items_size;
[875] Fix | Delete
}
[876] Fix | Delete
[877] Fix | Delete
toolbarItems.push( item );
[878] Fix | Delete
[879] Fix | Delete
buttonGroup = null;
[880] Fix | Delete
} else {
[881] Fix | Delete
if ( ! buttonGroup ) {
[882] Fix | Delete
buttonGroup = {
[883] Fix | Delete
type: 'buttongroup',
[884] Fix | Delete
items: []
[885] Fix | Delete
};
[886] Fix | Delete
[887] Fix | Delete
toolbarItems.push( buttonGroup );
[888] Fix | Delete
}
[889] Fix | Delete
[890] Fix | Delete
if ( editor.buttons[ item ] ) {
[891] Fix | Delete
itemName = item;
[892] Fix | Delete
item = editor.buttons[ itemName ];
[893] Fix | Delete
[894] Fix | Delete
if ( typeof item === 'function' ) {
[895] Fix | Delete
item = item();
[896] Fix | Delete
}
[897] Fix | Delete
[898] Fix | Delete
item.type = item.type || 'button';
[899] Fix | Delete
[900] Fix | Delete
if ( settings.toolbar_items_size ) {
[901] Fix | Delete
item.size = settings.toolbar_items_size;
[902] Fix | Delete
}
[903] Fix | Delete
[904] Fix | Delete
tooltip = item.tooltip || item.title;
[905] Fix | Delete
[906] Fix | Delete
if ( tooltip ) {
[907] Fix | Delete
item.tooltip = getTooltip( tooltip );
[908] Fix | Delete
}
[909] Fix | Delete
[910] Fix | Delete
item = Factory.create( item );
[911] Fix | Delete
[912] Fix | Delete
buttonGroup.items.push( item );
[913] Fix | Delete
[914] Fix | Delete
if ( editor.initialized ) {
[915] Fix | Delete
bindSelectorChanged();
[916] Fix | Delete
} else {
[917] Fix | Delete
editor.on( 'init', bindSelectorChanged );
[918] Fix | Delete
}
[919] Fix | Delete
}
[920] Fix | Delete
}
[921] Fix | Delete
}
[922] Fix | Delete
} );
[923] Fix | Delete
[924] Fix | Delete
toolbar = Factory.create( {
[925] Fix | Delete
type: 'panel',
[926] Fix | Delete
layout: 'stack',
[927] Fix | Delete
classes: 'toolbar-grp inline-toolbar-grp',
[928] Fix | Delete
ariaRoot: true,
[929] Fix | Delete
ariaRemember: true,
[930] Fix | Delete
items: [ {
[931] Fix | Delete
type: 'toolbar',
[932] Fix | Delete
layout: 'flow',
[933] Fix | Delete
items: toolbarItems
[934] Fix | Delete
} ]
[935] Fix | Delete
} );
[936] Fix | Delete
[937] Fix | Delete
toolbar.bottom = bottom;
[938] Fix | Delete
[939] Fix | Delete
function reposition() {
[940] Fix | Delete
if ( ! currentSelection ) {
[941] Fix | Delete
return this;
[942] Fix | Delete
}
[943] Fix | Delete
[944] Fix | Delete
var scrollX = window.pageXOffset || document.documentElement.scrollLeft,
[945] Fix | Delete
scrollY = window.pageYOffset || document.documentElement.scrollTop,
[946] Fix | Delete
windowWidth = window.innerWidth,
[947] Fix | Delete
windowHeight = window.innerHeight,
[948] Fix | Delete
iframeRect = mceIframe ? mceIframe.getBoundingClientRect() : {
[949] Fix | Delete
top: 0,
[950] Fix | Delete
right: windowWidth,
[951] Fix | Delete
bottom: windowHeight,
[952] Fix | Delete
left: 0,
[953] Fix | Delete
width: windowWidth,
[954] Fix | Delete
height: windowHeight
[955] Fix | Delete
},
[956] Fix | Delete
toolbar = this.getEl(),
[957] Fix | Delete
toolbarWidth = toolbar.offsetWidth,
[958] Fix | Delete
toolbarHeight = toolbar.clientHeight,
[959] Fix | Delete
selection = currentSelection.getBoundingClientRect(),
[960] Fix | Delete
selectionMiddle = ( selection.left + selection.right ) / 2,
[961] Fix | Delete
buffer = 5,
[962] Fix | Delete
spaceNeeded = toolbarHeight + buffer,
[963] Fix | Delete
wpAdminbarBottom = wpAdminbar ? wpAdminbar.getBoundingClientRect().bottom : 0,
[964] Fix | Delete
mceToolbarBottom = mceToolbar ? mceToolbar.getBoundingClientRect().bottom : 0,
[965] Fix | Delete
mceStatusbarTop = mceStatusbar ? windowHeight - mceStatusbar.getBoundingClientRect().top : 0,
[966] Fix | Delete
wpStatusbarTop = wpStatusbar ? windowHeight - wpStatusbar.getBoundingClientRect().top : 0,
[967] Fix | Delete
blockedTop = Math.max( 0, wpAdminbarBottom, mceToolbarBottom, iframeRect.top ),
[968] Fix | Delete
blockedBottom = Math.max( 0, mceStatusbarTop, wpStatusbarTop, windowHeight - iframeRect.bottom ),
[969] Fix | Delete
spaceTop = selection.top + iframeRect.top - blockedTop,
[970] Fix | Delete
spaceBottom = windowHeight - iframeRect.top - selection.bottom - blockedBottom,
[971] Fix | Delete
editorHeight = windowHeight - blockedTop - blockedBottom,
[972] Fix | Delete
className = '',
[973] Fix | Delete
iosOffsetTop = 0,
[974] Fix | Delete
iosOffsetBottom = 0,
[975] Fix | Delete
top, left;
[976] Fix | Delete
[977] Fix | Delete
if ( spaceTop >= editorHeight || spaceBottom >= editorHeight ) {
[978] Fix | Delete
this.scrolling = true;
[979] Fix | Delete
this.hide();
[980] Fix | Delete
this.scrolling = false;
[981] Fix | Delete
return this;
[982] Fix | Delete
}
[983] Fix | Delete
[984] Fix | Delete
// Add offset in iOS to move the menu over the image, out of the way of the default iOS menu.
[985] Fix | Delete
if ( tinymce.Env.iOS && currentSelection.nodeName === 'IMG' ) {
[986] Fix | Delete
iosOffsetTop = 54;
[987] Fix | Delete
iosOffsetBottom = 46;
[988] Fix | Delete
}
[989] Fix | Delete
[990] Fix | Delete
if ( this.bottom ) {
[991] Fix | Delete
if ( spaceBottom >= spaceNeeded ) {
[992] Fix | Delete
className = ' mce-arrow-up';
[993] Fix | Delete
top = selection.bottom + iframeRect.top + scrollY - iosOffsetBottom;
[994] Fix | Delete
} else if ( spaceTop >= spaceNeeded ) {
[995] Fix | Delete
className = ' mce-arrow-down';
[996] Fix | Delete
top = selection.top + iframeRect.top + scrollY - toolbarHeight + iosOffsetTop;
[997] Fix | Delete
}
[998] Fix | Delete
} else {
[999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function