﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
3469	Simplify range walking codes	Garry Yao		"The new range walker API is about to be ready with #3367, it introduced a completely new simplified way to perform daily range work, it's concise and powerful to support the the following ways when walk along range.[[BR]]
We should try to replace the bells and whistles we've had in v2 for ranges manipulation with this new API after we close #3367.

Now we could:
 1. Walking along the content inside the range, mostly useful for style system.
{{{
outside [->...inside...<-]outside 
}}}
 With
{{{
#!js
var walker = new CKEDITOR.dom.walker( range ), node;
while ( node = walker.next() )
{
	// Node processing...
}
}}}
 1. Walking along the other opposite two sides of the range, mostly useful for enlargement and checking block boundary.
{{{
outside <-[ ...inside...]-> outside 
}}}
 With
{{{
#!js
// E.g. Walking along the left out side 
var walkerRange = new CKEDITOR.dom.range();
walkerRange.setStartAt( document.getBody(), CKEDITOR.POSITION_AFTER_START );
walkerRange.setEndAt( range.startContainer, range.startOffset );
walker.guard = function()
{
	//// Node processing...
};
do
{
	node = walker.next()
}
while (  node )

}}}
 1. Retrieve the boundary nodes of collapsed range:
{{{
leftBoundaryNode<-^->rightBoundaryNode
}}}
 With
{{{
#!js
// E.g. Get the end boundary node after the range.
var walkerRange = new CKEDITOR.dom.range();
walkerRange.setStartAt( range.endContainer, range.endOffset );
walkerRange.setEndAt( document.getBody(), CKEDITOR.POSITION_BEFORE_END );
var endBoundaryNode = walkerRange.next();
}}}
 1. Even other usages could be expanded...
=== Sub Tickets ===
[[TicketQuery(id=3478)]]"	Bug	closed	Normal		General		wontfix		
