From 6efcb2913a9ea473bb61fea12609a66690004eb3 Mon Sep 17 00:00:00 2001 From: azaozz Date: Wed, 25 Nov 2009 09:50:20 +0000 Subject: [PATCH] Autop: add fieldset to blocks, remove support for empty

for now, fix block in block problems when switching the editor from visual to html and back, fixes #8644 git-svn-id: http://svn.automattic.com/wordpress/trunk@12275 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/js/editor.dev.js | 20 ++++++++++++-------- wp-admin/js/editor.js | 2 +- wp-includes/formatting.php | 2 +- wp-includes/script-loader.php | 2 +- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/wp-admin/js/editor.dev.js b/wp-admin/js/editor.dev.js index 3e8620d47d..ce6f835da8 100644 --- a/wp-admin/js/editor.dev.js +++ b/wp-admin/js/editor.dev.js @@ -31,10 +31,8 @@ var switchEditors = { return a.replace(/<\/?p( [^>]*)?>[\r\n]*/g, ''); }); - content = content.replace(/

[\s\u00a0]*<\/p>/g, ''); - // Pretty it up for the source editor - blocklist1 = 'blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|div|h[1-6]|p'; + blocklist1 = 'blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|div|h[1-6]|p|fieldset'; content = content.replace(new RegExp('\\s*\\s*', 'g'), '\n'); content = content.replace(new RegExp('\\s*<(('+blocklist1+')[^>]*)>', 'g'), '\n<$1>'); @@ -56,7 +54,7 @@ var switchEditors = { content = content.replace(/\s*\[caption([^\[]+)\[\/caption\]\s*/gi, '\n\n[caption$1[/caption]\n\n'); content = content.replace(/caption\]\n\n+\[caption/g, 'caption]\n\n[caption'); - blocklist2 = 'blockquote|ul|ol|li|table|thead|tfoot|tr|th|td|h[1-6]|pre'; + blocklist2 = 'blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|h[1-6]|pre|fieldset'; content = content.replace(new RegExp('\\s*<(('+blocklist2+') ?[^>]*)\\s*>', 'g'), '\n<$1>'); content = content.replace(new RegExp('\\s*\\s*', 'g'), '\n'); content = content.replace(/]*)>/g, '\t'); @@ -77,7 +75,6 @@ var switchEditors = { // put back the line breaks in pre|script content = content.replace(//g, '\n'); - content = content.replace(/\s*/g, '

 

