{\r
return ( ( !movingOut || !limitLTR.equals( node ) )\r
&& ( !blockerLTR || !node.equals( blockerLTR ) )\r
- && ( node.type != CKEDITOR.NODE_ELEMENT || node.getName() != 'body' ) );\r
+ && ( node.type != CKEDITOR.NODE_ELEMENT || !movingOut || node.getName() != 'body' ) );\r
};\r
}\r
\r
{\r
return ( ( !movingOut || !limitRTL.equals( node ) )\r
&& ( !blockerRTL || !node.equals( blockerRTL ) )\r
- && ( node.type != CKEDITOR.NODE_ELEMENT || node.getName() != 'body' ) );\r
+ && ( node.type != CKEDITOR.NODE_ELEMENT || !movingOut || node.getName() != 'body' ) );\r
};\r
}\r
\r
if ( stopGuard( node, movingOut ) === false )\r
return false;\r
\r
- return userGuard( node );\r
+ return userGuard( node, movingOut );\r
};\r
}\r
else\r
};\r
\r
/**\r
- * Whether the node contains only white-spaces characters.\r
+ * Whether the node is a text node containing only whitespaces characters.\r
* @param isReject\r
*/\r
CKEDITOR.dom.walker.whitespaces = function( isReject )\r
return isReject ^ isWhitespace;\r
};\r
};\r
+\r
+ /**\r
+ * Whether the node is invisible in wysiwyg mode.\r
+ * @param isReject\r
+ */\r
+ CKEDITOR.dom.walker.invisible = function( isReject )\r
+ {\r
+ var whitespace = CKEDITOR.dom.walker.whitespaces();\r
+ return function( node )\r
+ {\r
+ // Nodes that take no spaces in wysiwyg:\r
+ // 1. White-spaces but not including NBSP;\r
+ // 2. Empty inline elements, e.g. <b></b> we're checking here\r
+ // 'offsetHeight' instead of 'offsetWidth' for properly excluding\r
+ // all sorts of empty paragraph, e.g. <br />.\r
+ var isInvisible = whitespace( node ) || node.is && !node.$.offsetHeight;\r
+ return isReject ^ isInvisible;\r
+ };\r
+ };\r
+\r
})();\r