X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=_source%2Fcore%2Fdom%2Fwalker.js;h=e993f4d3c4574719e694ab5f74ff1cc3b5658f8c;hb=48b1db88210b4160dce439c6e3e32e14af8c106b;hp=d7934b8113ee305fe65420eb22cc8ba3c2741572;hpb=7cd80714081a8ffdf4a1a8d2c72f120ed5ef3d6d;p=ckeditor.git diff --git a/_source/core/dom/walker.js b/_source/core/dom/walker.js index d7934b8..e993f4d 100644 --- a/_source/core/dom/walker.js +++ b/_source/core/dom/walker.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ @@ -101,7 +101,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license node = null; } else - node = ( guard ( node ) === false ) ? + node = ( guard ( node, true ) === false ) ? null : node.getPreviousSourceNode( true, type, guard ); } else @@ -115,7 +115,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license node = null; } else - node = ( guard ( range.startContainer ) === false ) ? + node = ( guard ( range.startContainer, true ) === false ) ? null : range.startContainer.getNextSourceNode( true, type, guard ) ; } } @@ -261,7 +261,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license */ previous : function() { - return iterate.call( this, true ); + return iterate.call( this, 1 ); }, /** @@ -271,7 +271,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license */ checkForward : function() { - return iterate.call( this, false, true ) !== false; + return iterate.call( this, 0, 1 ) !== false; }, /** @@ -281,7 +281,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license */ checkBackward : function() { - return iterate.call( this, true, true ) !== false; + return iterate.call( this, 1, 1 ) !== false; }, /** @@ -303,7 +303,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license */ lastBackward : function() { - return iterateToLast.call( this, true ); + return iterateToLast.call( this, 1 ); }, reset : function() @@ -334,16 +334,15 @@ For licensing, see LICENSE.html or http://ckeditor.com/license 'table-column' : 1, 'table-cell' : 1, 'table-caption' : 1 - }, - blockBoundaryNodeNameMatch = { hr : 1 }; + }; CKEDITOR.dom.element.prototype.isBlockBoundary = function( customNodeNames ) { - var nodeNameMatches = CKEDITOR.tools.extend( {}, - blockBoundaryNodeNameMatch, customNodeNames || {} ); + var nodeNameMatches = CKEDITOR.tools.extend( {}, CKEDITOR.dtd.$block, customNodeNames || {} ); - return blockBoundaryDisplayMatch[ this.getComputedStyle( 'display' ) ] || - nodeNameMatches[ this.getName() ]; + // Don't consider floated formatting as block boundary, fall back to dtd check in that case. (#6297) + return this.getComputedStyle( 'float' ) == 'none' && blockBoundaryDisplayMatch[ this.getComputedStyle( 'display' ) ] + || nodeNameMatches[ this.getName() ]; }; CKEDITOR.dom.walker.blockBoundary = function( customNodeNames ) @@ -359,12 +358,6 @@ For licensing, see LICENSE.html or http://ckeditor.com/license { return this.blockBoundary( { br : 1 } ); }; - /** - * Whether the node is a bookmark node's inner text node. - */ - CKEDITOR.dom.walker.bookmarkContents = function( node ) - { - }, /** * Whether the to-be-evaluated node is a bookmark node OR bookmark node @@ -380,7 +373,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license { return ( node && node.getName && node.getName() == 'span' - && node.hasAttribute('_fck_bookmark') ); + && node.data( 'cke-bookmark' ) ); } return function( node ) @@ -391,7 +384,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license && isBookmarkNode( parent ) ); // Is bookmark node? isBookmark = contentOnly ? isBookmark : isBookmark || isBookmarkNode( node ); - return isReject ^ isBookmark; + return !! ( isReject ^ isBookmark ); }; }; @@ -405,7 +398,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license { var isWhitespace = node && ( node.type == CKEDITOR.NODE_TEXT ) && !CKEDITOR.tools.trim( node.getText() ); - return isReject ^ isWhitespace; + return !! ( isReject ^ isWhitespace ); }; }; @@ -424,8 +417,44 @@ For licensing, see LICENSE.html or http://ckeditor.com/license // 'offsetHeight' instead of 'offsetWidth' for properly excluding // all sorts of empty paragraph, e.g.
. var isInvisible = whitespace( node ) || node.is && !node.$.offsetHeight; - return isReject ^ isInvisible; + return !! ( isReject ^ isInvisible ); + }; + }; + + CKEDITOR.dom.walker.nodeType = function( type, isReject ) + { + return function( node ) + { + return !! ( isReject ^ ( node.type == type ) ); }; }; + var tailNbspRegex = /^[\t\r\n ]*(?: |\xa0)$/, + isWhitespaces = CKEDITOR.dom.walker.whitespaces(), + isBookmark = CKEDITOR.dom.walker.bookmark(), + toSkip = function( node ) + { + return isBookmark( node ) + || isWhitespaces( node ) + || node.type == CKEDITOR.NODE_ELEMENT + && node.getName() in CKEDITOR.dtd.$inline + && !( node.getName() in CKEDITOR.dtd.$empty ); + }; + + // Check if there's a filler node at the end of an element, and return it. + CKEDITOR.dom.element.prototype.getBogus = function() + { + // Bogus are not always at the end, e.g.

text

(#7070). + var tail = this; + do { tail = tail.getPreviousSourceNode(); } + while ( toSkip( tail ) ) + + if ( tail && ( !CKEDITOR.env.ie ? tail.is && tail.is( 'br' ) + : tail.getText && tailNbspRegex.test( tail.getText() ) ) ) + { + return tail; + } + return false; + }; + })();