X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/41578db67d72562346e4dbb2a14889b23d522813..bd54ad7dcd1cbf3b37f7822f71ca57b742f00a77:/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..968ebd9a 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,41 @@ 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. + // Avoid backtracking, can freeze the editor. See #35890. + // (This is also quite faster than using only one regex.) + event.content = event.content.replace( /
([^<>]+)<\/p>/gi, function( tag, text ) { + if ( /^( |\s|\u00a0|\ufeff)+$/i.test( text ) ) { + return '
' + __( '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 ) ) {
+ editor.on( 'PastePreProcess', function( event ) {
+ // Remove trailing
added by WebKit browsers to the clipboard
+ event.content = event.content.replace( /
/gi, '' );
- if ( key === last ) {
- return;
- }
+ // In WebKit this is handled by removeWebKitStyles()
+ if ( ! tinymce.Env.webkit ) {
+ // Remove all inline styles
+ event.content = event.content.replace( /(<[^>]+) style="[^"]*"([^>]*>)/gi, '$1$2' );
- 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