\n\n'); return content; }, @@ -132,7 +129,7 @@ var switchEditors = { }, _wp_Autop : function(pee) { - var blocklist = 'table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6]'; + var blocklist = 'table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6]|fieldset|legend'; if ( pee.indexOf('/g, function(a){ @@ -163,6 +160,13 @@ var switchEditors = { pee = pee.replace(/
(\s*<\/?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)/gi, '$1'); pee = pee.replace(/(?:

|
)*\s*\[caption([^\[]+)\[\/caption\]\s*(?:<\/p>|
)*/gi, '[caption$1[/caption]'); + pee = pee.replace(/(<(?:div|th|td|form|fieldset|dd)[^>]*>)(.*?)<\/p>/g, function(a, b, c) { + if ( c.match(/]+)?>/) ) + return a; + + return b + '

' + c + '

'; + }); + // Fix the pre|script tags pee = pee.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g, function(a) { a = a.replace(/
[\r\n]*/g, '\n'); @@ -171,7 +175,7 @@ var switchEditors = { return pee; }, - + pre_wpautop : function(content) { var t = this, o = { o: t, data: content, unfiltered: content }; @@ -180,7 +184,7 @@ var switchEditors = { jQuery('body').trigger('afterPreWpautop', [o]); return o.data; }, - + wpautop : function(pee) { var t = this, o = { o: t, data: pee, unfiltered: pee }; diff --git a/wp-admin/js/editor.js b/wp-admin/js/editor.js index 48f8a71a8e..6372b6603e 100644 --- a/wp-admin/js/editor.js +++ b/wp-admin/js/editor.js @@ -1 +1 @@ -jQuery(document).ready(function(b){var a=wpCookies.getHash("TinyMCE_content_size");if(getUserSetting("editor")=="html"){if(a){b("#content").css("height",a.ch-15+"px")}}else{if(typeof tinyMCE!="object"){b("#content").css("color","#000")}else{b("#quicktags").hide()}}});var switchEditors={mode:"",I:function(a){return document.getElementById(a)},_wp_Nop:function(b){var c,a;b=b.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g,function(d){d=d.replace(/
[\r\n]*/g,"");return d.replace(/<\/?p( [^>]*)?>[\r\n]*/g,"")});b=b.replace(/

[\s\u00a0]*<\/p>/g,"");c="blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|div|h[1-6]|p";b=b.replace(new RegExp("\\s*\\s*","g"),"\n");b=b.replace(new RegExp("\\s*<(("+c+")[^>]*)>","g"),"\n<$1>");b=b.replace(/(

]+>.*?)<\/p>/g,"$1");b=b.replace(/]*)>\s*

/gi,"\n\n");b=b.replace(/\s*

/gi,"");b=b.replace(/\s*<\/p>\s*/gi,"\n\n");b=b.replace(/\n[\s\u00a0]+\n/g,"\n\n");b=b.replace(/\s*
\s*/gi,"\n");b=b.replace(/\s*

\s*/g,"
\n");b=b.replace(/\s*\[caption([^\[]+)\[\/caption\]\s*/gi,"\n\n[caption$1[/caption]\n\n");b=b.replace(/caption\]\n\n+\[caption/g,"caption]\n\n[caption");a="blockquote|ul|ol|li|table|thead|tfoot|tr|th|td|h[1-6]|pre";b=b.replace(new RegExp("\\s*<(("+a+") ?[^>]*)\\s*>","g"),"\n<$1>");b=b.replace(new RegExp("\\s*\\s*","g"),"\n");b=b.replace(/]*)>/g,"\t");if(b.indexOf("/g,function(d){return d.replace(/[\r\n]+/g,"")})}b=b.replace(/<\/p#>/g,"

\n");b=b.replace(/\s*(

]+>[\s\S]*?<\/p>)/g,"\n$1");b=b.replace(/^\s+/,"");b=b.replace(/[\s\u00a0]+$/,"");b=b.replace(//g,"\n");b=b.replace(/\s*/g,"

 

\n\n");return b},go:function(i,g){i=i||"content";g=g||this.mode||"";var b,h=this.I("quicktags"),c=this.I("edButtonHTML"),d=this.I("edButtonPreview"),a=this.I(i);try{b=tinyMCE.get(i)}catch(f){b=false}if("tinymce"==g){if(b&&!b.isHidden()){return false}setUserSetting("editor","tinymce");this.mode="html";d.className="active";c.className="";edCloseAllTags();h.style.display="none";a.style.color="#FFF";a.value=this.wpautop(a.value);try{if(b){b.show()}else{tinyMCE.execCommand("mceAddControl",false,i)}}catch(f){}a.style.color="#000"}else{setUserSetting("editor","html");a.style.color="#000";this.mode="tinymce";c.className="active";d.className="";if(b&&!b.isHidden()){a.style.height=b.getContentAreaContainer().offsetHeight+24+"px";b.hide()}h.style.display="block"}return false},_wp_Autop:function(a){var b="table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6]";if(a.indexOf("/g,function(c){return c.replace(/[\r\n]+/g,"")})}a=a.replace(/<[^<>]+>/g,function(c){return c.replace(/[\r\n]+/g," ")});a=a+"\n\n";a=a.replace(/
\s*
/gi,"\n\n");a=a.replace(new RegExp("(<(?:"+b+")[^>]*>)","gi"),"\n$1");a=a.replace(new RegExp("()","gi"),"$1\n\n");a=a.replace(/\r\n|\r/g,"\n");a=a.replace(/\n\s*\n+/g,"\n\n");a=a.replace(/([\s\S]+?)\n\n/g,"

$1

\n");a=a.replace(/

\s*?<\/p>/gi,"");a=a.replace(new RegExp("

\\s*(]*>)\\s*

","gi"),"$1");a=a.replace(/

(/gi,"$1");a=a.replace(/

\s*]*)>/gi,"

");a=a.replace(/<\/blockquote>\s*<\/p>/gi,"

");a=a.replace(new RegExp("

\\s*(]*>)","gi"),"$1");a=a.replace(new RegExp("(]*>)\\s*

