- Fix removing leftovers from broken captions.
- Better filter for line breaks and <br> tags when editing captions.
See #24067.
Built from https://develop.svn.wordpress.org/trunk@26882


git-svn-id: http://core.svn.wordpress.org/trunk@26765 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Andrew Ozz 2013-12-31 03:10:11 +00:00
parent 0226a93d0a
commit cf5aa6d6da
3 changed files with 30 additions and 7 deletions

View File

@ -49,12 +49,21 @@ tinymce.PluginManager.add( 'wpeditimage', function( editor ) {
function getShortcode( content ) {
return content.replace( /<div (?:id="attachment_|class="mceTemp)[^>]*>([\s\S]+?)<\/div>/g, function( a, b ) {
var out = '';
if ( b.indexOf('<img ') === -1 ) {
// Broken caption. The user dragged the image out?
// Broken caption. The user managed to drag the image out?
// Try to return the caption text as a paragraph.
out = b.match( /<dd [^>]+>([\s\S]+?)<\/dd>/i );
if ( out && out[1] ) {
return '<p>' + out[1] + '</p>'
}
return '';
}
var ret = b.replace( /<dl ([^>]+)>\s*<dt [^>]+>([\s\S]+?)<\/dt>\s*<dd [^>]+>([\s\S]*?)<\/dd>\s*<\/dl>/gi, function( a, b, c, cap ) {
out = b.replace( /<dl ([^>]+)>\s*<dt [^>]+>([\s\S]+?)<\/dt>\s*<dd [^>]+>([\s\S]*?)<\/dd>\s*<\/dl>/gi, function( a, b, c, cap ) {
var id, cls, w;
w = c.match( /width="([0-9]*)"/ );
@ -82,13 +91,13 @@ tinymce.PluginManager.add( 'wpeditimage', function( editor ) {
return '[caption id="'+ id +'" align="'+ cls +'" width="'+ w +'"]'+ c +' '+ cap +'[/caption]';
});
if ( ret.indexOf('[caption') !== 0 ) {
if ( out.indexOf('[caption') !== 0 ) {
// the caption html seems brocken, try to find the image that may be wrapped in a link
// and may be followed by <p> with the caption text.
ret = b.replace( /[\s\S]*?((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)(<p>[\s\S]*<\/p>)?[\s\S]*/gi, '<p>$1</p>$2' );
out = b.replace( /[\s\S]*?((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)(<p>[\s\S]*<\/p>)?[\s\S]*/gi, '<p>$1</p>$2' );
}
return ret;
return out;
});
}
@ -161,6 +170,16 @@ tinymce.PluginManager.add( 'wpeditimage', function( editor ) {
return;
}
if ( caption ) {
caption = caption.replace( /\r\n|\r/g, '\n' ).replace( /<\/?[a-zA-Z0-9]+( [^<>]+)?>/g, function( a ) {
// No line breaks inside HTML tags
return a.replace( /[\r\n\t]+/, ' ' );
});
// Convert remaining line breaks to <br>
caption = caption.replace( /(<br[^>]*>)\s*\n\s*/g, '$1' ).replace( /\s*\n\s*/g, '<br />' );
}
if ( ! imgNode ) {
// New image inserted
html = dom.createHTML( 'img', data );
@ -294,7 +313,11 @@ tinymce.PluginManager.add( 'wpeditimage', function( editor ) {
if ( parent = dom.getParent( imgNode, 'dl.wp-caption' ) ) {
parent = dom.select( 'dd.wp-caption-dd', parent )[0];
data.caption = parent ? parent.innerHTML : '';
if ( parent ) {
data.caption = editor.serializer.serialize( parent )
.replace( /<br[^>]*>/g, '$&\n' ).replace( /^<p>/, '' ).replace( /<\/p>$/, '' );
}
}
});

File diff suppressed because one or more lines are too long