\r
var protectedSourceMarker = '{cke_protected}';\r
\r
+\r
+ // Return the last non-space child node of the block (#4344).\r
+ function lastNoneSpaceChild( block )\r
+ {\r
+ var lastIndex = block.children.length,\r
+ last = block.children[ lastIndex - 1 ];\r
+ while( last && last.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.trim( last.value ) )\r
+ last = block.children[ --lastIndex ];\r
+ return last;\r
+ }\r
+\r
function trimFillers( block, fromSource )\r
{\r
// If the current node is a block, and if we're converting from source or\r
//\r
// Also, any at the end of blocks are fillers, remove them as well.\r
// (#2886)\r
- var children = block.children;\r
- var lastChild = children[ children.length - 1 ];\r
+ var children = block.children, lastChild = lastNoneSpaceChild( block );\r
if ( lastChild )\r
{\r
if ( ( fromSource || !CKEDITOR.env.ie ) && lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.name == 'br' )\r
\r
function blockNeedsExtension( block )\r
{\r
- if ( block.children.length < 1 )\r
- return true;\r
-\r
- var lastChild = block.children[ block.children.length - 1 ];\r
- return lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.name == 'br';\r
+ var lastChild = lastNoneSpaceChild( block );\r
+ return !lastChild || lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.name == 'br';\r
}\r
\r
function extendBlockForDisplay( block )\r