| |
| ( 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 )); |
|
|