JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.4.3
[ckeditor.git] / _source / core / dom / walker.js
index d7934b8..126f3f2 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
 For licensing, see LICENSE.html or http://ckeditor.com/license\r
 */\r
 \r
@@ -101,7 +101,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                node = null;\r
                                }\r
                                else\r
-                                       node = ( guard ( node ) === false ) ?\r
+                                       node = ( guard ( node, true ) === false ) ?\r
                                                null : node.getPreviousSourceNode( true, type, guard );\r
                        }\r
                        else\r
@@ -115,7 +115,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                node = null;\r
                                }\r
                                else\r
-                                       node = ( guard ( range.startContainer ) === false ) ?\r
+                                       node = ( guard ( range.startContainer, true ) === false ) ?\r
                                                null : range.startContainer.getNextSourceNode( true, type, guard ) ;\r
                        }\r
                }\r
@@ -261,7 +261,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                         */\r
                        previous : function()\r
                        {\r
-                               return iterate.call( this, true );\r
+                               return iterate.call( this, 1 );\r
                        },\r
 \r
                        /**\r
@@ -271,7 +271,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                         */\r
                        checkForward : function()\r
                        {\r
-                               return iterate.call( this, false, true ) !== false;\r
+                               return iterate.call( this, 0, 1 ) !== false;\r
                        },\r
 \r
                        /**\r
@@ -281,7 +281,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                         */\r
                        checkBackward : function()\r
                        {\r
-                               return iterate.call( this, true, true ) !== false;\r
+                               return iterate.call( this, 1, 1 ) !== false;\r
                        },\r
 \r
                        /**\r
@@ -303,7 +303,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                         */\r
                        lastBackward : function()\r
                        {\r
-                               return iterateToLast.call( this, true );\r
+                               return iterateToLast.call( this, 1 );\r
                        },\r
 \r
                        reset : function()\r
@@ -334,16 +334,15 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                'table-column' : 1,\r
                'table-cell' : 1,\r
                'table-caption' : 1\r
-       },\r
-       blockBoundaryNodeNameMatch = { hr : 1 };\r
+       };\r
 \r
        CKEDITOR.dom.element.prototype.isBlockBoundary = function( customNodeNames )\r
        {\r
-               var nodeNameMatches = CKEDITOR.tools.extend( {},\r
-                                                                                                       blockBoundaryNodeNameMatch, customNodeNames || {} );\r
+               var nodeNameMatches = CKEDITOR.tools.extend( {}, CKEDITOR.dtd.$block, customNodeNames || {} );\r
 \r
-               return blockBoundaryDisplayMatch[ this.getComputedStyle( 'display' ) ] ||\r
-                       nodeNameMatches[ this.getName() ];\r
+               // Don't consider floated formatting as block boundary, fall back to dtd check in that case. (#6297)\r
+               return this.getComputedStyle( 'float' ) == 'none' && blockBoundaryDisplayMatch[ this.getComputedStyle( 'display' ) ]\r
+                               || nodeNameMatches[ this.getName() ];\r
        };\r
 \r
        CKEDITOR.dom.walker.blockBoundary = function( customNodeNames )\r
@@ -359,12 +358,6 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
        {\r
                        return this.blockBoundary( { br : 1 } );\r
        };\r
-       /**\r
-        * Whether the node is a bookmark node's inner text node.\r
-        */\r
-       CKEDITOR.dom.walker.bookmarkContents = function( node )\r
-       {\r
-       },\r
 \r
        /**\r
         * Whether the to-be-evaluated node is a bookmark node OR bookmark node\r
@@ -380,7 +373,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                {\r
                        return ( node && node.getName\r
                                        && node.getName() == 'span'\r
-                                       && node.hasAttribute('_fck_bookmark') );\r
+                                       && node.hasAttribute( '_cke_bookmark' ) );\r
                }\r
 \r
                return function( node )\r
@@ -391,7 +384,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                && isBookmarkNode( parent ) );\r
                        // Is bookmark node?\r
                        isBookmark = contentOnly ? isBookmark : isBookmark || isBookmarkNode( node );\r
-                       return isReject ^ isBookmark;\r
+                       return !! ( isReject ^ isBookmark );\r
                };\r
        };\r
 \r
@@ -405,7 +398,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                {\r
                        var isWhitespace = node && ( node.type == CKEDITOR.NODE_TEXT )\r
                                                        && !CKEDITOR.tools.trim( node.getText() );\r
-                       return isReject ^ isWhitespace;\r
+                       return !! ( isReject ^ isWhitespace );\r
                };\r
        };\r
 \r
@@ -424,8 +417,28 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                        // '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
+                       return !! ( isReject ^ isInvisible );\r
+               };\r
+       };\r
+\r
+       var tailNbspRegex = /^[\t\r\n ]*(?:&nbsp;|\xa0)$/,\r
+               isNotWhitespaces = CKEDITOR.dom.walker.whitespaces( 1 ),\r
+               isNotBookmark = CKEDITOR.dom.walker.bookmark( 0, 1 ),\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
 })();\r