|
|
|
( function( tinymce ) { |
|
|
|
if ( ! tinymce.ui.FloatPanel.zIndex || tinymce.ui.FloatPanel.zIndex < 100100 ) { |
|
tinymce.ui.FloatPanel.zIndex = 100100; |
|
} |
|
|
|
tinymce.PluginManager.add( 'wordpress', function( editor ) { |
|
var wpAdvButton, style, |
|
DOM = tinymce.DOM, |
|
each = tinymce.each, |
|
__ = editor.editorManager.i18n.translate, |
|
$ = window.jQuery, |
|
wp = window.wp, |
|
hasWpautop = ( wp && wp.editor && wp.editor.autop && editor.getParam( 'wpautop', true ) ), |
|
wpTooltips = false; |
|
|
|
if ( $ ) { |
|
|
|
|
|
$( document ).triggerHandler( 'tinymce-editor-setup', [ editor ] ); |
|
} |
|
|
|
function toggleToolbars( state ) { |
|
var initial, toolbars, iframeHeight, |
|
pixels = 0, |
|
classicBlockToolbar = tinymce.$( '.block-library-classic__toolbar' ); |
|
|
|
if ( state === 'hide' ) { |
|
initial = true; |
|
} else if ( classicBlockToolbar.length && ! classicBlockToolbar.hasClass( 'has-advanced-toolbar' ) ) { |
|
|
|
classicBlockToolbar.addClass( 'has-advanced-toolbar' ); |
|
state = 'show'; |
|
} |
|
|
|
if ( editor.theme.panel ) { |
|
toolbars = editor.theme.panel.find('.toolbar:not(.menubar)'); |
|
} |
|
|
|
if ( toolbars && toolbars.length > 1 ) { |
|
if ( ! state && toolbars[1].visible() ) { |
|
state = 'hide'; |
|
} |
|
|
|
each( toolbars, function( toolbar, i ) { |
|
if ( i > 0 ) { |
|
if ( state === 'hide' ) { |
|
toolbar.hide(); |
|
pixels += 34; |
|
} else { |
|
toolbar.show(); |
|
pixels -= 34; |
|
} |
|
} |
|
}); |
|
} |
|
|
|
|
|
|
|
if ( pixels && ! tinymce.Env.iOS && editor.iframeElement && editor.iframeElement.clientHeight ) { |
|
iframeHeight = editor.iframeElement.clientHeight + pixels; |
|
|
|
|
|
if ( iframeHeight > 50 ) { |
|
DOM.setStyle( editor.iframeElement, 'height', iframeHeight ); |
|
} |
|
} |
|
|
|
if ( ! initial ) { |
|
if ( state === 'hide' ) { |
|
setUserSetting( 'hidetb', '0' ); |
|
wpAdvButton && wpAdvButton.active( false ); |
|
} else { |
|
setUserSetting( 'hidetb', '1' ); |
|
wpAdvButton && wpAdvButton.active( true ); |
|
} |
|
} |
|
|
|
editor.fire( 'wp-toolbar-toggle' ); |
|
} |
|
|
|
|
|
editor.addButton( 'wp_adv', { |
|
tooltip: 'Toolbar Toggle', |
|
cmd: 'WP_Adv', |
|
onPostRender: function() { |
|
wpAdvButton = this; |
|
wpAdvButton.active( getUserSetting( 'hidetb' ) === '1' ); |
|
} |
|
}); |
|
|
|
|
|
editor.on( 'PostRender', function() { |
|
if ( editor.getParam( 'wordpress_adv_hidden', true ) && getUserSetting( 'hidetb', '0' ) === '0' ) { |
|
toggleToolbars( 'hide' ); |
|
} else { |
|
tinymce.$( '.block-library-classic__toolbar' ).addClass( 'has-advanced-toolbar' ); |
|
} |
|
}); |
|
|
|
editor.addCommand( 'WP_Adv', function() { |
|
toggleToolbars(); |
|
}); |
|
|
|
editor.on( 'focus', function() { |
|
window.wpActiveEditor = editor.id; |
|
}); |
|
|
|
editor.on( 'BeforeSetContent', function( event ) { |
|
var title; |
|
|
|
if ( event.content ) { |
|
if ( event.content.indexOf( '<!--more' ) !== -1 ) { |
|
title = __( 'Read more...' ); |
|
|
|
event.content = event.content.replace( /<!--more(.*?)-->/g, function( match, moretext ) { |
|
return '<img src="' + tinymce.Env.transparentSrc + '" data-wp-more="more" data-wp-more-text="' + moretext + '" ' + |
|
'class="wp-more-tag mce-wp-more" alt="" title="' + title + '" data-mce-resize="false" data-mce-placeholder="1" />'; |
|
}); |
|
} |
|
|
|
if ( event.content.indexOf( '<!--nextpage-->' ) !== -1 ) { |
|
title = __( 'Page break' ); |
|
|
|
event.content = event.content.replace( /<!--nextpage-->/g, |
|
'<img src="' + tinymce.Env.transparentSrc + '" data-wp-more="nextpage" class="wp-more-tag mce-wp-nextpage" ' + |
|
'alt="" title="' + title + '" data-mce-resize="false" data-mce-placeholder="1" />' ); |
|
} |
|
|
|
if ( event.load && event.format !== 'raw' ) { |
|
if ( hasWpautop ) { |
|
event.content = wp.editor.autop( event.content ); |
|
} else { |
|
|
|
event.content = event.content.replace( /-->\s+<!--/g, '--><!--' ); |
|
} |
|
} |
|
|
|
if ( event.content.indexOf( '<script' ) !== -1 || event.content.indexOf( '<style' ) !== -1 ) { |
|
event.content = event.content.replace( /<(script|style)[^>]*>[\s\S]*?<\/\1>/g, function( match, tag ) { |
|
return '<img ' + |
|
'src="' + tinymce.Env.transparentSrc + '" ' + |
|
'data-wp-preserve="' + encodeURIComponent( match ) + '" ' + |
|
'data-mce-resize="false" ' + |
|
'data-mce-placeholder="1" '+ |
|
'class="mce-object" ' + |
|
'width="20" height="20" '+ |
|
'alt="<' + tag + '>" ' + |
|
'title="<' + tag + '>" ' + |
|
'/>'; |
|
} ); |
|
} |
|
} |
|
}); |
|
|
|
editor.on( 'setcontent', function() { |
|
|
|
editor.$( 'p' ).each( function( i, node ) { |
|
if ( node.innerHTML && node.innerHTML.length < 10 ) { |
|
var html = tinymce.trim( node.innerHTML ); |
|
|
|
if ( ! html || html === ' ' ) { |
|
node.innerHTML = ( tinymce.Env.ie && tinymce.Env.ie < 11 ) ? '' : '<br data-mce-bogus="1">'; |
|
} |
|
} |
|
} ); |
|
}); |
|
|
|
editor.on( 'PostProcess', function( event ) { |
|
if ( event.get ) { |
|
event.content = event.content.replace(/<img[^>]+>/g, function( image ) { |
|
var match, |
|
string, |
|
moretext = ''; |
|
|
|
if ( image.indexOf( 'data-wp-more="more"' ) !== -1 ) { |
|
if ( match = image.match( /data-wp-more-text="([^"]+)"/ ) ) { |
|
moretext = match[1]; |
|
} |
|
|
|
string = '<!--more' + moretext + '-->'; |
|
} else if ( image.indexOf( 'data-wp-more="nextpage"' ) !== -1 ) { |
|
string = '<!--nextpage-->'; |
|
} else if ( image.indexOf( 'data-wp-preserve' ) !== -1 ) { |
|
if ( match = image.match( / data-wp-preserve="([^"]+)"/ ) ) { |
|
string = decodeURIComponent( match[1] ); |
|
} |
|
} |
|
|
|
return string || image; |
|
}); |
|
} |
|
}); |
|
|
|
|
|
editor.on( 'ResolveName', function( event ) { |
|
var attr; |
|
|
|
if ( event.target.nodeName === 'IMG' && ( attr = editor.dom.getAttrib( event.target, 'data-wp-more' ) ) ) { |
|
event.name = attr; |
|
} |
|
}); |
|
|
|
|
|
editor.addCommand( 'WP_More', function( tag ) { |
|
var parent, html, title, |
|
classname = 'wp-more-tag', |
|
dom = editor.dom, |
|
node = editor.selection.getNode(), |
|
rootNode = editor.getBody(); |
|
|
|
tag = tag || 'more'; |
|
classname += ' mce-wp-' + tag; |
|
title = tag === 'more' ? 'Read more...' : 'Next page'; |
|
title = __( title ); |
|
html = '<img src="' + tinymce.Env.transparentSrc + '" alt="" title="' + title + '" class="' + classname + '" ' + |
|
'data-wp-more="' + tag + '" data-mce-resize="false" data-mce-placeholder="1" />'; |
|
|
|
|
|
if ( node === rootNode || ( node.nodeName === 'P' && node.parentNode === rootNode ) ) { |
|
editor.insertContent( html ); |
|
return; |
|
} |
|
|
|
|
|
parent = dom.getParent( node, function( found ) { |
|
if ( found.parentNode && found.parentNode === rootNode ) { |
|
return true; |
|
} |
|
|
|
return false; |
|
}, editor.getBody() ); |
|
|
|
if ( parent ) { |
|
if ( parent.nodeName === 'P' ) { |
|
parent.appendChild( dom.create( 'p', null, html ).firstChild ); |
|
} else { |
|
dom.insertAfter( dom.create( 'p', null, html ), parent ); |
|
} |
|
|
|
editor.nodeChanged(); |
|
} |
|
}); |
|
|
|
editor.addCommand( 'WP_Code', function() { |
|
editor.formatter.toggle('code'); |
|
}); |
|
|
|
editor.addCommand( 'WP_Page', function() { |
|
editor.execCommand( 'WP_More', 'nextpage' ); |
|
}); |
|
|
|
editor.addCommand( 'WP_Help', function() { |
|
var access = tinymce.Env.mac ? __( 'Ctrl + Alt + letter:' ) : __( 'Shift + Alt + letter:' ), |
|
meta = tinymce.Env.mac ? __( '⌘ + letter:' ) : __( 'Ctrl + letter:' ), |
|
table1 = [], |
|
table2 = [], |
|
row1 = {}, |
|
row2 = {}, |
|
i1 = 0, |
|
i2 = 0, |
|
labels = editor.settings.wp_shortcut_labels, |
|
header, html, dialog, $wrap; |
|
|
|
if ( ! labels ) { |
|
return; |
|
} |
|
|
|
function tr( row, columns ) { |
|
var out = '<tr>'; |
|
var i = 0; |
|
|
|
columns = columns || 1; |
|
|
|
each( row, function( text, key ) { |
|
out += '<td><kbd>' + key + '</kbd></td><td>' + __( text ) + '</td>'; |
|
i++; |
|
}); |
|
|
|
while ( i < columns ) { |
|
out += '<td></td><td></td>'; |
|
i++; |
|
} |
|
|
|
return out + '</tr>'; |
|
} |
|
|
|
each ( labels, function( label, name ) { |
|
var letter; |
|
|
|
if ( label.indexOf( 'meta' ) !== -1 ) { |
|
i1++; |
|
letter = label.replace( 'meta', '' ).toLowerCase(); |
|
|
|
if ( letter ) { |
|
row1[ letter ] = name; |
|
|
|
if ( i1 % 2 === 0 ) { |
|
table1.push( tr( row1, 2 ) ); |
|
row1 = {}; |
|
} |
|
} |
|
} else if ( label.indexOf( 'access' ) !== -1 ) { |
|
i2++; |
|
letter = label.replace( 'access', '' ).toLowerCase(); |
|
|
|
if ( letter ) { |
|
row2[ letter ] = name; |
|
|
|
if ( i2 % 2 === 0 ) { |
|
table2.push( tr( row2, 2 ) ); |
|
row2 = {}; |
|
} |
|
} |
|
} |
|
} ); |
|
|
|
|
|
if ( i1 % 2 > 0 ) { |
|
table1.push( tr( row1, 2 ) ); |
|
} |
|
|
|
if ( i2 % 2 > 0 ) { |
|
table2.push( tr( row2, 2 ) ); |
|
} |
|
|
|
header = [ __( 'Letter' ), __( 'Action' ), __( 'Letter' ), __( 'Action' ) ]; |
|
header = '<tr><th>' + header.join( '</th><th>' ) + '</th></tr>'; |
|
|
|
html = '<div class="wp-editor-help">'; |
|
|
|
|
|
html = html + |
|
'<h2>' + __( 'Default shortcuts,' ) + ' ' + meta + '</h2>' + |
|
'<table class="wp-help-th-center fixed">' + |
|
header + |
|
table1.join('') + |
|
'</table>' + |
|
'<h2>' + __( 'Additional shortcuts,' ) + ' ' + access + '</h2>' + |
|
'<table class="wp-help-th-center fixed">' + |
|
header + |
|
table2.join('') + |
|
'</table>'; |
|
|
|
if ( editor.plugins.wptextpattern && ( ! tinymce.Env.ie || tinymce.Env.ie > 8 ) ) { |
|
|
|
html = html + |
|
'<h2>' + __( 'When starting a new paragraph with one of these formatting shortcuts followed by a space, the formatting will be applied automatically. Press Backspace or Escape to undo.' ) + '</h2>' + |
|
'<table class="wp-help-th-center fixed">' + |
|
tr({ '*': 'Bullet list', '1.': 'Numbered list' }) + |
|
tr({ '-': 'Bullet list', '1)': 'Numbered list' }) + |
|
'</table>'; |
|
|
|
html = html + |
|
'<h2>' + __( 'The following formatting shortcuts are replaced when pressing Enter. Press Escape or the Undo button to undo.' ) + '</h2>' + |
|
'<table class="wp-help-single">' + |
|
tr({ '>': 'Blockquote' }) + |
|
tr({ '##': 'Heading 2' }) + |
|
tr({ '###': 'Heading 3' }) + |
|
tr({ '####': 'Heading 4' }) + |
|
tr({ '#####': 'Heading 5' }) + |
|
tr({ '######': 'Heading 6' }) + |
|
tr({ '---': 'Horizontal line' }) + |
|
'</table>'; |
|
} |
|
|
|
|
|
html = html + |
|
'<h2>' + __( 'Focus shortcuts:' ) + '</h2>' + |
|
'<table class="wp-help-single">' + |
|
tr({ 'Alt + F8': 'Inline toolbar (when an image, link or preview is selected)' }) + |
|
tr({ 'Alt + F9': 'Editor menu (when enabled)' }) + |
|
tr({ 'Alt + F10': 'Editor toolbar' }) + |
|
tr({ 'Alt + F11': 'Elements path' }) + |
|
'</table>' + |
|
'<p>' + __( 'To move focus to other buttons use Tab or the arrow keys. To return focus to the editor press Escape or use one of the buttons.' ) + '</p>'; |
|
|
|
html += '</div>'; |
|
|
|
dialog = editor.windowManager.open( { |
|
title: editor.settings.classic_block_editor ? 'Classic Block Keyboard Shortcuts' : 'Keyboard Shortcuts', |
|
items: { |
|
type: 'container', |
|
classes: 'wp-help', |
|
html: html |
|
}, |
|
buttons: { |
|
text: 'Close', |
|
onclick: 'close' |
|
} |
|
} ); |
|
|
|
if ( dialog.$el ) { |
|
dialog.$el.find( 'div[role="application"]' ).attr( 'role', 'document' ); |
|
$wrap = dialog.$el.find( '.mce-wp-help' ); |
|
|
|
if ( $wrap[0] ) { |
|
$wrap.attr( 'tabindex', '0' ); |
|
$wrap[0].focus(); |
|
$wrap.on( 'keydown', function( event ) { |
|
|
|
|
|
if ( event.keyCode >= 33 && event.keyCode <= 40 ) { |
|
event.stopPropagation(); |
|
} |
|
}); |
|
} |
|
} |
|
} ); |
|
|
|
editor.addCommand( 'WP_Medialib', function() { |
|
if ( wp && wp.media && wp.media.editor ) { |
|
wp.media.editor.open( editor.id ); |
|
} |
|
}); |
|
|
|
|
|
editor.addButton( 'wp_more', { |
|
tooltip: 'Insert Read More tag', |
|
onclick: function() { |
|
editor.execCommand( 'WP_More', 'more' ); |
|
} |
|
}); |
|
|
|
editor.addButton( 'wp_page', { |
|
tooltip: 'Page break', |
|
onclick: function() { |
|
editor.execCommand( 'WP_More', 'nextpage' ); |
|
} |
|
}); |
|
|
|
editor.addButton( 'wp_help', { |
|
tooltip: 'Keyboard Shortcuts', |
|
cmd: 'WP_Help' |
|
}); |
|
|
|
editor.addButton( 'wp_code', { |
|
tooltip: 'Code', |
|
cmd: 'WP_Code', |
|
stateSelector: 'code' |
|
}); |
|
|
|
|
|
if ( wp && wp.media && wp.media.editor ) { |
|
editor.addButton( 'wp_add_media', { |
|
tooltip: 'Add Media', |
|
icon: 'dashicon dashicons-admin-media', |
|
cmd: 'WP_Medialib' |
|
} ); |
|
|
|
editor.addMenuItem( 'add_media', { |
|
text: 'Add Media', |
|
icon: 'wp-media-library', |
|
context: 'insert', |
|
cmd: 'WP_Medialib' |
|
}); |
|
} |
|
|
|
|
|
editor.addMenuItem( 'wp_more', { |
|
text: 'Insert Read More tag', |
|
icon: 'wp_more', |
|
context: 'insert', |
|
onclick: function() { |
|
editor.execCommand( 'WP_More', 'more' ); |
|
} |
|
}); |
|
|
|
|
|
editor.addMenuItem( 'wp_page', { |
|
text: 'Page break', |
|
icon: 'wp_page', |
|
context: 'insert', |
|
onclick: function() { |
|
editor.execCommand( 'WP_More', 'nextpage' ); |
|
} |
|
}); |
|
|
|
editor.on( 'BeforeExecCommand', function(e) { |
|
if ( tinymce.Env.webkit && ( e.command === 'InsertUnorderedList' || e.command === 'InsertOrderedList' ) ) { |
|
if ( ! style ) { |
|
style = editor.dom.create( 'style', {'type': 'text/css'}, |
|
'#tinymce,#tinymce span,#tinymce li,#tinymce li>span,#tinymce p,#tinymce p>span{font:medium sans-serif;color:#000;line-height:normal;}'); |
|
} |
|
|
|
editor.getDoc().head.appendChild( style ); |
|
} |
|
}); |
|
|
|
editor.on( 'ExecCommand', function( e ) { |
|
if ( tinymce.Env.webkit && style && |
|
( 'InsertUnorderedList' === e.command || 'InsertOrderedList' === e.command ) ) { |
|
|
|
editor.dom.remove( style ); |
|
} |
|
}); |
|
|
|
editor.on( 'init', function() { |
|
var env = tinymce.Env, |
|
bodyClass = ['mceContentBody'], |
|
doc = editor.getDoc(), |
|
dom = editor.dom; |
|
|
|
if ( env.iOS ) { |
|
dom.addClass( doc.documentElement, 'ios' ); |
|
} |
|
|
|
if ( editor.getParam( 'directionality' ) === 'rtl' ) { |
|
bodyClass.push('rtl'); |
|
dom.setAttrib( doc.documentElement, 'dir', 'rtl' ); |
|
} |
|
|
|
dom.setAttrib( doc.documentElement, 'lang', editor.getParam( 'wp_lang_attr' ) ); |
|
|
|
if ( env.ie ) { |
|
if ( parseInt( env.ie, 10 ) === 9 ) { |
|
bodyClass.push('ie9'); |
|
} else if ( parseInt( env.ie, 10 ) === 8 ) { |
|
bodyClass.push('ie8'); |
|
} else if ( env.ie < 8 ) { |
|
bodyClass.push('ie7'); |
|
} |
|
} else if ( env.webkit ) { |
|
bodyClass.push('webkit'); |
|
} |
|
|
|
bodyClass.push('wp-editor'); |
|
|
|
each( bodyClass, function( cls ) { |
|
if ( cls ) { |
|
dom.addClass( doc.body, cls ); |
|
} |
|
}); |
|
|
|
|
|
editor.on( 'BeforeSetContent', function( event ) { |
|
if ( event.content ) { |
|
event.content = event.content.replace( /<p>\s*<(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre)( [^>]*)?>/gi, '<$1$2>' ) |
|
.replace( /<\/(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre)>\s*<\/p>/gi, '</$1>' ); |
|
} |
|
}); |
|
|
|
if ( $ ) { |
|
|
|
|
|
$( function() { |
|
$( document ).triggerHandler( 'tinymce-editor-init', [editor] ); |
|
}); |
|
} |
|
|
|
if ( window.tinyMCEPreInit && window.tinyMCEPreInit.dragDropUpload ) { |
|
dom.bind( doc, 'dragstart dragend dragover drop', function( event ) { |
|
if ( $ ) { |
|
|
|
$( document ).trigger( new $.Event( event ) ); |
|
} |
|
}); |
|
} |
|
|
|
if ( editor.getParam( 'wp_paste_filters', true ) ) { |
|
editor.on( 'PastePreProcess', function( event ) { |
|
|
|
event.content = event.content.replace( /<br class="?Apple-interchange-newline"?>/gi, '' ); |
|
|
|
|
|
if ( ! tinymce.Env.webkit ) { |
|
|
|
event.content = event.content.replace( /(<[^>]+) style="[^"]*"([^>]*>)/gi, '$1$2' ); |
|
|
|
|
|
event.content = event.content.replace(/(<[^>]+) data-mce-style=([^>]+>)/gi, '$1 style=$2' ); |
|
} |
|
}); |
|
|
|
editor.on( 'PastePostProcess', function( event ) { |
|
|
|
editor.$( 'p', event.node ).each( function( i, node ) { |
|
if ( dom.isEmpty( node ) ) { |
|
dom.remove( node ); |
|
} |
|
}); |
|
|
|
if ( tinymce.isIE ) { |
|
editor.$( 'a', event.node ).find( 'font, u' ).each( function( i, node ) { |
|
dom.remove( node, true ); |
|
}); |
|
} |
|
}); |
|
} |
|
}); |
|
|
|
editor.on( 'SaveContent', function( event ) { |
|
|
|
if ( ! editor.inline && editor.isHidden() ) { |
|
event.content = event.element.value; |
|
return; |
|
} |
|
|
|
|
|
event.content = event.content.replace( /<p>(?:<br ?\/?>|\u00a0|\uFEFF| )*<\/p>/g, '<p> </p>' ); |
|
|
|
if ( hasWpautop ) { |
|
event.content = wp.editor.removep( event.content ); |
|
} else { |
|
|
|
event.content = event.content.replace( /-->\s*<!-- wp:/g, '-->\n\n<!-- wp:' ); |
|
} |
|
}); |
|
|
|
editor.on( 'preInit', function() { |
|
var validElementsSetting = '@[id|accesskey|class|dir|lang|style|tabindex|' + |
|
'title|contenteditable|draggable|dropzone|hidden|spellcheck|translate],' + |
|
'i,' + |
|
'b,' + |
|
'script[src|async|defer|type|charset|crossorigin|integrity]'; |
|
|
|
editor.schema.addValidElements( validElementsSetting ); |
|
|
|
if ( tinymce.Env.iOS ) { |
|
editor.settings.height = 300; |
|
} |
|
|
|
each( { |
|
c: 'JustifyCenter', |
|
r: 'JustifyRight', |
|
l: 'JustifyLeft', |
|
j: 'JustifyFull', |
|
q: 'mceBlockQuote', |
|
u: 'InsertUnorderedList', |
|
o: 'InsertOrderedList', |
|
m: 'WP_Medialib', |
|
t: 'WP_More', |
|
d: 'Strikethrough', |
|
p: 'WP_Page', |
|
x: 'WP_Code' |
|
}, function( command, key ) { |
|
editor.shortcuts.add( 'access+' + key, '', command ); |
|
} ); |
|
|
|
editor.addShortcut( 'meta+s', '', function() { |
|
if ( wp && wp.autosave ) { |
|
wp.autosave.server.triggerSave(); |
|
} |
|
} ); |
|
|
|
|
|
if ( ! editor.settings.classic_block_editor ) { |
|
editor.addShortcut( 'access+z', '', 'WP_Adv' ); |
|
} |
|
|
|
|
|
editor.on( 'keydown', function( event ) { |
|
var match; |
|
|
|
if ( tinymce.Env.mac ) { |
|
match = event.ctrlKey && event.altKey && event.code === 'KeyH'; |
|
} else { |
|
match = event.shiftKey && event.altKey && event.code === 'KeyH'; |
|
} |
|
|
|
if ( match ) { |
|
editor.execCommand( 'WP_Help' ); |
|
event.stopPropagation(); |
|
event.stopImmediatePropagation(); |
|
return false; |
|
} |
|
|
|
return true; |
|
}); |
|
|
|
if ( window.getUserSetting( 'editor_plain_text_paste_warning' ) > 1 ) { |
|
editor.settings.paste_plaintext_inform = false; |
|
} |
|
|
|
|
|
if ( tinymce.Env.mac ) { |
|
tinymce.$( editor.iframeElement ).attr( 'title', __( 'Rich Text Area. Press Control-Option-H for help.' ) ); |
|
} |
|
} ); |
|
|
|
editor.on( 'PastePlainTextToggle', function( event ) { |
|
|
|
if ( event.state === true ) { |
|
var times = parseInt( window.getUserSetting( 'editor_plain_text_paste_warning' ), 10 ) || 0; |
|
|
|
if ( times < 2 ) { |
|
window.setUserSetting( 'editor_plain_text_paste_warning', ++times ); |
|
} |
|
} |
|
}); |
|
|
|
editor.on( 'beforerenderui', function() { |
|
if ( editor.theme.panel ) { |
|
each( [ 'button', 'colorbutton', 'splitbutton' ], function( buttonType ) { |
|
replaceButtonsTooltips( editor.theme.panel.find( buttonType ) ); |
|
} ); |
|
|
|
addShortcutsToListbox(); |
|
} |
|
} ); |
|
|
|
function prepareTooltips() { |
|
var access = 'Shift+Alt+'; |
|
var meta = 'Ctrl+'; |
|
|
|
wpTooltips = {}; |
|
|
|
|
|
if ( tinymce.Env.mac ) { |
|
access = '\u2303\u2325'; |
|
meta = '\u2318'; |
|
} |
|
|
|
|
|
if ( editor.settings.wp_shortcut_labels ) { |
|
each( editor.settings.wp_shortcut_labels, function( value, tooltip ) { |
|
var translated = editor.translate( tooltip ); |
|
|
|
value = value.replace( 'access', access ).replace( 'meta', meta ); |
|
wpTooltips[ tooltip ] = value; |
|
|
|
|
|
if ( tooltip !== translated ) { |
|
wpTooltips[ translated ] = value; |
|
} |
|
} ); |
|
} |
|
} |
|
|
|
function getTooltip( tooltip ) { |
|
var translated = editor.translate( tooltip ); |
|
var label; |
|
|
|
if ( ! wpTooltips ) { |
|
prepareTooltips(); |
|
} |
|
|
|
if ( wpTooltips.hasOwnProperty( translated ) ) { |
|
label = wpTooltips[ translated ]; |
|
} else if ( wpTooltips.hasOwnProperty( tooltip ) ) { |
|
label = wpTooltips[ tooltip ]; |
|
} |
|
|
|
return label ? translated + ' (' + label + ')' : translated; |
|
} |
|
|
|
function replaceButtonsTooltips( buttons ) { |
|
|
|
if ( ! buttons ) { |
|
return; |
|
} |
|
|
|
each( buttons, function( button ) { |
|
var tooltip; |
|
|
|
if ( button && button.settings.tooltip ) { |
|
tooltip = getTooltip( button.settings.tooltip ); |
|
button.settings.tooltip = tooltip; |
|
|
|
|
|
if ( button._aria && button._aria.label ) { |
|
button._aria.label = tooltip; |
|
} |
|
} |
|
} ); |
|
} |
|
|
|
function addShortcutsToListbox() { |
|
|
|
each( editor.theme.panel.find( 'listbox' ), function( listbox ) { |
|
if ( listbox && listbox.settings.text === 'Paragraph' ) { |
|
each( listbox.settings.values, function( item ) { |
|
if ( item.text && wpTooltips.hasOwnProperty( item.text ) ) { |
|
item.shortcut = '(' + wpTooltips[ item.text ] + ')'; |
|
} |
|
} ); |
|
} |
|
} ); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
editor.on( 'preinit', function() { |
|
var Factory = tinymce.ui.Factory, |
|
settings = editor.settings, |
|
activeToolbar, |
|
currentSelection, |
|
timeout, |
|
container = editor.getContainer(), |
|
wpAdminbar = document.getElementById( 'wpadminbar' ), |
|
mceIframe = document.getElementById( editor.id + '_ifr' ), |
|
mceToolbar, |
|
mceStatusbar, |
|
wpStatusbar, |
|
cachedWinSize; |
|
|
|
if ( container ) { |
|
mceToolbar = tinymce.$( '.mce-toolbar-grp', container )[0]; |
|
mceStatusbar = tinymce.$( '.mce-statusbar', container )[0]; |
|
} |
|
|
|
if ( editor.id === 'content' ) { |
|
wpStatusbar = document.getElementById( 'post-status-info' ); |
|
} |
|
|
|
function create( buttons, bottom ) { |
|
var toolbar, |
|
toolbarItems = [], |
|
buttonGroup; |
|
|
|
each( buttons, function( item ) { |
|
var itemName; |
|
var tooltip; |
|
|
|
function bindSelectorChanged() { |
|
var selection = editor.selection; |
|
|
|
if ( itemName === 'bullist' ) { |
|
selection.selectorChanged( 'ul > li', function( state, args ) { |
|
var i = args.parents.length, |
|
nodeName; |
|
|
|
while ( i-- ) { |
|
nodeName = args.parents[ i ].nodeName; |
|
|
|
if ( nodeName === 'OL' || nodeName == 'UL' ) { |
|
break; |
|
} |
|
} |
|
|
|
item.active( state && nodeName === 'UL' ); |
|
} ); |
|
} |
|
|
|
if ( itemName === 'numlist' ) { |
|
selection.selectorChanged( 'ol > li', function( state, args ) { |
|
var i = args.parents.length, |
|
nodeName; |
|
|
|
while ( i-- ) { |
|
nodeName = args.parents[ i ].nodeName; |
|
|
|
if ( nodeName === 'OL' || nodeName === 'UL' ) { |
|
break; |
|
} |
|
} |
|
|
|
item.active( state && nodeName === 'OL' ); |
|
} ); |
|
} |
|
|
|
if ( item.settings.stateSelector ) { |
|
selection.selectorChanged( item.settings.stateSelector, function( state ) { |
|
item.active( state ); |
|
}, true ); |
|
} |
|
|
|
if ( item.settings.disabledStateSelector ) { |
|
selection.selectorChanged( item.settings.disabledStateSelector, function( state ) { |
|
item.disabled( state ); |
|
} ); |
|
} |
|
} |
|
|
|
if ( item === '|' ) { |
|
buttonGroup = null; |
|
} else { |
|
if ( Factory.has( item ) ) { |
|
item = { |
|
type: item |
|
}; |
|
|
|
if ( settings.toolbar_items_size ) { |
|
item.size = settings.toolbar_items_size; |
|
} |
|
|
|
toolbarItems.push( item ); |
|
|
|
buttonGroup = null; |
|
} else { |
|
if ( ! buttonGroup ) { |
|
buttonGroup = { |
|
type: 'buttongroup', |
|
items: [] |
|
}; |
|
|
|
toolbarItems.push( buttonGroup ); |
|
} |
|
|
|
if ( editor.buttons[ item ] ) { |
|
itemName = item; |
|
item = editor.buttons[ itemName ]; |
|
|
|
if ( typeof item === 'function' ) { |
|
item = item(); |
|
} |
|
|
|
item.type = item.type || 'button'; |
|
|
|
if ( settings.toolbar_items_size ) { |
|
item.size = settings.toolbar_items_size; |
|
} |
|
|
|
tooltip = item.tooltip || item.title; |
|
|
|
if ( tooltip ) { |
|
item.tooltip = getTooltip( tooltip ); |
|
} |
|
|
|
item = Factory.create( item ); |
|
|
|
buttonGroup.items.push( item ); |
|
|
|
if ( editor.initialized ) { |
|
bindSelectorChanged(); |
|
} else { |
|
editor.on( 'init', bindSelectorChanged ); |
|
} |
|
} |
|
} |
|
} |
|
} ); |
|
|
|
toolbar = Factory.create( { |
|
type: 'panel', |
|
layout: 'stack', |
|
classes: 'toolbar-grp inline-toolbar-grp', |
|
ariaRoot: true, |
|
ariaRemember: true, |
|
items: [ { |
|
type: 'toolbar', |
|
layout: 'flow', |
|
items: toolbarItems |
|
} ] |
|
} ); |
|
|
|
toolbar.bottom = bottom; |
|
|
|
function reposition() { |
|
if ( ! currentSelection ) { |
|
return this; |
|
} |
|
|
|
var scrollX = window.pageXOffset || document.documentElement.scrollLeft, |
|
scrollY = window.pageYOffset || document.documentElement.scrollTop, |
|
windowWidth = window.innerWidth, |
|
windowHeight = window.innerHeight, |
|
iframeRect = mceIframe ? mceIframe.getBoundingClientRect() : { |
|
top: 0, |
|
right: windowWidth, |
|
bottom: windowHeight, |
|
left: 0, |
|
width: windowWidth, |
|
height: windowHeight |
|
}, |
|
toolbar = this.getEl(), |
|
toolbarWidth = toolbar.offsetWidth, |
|
toolbarHeight = toolbar.clientHeight, |
|
selection = currentSelection.getBoundingClientRect(), |
|
selectionMiddle = ( selection.left + selection.right ) / 2, |
|
buffer = 5, |
|
spaceNeeded = toolbarHeight + buffer, |
|
wpAdminbarBottom = wpAdminbar ? wpAdminbar.getBoundingClientRect().bottom : 0, |
|
mceToolbarBottom = mceToolbar ? mceToolbar.getBoundingClientRect().bottom : 0, |
|
mceStatusbarTop = mceStatusbar ? windowHeight - mceStatusbar.getBoundingClientRect().top : 0, |
|
wpStatusbarTop = wpStatusbar ? windowHeight - wpStatusbar.getBoundingClientRect().top : 0, |
|
blockedTop = Math.max( 0, wpAdminbarBottom, mceToolbarBottom, iframeRect.top ), |
|
blockedBottom = Math.max( 0, mceStatusbarTop, wpStatusbarTop, windowHeight - iframeRect.bottom ), |
|
spaceTop = selection.top + iframeRect.top - blockedTop, |
|
spaceBottom = windowHeight - iframeRect.top - selection.bottom - blockedBottom, |
|
editorHeight = windowHeight - blockedTop - blockedBottom, |
|
className = '', |
|
iosOffsetTop = 0, |
|
iosOffsetBottom = 0, |
|
top, left; |
|
|
|
if ( spaceTop >= editorHeight || spaceBottom >= editorHeight ) { |
|
this.scrolling = true; |
|
this.hide(); |
|
this.scrolling = false; |
|
return this; |
|
} |
|
|
|
|
|
if ( tinymce.Env.iOS && currentSelection.nodeName === 'IMG' ) { |
|
iosOffsetTop = 54; |
|
iosOffsetBottom = 46; |
|
} |
|
|
|
if ( this.bottom ) { |
|
if ( spaceBottom >= spaceNeeded ) { |
|
className = ' mce-arrow-up'; |
|
top = selection.bottom + iframeRect.top + scrollY - iosOffsetBottom; |
|
} else if ( spaceTop >= spaceNeeded ) { |
|
className = ' mce-arrow-down'; |
|
top = selection.top + iframeRect.top + scrollY - toolbarHeight + iosOffsetTop; |
|
} |
|
} else { |
|
if ( spaceTop >= spaceNeeded ) { |
|
className = ' mce-arrow-down'; |
|
top = selection.top + iframeRect.top + scrollY - toolbarHeight + iosOffsetTop; |
|
} else if ( spaceBottom >= spaceNeeded && editorHeight / 2 > selection.bottom + iframeRect.top - blockedTop ) { |
|
className = ' mce-arrow-up'; |
|
top = selection.bottom + iframeRect.top + scrollY - iosOffsetBottom; |
|
} |
|
} |
|
|
|
if ( typeof top === 'undefined' ) { |
|
top = scrollY + blockedTop + buffer + iosOffsetBottom; |
|
} |
|
|
|
left = selectionMiddle - toolbarWidth / 2 + iframeRect.left + scrollX; |
|
|
|
if ( selection.left < 0 || selection.right > iframeRect.width ) { |
|
left = iframeRect.left + scrollX + ( iframeRect.width - toolbarWidth ) / 2; |
|
} else if ( toolbarWidth >= windowWidth ) { |
|
className += ' mce-arrow-full'; |
|
left = 0; |
|
} else if ( ( left < 0 && selection.left + toolbarWidth > windowWidth ) || ( left + toolbarWidth > windowWidth && selection.right - toolbarWidth < 0 ) ) { |
|
left = ( windowWidth - toolbarWidth ) / 2; |
|
} else if ( left < iframeRect.left + scrollX ) { |
|
className += ' mce-arrow-left'; |
|
left = selection.left + iframeRect.left + scrollX; |
|
} else if ( left + toolbarWidth > iframeRect.width + iframeRect.left + scrollX ) { |
|
className += ' mce-arrow-right'; |
|
left = selection.right - toolbarWidth + iframeRect.left + scrollX; |
|
} |
|
|
|
|
|
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; |
|
|
|
DOM.setStyles( toolbar, { |
|
'left': left, |
|
'top': top |
|
} ); |
|
|
|
return this; |
|
} |
|
|
|
toolbar.on( 'show', function() { |
|
this.reposition(); |
|
} ); |
|
|
|
toolbar.on( 'keydown', function( event ) { |
|
if ( event.keyCode === 27 ) { |
|
this.hide(); |
|
editor.focus(); |
|
} |
|
} ); |
|
|
|
editor.on( 'remove', function() { |
|
toolbar.remove(); |
|
} ); |
|
|
|
toolbar.reposition = reposition; |
|
toolbar.hide().renderTo( document.body ); |
|
|
|
return toolbar; |
|
} |
|
|
|
editor.shortcuts.add( 'alt+119', '', function() { |
|
var node; |
|
|
|
if ( activeToolbar ) { |
|
node = activeToolbar.find( 'toolbar' )[0]; |
|
node && node.focus( true ); |
|
} |
|
} ); |
|
|
|
editor.on( 'nodechange', function( event ) { |
|
var collapsed = editor.selection.isCollapsed(); |
|
|
|
var args = { |
|
element: event.element, |
|
parents: event.parents, |
|
collapsed: collapsed |
|
}; |
|
|
|
editor.fire( 'wptoolbar', args ); |
|
|
|
currentSelection = args.selection || args.element; |
|
|
|
if ( activeToolbar && activeToolbar !== args.toolbar ) { |
|
activeToolbar.hide(); |
|
} |
|
|
|
if ( args.toolbar ) { |
|
activeToolbar = args.toolbar; |
|
|
|
if ( activeToolbar.visible() ) { |
|
activeToolbar.reposition(); |
|
} else { |
|
activeToolbar.show(); |
|
} |
|
} else { |
|
activeToolbar = false; |
|
} |
|
} ); |
|
|
|
editor.on( 'focus', function() { |
|
if ( activeToolbar ) { |
|
activeToolbar.show(); |
|
} |
|
} ); |
|
|
|
function hide( event ) { |
|
var win; |
|
var size; |
|
|
|
if ( activeToolbar ) { |
|
if ( activeToolbar.tempHide || event.type === 'hide' || event.type === 'blur' ) { |
|
activeToolbar.hide(); |
|
activeToolbar = false; |
|
} else if ( ( |
|
event.type === 'resizewindow' || |
|
event.type === 'scrollwindow' || |
|
event.type === 'resize' || |
|
event.type === 'scroll' |
|
) && ! activeToolbar.blockHide ) { |
|
|
|
|
|
|
|
|
|
|
|
if ( event.type === 'resize' || event.type === 'resizewindow' ) { |
|
win = editor.getWin(); |
|
size = win.innerHeight + win.innerWidth; |
|
|
|
|
|
if ( cachedWinSize && ( new Date() ).getTime() - cachedWinSize.timestamp > 2000 ) { |
|
cachedWinSize = null; |
|
} |
|
|
|
if ( cachedWinSize ) { |
|
if ( size && Math.abs( size - cachedWinSize.size ) < 2 ) { |
|
|
|
return; |
|
} |
|
} else { |
|
|
|
cachedWinSize = { |
|
timestamp: ( new Date() ).getTime(), |
|
size: size, |
|
}; |
|
|
|
return; |
|
} |
|
} |
|
|
|
clearTimeout( timeout ); |
|
|
|
timeout = setTimeout( function() { |
|
if ( activeToolbar && typeof activeToolbar.show === 'function' ) { |
|
activeToolbar.scrolling = false; |
|
activeToolbar.show(); |
|
} |
|
}, 250 ); |
|
|
|
activeToolbar.scrolling = true; |
|
activeToolbar.hide(); |
|
} |
|
} |
|
} |
|
|
|
if ( editor.inline ) { |
|
editor.on( 'resizewindow', hide ); |
|
|
|
|
|
|
|
document.addEventListener( 'scroll', hide, true ); |
|
} else { |
|
|
|
editor.dom.bind( editor.getWin(), 'resize scroll', hide ); |
|
editor.on( 'resizewindow scrollwindow', hide ); |
|
} |
|
|
|
editor.on( 'remove', function() { |
|
document.removeEventListener( 'scroll', hide, true ); |
|
editor.off( 'resizewindow scrollwindow', hide ); |
|
editor.dom.unbind( editor.getWin(), 'resize scroll', hide ); |
|
} ); |
|
|
|
editor.on( 'blur hide', hide ); |
|
|
|
editor.wp = editor.wp || {}; |
|
editor.wp._createToolbar = create; |
|
}, true ); |
|
|
|
function noop() {} |
|
|
|
|
|
return { |
|
_showButtons: noop, |
|
_hideButtons: noop, |
|
_setEmbed: noop, |
|
_getEmbed: noop |
|
}; |
|
}); |
|
|
|
}( window.tinymce )); |
|
|