TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
/* global tinymce */
|
|
|
|
tinymce.PluginManager.add( 'wpeditimage', function( editor ) {
|
2016-10-07 23:41:29 +02:00
|
|
|
var toolbar, serializer, touchOnImage, pasteInCaption,
|
2014-11-13 01:56:22 +01:00
|
|
|
each = tinymce.each,
|
2015-05-25 08:35:28 +02:00
|
|
|
trim = tinymce.trim,
|
2015-03-11 20:12:28 +01:00
|
|
|
iOS = tinymce.Env.iOS;
|
2014-11-13 01:56:22 +01:00
|
|
|
|
2014-11-17 00:12:22 +01:00
|
|
|
function isPlaceholder( node ) {
|
|
|
|
return !! ( editor.dom.getAttrib( node, 'data-mce-placeholder' ) || editor.dom.getAttrib( node, 'data-mce-object' ) );
|
|
|
|
}
|
|
|
|
|
2014-11-13 01:56:22 +01:00
|
|
|
editor.addButton( 'wp_img_remove', {
|
|
|
|
tooltip: 'Remove',
|
|
|
|
icon: 'dashicon dashicons-no',
|
|
|
|
onclick: function() {
|
|
|
|
removeImage( editor.selection.getNode() );
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
|
|
|
|
editor.addButton( 'wp_img_edit', {
|
2020-01-29 01:45:18 +01:00
|
|
|
tooltip: 'Edit|button', // '|button' is not displayed, only used for context.
|
2014-11-13 01:56:22 +01:00
|
|
|
icon: 'dashicon dashicons-edit',
|
|
|
|
onclick: function() {
|
|
|
|
editImage( editor.selection.getNode() );
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
|
|
|
|
each( {
|
|
|
|
alignleft: 'Align left',
|
|
|
|
aligncenter: 'Align center',
|
|
|
|
alignright: 'Align right',
|
2014-11-19 18:27:22 +01:00
|
|
|
alignnone: 'No alignment'
|
2014-11-13 01:56:22 +01:00
|
|
|
}, function( tooltip, name ) {
|
|
|
|
var direction = name.slice( 5 );
|
|
|
|
|
|
|
|
editor.addButton( 'wp_img_' + name, {
|
|
|
|
tooltip: tooltip,
|
|
|
|
icon: 'dashicon dashicons-align-' + direction,
|
|
|
|
cmd: 'alignnone' === name ? 'wpAlignNone' : 'Justify' + direction.slice( 0, 1 ).toUpperCase() + direction.slice( 1 ),
|
2015-11-12 13:04:27 +01:00
|
|
|
onPostRender: function() {
|
2014-11-13 01:56:22 +01:00
|
|
|
var self = this;
|
|
|
|
|
|
|
|
editor.on( 'NodeChange', function( event ) {
|
|
|
|
var node;
|
|
|
|
|
|
|
|
// Don't bother.
|
|
|
|
if ( event.element.nodeName !== 'IMG' ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
node = editor.dom.getParent( event.element, '.wp-caption' ) || event.element;
|
|
|
|
|
|
|
|
if ( 'alignnone' === name ) {
|
|
|
|
self.active( ! /\balign(left|center|right)\b/.test( node.className ) );
|
|
|
|
} else {
|
|
|
|
self.active( editor.dom.hasClass( node, name ) );
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
} );
|
|
|
|
|
2015-03-11 23:41:26 +01:00
|
|
|
editor.once( 'preinit', function() {
|
2015-08-25 06:38:20 +02:00
|
|
|
if ( editor.wp && editor.wp._createToolbar ) {
|
|
|
|
toolbar = editor.wp._createToolbar( [
|
|
|
|
'wp_img_alignleft',
|
|
|
|
'wp_img_aligncenter',
|
|
|
|
'wp_img_alignright',
|
|
|
|
'wp_img_alignnone',
|
|
|
|
'wp_img_edit',
|
|
|
|
'wp_img_remove'
|
|
|
|
] );
|
|
|
|
}
|
2015-03-11 23:41:26 +01:00
|
|
|
} );
|
|
|
|
|
2015-03-11 20:12:28 +01:00
|
|
|
editor.on( 'wptoolbar', function( event ) {
|
|
|
|
if ( event.element.nodeName === 'IMG' && ! isPlaceholder( event.element ) ) {
|
2015-03-11 23:41:26 +01:00
|
|
|
event.toolbar = toolbar;
|
2014-11-13 01:56:22 +01:00
|
|
|
}
|
2015-03-11 20:12:28 +01:00
|
|
|
} );
|
2014-11-13 01:56:22 +01:00
|
|
|
|
2016-07-26 23:51:27 +02:00
|
|
|
function isNonEditable( node ) {
|
|
|
|
var parent = editor.$( node ).parents( '[contenteditable]' );
|
|
|
|
return parent && parent.attr( 'contenteditable' ) === 'false';
|
|
|
|
}
|
|
|
|
|
2015-11-11 04:27:25 +01:00
|
|
|
// Safari on iOS fails to select images in contentEditoble mode on touch.
|
2015-03-11 20:12:28 +01:00
|
|
|
// Select them again.
|
2014-11-13 01:56:22 +01:00
|
|
|
if ( iOS ) {
|
2015-11-11 04:27:25 +01:00
|
|
|
editor.on( 'init', function() {
|
|
|
|
editor.on( 'touchstart', function( event ) {
|
2016-07-26 23:51:27 +02:00
|
|
|
if ( event.target.nodeName === 'IMG' && ! isNonEditable( event.target ) ) {
|
2015-11-11 04:27:25 +01:00
|
|
|
touchOnImage = true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2016-07-26 23:51:27 +02:00
|
|
|
editor.dom.bind( editor.getDoc(), 'touchmove', function() {
|
|
|
|
touchOnImage = false;
|
2015-11-11 04:27:25 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
editor.on( 'touchend', function( event ) {
|
2016-07-26 23:51:27 +02:00
|
|
|
if ( touchOnImage && event.target.nodeName === 'IMG' && ! isNonEditable( event.target ) ) {
|
2015-11-11 04:27:25 +01:00
|
|
|
var node = event.target;
|
|
|
|
|
|
|
|
touchOnImage = false;
|
|
|
|
|
|
|
|
window.setTimeout( function() {
|
|
|
|
editor.selection.select( node );
|
|
|
|
editor.nodeChanged();
|
2016-07-26 23:51:27 +02:00
|
|
|
}, 100 );
|
2015-11-11 04:27:25 +01:00
|
|
|
} else if ( toolbar ) {
|
|
|
|
toolbar.hide();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
2014-12-07 00:53:22 +01:00
|
|
|
}
|
|
|
|
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
function parseShortcode( content ) {
|
|
|
|
return content.replace( /(?:<p>)?\[(?:wp_)?caption([^\]]+)\]([\s\S]+?)\[\/(?:wp_)?caption\](?:<\/p>)?/g, function( a, b, c ) {
|
2015-05-25 08:35:28 +02:00
|
|
|
var id, align, classes, caption, img, width;
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
|
|
|
|
id = b.match( /id=['"]([^'"]*)['"] ?/ );
|
|
|
|
if ( id ) {
|
|
|
|
b = b.replace( id[0], '' );
|
|
|
|
}
|
|
|
|
|
2014-08-06 02:58:16 +02:00
|
|
|
align = b.match( /align=['"]([^'"]*)['"] ?/ );
|
|
|
|
if ( align ) {
|
|
|
|
b = b.replace( align[0], '' );
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
}
|
|
|
|
|
2014-08-06 02:58:16 +02:00
|
|
|
classes = b.match( /class=['"]([^'"]*)['"] ?/ );
|
|
|
|
if ( classes ) {
|
|
|
|
b = b.replace( classes[0], '' );
|
|
|
|
}
|
|
|
|
|
|
|
|
width = b.match( /width=['"]([0-9]*)['"] ?/ );
|
|
|
|
if ( width ) {
|
|
|
|
b = b.replace( width[0], '' );
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
c = trim( c );
|
|
|
|
img = c.match( /((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)([\s\S]*)/i );
|
|
|
|
|
|
|
|
if ( img && img[2] ) {
|
2014-08-06 02:58:16 +02:00
|
|
|
caption = trim( img[2] );
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
img = trim( img[1] );
|
|
|
|
} else {
|
2020-01-29 01:45:18 +01:00
|
|
|
// Old captions shortcode style.
|
2014-08-06 02:58:16 +02:00
|
|
|
caption = trim( b ).replace( /caption=['"]/, '' ).replace( /['"]$/, '' );
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
img = c;
|
|
|
|
}
|
|
|
|
|
2014-08-06 02:58:16 +02:00
|
|
|
id = ( id && id[1] ) ? id[1].replace( /[<>&]+/g, '' ) : '';
|
|
|
|
align = ( align && align[1] ) ? align[1] : 'alignnone';
|
|
|
|
classes = ( classes && classes[1] ) ? ' ' + classes[1].replace( /[<>&]+/g, '' ) : '';
|
2014-03-06 01:13:14 +01:00
|
|
|
|
2014-08-06 02:58:16 +02:00
|
|
|
if ( ! width && img ) {
|
|
|
|
width = img.match( /width=['"]([0-9]*)['"]/ );
|
2014-03-06 01:13:14 +01:00
|
|
|
}
|
|
|
|
|
2014-08-06 02:58:16 +02:00
|
|
|
if ( width && width[1] ) {
|
|
|
|
width = width[1];
|
2014-03-06 01:13:14 +01:00
|
|
|
}
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
|
2014-08-06 02:58:16 +02:00
|
|
|
if ( ! width || ! caption ) {
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
return c;
|
|
|
|
}
|
|
|
|
|
2014-08-06 02:58:16 +02:00
|
|
|
width = parseInt( width, 10 );
|
Introduce HTML5 caption support.
When a theme supports HTML5 captions via add_theme_support( 'html5', 'caption' ), figure and figcaption will be used instead of div and p.
There's a bonus. But first, some history: Captions were introduced with an inline style set for the container. This remains, as it is there to force captions to wrap. But this inline style included an extra 10 pixels, which have vexxed theme developers for years. While these pixels were designed to ensure padding around floated images, modern themes handle this with grace. The additional pixels thus feel encumbering.
As the new HTML5 gallery support avoids outputting default gallery styles (again, irking theme developers for years; see #26697), the new HTML5 caption support will also ditch these 10 pixels of unwanted hand-holding.
The 10 pixels are also removed entirely in the visual editor (and more styles may also disappear here; see #26642), giving themes the power necessary to match the frontend styles.
The filter img_caption_shortcode_width added in 3.7 to work around this madness (see #14380) is skipped entirely when the theme supports HTML5 captions.
props obenland, azaozz.
see #26642. also fixes #9066.
Built from https://develop.svn.wordpress.org/trunk@27668
git-svn-id: http://core.svn.wordpress.org/trunk@27511 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-24 03:05:14 +01:00
|
|
|
if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) {
|
|
|
|
width += 10;
|
|
|
|
}
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
|
2014-08-06 02:58:16 +02:00
|
|
|
return '<div class="mceTemp"><dl id="' + id + '" class="wp-caption ' + align + classes + '" style="width: ' + width + 'px">' +
|
|
|
|
'<dt class="wp-caption-dt">'+ img +'</dt><dd class="wp-caption-dd">'+ caption +'</dd></dl></div>';
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function getShortcode( content ) {
|
2015-09-01 00:07:21 +02:00
|
|
|
return content.replace( /(?:<div [^>]+mceTemp[^>]+>)?\s*(<dl [^>]+wp-caption[^>]+>[\s\S]+?<\/dl>)\s*(?:<\/div>)?/g, function( all, dl ) {
|
2013-12-31 04:10:11 +01:00
|
|
|
var out = '';
|
|
|
|
|
2016-10-14 23:38:28 +02:00
|
|
|
if ( dl.indexOf('<img ') === -1 || dl.indexOf('</p>') !== -1 ) {
|
|
|
|
// Broken caption. The user managed to drag the image out or type in the wrapper div?
|
|
|
|
// Remove the <dl>, <dd> and <dt> and return the remaining text.
|
|
|
|
return dl.replace( /<d[ldt]( [^>]+)?>/g, '' ).replace( /<\/d[ldt]>/g, '' );
|
2013-12-30 02:54:11 +01:00
|
|
|
}
|
|
|
|
|
2015-09-01 00:07:21 +02:00
|
|
|
out = dl.replace( /\s*<dl ([^>]+)>\s*<dt [^>]+>([\s\S]+?)<\/dt>\s*<dd [^>]+>([\s\S]*?)<\/dd>\s*<\/dl>\s*/gi, function( a, b, c, caption ) {
|
2014-08-06 02:58:16 +02:00
|
|
|
var id, classes, align, width;
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
|
2014-08-06 02:58:16 +02:00
|
|
|
width = c.match( /width="([0-9]*)"/ );
|
|
|
|
width = ( width && width[1] ) ? width[1] : '';
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
|
2015-04-01 18:04:27 +02:00
|
|
|
classes = b.match( /class="([^"]*)"/ );
|
|
|
|
classes = ( classes && classes[1] ) ? classes[1] : '';
|
|
|
|
align = classes.match( /align[a-z]+/i ) || 'alignnone';
|
|
|
|
|
2014-08-06 02:58:16 +02:00
|
|
|
if ( ! width || ! caption ) {
|
2015-04-01 18:04:27 +02:00
|
|
|
if ( 'alignnone' !== align[0] ) {
|
|
|
|
c = c.replace( /><img/, ' class="' + align[0] + '"><img' );
|
|
|
|
}
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
return c;
|
|
|
|
}
|
|
|
|
|
|
|
|
id = b.match( /id="([^"]*)"/ );
|
|
|
|
id = ( id && id[1] ) ? id[1] : '';
|
|
|
|
|
2014-08-06 02:58:16 +02:00
|
|
|
classes = classes.replace( /wp-caption ?|align[a-z]+ ?/gi, '' );
|
|
|
|
|
|
|
|
if ( classes ) {
|
|
|
|
classes = ' class="' + classes + '"';
|
|
|
|
}
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
|
2014-08-06 02:58:16 +02:00
|
|
|
caption = caption.replace( /\r\n|\r/g, '\n' ).replace( /<[a-zA-Z0-9]+( [^<>]+)?>/g, function( a ) {
|
2020-01-29 01:45:18 +01:00
|
|
|
// No line breaks inside HTML tags.
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
return a.replace( /[\r\n\t]+/, ' ' );
|
|
|
|
});
|
|
|
|
|
2020-01-29 01:45:18 +01:00
|
|
|
// Convert remaining line breaks to <br>.
|
2014-08-06 02:58:16 +02:00
|
|
|
caption = caption.replace( /\s*\n\s*/g, '<br />' );
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
|
2014-08-06 02:58:16 +02:00
|
|
|
return '[caption id="' + id + '" align="' + align + '" width="' + width + '"' + classes + ']' + c + ' ' + caption + '[/caption]';
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
});
|
|
|
|
|
2014-09-11 01:03:18 +02:00
|
|
|
if ( out.indexOf('[caption') === -1 ) {
|
2020-01-29 01:45:18 +01:00
|
|
|
// The caption html seems broken, try to find the image that may be wrapped in a link
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
// and may be followed by <p> with the caption text.
|
2015-09-01 00:07:21 +02:00
|
|
|
out = dl.replace( /[\s\S]*?((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)(<p>[\s\S]*<\/p>)?[\s\S]*/gi, '<p>$1</p>$2' );
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
}
|
|
|
|
|
2013-12-31 04:10:11 +01:00
|
|
|
return out;
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2014-01-28 22:17:12 +01:00
|
|
|
function extractImageData( imageNode ) {
|
2014-04-02 03:54:15 +02:00
|
|
|
var classes, extraClasses, metadata, captionBlock, caption, link, width, height,
|
2014-08-06 02:58:16 +02:00
|
|
|
captionClassName = [],
|
2014-04-04 03:49:15 +02:00
|
|
|
dom = editor.dom,
|
|
|
|
isIntRegExp = /^\d+$/;
|
2014-01-28 22:17:12 +01:00
|
|
|
|
2020-01-29 01:45:18 +01:00
|
|
|
// Default attributes.
|
2014-01-28 22:17:12 +01:00
|
|
|
metadata = {
|
|
|
|
attachment_id: false,
|
2014-04-03 05:21:15 +02:00
|
|
|
size: 'custom',
|
2014-01-28 22:17:12 +01:00
|
|
|
caption: '',
|
|
|
|
align: 'none',
|
2014-04-02 03:54:15 +02:00
|
|
|
extraClasses: '',
|
2014-01-28 22:17:12 +01:00
|
|
|
link: false,
|
2014-03-27 23:41:14 +01:00
|
|
|
linkUrl: '',
|
|
|
|
linkClassName: '',
|
|
|
|
linkTargetBlank: false,
|
|
|
|
linkRel: '',
|
2014-04-02 03:54:15 +02:00
|
|
|
title: ''
|
2014-01-28 22:17:12 +01:00
|
|
|
};
|
|
|
|
|
2014-02-11 00:48:12 +01:00
|
|
|
metadata.url = dom.getAttrib( imageNode, 'src' );
|
|
|
|
metadata.alt = dom.getAttrib( imageNode, 'alt' );
|
2014-03-27 23:41:14 +01:00
|
|
|
metadata.title = dom.getAttrib( imageNode, 'title' );
|
2014-04-04 03:49:15 +02:00
|
|
|
|
|
|
|
width = dom.getAttrib( imageNode, 'width' );
|
|
|
|
height = dom.getAttrib( imageNode, 'height' );
|
|
|
|
|
|
|
|
if ( ! isIntRegExp.test( width ) || parseInt( width, 10 ) < 1 ) {
|
|
|
|
width = imageNode.naturalWidth || imageNode.width;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( ! isIntRegExp.test( height ) || parseInt( height, 10 ) < 1 ) {
|
|
|
|
height = imageNode.naturalHeight || imageNode.height;
|
|
|
|
}
|
|
|
|
|
|
|
|
metadata.customWidth = metadata.width = width;
|
|
|
|
metadata.customHeight = metadata.height = height;
|
2014-04-02 03:54:15 +02:00
|
|
|
|
|
|
|
classes = tinymce.explode( imageNode.className, ' ' );
|
|
|
|
extraClasses = [];
|
|
|
|
|
2014-01-28 22:17:12 +01:00
|
|
|
tinymce.each( classes, function( name ) {
|
|
|
|
|
|
|
|
if ( /^wp-image/.test( name ) ) {
|
|
|
|
metadata.attachment_id = parseInt( name.replace( 'wp-image-', '' ), 10 );
|
2014-04-02 03:54:15 +02:00
|
|
|
} else if ( /^align/.test( name ) ) {
|
2014-01-28 22:17:12 +01:00
|
|
|
metadata.align = name.replace( 'align', '' );
|
2014-04-02 03:54:15 +02:00
|
|
|
} else if ( /^size/.test( name ) ) {
|
2014-01-28 22:17:12 +01:00
|
|
|
metadata.size = name.replace( 'size-', '' );
|
2014-04-02 03:54:15 +02:00
|
|
|
} else {
|
|
|
|
extraClasses.push( name );
|
2014-01-28 22:17:12 +01:00
|
|
|
}
|
2014-04-02 03:54:15 +02:00
|
|
|
|
2014-01-28 22:17:12 +01:00
|
|
|
} );
|
|
|
|
|
2014-04-02 03:54:15 +02:00
|
|
|
metadata.extraClasses = extraClasses.join( ' ' );
|
|
|
|
|
2020-01-29 01:45:18 +01:00
|
|
|
// Extract caption.
|
2014-02-11 00:48:12 +01:00
|
|
|
captionBlock = dom.getParents( imageNode, '.wp-caption' );
|
2014-01-28 22:17:12 +01:00
|
|
|
|
|
|
|
if ( captionBlock.length ) {
|
|
|
|
captionBlock = captionBlock[0];
|
|
|
|
|
|
|
|
classes = captionBlock.className.split( ' ' );
|
|
|
|
tinymce.each( classes, function( name ) {
|
|
|
|
if ( /^align/.test( name ) ) {
|
|
|
|
metadata.align = name.replace( 'align', '' );
|
2014-08-06 02:58:16 +02:00
|
|
|
} else if ( name && name !== 'wp-caption' ) {
|
|
|
|
captionClassName.push( name );
|
2014-01-28 22:17:12 +01:00
|
|
|
}
|
|
|
|
} );
|
2014-02-11 00:48:12 +01:00
|
|
|
|
2014-08-06 02:58:16 +02:00
|
|
|
metadata.captionClassName = captionClassName.join( ' ' );
|
|
|
|
|
2014-02-11 00:48:12 +01:00
|
|
|
caption = dom.select( 'dd.wp-caption-dd', captionBlock );
|
2014-01-28 22:17:12 +01:00
|
|
|
if ( caption.length ) {
|
|
|
|
caption = caption[0];
|
2014-03-27 23:41:14 +01:00
|
|
|
|
2014-01-28 22:17:12 +01:00
|
|
|
metadata.caption = editor.serializer.serialize( caption )
|
|
|
|
.replace( /<br[^>]*>/g, '$&\n' ).replace( /^<p>/, '' ).replace( /<\/p>$/, '' );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-01-29 01:45:18 +01:00
|
|
|
// Extract linkTo.
|
2014-02-11 00:48:12 +01:00
|
|
|
if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' ) {
|
2014-03-27 23:41:14 +01:00
|
|
|
link = imageNode.parentNode;
|
|
|
|
metadata.linkUrl = dom.getAttrib( link, 'href' );
|
|
|
|
metadata.linkTargetBlank = dom.getAttrib( link, 'target' ) === '_blank' ? true : false;
|
|
|
|
metadata.linkRel = dom.getAttrib( link, 'rel' );
|
|
|
|
metadata.linkClassName = link.className;
|
2014-01-28 22:17:12 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return metadata;
|
|
|
|
}
|
|
|
|
|
2014-04-03 05:21:15 +02:00
|
|
|
function hasTextContent( node ) {
|
2017-08-26 18:34:46 +02:00
|
|
|
return node && !! ( node.textContent || node.innerText ).replace( /\ufeff/g, '' );
|
2014-04-03 05:21:15 +02:00
|
|
|
}
|
|
|
|
|
2020-01-29 01:45:18 +01:00
|
|
|
// Verify HTML in captions.
|
2014-11-20 14:49:22 +01:00
|
|
|
function verifyHTML( caption ) {
|
|
|
|
if ( ! caption || ( caption.indexOf( '<' ) === -1 && caption.indexOf( '>' ) === -1 ) ) {
|
|
|
|
return caption;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( ! serializer ) {
|
|
|
|
serializer = new tinymce.html.Serializer( {}, editor.schema );
|
|
|
|
}
|
|
|
|
|
|
|
|
return serializer.serialize( editor.parser.parse( caption, { forced_root_block: false } ) );
|
|
|
|
}
|
|
|
|
|
2019-01-24 12:11:51 +01:00
|
|
|
function updateImage( $imageNode, imageData ) {
|
|
|
|
var classes, className, node, html, parent, wrap, linkNode, imageNode,
|
2014-08-06 02:58:16 +02:00
|
|
|
captionNode, dd, dl, id, attrs, linkAttrs, width, height, align,
|
2016-01-22 02:19:25 +01:00
|
|
|
$imageNode, srcset, src,
|
2014-04-02 03:54:15 +02:00
|
|
|
dom = editor.dom;
|
2014-02-11 00:48:12 +01:00
|
|
|
|
2019-01-24 12:11:51 +01:00
|
|
|
if ( ! $imageNode || ! $imageNode.length ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
imageNode = $imageNode[0];
|
2014-04-02 03:54:15 +02:00
|
|
|
classes = tinymce.explode( imageData.extraClasses, ' ' );
|
2014-02-11 00:48:12 +01:00
|
|
|
|
2014-04-02 03:54:15 +02:00
|
|
|
if ( ! classes ) {
|
|
|
|
classes = [];
|
2014-02-11 00:48:12 +01:00
|
|
|
}
|
2014-01-28 22:17:12 +01:00
|
|
|
|
|
|
|
if ( ! imageData.caption ) {
|
|
|
|
classes.push( 'align' + imageData.align );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( imageData.attachment_id ) {
|
|
|
|
classes.push( 'wp-image-' + imageData.attachment_id );
|
2014-04-03 05:21:15 +02:00
|
|
|
if ( imageData.size && imageData.size !== 'custom' ) {
|
2014-01-28 22:17:12 +01:00
|
|
|
classes.push( 'size-' + imageData.size );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-04-03 05:21:15 +02:00
|
|
|
width = imageData.width;
|
|
|
|
height = imageData.height;
|
|
|
|
|
|
|
|
if ( imageData.size === 'custom' ) {
|
|
|
|
width = imageData.customWidth;
|
|
|
|
height = imageData.customHeight;
|
|
|
|
}
|
|
|
|
|
2014-03-27 23:41:14 +01:00
|
|
|
attrs = {
|
2014-01-28 22:17:12 +01:00
|
|
|
src: imageData.url,
|
2014-04-03 05:21:15 +02:00
|
|
|
width: width || null,
|
|
|
|
height: height || null,
|
2014-04-02 03:54:15 +02:00
|
|
|
title: imageData.title || null,
|
|
|
|
'class': classes.join( ' ' ) || null
|
2014-01-28 22:17:12 +01:00
|
|
|
};
|
|
|
|
|
2014-04-02 03:54:15 +02:00
|
|
|
dom.setAttribs( imageNode, attrs );
|
|
|
|
|
2017-02-24 21:41:43 +01:00
|
|
|
// Preserve empty alt attributes.
|
2019-01-24 12:11:51 +01:00
|
|
|
$imageNode.attr( 'alt', imageData.alt || '' );
|
2017-02-24 21:41:43 +01:00
|
|
|
|
2014-04-02 03:54:15 +02:00
|
|
|
linkAttrs = {
|
|
|
|
href: imageData.linkUrl,
|
|
|
|
rel: imageData.linkRel || null,
|
|
|
|
target: imageData.linkTargetBlank ? '_blank': null,
|
|
|
|
'class': imageData.linkClassName || null
|
|
|
|
};
|
|
|
|
|
2014-04-03 05:21:15 +02:00
|
|
|
if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' && ! hasTextContent( imageNode.parentNode ) ) {
|
2020-01-29 01:45:18 +01:00
|
|
|
// Update or remove an existing link wrapped around the image.
|
2014-04-02 03:54:15 +02:00
|
|
|
if ( imageData.linkUrl ) {
|
|
|
|
dom.setAttribs( imageNode.parentNode, linkAttrs );
|
|
|
|
} else {
|
|
|
|
dom.remove( imageNode.parentNode, true );
|
|
|
|
}
|
|
|
|
} else if ( imageData.linkUrl ) {
|
2014-04-03 05:21:15 +02:00
|
|
|
if ( linkNode = dom.getParent( imageNode, 'a' ) ) {
|
|
|
|
// The image is inside a link together with other nodes,
|
2020-01-29 01:45:18 +01:00
|
|
|
// or is nested in another node, move it out.
|
2014-04-03 05:21:15 +02:00
|
|
|
dom.insertAfter( imageNode, linkNode );
|
|
|
|
}
|
|
|
|
|
2020-01-29 01:45:18 +01:00
|
|
|
// Add link wrapped around the image.
|
2014-04-03 05:21:15 +02:00
|
|
|
linkNode = dom.create( 'a', linkAttrs );
|
|
|
|
imageNode.parentNode.insertBefore( linkNode, imageNode );
|
|
|
|
linkNode.appendChild( imageNode );
|
2014-01-28 22:17:12 +01:00
|
|
|
}
|
|
|
|
|
2014-04-02 03:54:15 +02:00
|
|
|
captionNode = editor.dom.getParent( imageNode, '.mceTemp' );
|
|
|
|
|
2014-04-03 05:21:15 +02:00
|
|
|
if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' && ! hasTextContent( imageNode.parentNode ) ) {
|
2014-04-02 03:54:15 +02:00
|
|
|
node = imageNode.parentNode;
|
|
|
|
} else {
|
|
|
|
node = imageNode;
|
|
|
|
}
|
2014-03-27 23:41:14 +01:00
|
|
|
|
2014-04-02 03:54:15 +02:00
|
|
|
if ( imageData.caption ) {
|
2014-11-20 14:49:22 +01:00
|
|
|
imageData.caption = verifyHTML( imageData.caption );
|
2014-04-03 05:21:15 +02:00
|
|
|
|
2014-04-02 03:54:15 +02:00
|
|
|
id = imageData.attachment_id ? 'attachment_' + imageData.attachment_id : null;
|
2014-08-06 02:58:16 +02:00
|
|
|
align = 'align' + ( imageData.align || 'none' );
|
|
|
|
className = 'wp-caption ' + align;
|
|
|
|
|
|
|
|
if ( imageData.captionClassName ) {
|
|
|
|
className += ' ' + imageData.captionClassName.replace( /[<>&]+/g, '' );
|
|
|
|
}
|
2014-03-27 23:41:14 +01:00
|
|
|
|
2014-04-02 03:54:15 +02:00
|
|
|
if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) {
|
2014-04-03 05:21:15 +02:00
|
|
|
width = parseInt( width, 10 );
|
2014-04-02 03:54:15 +02:00
|
|
|
width += 10;
|
2014-03-27 23:41:14 +01:00
|
|
|
}
|
|
|
|
|
2014-04-02 03:54:15 +02:00
|
|
|
if ( captionNode ) {
|
|
|
|
dl = dom.select( 'dl.wp-caption', captionNode );
|
2014-03-27 23:41:14 +01:00
|
|
|
|
2014-04-02 03:54:15 +02:00
|
|
|
if ( dl.length ) {
|
|
|
|
dom.setAttribs( dl, {
|
|
|
|
id: id,
|
|
|
|
'class': className,
|
|
|
|
style: 'width: ' + width + 'px'
|
|
|
|
} );
|
|
|
|
}
|
2014-03-27 23:41:14 +01:00
|
|
|
|
2014-04-02 03:54:15 +02:00
|
|
|
dd = dom.select( '.wp-caption-dd', captionNode );
|
|
|
|
|
|
|
|
if ( dd.length ) {
|
|
|
|
dom.setHTML( dd[0], imageData.caption );
|
|
|
|
}
|
2014-03-27 23:41:14 +01:00
|
|
|
|
2014-04-02 03:54:15 +02:00
|
|
|
} else {
|
|
|
|
id = id ? 'id="'+ id +'" ' : '';
|
|
|
|
|
2020-01-29 01:45:18 +01:00
|
|
|
// Should create a new function for generating the caption markup.
|
2014-04-02 03:54:15 +02:00
|
|
|
html = '<dl ' + id + 'class="' + className +'" style="width: '+ width +'px">' +
|
2014-10-23 04:08:20 +02:00
|
|
|
'<dt class="wp-caption-dt"></dt><dd class="wp-caption-dd">'+ imageData.caption +'</dd></dl>';
|
|
|
|
|
|
|
|
wrap = dom.create( 'div', { 'class': 'mceTemp' }, html );
|
2014-04-02 03:54:15 +02:00
|
|
|
|
|
|
|
if ( parent = dom.getParent( node, 'p' ) ) {
|
2014-04-23 22:42:14 +02:00
|
|
|
parent.parentNode.insertBefore( wrap, parent );
|
2014-04-02 03:54:15 +02:00
|
|
|
} else {
|
2014-10-23 04:08:20 +02:00
|
|
|
node.parentNode.insertBefore( wrap, node );
|
2014-04-02 03:54:15 +02:00
|
|
|
}
|
2014-10-23 04:08:20 +02:00
|
|
|
|
|
|
|
editor.$( wrap ).find( 'dt.wp-caption-dt' ).append( node );
|
2015-04-18 23:56:27 +02:00
|
|
|
|
|
|
|
if ( parent && dom.isEmpty( parent ) ) {
|
|
|
|
dom.remove( parent );
|
|
|
|
}
|
2014-04-02 03:54:15 +02:00
|
|
|
}
|
|
|
|
} else if ( captionNode ) {
|
2020-01-29 01:45:18 +01:00
|
|
|
// Remove the caption wrapper and place the image in new paragraph.
|
2014-04-02 03:54:15 +02:00
|
|
|
parent = dom.create( 'p' );
|
|
|
|
captionNode.parentNode.insertBefore( parent, captionNode );
|
|
|
|
parent.appendChild( node );
|
|
|
|
dom.remove( captionNode );
|
2014-01-28 22:17:12 +01:00
|
|
|
}
|
2014-04-02 03:54:15 +02:00
|
|
|
|
2016-01-22 02:19:25 +01:00
|
|
|
$imageNode = editor.$( imageNode );
|
|
|
|
srcset = $imageNode.attr( 'srcset' );
|
|
|
|
src = $imageNode.attr( 'src' );
|
|
|
|
|
|
|
|
// Remove srcset and sizes if the image file was edited or the image was replaced.
|
|
|
|
if ( srcset && src ) {
|
|
|
|
src = src.replace( /[?#].*/, '' );
|
|
|
|
|
|
|
|
if ( srcset.indexOf( src ) === -1 ) {
|
|
|
|
$imageNode.attr( 'srcset', null ).attr( 'sizes', null );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-04-13 06:02:15 +02:00
|
|
|
if ( wp.media.events ) {
|
|
|
|
wp.media.events.trigger( 'editor:image-update', {
|
|
|
|
editor: editor,
|
|
|
|
metadata: imageData,
|
|
|
|
image: imageNode
|
|
|
|
} );
|
|
|
|
}
|
|
|
|
|
2014-04-02 03:54:15 +02:00
|
|
|
editor.nodeChanged();
|
2014-01-28 22:17:12 +01:00
|
|
|
}
|
|
|
|
|
2014-02-11 00:48:12 +01:00
|
|
|
function editImage( img ) {
|
2019-01-24 12:11:51 +01:00
|
|
|
var frame, callback, metadata, imageNode;
|
2014-02-11 00:48:12 +01:00
|
|
|
|
|
|
|
if ( typeof wp === 'undefined' || ! wp.media ) {
|
|
|
|
editor.execCommand( 'mceImage' );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2014-04-13 06:02:15 +02:00
|
|
|
metadata = extractImageData( img );
|
|
|
|
|
2019-01-24 12:11:51 +01:00
|
|
|
// Mark the image node so we can select it later.
|
|
|
|
editor.$( img ).attr( 'data-wp-editing', 1 );
|
|
|
|
|
2020-01-29 01:45:18 +01:00
|
|
|
// Manipulate the metadata by reference that is fed into the PostImage model used in the media modal.
|
2014-04-13 06:02:15 +02:00
|
|
|
wp.media.events.trigger( 'editor:image-edit', {
|
|
|
|
editor: editor,
|
|
|
|
metadata: metadata,
|
|
|
|
image: img
|
|
|
|
} );
|
|
|
|
|
2014-02-11 00:48:12 +01:00
|
|
|
frame = wp.media({
|
|
|
|
frame: 'image',
|
|
|
|
state: 'image-details',
|
2014-04-13 06:02:15 +02:00
|
|
|
metadata: metadata
|
2014-02-11 00:48:12 +01:00
|
|
|
} );
|
|
|
|
|
2014-04-13 06:02:15 +02:00
|
|
|
wp.media.events.trigger( 'editor:frame-create', { frame: frame } );
|
|
|
|
|
2014-02-11 00:48:12 +01:00
|
|
|
callback = function( imageData ) {
|
2014-04-03 05:21:15 +02:00
|
|
|
editor.undoManager.transact( function() {
|
2019-01-24 12:11:51 +01:00
|
|
|
updateImage( imageNode, imageData );
|
2014-04-03 05:21:15 +02:00
|
|
|
} );
|
2014-02-25 22:03:15 +01:00
|
|
|
frame.detach();
|
2014-02-11 00:48:12 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
frame.state('image-details').on( 'update', callback );
|
|
|
|
frame.state('replace-image').on( 'replace', callback );
|
|
|
|
frame.on( 'close', function() {
|
|
|
|
editor.focus();
|
2014-02-25 22:03:15 +01:00
|
|
|
frame.detach();
|
2019-01-24 12:11:51 +01:00
|
|
|
|
2020-01-29 01:45:18 +01:00
|
|
|
/*
|
|
|
|
* `close` fires first...
|
|
|
|
* To be able to update the image node, we need to find it here,
|
|
|
|
* and use it in the callback.
|
|
|
|
*/
|
2019-01-24 12:11:51 +01:00
|
|
|
imageNode = editor.$( 'img[data-wp-editing]' )
|
|
|
|
imageNode.removeAttr( 'data-wp-editing' );
|
2014-02-11 00:48:12 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
frame.open();
|
|
|
|
}
|
|
|
|
|
|
|
|
function removeImage( node ) {
|
2015-07-09 02:25:25 +02:00
|
|
|
var wrap = editor.dom.getParent( node, 'div.mceTemp' );
|
2014-02-11 00:48:12 +01:00
|
|
|
|
2015-07-09 02:25:25 +02:00
|
|
|
if ( ! wrap && node.nodeName === 'IMG' ) {
|
|
|
|
wrap = editor.dom.getParent( node, 'a' );
|
2014-02-11 00:48:12 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( wrap ) {
|
|
|
|
if ( wrap.nextSibling ) {
|
|
|
|
editor.selection.select( wrap.nextSibling );
|
|
|
|
} else if ( wrap.previousSibling ) {
|
|
|
|
editor.selection.select( wrap.previousSibling );
|
|
|
|
} else {
|
|
|
|
editor.selection.select( wrap.parentNode );
|
|
|
|
}
|
|
|
|
|
|
|
|
editor.selection.collapse( true );
|
|
|
|
editor.dom.remove( wrap );
|
|
|
|
} else {
|
|
|
|
editor.dom.remove( node );
|
|
|
|
}
|
2014-08-10 06:22:15 +02:00
|
|
|
|
|
|
|
editor.nodeChanged();
|
|
|
|
editor.undoManager.add();
|
2014-02-11 00:48:12 +01:00
|
|
|
}
|
|
|
|
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
editor.on( 'init', function() {
|
2014-03-27 00:13:15 +01:00
|
|
|
var dom = editor.dom,
|
|
|
|
captionClass = editor.getParam( 'wpeditimage_html5_captions' ) ? 'html5-captions' : 'html4-captions';
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
|
2014-03-27 00:13:15 +01:00
|
|
|
dom.addClass( editor.getBody(), captionClass );
|
Introduce HTML5 caption support.
When a theme supports HTML5 captions via add_theme_support( 'html5', 'caption' ), figure and figcaption will be used instead of div and p.
There's a bonus. But first, some history: Captions were introduced with an inline style set for the container. This remains, as it is there to force captions to wrap. But this inline style included an extra 10 pixels, which have vexxed theme developers for years. While these pixels were designed to ensure padding around floated images, modern themes handle this with grace. The additional pixels thus feel encumbering.
As the new HTML5 gallery support avoids outputting default gallery styles (again, irking theme developers for years; see #26697), the new HTML5 caption support will also ditch these 10 pixels of unwanted hand-holding.
The 10 pixels are also removed entirely in the visual editor (and more styles may also disappear here; see #26642), giving themes the power necessary to match the frontend styles.
The filter img_caption_shortcode_width added in 3.7 to work around this madness (see #14380) is skipped entirely when the theme supports HTML5 captions.
props obenland, azaozz.
see #26642. also fixes #9066.
Built from https://develop.svn.wordpress.org/trunk@27668
git-svn-id: http://core.svn.wordpress.org/trunk@27511 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-24 03:05:14 +01:00
|
|
|
|
2020-01-29 01:45:18 +01:00
|
|
|
// Prevent IE11 from making dl.wp-caption resizable.
|
2014-02-11 00:48:12 +01:00
|
|
|
if ( tinymce.Env.ie && tinymce.Env.ie > 10 ) {
|
2020-01-29 01:45:18 +01:00
|
|
|
// The 'mscontrolselect' event is supported only in IE11+.
|
2014-02-11 00:48:12 +01:00
|
|
|
dom.bind( editor.getBody(), 'mscontrolselect', function( event ) {
|
|
|
|
if ( event.target.nodeName === 'IMG' && dom.getParent( event.target, '.wp-caption' ) ) {
|
2020-01-29 01:45:18 +01:00
|
|
|
// Hide the thick border with resize handles around dl.wp-caption.
|
2014-02-11 00:48:12 +01:00
|
|
|
editor.getBody().focus(); // :(
|
|
|
|
} else if ( event.target.nodeName === 'DL' && dom.hasClass( event.target, 'wp-caption' ) ) {
|
|
|
|
// Trigger the thick border with resize handles...
|
|
|
|
// This will make the caption text editable.
|
|
|
|
event.target.focus();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
});
|
|
|
|
|
2014-01-13 02:13:10 +01:00
|
|
|
editor.on( 'ObjectResized', function( event ) {
|
2014-05-29 09:51:14 +02:00
|
|
|
var node = event.target;
|
2014-01-13 02:13:10 +01:00
|
|
|
|
2014-02-11 00:48:12 +01:00
|
|
|
if ( node.nodeName === 'IMG' ) {
|
2014-05-29 09:51:14 +02:00
|
|
|
editor.undoManager.transact( function() {
|
|
|
|
var parent, width,
|
|
|
|
dom = editor.dom;
|
2014-03-25 01:16:14 +01:00
|
|
|
|
2014-05-29 09:51:14 +02:00
|
|
|
node.className = node.className.replace( /\bsize-[^ ]+/, '' );
|
2014-02-05 03:07:13 +01:00
|
|
|
|
2014-05-29 09:51:14 +02:00
|
|
|
if ( parent = dom.getParent( node, '.wp-caption' ) ) {
|
|
|
|
width = event.width || dom.getAttrib( node, 'width' );
|
Introduce HTML5 caption support.
When a theme supports HTML5 captions via add_theme_support( 'html5', 'caption' ), figure and figcaption will be used instead of div and p.
There's a bonus. But first, some history: Captions were introduced with an inline style set for the container. This remains, as it is there to force captions to wrap. But this inline style included an extra 10 pixels, which have vexxed theme developers for years. While these pixels were designed to ensure padding around floated images, modern themes handle this with grace. The additional pixels thus feel encumbering.
As the new HTML5 gallery support avoids outputting default gallery styles (again, irking theme developers for years; see #26697), the new HTML5 caption support will also ditch these 10 pixels of unwanted hand-holding.
The 10 pixels are also removed entirely in the visual editor (and more styles may also disappear here; see #26642), giving themes the power necessary to match the frontend styles.
The filter img_caption_shortcode_width added in 3.7 to work around this madness (see #14380) is skipped entirely when the theme supports HTML5 captions.
props obenland, azaozz.
see #26642. also fixes #9066.
Built from https://develop.svn.wordpress.org/trunk@27668
git-svn-id: http://core.svn.wordpress.org/trunk@27511 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-24 03:05:14 +01:00
|
|
|
|
2014-05-29 09:51:14 +02:00
|
|
|
if ( width ) {
|
|
|
|
width = parseInt( width, 10 );
|
|
|
|
|
|
|
|
if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) {
|
|
|
|
width += 10;
|
|
|
|
}
|
Introduce HTML5 caption support.
When a theme supports HTML5 captions via add_theme_support( 'html5', 'caption' ), figure and figcaption will be used instead of div and p.
There's a bonus. But first, some history: Captions were introduced with an inline style set for the container. This remains, as it is there to force captions to wrap. But this inline style included an extra 10 pixels, which have vexxed theme developers for years. While these pixels were designed to ensure padding around floated images, modern themes handle this with grace. The additional pixels thus feel encumbering.
As the new HTML5 gallery support avoids outputting default gallery styles (again, irking theme developers for years; see #26697), the new HTML5 caption support will also ditch these 10 pixels of unwanted hand-holding.
The 10 pixels are also removed entirely in the visual editor (and more styles may also disappear here; see #26642), giving themes the power necessary to match the frontend styles.
The filter img_caption_shortcode_width added in 3.7 to work around this madness (see #14380) is skipped entirely when the theme supports HTML5 captions.
props obenland, azaozz.
see #26642. also fixes #9066.
Built from https://develop.svn.wordpress.org/trunk@27668
git-svn-id: http://core.svn.wordpress.org/trunk@27511 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-24 03:05:14 +01:00
|
|
|
|
2014-05-29 09:51:14 +02:00
|
|
|
dom.setStyle( parent, 'width', width + 'px' );
|
|
|
|
}
|
2014-02-11 00:48:12 +01:00
|
|
|
}
|
2014-05-29 09:51:14 +02:00
|
|
|
});
|
2014-01-13 02:13:10 +01:00
|
|
|
}
|
2016-10-07 23:41:29 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
editor.on( 'pastePostProcess', function( event ) {
|
|
|
|
// Pasting in a caption node.
|
|
|
|
if ( editor.dom.getParent( editor.selection.getNode(), 'dd.wp-caption-dd' ) ) {
|
|
|
|
// Remove "non-block" elements that should not be in captions.
|
|
|
|
editor.$( 'img, audio, video, object, embed, iframe, script, style', event.node ).remove();
|
|
|
|
|
|
|
|
editor.$( '*', event.node ).each( function( i, node ) {
|
|
|
|
if ( editor.dom.isBlock( node ) ) {
|
|
|
|
// Insert <br> where the blocks used to be. Makes it look better after pasting in the caption.
|
|
|
|
if ( tinymce.trim( node.textContent || node.innerText ) ) {
|
|
|
|
editor.dom.insertAfter( editor.dom.create( 'br' ), node );
|
|
|
|
editor.dom.remove( node, true );
|
|
|
|
} else {
|
|
|
|
editor.dom.remove( node );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// Trim <br> tags.
|
|
|
|
editor.$( 'br', event.node ).each( function( i, node ) {
|
|
|
|
if ( ! node.nextSibling || node.nextSibling.nodeName === 'BR' ||
|
|
|
|
! node.previousSibling || node.previousSibling.nodeName === 'BR' ) {
|
|
|
|
|
|
|
|
editor.dom.remove( node );
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
|
|
|
|
// Pasted HTML is cleaned up for inserting in the caption.
|
|
|
|
pasteInCaption = true;
|
|
|
|
}
|
|
|
|
});
|
2014-01-13 02:13:10 +01:00
|
|
|
|
2014-02-11 00:48:12 +01:00
|
|
|
editor.on( 'BeforeExecCommand', function( event ) {
|
2016-10-07 23:41:29 +02:00
|
|
|
var node, p, DL, align, replacement, captionParent,
|
2014-02-11 00:48:12 +01:00
|
|
|
cmd = event.command,
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
dom = editor.dom;
|
|
|
|
|
2016-10-14 23:38:28 +02:00
|
|
|
if ( cmd === 'mceInsertContent' || cmd === 'Indent' || cmd === 'Outdent' ) {
|
2016-10-07 23:41:29 +02:00
|
|
|
node = editor.selection.getNode();
|
|
|
|
captionParent = dom.getParent( node, 'div.mceTemp' );
|
|
|
|
|
|
|
|
if ( captionParent ) {
|
2016-10-14 23:38:28 +02:00
|
|
|
if ( cmd === 'mceInsertContent' ) {
|
|
|
|
if ( pasteInCaption ) {
|
|
|
|
pasteInCaption = false;
|
2020-01-29 01:45:18 +01:00
|
|
|
/*
|
|
|
|
* We are in the caption element, and in 'paste' context,
|
|
|
|
* and the pasted HTML was cleaned up on 'pastePostProcess' above.
|
|
|
|
* Let it be pasted in the caption.
|
|
|
|
*/
|
2016-10-14 23:38:28 +02:00
|
|
|
return;
|
|
|
|
}
|
2016-10-07 23:41:29 +02:00
|
|
|
|
2020-01-29 01:45:18 +01:00
|
|
|
/*
|
|
|
|
* The paste is somewhere else in the caption DL element.
|
|
|
|
* Prevent pasting in there as it will break the caption.
|
|
|
|
* Make new paragraph under the caption DL and move the caret there.
|
|
|
|
*/
|
2016-10-14 23:38:28 +02:00
|
|
|
p = dom.create( 'p' );
|
|
|
|
dom.insertAfter( p, captionParent );
|
|
|
|
editor.selection.setCursorLocation( p, 0 );
|
2017-05-19 00:25:41 +02:00
|
|
|
|
2020-01-29 01:45:18 +01:00
|
|
|
/*
|
|
|
|
* If the image is selected and the user pastes "over" it,
|
|
|
|
* replace both the image and the caption elements with the pasted content.
|
|
|
|
* This matches the behavior when pasting over non-caption images.
|
|
|
|
*/
|
2017-05-19 00:25:41 +02:00
|
|
|
if ( node.nodeName === 'IMG' ) {
|
2020-01-29 01:45:18 +01:00
|
|
|
editor.$( captionParent ).remove();
|
|
|
|
}
|
2017-05-19 00:25:41 +02:00
|
|
|
|
2016-10-14 23:38:28 +02:00
|
|
|
editor.nodeChanged();
|
|
|
|
} else {
|
|
|
|
// Clicking Indent or Outdent while an image with a caption is selected breaks the caption.
|
|
|
|
// See #38313.
|
|
|
|
event.preventDefault();
|
|
|
|
event.stopImmediatePropagation();
|
|
|
|
return false;
|
|
|
|
}
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
}
|
2014-11-13 01:56:22 +01:00
|
|
|
} else if ( cmd === 'JustifyLeft' || cmd === 'JustifyRight' || cmd === 'JustifyCenter' || cmd === 'wpAlignNone' ) {
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
node = editor.selection.getNode();
|
2014-11-13 01:56:22 +01:00
|
|
|
align = 'align' + cmd.slice( 7 ).toLowerCase();
|
|
|
|
DL = editor.dom.getParent( node, '.wp-caption' );
|
2014-02-11 00:48:12 +01:00
|
|
|
|
2014-11-13 01:56:22 +01:00
|
|
|
if ( node.nodeName !== 'IMG' && ! DL ) {
|
|
|
|
return;
|
|
|
|
}
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
|
2014-11-13 01:56:22 +01:00
|
|
|
node = DL || node;
|
2014-08-04 02:52:17 +02:00
|
|
|
|
2014-11-13 01:56:22 +01:00
|
|
|
if ( editor.dom.hasClass( node, align ) ) {
|
|
|
|
replacement = ' alignnone';
|
|
|
|
} else {
|
|
|
|
replacement = ' ' + align;
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
}
|
2014-01-14 06:52:09 +01:00
|
|
|
|
2015-05-25 08:35:28 +02:00
|
|
|
node.className = trim( node.className.replace( / ?align(left|center|right|none)/g, '' ) + replacement );
|
2014-11-13 01:56:22 +01:00
|
|
|
|
|
|
|
editor.nodeChanged();
|
|
|
|
event.preventDefault();
|
|
|
|
|
2015-03-11 23:41:26 +01:00
|
|
|
if ( toolbar ) {
|
|
|
|
toolbar.reposition();
|
2014-01-14 06:52:09 +01:00
|
|
|
}
|
2014-12-06 01:33:24 +01:00
|
|
|
|
|
|
|
editor.fire( 'ExecCommand', {
|
|
|
|
command: cmd,
|
|
|
|
ui: event.ui,
|
|
|
|
value: event.value
|
|
|
|
} );
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2014-02-11 00:48:12 +01:00
|
|
|
editor.on( 'keydown', function( event ) {
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
var node, wrap, P, spacer,
|
|
|
|
selection = editor.selection,
|
2014-03-27 19:07:14 +01:00
|
|
|
keyCode = event.keyCode,
|
2014-08-19 21:14:16 +02:00
|
|
|
dom = editor.dom,
|
|
|
|
VK = tinymce.util.VK;
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
|
2014-08-19 21:14:16 +02:00
|
|
|
if ( keyCode === VK.ENTER ) {
|
2020-01-29 01:45:18 +01:00
|
|
|
// When pressing Enter inside a caption move the caret to a new parapraph under it.
|
2014-02-11 00:48:12 +01:00
|
|
|
node = selection.getNode();
|
|
|
|
wrap = dom.getParent( node, 'div.mceTemp' );
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
|
|
|
|
if ( wrap ) {
|
2014-02-11 00:48:12 +01:00
|
|
|
dom.events.cancel( event ); // Doesn't cancel all :(
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
|
|
|
|
// Remove any extra dt and dd cleated on pressing Enter...
|
|
|
|
tinymce.each( dom.select( 'dt, dd', wrap ), function( element ) {
|
|
|
|
if ( dom.isEmpty( element ) ) {
|
|
|
|
dom.remove( element );
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2014-02-11 00:48:12 +01:00
|
|
|
spacer = tinymce.Env.ie && tinymce.Env.ie < 11 ? '' : '<br data-mce-bogus="1" />';
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
P = dom.create( 'p', null, spacer );
|
2014-02-11 00:48:12 +01:00
|
|
|
|
|
|
|
if ( node.nodeName === 'DD' ) {
|
|
|
|
dom.insertAfter( P, wrap );
|
|
|
|
} else {
|
|
|
|
wrap.parentNode.insertBefore( P, wrap );
|
|
|
|
}
|
|
|
|
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
editor.nodeChanged();
|
2014-02-11 00:48:12 +01:00
|
|
|
selection.setCursorLocation( P, 0 );
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
}
|
2014-08-19 21:14:16 +02:00
|
|
|
} else if ( keyCode === VK.DELETE || keyCode === VK.BACKSPACE ) {
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
node = selection.getNode();
|
|
|
|
|
|
|
|
if ( node.nodeName === 'DIV' && dom.hasClass( node, 'mceTemp' ) ) {
|
|
|
|
wrap = node;
|
|
|
|
} else if ( node.nodeName === 'IMG' || node.nodeName === 'DT' || node.nodeName === 'A' ) {
|
|
|
|
wrap = dom.getParent( node, 'div.mceTemp' );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( wrap ) {
|
2014-02-11 00:48:12 +01:00
|
|
|
dom.events.cancel( event );
|
|
|
|
removeImage( node );
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
return false;
|
|
|
|
}
|
2014-02-11 00:48:12 +01:00
|
|
|
}
|
|
|
|
});
|
2014-01-28 22:17:12 +01:00
|
|
|
|
2020-01-29 01:45:18 +01:00
|
|
|
/*
|
|
|
|
* After undo/redo FF seems to set the image height very slowly when it is set to 'auto' in the CSS.
|
|
|
|
* This causes image.getBoundingClientRect() to return wrong values and the resize handles are shown in wrong places.
|
|
|
|
* Collapse the selection to remove the resize handles.
|
|
|
|
*/
|
2014-08-10 06:22:15 +02:00
|
|
|
if ( tinymce.Env.gecko ) {
|
|
|
|
editor.on( 'undo redo', function() {
|
|
|
|
if ( editor.selection.getNode().nodeName === 'IMG' ) {
|
|
|
|
editor.selection.collapse();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
editor.wpSetImgCaption = function( content ) {
|
|
|
|
return parseShortcode( content );
|
|
|
|
};
|
|
|
|
|
|
|
|
editor.wpGetImgCaption = function( content ) {
|
|
|
|
return getShortcode( content );
|
|
|
|
};
|
|
|
|
|
2016-08-23 06:43:31 +02:00
|
|
|
editor.on( 'beforeGetContent', function( event ) {
|
|
|
|
if ( event.format !== 'raw' ) {
|
2019-01-24 12:11:51 +01:00
|
|
|
editor.$( 'img[id="__wp-temp-img-id"]' ).removeAttr( 'id' );
|
2017-02-24 21:41:43 +01:00
|
|
|
}
|
2016-08-23 06:43:31 +02:00
|
|
|
});
|
|
|
|
|
2014-02-11 00:48:12 +01:00
|
|
|
editor.on( 'BeforeSetContent', function( event ) {
|
2014-05-29 09:51:14 +02:00
|
|
|
if ( event.format !== 'raw' ) {
|
|
|
|
event.content = editor.wpSetImgCaption( event.content );
|
|
|
|
}
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
});
|
|
|
|
|
2014-02-11 00:48:12 +01:00
|
|
|
editor.on( 'PostProcess', function( event ) {
|
|
|
|
if ( event.get ) {
|
|
|
|
event.content = editor.wpGetImgCaption( event.content );
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2015-10-15 17:20:25 +02:00
|
|
|
( function() {
|
|
|
|
var wrap;
|
|
|
|
|
|
|
|
editor.on( 'dragstart', function() {
|
|
|
|
var node = editor.selection.getNode();
|
|
|
|
|
|
|
|
if ( node.nodeName === 'IMG' ) {
|
|
|
|
wrap = editor.dom.getParent( node, '.mceTemp' );
|
2015-10-18 13:05:23 +02:00
|
|
|
|
|
|
|
if ( ! wrap && node.parentNode.nodeName === 'A' && ! hasTextContent( node.parentNode ) ) {
|
|
|
|
wrap = node.parentNode;
|
|
|
|
}
|
2015-10-15 17:20:25 +02:00
|
|
|
}
|
|
|
|
} );
|
|
|
|
|
|
|
|
editor.on( 'drop', function( event ) {
|
2015-10-18 13:05:23 +02:00
|
|
|
var dom = editor.dom,
|
|
|
|
rng = tinymce.dom.RangeUtils.getCaretRangeFromPoint( event.clientX, event.clientY, editor.getDoc() );
|
2015-10-15 17:20:25 +02:00
|
|
|
|
2015-10-18 13:05:23 +02:00
|
|
|
// Don't allow anything to be dropped in a captioned image.
|
2016-03-13 23:55:25 +01:00
|
|
|
if ( rng && dom.getParent( rng.startContainer, '.mceTemp' ) ) {
|
2015-10-18 13:05:23 +02:00
|
|
|
event.preventDefault();
|
|
|
|
} else if ( wrap ) {
|
2015-10-15 17:20:25 +02:00
|
|
|
event.preventDefault();
|
|
|
|
|
2015-10-18 13:05:23 +02:00
|
|
|
editor.undoManager.transact( function() {
|
2016-03-13 23:55:25 +01:00
|
|
|
if ( rng ) {
|
|
|
|
editor.selection.setRng( rng );
|
|
|
|
}
|
|
|
|
|
2015-10-18 13:05:23 +02:00
|
|
|
editor.selection.setNode( wrap );
|
|
|
|
dom.remove( wrap );
|
|
|
|
} );
|
2015-10-15 17:20:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
wrap = null;
|
|
|
|
} );
|
|
|
|
} )();
|
|
|
|
|
2020-01-29 01:45:18 +01:00
|
|
|
// Add to editor.wp.
|
2015-03-11 20:12:28 +01:00
|
|
|
editor.wp = editor.wp || {};
|
|
|
|
editor.wp.isPlaceholder = isPlaceholder;
|
|
|
|
|
|
|
|
// Back-compat.
|
TinyMCE 4.0.12, first run.
- Removes wp-tinymce-schema.js and mark-loaded.js, no longer needed.
- Removes the inlinepopups and most of the wpdialogs plugins; wpdialog.js is moved to wp-includes/js.
- Adds charmap, compat3x, image, link and textcolor plugins, previously contained in /themes/advanced.
- Updates the wordpress, wpeditimage, wpfullscreen, wpgallery and wplink plugins.
- Updates DFW, wp-admin/js/wp-fullscreen.js.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26876
git-svn-id: http://core.svn.wordpress.org/trunk@26759 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-29 00:53:15 +01:00
|
|
|
return {
|
|
|
|
_do_shcode: parseShortcode,
|
|
|
|
_get_shcode: getShortcode
|
|
|
|
};
|
|
|
|
});
|