+\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
+ var tailNbspRegex = /^[\t\r\n ]*(?: |\xa0)$/,\r
+ isNotWhitespaces = CKEDITOR.dom.walker.whitespaces( true ),\r
+ isNotBookmark = CKEDITOR.dom.walker.bookmark( false, true ),\r
+ fillerEvaluator = function( element )\r
+ {\r
+ return isNotBookmark( element ) && isNotWhitespaces( element );\r
+ };\r
+\r
+ // Check if there's a filler node at the end of an element, and return it.\r
+ CKEDITOR.dom.element.prototype.getBogus = function ()\r
+ {\r
+ var tail = this.getLast( fillerEvaluator );\r
+ if ( tail && ( !CKEDITOR.env.ie ? tail.is && tail.is( 'br' )\r
+ : tail.getText && tailNbspRegex.test( tail.getText() ) ) )\r
+ {\r
+ return tail;\r
+ }\r
+ return false;\r
+ };\r
+\r