}\r
}\r
\r
- function blockNeedsExtension( block )\r
+ function blockNeedsExtension( block, fromSource )\r
{\r
+ // 1. For IE version >=8, empty blocks are displayed correctly themself in wysiwiyg;\r
+ // 2. For the rest, at least table cell and list item need no filler space.\r
+ // (#6248)\r
+ if ( fromSource && CKEDITOR.env.ie &&\r
+ ( document.documentMode > 7\r
+ || block.name in CKEDITOR.dtd.tr\r
+ || block.name in CKEDITOR.dtd.$listItem ) )\r
+ return false;\r
+\r
var lastChild = lastNoneSpaceChild( block );\r
\r
return !lastChild\r
{\r
trimFillers( block, true );\r
\r
- if ( blockNeedsExtension( block ) )\r
+ if ( blockNeedsExtension( block, true ) )\r
{\r
if ( CKEDITOR.env.ie )\r
block.add( new CKEDITOR.htmlParser.text( '\xa0' ) );\r
delete blockLikeTags.pre;\r
var defaultDataFilterRules =\r
{\r
+ elements : {},\r
attributeNames :\r
[\r
// Event attributes (onXYZ) must not be directly set. They can become\r
}\r
},\r
\r
+ html : function( element )\r
+ {\r
+ delete element.attributes.contenteditable;\r
+ delete element.attributes[ 'class' ];\r
+ },\r
+\r
body : function( element )\r
{\r
delete element.attributes.spellcheck;\r
\r
title : function( element )\r
{\r
- element.children[ 0 ].value = element.attributes[ '_cke_title' ];\r
+ var titleText = element.children[ 0 ];\r
+ titleText && ( titleText.value = element.attributes[ '_cke_title' ] || '' );\r
}\r
},\r
\r
};\r
}\r
\r
- var protectAttributeRegex = /<(?:a|area|img|input)[\s\S]*?\s((?:href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+)))/gi;\r
+ function protectReadOnly( element )\r
+ {\r
+ element.attributes.contenteditable = "false";\r
+ }\r
+ function unprotectReadyOnly( element )\r
+ {\r
+ delete element.attributes.contenteditable;\r
+ }\r
+ // Disable form elements editing mode provided by some browers. (#5746)\r
+ for ( i in { input : 1, textarea : 1 } )\r
+ {\r
+ defaultDataFilterRules.elements[ i ] = protectReadOnly;\r
+ defaultHtmlFilterRules.elements[ i ] = unprotectReadyOnly;\r
+ }\r
+\r
+ var protectAttributeRegex = /<((?:a|area|img|input)\b[\s\S]*?\s)((href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+)))([^>]*)>/gi,\r
+ findSavedSrcRegex = /\s_cke_saved_src\s*=/;\r
\r
var protectElementsRegex = /(?:<style(?=[ >])[^>]*>[\s\S]*<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,\r
encodedElementsRegex = /<cke:encoded>([^<]*)<\/cke:encoded>/gi;\r
\r
function protectAttributes( html )\r
{\r
- return html.replace( protectAttributeRegex, '$& _cke_saved_$1' );\r
+ return html.replace( protectAttributeRegex, function( tag, beginning, fullAttr, attrName, end )\r
+ {\r
+ // We should not rewrite the _cke_saved_src attribute (#5218)\r
+ if ( attrName == 'src' && findSavedSrcRegex.test( tag ) )\r
+ return tag;\r
+ else\r
+ return '<' + beginning + fullAttr + ' _cke_saved_' + fullAttr + end + '>';\r
+ });\r
}\r
\r
function protectElements( html )\r
return html.replace( protectSelfClosingRegex, '<cke:$1$2></cke:$1>' );\r
}\r
\r
+ function protectPreFormatted( html )\r
+ {\r
+ return html.replace( /(<pre\b[^>]*>)(\r\n|\n)/g, '$1$2$2' );\r
+ }\r
+\r
function protectRealComments( html )\r
{\r
return html.replace( /<!--(?!{cke_protected})[\s\S]+?-->/g, function( match )\r
// protecting them into open-close. (#3591)\r
data = protectSelfClosingElements( data );\r
\r
+ // Compensate one leading line break after <pre> open as browsers\r
+ // eat it up. (#5789)\r
+ data = protectPreFormatted( data );\r
+\r
// Call the browser to help us fixing a possibly invalid HTML\r
// structure.\r
var div = new CKEDITOR.dom.element( 'div' );\r
\r
/**\r
* Whether to force using "&" instead of "&amp;" in elements attributes\r
- * values. It's not recommended to change this setting for compliance with the\r
- * W3C XHTML 1.0 standards\r
- * (<a href="http://www.w3.org/TR/xhtml1/#C_12">C.12, XHTML 1.0</a>).\r
+ * values, it's not recommended to change this setting for compliance with the\r
+ * W3C XHTML 1.0 standards (<a href="http://www.w3.org/TR/xhtml1/#C_12">C.12, XHTML 1.0</a>).\r
+ * @name CKEDITOR.config.forceSimpleAmpersand\r
* @type Boolean\r
* @default false\r
* @example\r
* config.forceSimpleAmpersand = false;\r
*/\r
-CKEDITOR.config.forceSimpleAmpersand = false;\r