public/ckeditor/_source/core/dom/range.js
function()
		{
			var startContainer = this.startContainer,
				startOffset = this.startOffset;

			// If the starting node is a text node, and non-empty before the offset,
			// then we're surely not at the start of block.
			if ( startOffset && startContainer.type == CKEDITOR.NODE_TEXT )
			{
				var textBefore = CKEDITOR.tools.ltrim( startContainer.substring( 0, startOffset ) );
				if ( textBefore.length )
					return false;
			}

			// Antecipate the trim() call here, so the walker will not make
			// changes to the DOM, which would not get reflected into this
			// range otherwise.
			this.trim();

			// We need to grab the block element holding the start boundary, so
			// let's use an element path for it.
			var path = new CKEDITOR.dom.elementPath( this.startContainer );

			// Creates a range starting at the block start until the range start.
			var walkerRange = this.clone();
			walkerRange.collapse( true );
			walkerRange.setStartAt( path.block || path.blockLimit, CKEDITOR.POSITION_AFTER_START );

			var walker = new CKEDITOR.dom.walker( walkerRange );
			walker.evaluator = getCheckStartEndBlockEvalFunction( true );

			return walker.checkBackward();
		}
function()
		{
			var startContainer = this.startContainer,
				startOffset = this.startOffset;

			// If the starting node is a text node, and non-empty before the offset,
			// then we're surely not at the start of block.
			if ( startOffset && startContainer.type == CKEDITOR.NODE_TEXT )
			{
				var textBefore = CKEDITOR.tools.ltrim( startContainer.substring( 0, startOffset ) );
				if ( textBefore.length )
					return false;
			}

			// Antecipate the trim() call here, so the walker will not make
			// changes to the DOM, which would not get reflected into this
			// range otherwise.
			this.trim();

			// We need to grab the block element holding the start boundary, so
			// let's use an element path for it.
			var path = new CKEDITOR.dom.elementPath( this.startContainer );

			// Creates a range starting at the block start until the range start.
			var walkerRange = this.clone();
			walkerRange.collapse( true );
			walkerRange.setStartAt( path.block || path.blockLimit, CKEDITOR.POSITION_AFTER_START );

			var walker = new CKEDITOR.dom.walker( walkerRange );
			walker.evaluator = getCheckStartEndBlockEvalFunction( true );

			return walker.checkBackward();
		}
function ( ) { var startContainer = this . startContainer , startOffset = this . startOffset ; // If the starting node is a text node, and non-empty before the offset,
 // then we're surely not at the start of block.
 if ( startOffset && startContainer . type == CKEDITOR . NODE_TEXT ) { var textBefore = CKEDITOR . tools . ltrim ( startContainer . substring ( 0 , startOffset ) ) ; if ( textBefore . length ) return false ; } // Antecipate the trim() call here, so the walker will not make
 // changes to the DOM, which would not get reflected into this
 // range otherwise.
 this . trim ( ) ; // We need to grab the block element holding the start boundary, so
 // let's use an element path for it.
 var path = new CKEDITOR . dom . elementPath ( this . startContainer ) ; // Creates a range starting at the block start until the range start.
 var walkerRange = this . clone ( ) ; walkerRange . collapse ( true ) ; walkerRange . setStartAt ( path . block || path . blockLimit , CKEDITOR . POSITION_AFTER_START ) ; var walker = new CKEDITOR . dom . walker ( walkerRange ) ; walker . evaluator = getCheckStartEndBlockEvalFunction ( true ) ; return walker . checkBackward ( ) ; }
Calls to this function may produce changes to the DOM. The range may be updated to reflect such changes.
Calls to this function may produce changes to the DOM . The range may be updated to reflect such changes .