Image caption fixes from azaozz: captions are properly created in tables and in lists, all tags are properly removed when deleting a caption, the align buttons can be used to align the captions. see #6812
git-svn-id: https://develop.svn.wordpress.org/trunk@8260 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
3373e4334e
commit
7dccf2c37c
@ -53,6 +53,7 @@ switchEditors = {
|
||||
content = content.replace(new RegExp('\\s*<div', 'mg'), '\n<div');
|
||||
content = content.replace(new RegExp('</div>\\s*', 'mg'), '</div>\n');
|
||||
content = content.replace(new RegExp('\\s*\\[wp_caption([^\\[]+)\\[/wp_caption\\]\\s*', 'gi'), '\n\n[wp_caption$1[/wp_caption]\n\n');
|
||||
content = content.replace(new RegExp('wp_caption\\]\\n\\n+\\[wp_caption', 'g'), 'wp_caption]\n\n[wp_caption');
|
||||
|
||||
var blocklist2 = 'blockquote|ul|ol|li|table|thead|tr|th|td|h[1-6]|pre';
|
||||
content = content.replace(new RegExp('\\s*<(('+blocklist2+') ?[^>]*)\\s*>', 'mg'), '\n<$1>');
|
||||
|
@ -134,48 +134,28 @@
|
||||
});
|
||||
|
||||
// Add class "alignleft", "alignright" and "aligncenter" when selecting align for images.
|
||||
ed.onExecCommand.add(function( ed, cmd ) {
|
||||
var n, bl, dom = ed.dom;
|
||||
ed.addCommand('JustifyLeft', function() {
|
||||
var n = ed.selection.getNode();
|
||||
|
||||
if ( 'JustifyCenter' == cmd ) {
|
||||
tinymce.each(dom.select('img'), function(n) {
|
||||
var v = n.className;
|
||||
|
||||
if (v.indexOf('aligncenter') == -1) {
|
||||
dom.getParent(n, function(P) {
|
||||
if (P && P.style && P.style.textAlign == 'center')
|
||||
dom.setStyle(P, 'textAlign', '');
|
||||
});
|
||||
}
|
||||
if ( n.nodeName != 'IMG' )
|
||||
ed.editorCommands.mceJustify('JustifyLeft', 'left');
|
||||
else ed.plugins.wordpress.do_align(n, 'alignleft');
|
||||
});
|
||||
|
||||
ed.execCommand('mceRepaint');
|
||||
}
|
||||
ed.addCommand('JustifyRight', function() {
|
||||
var n = ed.selection.getNode();
|
||||
|
||||
if ( n.nodeName != 'IMG' )
|
||||
ed.editorCommands.mceJustify('JustifyRight', 'right');
|
||||
else ed.plugins.wordpress.do_align(n, 'alignright');
|
||||
});
|
||||
|
||||
ed.onBeforeExecCommand.add(function( ed, cmd ) {
|
||||
var n, dir, xdir, bl, dom = ed.dom;
|
||||
ed.addCommand('JustifyCenter', function() {
|
||||
var n = ed.selection.getNode(), P = ed.dom.getParent(n, 'p'), DL = ed.dom.getParent(n, 'dl');
|
||||
|
||||
if ( ( cmd.indexOf('Justify') != -1 ) && ( n = ed.selection.getNode() ) ) {
|
||||
if ( 'JustifyFull' == cmd || n.nodeName !== 'IMG' ) return;
|
||||
dir = cmd.substring(7).toLowerCase();
|
||||
|
||||
if ( ed.queryCommandState( cmd ) ) {
|
||||
n.className = n.className.replace(/align[^ '"]+\s?/g, '');
|
||||
dom.addClass( n, "alignnone" );
|
||||
} else if ( 'JustifyCenter' == cmd ) {
|
||||
n.className = n.className.replace(/alignleft\s?|alignright\s?|alignnone\s?/g, '');
|
||||
if ( dom.hasClass( n, "aligncenter" ) ) {
|
||||
dom.removeClass( n, "aligncenter" );
|
||||
dom.addClass( n, "alignnone" );
|
||||
} else
|
||||
dom.addClass( n, "aligncenter" );
|
||||
|
||||
} else {
|
||||
n.className = n.className.replace(/align[^ '"]+\s?/g, '');
|
||||
dom.addClass( n, "align"+dir );
|
||||
}
|
||||
}
|
||||
if ( n.nodeName == 'IMG' && ( P || DL ) )
|
||||
ed.plugins.wordpress.do_align(n, 'aligncenter');
|
||||
else ed.editorCommands.mceJustify('JustifyCenter', 'center');
|
||||
});
|
||||
|
||||
// Word count if script is loaded
|
||||
@ -227,6 +207,30 @@
|
||||
},
|
||||
|
||||
// Internal functions
|
||||
do_align : function(n, a) {
|
||||
var P, DL, DIV, cls, c, ed = tinyMCE.activeEditor;
|
||||
|
||||
P = ed.dom.getParent(n, 'p');
|
||||
DL = ed.dom.getParent(n, 'dl');
|
||||
DIV = ed.dom.getParent(n, 'div');
|
||||
|
||||
if ( DL && DIV ) {
|
||||
cls = ed.dom.hasClass(DL, a) ? 'alignnone' : a;
|
||||
DL.className = DL.className.replace(/align[^ '"]+\s?/g, '');
|
||||
ed.dom.addClass(DL, cls);
|
||||
c = (cls == 'aligncenter') ? ed.dom.addClass(DIV, 'mceIEcenter') : ed.dom.removeClass(DIV, 'mceIEcenter');
|
||||
} else if ( P ) {
|
||||
cls = ed.dom.hasClass(n, a) ? 'alignnone' : a;
|
||||
n.className = n.className.replace(/align[^ '"]+\s?/g, '');
|
||||
ed.dom.addClass(n, cls);
|
||||
if ( cls == 'aligncenter' )
|
||||
ed.dom.setStyle(P, 'textAlign', 'center');
|
||||
else if (P.style && P.style.textAlign == 'center')
|
||||
ed.dom.setStyle(P, 'textAlign', '');
|
||||
}
|
||||
|
||||
ed.execCommand('mceRepaint');
|
||||
},
|
||||
|
||||
// Resizes the iframe by a relative height value
|
||||
_resizeIframe : function(ed, tb_id, dy) {
|
||||
|
@ -74,8 +74,8 @@
|
||||
|
||||
_do_shcode : function(co) {
|
||||
return co.replace(/\[wp_caption([^\]]+)\]([\s\S]+?)\[\/wp_caption\][\s\u00a0]*/g, function(a,b,c){
|
||||
var id = b.match(/id=['"]([^'"]+)/), cls = b.match(/align=['"]([^'"]+)/);
|
||||
var w = b.match(/width=['"]([0-9]+)/), cap = b.match(/caption=['"]([^'"]+)/);
|
||||
var id = b.match(/id=['"]([^'"]+)/i), cls = b.match(/align=['"]([^'"]+)/i);
|
||||
var w = b.match(/width=['"]([0-9]+)/), cap = b.match(/caption=['"]([^'"]+)/i);
|
||||
|
||||
id = ( id && id[1] ) ? id[1] : '';
|
||||
cls = ( cls && cls[1] ) ? cls[1] : 'alignnone';
|
||||
@ -91,8 +91,8 @@
|
||||
},
|
||||
|
||||
_get_shcode : function(co) {
|
||||
return co.replace(/<div class="mceTemp[^"]*">\s*<dl([^>]+)>\s*<dt[^>]+>([\s\S]+?)<\/dt>\s*<dd[^>]+>([^<]+)<\/dd>\s*<\/dl>\s*<\/div>\s*/g, function(a,b,c,cap){
|
||||
var id = b.match(/id=['"]([^'"]+)/), cls = b.match(/class=['"]([^'"]+)/);
|
||||
return co.replace(/<div class="mceTemp[^"]*">\s*<dl([^>]+)>\s*<dt[^>]+>([\s\S]+?)<\/dt>\s*<dd[^>]+>([^<]+)<\/dd>\s*<\/dl>\s*<\/div>\s*/gi, function(a,b,c,cap){
|
||||
var id = b.match(/id=['"]([^'"]+)/i), cls = b.match(/class=['"]([^'"]+)/i);
|
||||
var w = c.match(/width=['"]([0-9]+)/);
|
||||
|
||||
id = ( id && id[1] ) ? id[1] : '';
|
||||
@ -100,26 +100,12 @@
|
||||
w = ( w && w[1] ) ? w[1] : '';
|
||||
|
||||
if ( ! w || ! cap ) return c;
|
||||
cls = cls ? cls.match(/align[^ '"]+/) : '';
|
||||
cls = cls.match(/align[^ '"]+/) || 'alignnone';
|
||||
|
||||
return '[wp_caption id="'+id+'" align="'+cls+'" width="'+w+'" caption="'+cap+'"]'+c+'[/wp_caption]';
|
||||
});
|
||||
},
|
||||
|
||||
_fixCenter : function(c) {
|
||||
var ed = tinyMCE.activeEditor;
|
||||
|
||||
tinymce.each(ed.dom.select('img', c), function(n) {
|
||||
if ( ed.dom.hasClass(n, 'aligncenter') ) {
|
||||
var P = ed.dom.getParent(n, 'p');
|
||||
if ( tinymce.isIE )
|
||||
ed.dom.addClass(P, 'mce_iecenter');
|
||||
if ( P.style && P.style.textAlign == 'center' )
|
||||
ed.dom.setStyle(P, 'textAlign', '');
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
showButtons : function(n) {
|
||||
var t = this, ed = tinyMCE.activeEditor, p1, p2, vp, DOM = tinymce.DOM, X, Y;
|
||||
|
||||
@ -172,7 +158,7 @@
|
||||
ed.windowManager.bookmark = ed.selection.getBookmark('simple');
|
||||
ed.execCommand("WP_EditImage");
|
||||
this.parentNode.style.display = 'none';
|
||||
}
|
||||
};
|
||||
|
||||
var wp_delimgbtn = DOM.add('wp_editbtns', 'img', {
|
||||
src : t.url+'/img/delete.png',
|
||||
@ -196,7 +182,7 @@
|
||||
ed.execCommand('mceRepaint');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
getInfo : function() {
|
||||
|
@ -260,11 +260,11 @@ var wpImage = {
|
||||
if ( DL = dom.getParent(el, 'dl') ) {
|
||||
var dlc = ed.dom.getAttrib(DL, 'class');
|
||||
dlc = dlc.match(/align[^ "']+/i);
|
||||
if ( ! dom.hasClass(el, dlc) )
|
||||
if ( dlc && ! dom.hasClass(el, dlc) )
|
||||
c += ' '+dlc;
|
||||
|
||||
tinymce.each(DL.childNodes, function(e) {
|
||||
if ( e.nodeName == 'DD' ) {
|
||||
if ( e.nodeName == 'DD' && dom.hasClass(e, 'wp_caption_dd') ) {
|
||||
caption = e.innerHTML;
|
||||
return;
|
||||
}
|
||||
@ -377,16 +377,10 @@ var wpImage = {
|
||||
'class' : img_class
|
||||
});
|
||||
|
||||
if ( ! f.link_href.value ) {
|
||||
if ( A ) {
|
||||
b = ed.selection.getBookmark();
|
||||
ed.dom.remove(A, 1);
|
||||
ed.selection.moveToBookmark(b);
|
||||
}
|
||||
} else {
|
||||
if ( f.link_href.value ) {
|
||||
// Create new anchor elements
|
||||
if ( A == null ) {
|
||||
if ( ! f.link_href.value.match(/https?:\/\//) )
|
||||
if ( ! f.link_href.value.match(/https?:\/\//i) )
|
||||
f.link_href.value = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.link_href.value);
|
||||
|
||||
if ( tinymce.isWebKit && ed.dom.hasClass(el, 'aligncenter') ) {
|
||||
@ -438,11 +432,19 @@ var wpImage = {
|
||||
ed.dom.setHTML(DD, f.img_alt.value);
|
||||
|
||||
} else {
|
||||
var lnk = '', pa;
|
||||
if ( (id = f.img_classes.value.match( /wp-image-([0-9]{1,6})/ )) && id[1] )
|
||||
cap_id = 'attachment_'+id[1];
|
||||
|
||||
if ( f.link_href.value ) html = ed.dom.getOuterHTML(ed.dom.getParent(el, 'a'));
|
||||
else html = ed.dom.getOuterHTML(el);
|
||||
if ( f.link_href.value && (lnk = ed.dom.getParent(el, 'a')) ) {
|
||||
if ( lnk.childNodes.length == 1 )
|
||||
html = ed.dom.getOuterHTML(lnk);
|
||||
else {
|
||||
html = ed.dom.getOuterHTML(lnk);
|
||||
html = html.match(/<a[^>]+>/i);
|
||||
html = html+ed.dom.getOuterHTML(el)+'</a>';
|
||||
}
|
||||
} else html = ed.dom.getOuterHTML(el);
|
||||
|
||||
html = '<dl id="'+cap_id+'" class="wp_caption '+t.align+'" style="width: '+cap_width+
|
||||
'px"><dt class="wp_caption_dt">'+html+'</dt><dd class="wp_caption_dd">'+f.img_alt.value+'</dd></dl>';
|
||||
@ -451,17 +453,23 @@ var wpImage = {
|
||||
|
||||
if ( P ) {
|
||||
P.parentNode.insertBefore(cap, P);
|
||||
if ( P.childNodes.length == 1 )
|
||||
ed.dom.remove(P);
|
||||
else if ( lnk && lnk.childNodes.length == 1 )
|
||||
ed.dom.remove(lnk);
|
||||
else ed.dom.remove(el);
|
||||
} else if ( pa = ed.dom.getParent(el, 'TD,TH,LI') ) {
|
||||
pa.appendChild(cap);
|
||||
if ( lnk && lnk.childNodes.length == 1 )
|
||||
ed.dom.remove(lnk);
|
||||
else ed.dom.remove(el);
|
||||
}
|
||||
}
|
||||
|
||||
tinyMCEPopup.execCommand("mceEndUndoLevel");
|
||||
ed.execCommand('mceRepaint');
|
||||
tinyMCEPopup.close();
|
||||
return;
|
||||
} else {
|
||||
if ( DL && DIV ) {
|
||||
if ( f.link_href.value ) html = ed.dom.getOuterHTML(ed.dom.getParent(el, 'a'));
|
||||
var aa;
|
||||
if ( f.link_href.value && (aa = ed.dom.getParent(el, 'a')) ) html = ed.dom.getOuterHTML(aa);
|
||||
else html = ed.dom.getOuterHTML(el);
|
||||
|
||||
P = ed.dom.create('p', {}, html);
|
||||
@ -478,6 +486,12 @@ var wpImage = {
|
||||
ed.dom.setStyle(P, 'textAlign', '');
|
||||
}
|
||||
|
||||
if ( ! f.link_href.value && A ) {
|
||||
b = ed.selection.getBookmark();
|
||||
ed.dom.remove(A, 1);
|
||||
ed.selection.moveToBookmark(b);
|
||||
}
|
||||
|
||||
tinyMCEPopup.execCommand("mceEndUndoLevel");
|
||||
ed.execCommand('mceRepaint');
|
||||
tinyMCEPopup.close();
|
||||
|
@ -222,7 +222,7 @@ if ( $compress && isset($_SERVER['HTTP_ACCEPT_ENCODING']) ) {
|
||||
// Setup cache info
|
||||
if ( $disk_cache ) {
|
||||
|
||||
$cacheKey = apply_filters('tiny_mce_version', '20080703');
|
||||
$cacheKey = apply_filters('tiny_mce_version', '20080706');
|
||||
|
||||
foreach ( $initArray as $v )
|
||||
$cacheKey .= $v;
|
||||
|
@ -34,10 +34,10 @@ function wp_default_scripts( &$scripts ) {
|
||||
$visual_editor = apply_filters('visual_editor', array('tiny_mce'));
|
||||
$scripts->add( 'editor', false, $visual_editor, '20080321' );
|
||||
|
||||
$scripts->add( 'editor_functions', '/wp-admin/js/editor.js', false, '20080702' );
|
||||
$scripts->add( 'editor_functions', '/wp-admin/js/editor.js', false, '20080706' );
|
||||
|
||||
// Modify this version when tinyMCE plugins are changed.
|
||||
$mce_version = apply_filters('tiny_mce_version', '20080703');
|
||||
$mce_version = apply_filters('tiny_mce_version', '20080706');
|
||||
$scripts->add( 'tiny_mce', '/wp-includes/js/tinymce/tiny_mce_config.php', array('editor_functions'), $mce_version );
|
||||
|
||||
$scripts->add( 'prototype', '/wp-includes/js/prototype.js', false, '1.6');
|
||||
|
Loading…
Reference in New Issue
Block a user