X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/41578db67d72562346e4dbb2a14889b23d522813..refs/tags/wordpress-4.3:/wp-includes/js/tinymce/plugins/wordpress/plugin.js diff --git a/wp-includes/js/tinymce/plugins/wordpress/plugin.js b/wp-includes/js/tinymce/plugins/wordpress/plugin.js index 64c5ff1c..64a80c26 100644 --- a/wp-includes/js/tinymce/plugins/wordpress/plugin.js +++ b/wp-includes/js/tinymce/plugins/wordpress/plugin.js @@ -1,11 +1,20 @@ -/* global tinymce, getUserSetting, setUserSetting */ - +/* global getUserSetting, setUserSetting */ +( function( tinymce ) { // Set the minimum value for the modals z-index higher than #wpadminbar (100000) tinymce.ui.FloatPanel.zIndex = 100100; tinymce.PluginManager.add( 'wordpress', function( editor ) { - var DOM = tinymce.DOM, wpAdvButton, modKey, style, - last = 0; + 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 ) ); + + if ( $ ) { + $( document ).triggerHandler( 'tinymce-editor-setup', [ editor ] ); + } function toggleToolbars( state ) { var iframe, initial, toolbars, @@ -25,7 +34,7 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) { state = 'hide'; } - tinymce.each( toolbars, function( toolbar, i ) { + each( toolbars, function( toolbar, i ) { if ( i > 0 ) { if ( state === 'hide' ) { toolbar.hide(); @@ -38,8 +47,11 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) { }); if ( pixels && ! initial ) { - iframe = editor.getContentAreaContainer().firstChild; - DOM.setStyle( iframe, 'height', iframe.clientHeight + pixels ); // Resize iframe + // Resize iframe, not needed in iOS + if ( ! tinymce.Env.iOS ) { + iframe = editor.getContentAreaContainer().firstChild; + DOM.setStyle( iframe, 'height', iframe.clientHeight + pixels ); + } if ( state === 'hide' ) { setUserSetting('hidetb', '0'); @@ -49,6 +61,8 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) { wpAdvButton && wpAdvButton.active( true ); } } + + editor.fire( 'wp-toolbar-toggle' ); } // Add the kitchen sink button :) @@ -63,7 +77,7 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) { // Hide the toolbars after loading editor.on( 'PostRender', function() { - if ( getUserSetting('hidetb', '0') === '0' ) { + if ( editor.getParam( 'wordpress_adv_hidden', true ) && getUserSetting( 'hidetb', '0' ) === '0' ) { toggleToolbars( 'hide' ); } }); @@ -77,20 +91,33 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) { }); // Replace Read More/Next Page tags with images - editor.on( 'BeforeSetContent', function( e ) { - if ( e.content ) { - if ( e.content.indexOf( '/g, function( match, moretext ) { - return ''; + editor.on( 'BeforeSetContent', function( event ) { + var title; + + if ( event.content ) { + if ( event.content.indexOf( '/g, function( match, moretext ) { + return ''; }); } - if ( e.content.indexOf( '' ) !== -1 ) { - e.content = e.content.replace( //g, - '' ); + if ( event.content.indexOf( '' ) !== -1 ) { + title = __( 'Page break' ); + + event.content = event.content.replace( //g, + '' ); + } + + if ( event.load && event.format !== 'raw' && hasWpautop ) { + event.content = wp.editor.autop( event.content ); } + + // Remove spaces from empty paragraphs. + event.content = event.content.replace( /
(?: |\u00a0|\uFEFF|\s)+<\/p>/gi, '
' + __( '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.' ) + '
'; + + html += '\s*<(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)( [^>]*)?>/gi, '<$1$2>'); - e.content = e.content.replace(/<\/(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)>\s*<\/p>/gi, '$1>'); + editor.on( 'BeforeSetContent', function( event ) { + if ( event.content ) { + event.content = event.content.replace( /
\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 ( typeof window.jQuery !== 'undefined' ) { - window.jQuery( document ).triggerHandler( 'tinymce-editor-init', [editor] ); + if ( $ ) { + $( document ).triggerHandler( 'tinymce-editor-init', [editor] ); } if ( window.tinyMCEPreInit && window.tinyMCEPreInit.dragDropUpload ) { dom.bind( doc, 'dragstart dragend dragover drop', function( event ) { - if ( typeof window.jQuery !== 'undefined' ) { + if ( $ ) { // Trigger the jQuery handlers. - window.jQuery( document ).triggerHandler( event.type ); + $( document ).trigger( new $.Event( event ) ); } }); } - }); - // Word count - if ( typeof window.jQuery !== 'undefined' ) { - editor.on( 'keyup', function( e ) { - var key = e.keyCode || e.charCode; + if ( editor.getParam( 'wp_paste_filters', true ) ) { + if ( ! tinymce.Env.webkit ) { + // In WebKit handled by removeWebKitStyles() + editor.on( 'PastePreProcess', function( event ) { + // Remove all inline styles + event.content = event.content.replace( /(<[^>]+) style="[^"]*"([^>]*>)/gi, '$1$2' ); - if ( key === last ) { - return; - } - - if ( 13 === key || 8 === last || 46 === last ) { - window.jQuery( document ).triggerHandler( 'wpcountwords', [ editor.getContent({ format : 'raw' }) ] ); + // Put back the internal styles + event.content = event.content.replace(/(<[^>]+) data-mce-style=([^>]+>)/gi, '$1 style=$2' ); + }); } - last = key; - }); - } + editor.on( 'PastePostProcess', function( event ) { + // Remove empty paragraphs + each( dom.select( 'p', event.node ), function( node ) { + if ( dom.isEmpty( node ) ) { + dom.remove( node ); + } + }); + }); + } + }); - editor.on( 'SaveContent', function( e ) { + editor.on( 'SaveContent', function( event ) { // If editor is hidden, we just want the textarea's value to be saved - if ( editor.isHidden() ) { - e.content = e.element.value; + if ( ! editor.inline && editor.isHidden() ) { + event.content = event.element.value; return; } // Keep empty paragraphs :( - e.content = e.content.replace( /
(
|\u00a0|\uFEFF)?<\/p>/g, '
' ); + event.content = event.content.replace( /
(?:
|\u00a0|\uFEFF| )*<\/p>/g, '
' ); - if ( editor.getParam( 'wpautop', true ) && typeof window.switchEditors !== 'undefined' ) { - e.content = window.switchEditors.pre_wpautop( e.content ); + if ( hasWpautop ) { + event.content = wp.editor.removep( event.content ); } }); editor.on( 'preInit', function() { - // Don't replace with and with and don't remove them when empty - editor.schema.addValidElements( '@[id|accesskey|class|dir|lang|style|tabindex|title|contenteditable|draggable|dropzone|hidden|spellcheck|translate],i,b' ); - }); + var validElementsSetting = '@[id|accesskey|class|dir|lang|style|tabindex|' + + 'title|contenteditable|draggable|dropzone|hidden|spellcheck|translate],' + // Global attributes. + 'i,' + // Don't replace with and with and don't remove them when empty. + 'b,' + + 'script[src|async|defer|type|charset|crossorigin|integrity]'; // Add support for