","gi"),"$1");a=a.replace(/\s*\n/gi,"
\n");a=a.replace(new RegExp("(]*>)\\s*
","gi"),"$1");a=a.replace(/
(\s*<\/?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)/gi,"$1");a=a.replace(/(?:

|
)*\s*\[caption([^\[]+)\[\/caption\]\s*(?:<\/p>|
)*/gi,"[caption$1[/caption]");a=a.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g,function(c){c=c.replace(/
[\r\n]*/g,"\n");return c.replace(/<\/?p( [^>]*)?>[\r\n]*/g,"\n")});return a},pre_wpautop:function(b){var a=this,c={o:a,data:b,unfiltered:b};jQuery("body").trigger("beforePreWpautop",[c]);c.data=a._wp_Nop(c.data);jQuery("body").trigger("afterPreWpautop",[c]);return c.data},wpautop:function(b){var a=this,c={o:a,data:b,unfiltered:b};jQuery("body").trigger("beforeWpautop",[c]);c.data=a._wp_Autop(c.data);jQuery("body").trigger("afterWpautop",[c]);return c.data}}; \ No newline at end of file +jQuery(document).ready(function(b){var a=wpCookies.getHash("TinyMCE_content_size");if(getUserSetting("editor")=="html"){if(a){b("#content").css("height",a.ch-15+"px")}}else{if(typeof tinyMCE!="object"){b("#content").css("color","#000")}else{b("#quicktags").hide()}}});var switchEditors={mode:"",I:function(a){return document.getElementById(a)},_wp_Nop:function(b){var c,a;b=b.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g,function(d){d=d.replace(/
[\r\n]*/g,"");return d.replace(/<\/?p( [^>]*)?>[\r\n]*/g,"")});c="blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|div|h[1-6]|p|fieldset";b=b.replace(new RegExp("\\s*\\s*","g"),"\n");b=b.replace(new RegExp("\\s*<(("+c+")[^>]*)>","g"),"\n<$1>");b=b.replace(/(

]+>.*?)<\/p>/g,"$1");b=b.replace(/]*)>\s*

/gi,"\n\n");b=b.replace(/\s*

/gi,"");b=b.replace(/\s*<\/p>\s*/gi,"\n\n");b=b.replace(/\n[\s\u00a0]+\n/g,"\n\n");b=b.replace(/\s*
\s*/gi,"\n");b=b.replace(/\s*

\s*/g,"
\n");b=b.replace(/\s*\[caption([^\[]+)\[\/caption\]\s*/gi,"\n\n[caption$1[/caption]\n\n");b=b.replace(/caption\]\n\n+\[caption/g,"caption]\n\n[caption");a="blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|h[1-6]|pre|fieldset";b=b.replace(new RegExp("\\s*<(("+a+") ?[^>]*)\\s*>","g"),"\n<$1>");b=b.replace(new RegExp("\\s*\\s*","g"),"\n");b=b.replace(/]*)>/g,"\t");if(b.indexOf("/g,function(d){return d.replace(/[\r\n]+/g,"")})}b=b.replace(/<\/p#>/g,"

\n");b=b.replace(/\s*(

]+>[\s\S]*?<\/p>)/g,"\n$1");b=b.replace(/^\s+/,"");b=b.replace(/[\s\u00a0]+$/,"");b=b.replace(//g,"\n");return b},go:function(i,g){i=i||"content";g=g||this.mode||"";var b,h=this.I("quicktags"),c=this.I("edButtonHTML"),d=this.I("edButtonPreview"),a=this.I(i);try{b=tinyMCE.get(i)}catch(f){b=false}if("tinymce"==g){if(b&&!b.isHidden()){return false}setUserSetting("editor","tinymce");this.mode="html";d.className="active";c.className="";edCloseAllTags();h.style.display="none";a.style.color="#FFF";a.value=this.wpautop(a.value);try{if(b){b.show()}else{tinyMCE.execCommand("mceAddControl",false,i)}}catch(f){}a.style.color="#000"}else{setUserSetting("editor","html");a.style.color="#000";this.mode="tinymce";c.className="active";d.className="";if(b&&!b.isHidden()){a.style.height=b.getContentAreaContainer().offsetHeight+24+"px";b.hide()}h.style.display="block"}return false},_wp_Autop:function(a){var b="table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6]|fieldset|legend";if(a.indexOf("/g,function(c){return c.replace(/[\r\n]+/g,"")})}a=a.replace(/<[^<>]+>/g,function(c){return c.replace(/[\r\n]+/g," ")});a=a+"\n\n";a=a.replace(/
\s*
/gi,"\n\n");a=a.replace(new RegExp("(<(?:"+b+")[^>]*>)","gi"),"\n$1");a=a.replace(new RegExp("()","gi"),"$1\n\n");a=a.replace(/\r\n|\r/g,"\n");a=a.replace(/\n\s*\n+/g,"\n\n");a=a.replace(/([\s\S]+?)\n\n/g,"

$1

\n");a=a.replace(/

\s*?<\/p>/gi,"");a=a.replace(new RegExp("

\\s*(]*>)\\s*

","gi"),"$1");a=a.replace(/

(/gi,"$1");a=a.replace(/

\s*]*)>/gi,"

");a=a.replace(/<\/blockquote>\s*<\/p>/gi,"

");a=a.replace(new RegExp("

\\s*(]*>)","gi"),"$1");a=a.replace(new RegExp("(]*>)\\s*

","gi"),"$1");a=a.replace(/\s*\n/gi,"
\n");a=a.replace(new RegExp("(]*>)\\s*
","gi"),"$1");a=a.replace(/
(\s*<\/?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)/gi,"$1");a=a.replace(/(?:

|
)*\s*\[caption([^\[]+)\[\/caption\]\s*(?:<\/p>|
)*/gi,"[caption$1[/caption]");a=a.replace(/(<(?:div|th|td|form|fieldset|dd)[^>]*>)(.*?)<\/p>/g,function(e,d,f){if(f.match(/]+)?>/)){return e}return d+"

"+f+"

"});a=a.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g,function(c){c=c.replace(/
[\r\n]*/g,"\n");return c.replace(/<\/?p( [^>]*)?>[\r\n]*/g,"\n")});return a},pre_wpautop:function(b){var a=this,c={o:a,data:b,unfiltered:b};jQuery("body").trigger("beforePreWpautop",[c]);c.data=a._wp_Nop(c.data);jQuery("body").trigger("afterPreWpautop",[c]);return c.data},wpautop:function(b){var a=this,c={o:a,data:b,unfiltered:b};jQuery("body").trigger("beforeWpautop",[c]);c.data=a._wp_Autop(c.data);jQuery("body").trigger("afterWpautop",[c]);return c.data}}; \ No newline at end of file diff --git a/wp-includes/formatting.php b/wp-includes/formatting.php index 0c94c13dc3..afcc6d7734 100644 --- a/wp-includes/formatting.php +++ b/wp-includes/formatting.php @@ -184,7 +184,7 @@ function wpautop($pee, $br = 1) { $pee = $pee . "\n"; // just to make things a little easier, pad the end $pee = preg_replace('|
\s*
|', "\n\n", $pee); // Space things out a little - $allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)'; + $allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr|fieldset|legend)'; $pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee); $pee = preg_replace('!()!', "$1\n\n", $pee); $pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines diff --git a/wp-includes/script-loader.php b/wp-includes/script-loader.php index 8e18feea50..c6eee26856 100644 --- a/wp-includes/script-loader.php +++ b/wp-includes/script-loader.php @@ -87,7 +87,7 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'colorpicker', "/wp-includes/js/colorpicker$suffix.js", array('prototype'), '3517m' ); - $scripts->add( 'editor', "/wp-admin/js/editor$suffix.js", false, '20091023' ); + $scripts->add( 'editor', "/wp-admin/js/editor$suffix.js", false, '20091124' ); $scripts->add( 'prototype', '/wp-includes/js/prototype.js', false, '1.6');