1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
\r
2 <html xmlns="http://www.w3.org/1999/xhtml">
\r
4 <title>CKEDITOR.dom.range</title>
\r
5 <link rel="stylesheet" type="text/css" href="../../test.css" />
\r
6 <script type="text/javascript" src="../../../ckeditor.js"></script>
\r
7 <script type="text/javascript" src="../../test.js"></script>
\r
8 <script type="text/javascript">
\r
14 CKEDITOR.test.addTestCase( (function()
\r
16 // Local references.
\r
17 var assert = CKEDITOR.test.assert;
\r
18 var getInnerHtml = CKEDITOR.test.getInnerHtml;
\r
20 var doc = new CKEDITOR.dom.document( document );
\r
22 var getRange = function( startId, endId )
\r
24 var range = new CKEDITOR.dom.range( CKEDITOR.document );
\r
25 range.moveToBookmark( { startNode : startId, endNode : endId, serializable : true } );
\r
30 test__constructor : function()
\r
32 var range = new CKEDITOR.dom.range( doc );
\r
34 assert.isNotNull( range, 'range must not be null' );
\r
36 assert.isNull( range.startContainer, 'startContainer must be null' );
\r
37 assert.isNull( range.startOffset, 'startOffset must be null' );
\r
38 assert.isNull( range.endContainer, 'endContainer must be null' );
\r
39 assert.isNull( range.endOffset, 'endOffset must be null' );
\r
41 assert.isTrue( range.collapsed, 'range must be collapsed' );
\r
44 test_setStart : function()
\r
46 var range = new CKEDITOR.dom.range( doc );
\r
47 range.setStart( doc.getById( 'playground' ), 1 );
\r
49 assert.areSame( document.getElementById( 'playground' ), range.startContainer.$ );
\r
50 assert.areSame( 1, range.startOffset );
\r
51 assert.areSame( document.getElementById( 'playground' ), range.endContainer.$ );
\r
52 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
53 assert.isTrue( range.collapsed );
\r
56 test_setEnd : function()
\r
58 var range = new CKEDITOR.dom.range( doc );
\r
59 range.setEnd( doc.getById( 'playground' ), 1 );
\r
61 assert.areSame( document.getElementById( 'playground' ), range.startContainer.$ );
\r
62 assert.areSame( 1, range.startOffset );
\r
63 assert.areSame( document.getElementById( 'playground' ), range.endContainer.$ );
\r
64 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
65 assert.isTrue( range.collapsed );
\r
68 test_setStartAfter : function()
\r
70 var range = new CKEDITOR.dom.range( doc );
\r
71 range.setStartAfter( doc.getById( '_B' ) );
\r
72 range.setStartAfter( doc.getById( '_H1' ).getFirst() );
\r
74 assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );
\r
75 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
76 assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );
\r
77 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
78 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
81 test_setStartBefore : function()
\r
83 var range = new CKEDITOR.dom.range( doc );
\r
84 range.setStartBefore( doc.getById( '_B' ) );
\r
85 range.setStartBefore( doc.getById( '_H1' ).getFirst() );
\r
87 assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );
\r
88 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
89 assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );
\r
90 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
91 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
94 test_setEndAfter : function()
\r
96 var range = new CKEDITOR.dom.range( doc );
\r
97 range.setEndAfter( doc.getById( '_H1' ).getFirst() );
\r
98 range.setEndAfter( doc.getById( '_B' ) );
\r
100 assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );
\r
101 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
102 assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );
\r
103 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
104 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
107 test_setEndBefore : function()
\r
109 var range = new CKEDITOR.dom.range( doc );
\r
110 range.setEndBefore( doc.getById( '_H1' ).getFirst() );
\r
111 range.setEndBefore( doc.getById( '_B' ) );
\r
113 assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );
\r
114 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
115 assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );
\r
116 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
117 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
120 test_setStartAt_1 : function()
\r
122 var range = new CKEDITOR.dom.range( doc );
\r
123 range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_START );
\r
125 assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );
\r
126 assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );
\r
127 assert.isTrue( range.collapsed, 'collapsed' );
\r
130 test_setStartAt_2 : function()
\r
132 var range = new CKEDITOR.dom.range( doc );
\r
133 range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_END );
\r
135 assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );
\r
136 assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );
\r
137 assert.isTrue( range.collapsed, 'collapsed' );
\r
140 test_setStartAt_3 : function()
\r
142 var range = new CKEDITOR.dom.range( doc );
\r
143 range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_START );
\r
145 assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );
\r
146 assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );
\r
147 assert.isTrue( range.collapsed, 'collapsed' );
\r
150 test_setStartAt_4 : function()
\r
152 var range = new CKEDITOR.dom.range( doc );
\r
153 range.setStartAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_END );
\r
155 assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );
\r
156 assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );
\r
157 assert.isTrue( range.collapsed, 'collapsed' );
\r
160 test_setEndAt_1 : function()
\r
162 var range = new CKEDITOR.dom.range( doc );
\r
163 range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_START );
\r
165 assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );
\r
166 assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );
\r
167 assert.isTrue( range.collapsed, 'collapsed' );
\r
170 test_setEndAt_2 : function()
\r
172 var range = new CKEDITOR.dom.range( doc );
\r
173 range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_END );
\r
175 assert.areSame( document.getElementById('_Span'), range.startContainer.$, 'startContainer' );
\r
176 assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );
\r
177 assert.isTrue( range.collapsed, 'collapsed' );
\r
180 test_setEndAt_3 : function()
\r
182 var range = new CKEDITOR.dom.range( doc );
\r
183 range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_BEFORE_START );
\r
185 assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );
\r
186 assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );
\r
187 assert.isTrue( range.collapsed, 'collapsed' );
\r
190 test_setEndAt_4 : function()
\r
192 var range = new CKEDITOR.dom.range( doc );
\r
193 range.setEndAt( doc.getById('_Span'), CKEDITOR.POSITION_AFTER_END );
\r
195 assert.areSame( document.getElementById('_P'), range.startContainer.$, 'startContainer' );
\r
196 assert.areSame( document.getElementById('_P'), range.endContainer.$, 'endContainer' );
\r
197 assert.isTrue( range.collapsed, 'collapsed' );
\r
200 test_collapsed : function()
\r
202 var range = new CKEDITOR.dom.range( doc );
\r
203 range.setStartAt( doc.getById( '_P' ), CKEDITOR.POSITION_AFTER_START );
\r
205 assert.isTrue( range.collapsed );
\r
208 test_collapse : function()
\r
210 var range = new CKEDITOR.dom.range( doc );
\r
211 range.setStartAt( doc.getById( '_Para' ), CKEDITOR.POSITION_AFTER_START );
\r
212 range.setEndAt( doc.getById( '_Span' ), CKEDITOR.POSITION_BEFORE_END );
\r
214 assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'startContainer' );
\r
215 assert.areSame( document.getElementById('_Span'), range.endContainer.$, 'endContainer' );
\r
216 assert.isFalse( range.collapsed, 'collapsed' );
\r
218 range.collapse( true );
\r
220 assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'startContainer' );
\r
221 assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'endContainer' );
\r
222 assert.isTrue( range.collapsed, 'collapsed' );
\r
225 test_selectNodeContents_Element : function()
\r
227 var range = new CKEDITOR.dom.range( doc );
\r
229 // Test with an Element node.
\r
230 range.selectNodeContents( doc.getById( '_Para' ) );
\r
232 assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );
\r
233 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
234 assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );
\r
235 assert.areSame( 3, range.endOffset, 'range.endOffset' );
\r
236 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
239 test_selectNodeContents_Text : function()
\r
241 var range = new CKEDITOR.dom.range( doc );
\r
243 // Test with a Text node.
\r
244 range.selectNodeContents( doc.getById( '_Para' ).getFirst() );
\r
246 assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );
\r
247 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
248 assert.areSame( document.getElementById( '_Para' ).firstChild, range.endContainer.$, 'range.endContainer' );
\r
249 assert.areSame( 8, range.endOffset, 'range.endOffset' );
\r
250 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
253 test_collapse_ToStart : function()
\r
255 var range = new CKEDITOR.dom.range( doc );
\r
257 range.selectNodeContents( doc.getById( '_P' ) );
\r
258 range.collapse( true );
\r
260 assert.areSame( document.getElementById( '_P' ), range.startContainer.$, 'range.startContainer' );
\r
261 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
262 assert.areSame( document.getElementById( '_P' ), range.endContainer.$, 'range.endContainer' );
\r
263 assert.areSame( 0, range.endOffset, 'range.endOffset' );
\r
264 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
267 test_collapse_ToEnd : function()
\r
269 var range = new CKEDITOR.dom.range( doc );
\r
271 range.selectNodeContents( doc.getById( '_Para' ) );
\r
272 range.collapse( false );
\r
274 assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );
\r
275 assert.areSame( 3, range.startOffset, 'range.startOffset' );
\r
276 assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );
\r
277 assert.areSame( 3, range.endOffset, 'range.endOffset' );
\r
278 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
281 test_insertNode_ElementContents : function()
\r
283 var newNode = new CKEDITOR.dom.element( 'span' );
\r
284 newNode.setHtml( 'test_' );
\r
286 var range = new CKEDITOR.dom.range( doc );
\r
288 range.selectNodeContents( doc.getById( '_B' ) );
\r
289 range.insertNode( newNode );
\r
291 assert.areSame( document.getElementById( '_B' ), range.startContainer.$, 'range.startContainer' );
\r
292 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
293 assert.areSame( document.getElementById( '_B' ), range.endContainer.$, 'range.endContainer' );
\r
294 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
295 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
298 test_insertNode_ElementCollapsed : function()
\r
300 var newNode = new CKEDITOR.dom.element( 'span' );
\r
301 newNode.setHtml( 'test_' );
\r
303 var range = new CKEDITOR.dom.range( doc );
\r
305 range.setStartBefore( doc.getById( '_Para' ) );
\r
306 range.insertNode( newNode );
\r
308 assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );
\r
309 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
310 assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );
\r
311 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
312 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
315 test_insertNode_ElementNotCollapsed : function()
\r
317 var newNode = new CKEDITOR.dom.element( 'span' );
\r
318 newNode.setHtml( 'test_' );
\r
320 var range = new CKEDITOR.dom.range( doc );
\r
322 range.setStartBefore( doc.getById( '_Para' ) );
\r
323 range.setStartBefore( doc.getById( '_H1' ) );
\r
324 range.insertNode( newNode );
\r
326 assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );
\r
327 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
328 assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );
\r
329 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
330 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
333 test_insertNode_DiffElements : function()
\r
335 var newNode = new CKEDITOR.dom.element( 'span' );
\r
336 newNode.setHtml( 'test_' );
\r
338 var range = new CKEDITOR.dom.range( doc );
\r
340 range.selectNodeContents( doc.getById( '_Para' ) );
\r
342 range.setStart( doc.getById( '_H1' ), 0 );
\r
343 range.insertNode( newNode );
\r
345 assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );
\r
346 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
347 assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );
\r
348 assert.areSame( 3, range.endOffset, 'range.endOffset' );
\r
349 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
351 assert.isTrue( range.startContainer.getChild( range.startOffset ).equals( newNode ), 'Start must be on new node' );
\r
354 test_insertNode_TextCollapsed : function()
\r
356 var newNode = new CKEDITOR.dom.element( 'span' );
\r
357 newNode.setHtml( 'test_' );
\r
359 var range = new CKEDITOR.dom.range( doc );
\r
361 range.setStart( doc.getById( '_H1' ).getFirst(), 3 );
\r
362 range.insertNode( newNode );
\r
364 assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );
\r
365 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
366 assert.areSame( document.getElementById( '_H1' ), range.endContainer.$, 'range.endContainer' );
\r
367 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
368 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
371 test_insertNode_TextNotCollapsed : function()
\r
373 var newNode = new CKEDITOR.dom.element( 'span' );
\r
374 newNode.setHtml( 'test_' );
\r
376 var range = new CKEDITOR.dom.range( doc );
\r
378 range.setStart( doc.getById( '_H1' ).getFirst(), 3 );
\r
379 range.setEnd( doc.getById( '_H1' ).getFirst(), 5 );
\r
380 range.insertNode( newNode );
\r
382 assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );
\r
383 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
384 assert.areSame( document.getElementById( '_H1' ).childNodes[2], range.endContainer.$, 'range.endContainer' );
\r
385 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
386 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
389 test_insertNode_Mixed : function()
\r
391 var newNode = new CKEDITOR.dom.element( 'span' );
\r
392 newNode.setHtml( 'test_' );
\r
394 var range = new CKEDITOR.dom.range( doc );
\r
396 range.setStart( doc.getById( '_H1' ).getFirst(), 0 );
\r
397 range.setEnd( doc.getById( '_P' ), 1 );
\r
398 range.insertNode( newNode );
\r
400 assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );
\r
401 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
402 assert.areSame( document.getElementById( '_P' ), range.endContainer.$, 'range.endContainer' );
\r
403 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
404 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
407 test_getCommonAncestor1 : function()
\r
409 var range = new CKEDITOR.dom.range( doc );
\r
410 range.setStart( doc.getById( '_H1' ).getFirst(), 3 );
\r
412 assert.areSame( document.getElementById( '_H1' ).firstChild, range.getCommonAncestor().$ );
\r
415 test_getCommonAncestor2 : function()
\r
417 var range = new CKEDITOR.dom.range( doc );
\r
418 range.setStart( doc.getById( '_H1' ), 0 );
\r
420 assert.areSame( document.getElementById( '_H1' ), range.getCommonAncestor().$ );
\r
423 test_getCommonAncestor3 : function()
\r
425 var range = new CKEDITOR.dom.range( doc );
\r
426 range.setStart( doc.getById( '_H1' ), 0 );
\r
427 range.setEnd( doc.getById( '_Para' ), 0 );
\r
429 assert.areSame( document.getElementById( 'playground' ), range.getCommonAncestor().$ );
\r
432 test_getCommonAncestor4 : function()
\r
434 var range = new CKEDITOR.dom.range( doc );
\r
435 range.setStart( doc.getById( '_Para' ).getFirst(), 1 );
\r
436 range.setEnd( doc.getById( '_B' ), 0 );
\r
438 assert.areSame( document.getElementById( '_Para' ), range.getCommonAncestor().$ );
\r
441 test_getCommonAncestor5 : function()
\r
443 var range = new CKEDITOR.dom.range( doc );
\r
444 range.setStart( doc.getBody(), 0 );
\r
445 range.setEnd( doc.getById( '_B' ).getFirst(), 1 );
\r
447 assert.areSame( document.body, range.getCommonAncestor().$ );
\r
450 test_getCommonAncestor6 : function()
\r
452 var range = new CKEDITOR.dom.range( doc );
\r
453 range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );
\r
454 range.setEnd( doc.getById( '_EnlargeB' ), 3 );
\r
456 assert.areSame( document.getElementById( '_EnlargeB' ), range.getCommonAncestor().$ );
\r
459 test_enlarge_element1 : function()
\r
461 // For IE, see the next test.
\r
462 if ( CKEDITOR.env.ie )
\r
465 // <p> Test <b> <i> [Enlarge]</i> this</b> </p>
\r
466 // <p> Test <b> [<i> Enlarge</i>] this</b> </p>
\r
468 var range = new CKEDITOR.dom.range( doc );
\r
469 range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );
\r
470 range.setEnd( doc.getById( '_EnlargeI' ), 1 );
\r
472 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
474 assert.areSame( document.getElementById( '_EnlargeB' ), range.startContainer.$, 'range.startContainer' );
\r
475 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
476 assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );
\r
477 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
478 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
481 test_enlarge_element1_ie : function()
\r
483 // IE normalizes whitespaces when parsing the HTML, so we need a
\r
484 // specific test for it.
\r
485 if ( !CKEDITOR.env.ie )
\r
488 // <p>Test <b><i>[Enlarge]</i> this</b></p>
\r
489 // <p>Test <b>[<i>Enlarge</i>] this</b></p>
\r
491 var range = new CKEDITOR.dom.range( doc );
\r
492 range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 0 );
\r
493 range.setEnd( doc.getById( '_EnlargeI' ), 1 );
\r
495 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
497 assert.areSame( document.getElementById( '_EnlargeB' ), range.startContainer.$, 'range.startContainer' );
\r
498 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
499 assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );
\r
500 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
501 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
504 test_enlarge_element2 : function()
\r
506 // For IE, see the next test.
\r
507 if ( CKEDITOR.env.ie )
\r
510 // <p> Test <b> <i> [Enlarge</i> this]</b> </p>
\r
511 // <p> Test [<b> <i> Enlarge</i> this</b>] </p>
\r
513 var range = new CKEDITOR.dom.range( doc );
\r
514 range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );
\r
515 range.setEnd( doc.getById( '_EnlargeB' ), 3 );
\r
517 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
519 assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );
\r
520 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
521 assert.areSame( document.getElementById( '_EnlargeP' ), range.endContainer.$, 'range.endContainer' );
\r
522 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
523 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
526 test_enlarge_element2_ie : function()
\r
528 // IE normalizes whitespaces when parsing the HTML, so we need a
\r
529 // specific test for it.
\r
530 if ( !CKEDITOR.env.ie )
\r
533 // <p>Test <b><i>[Enlarge</i> this]</b></p>
\r
534 // <p>Test [<b><i>Enlarge</i> this</b>]</p>
\r
536 var range = new CKEDITOR.dom.range( doc );
\r
537 range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 0 );
\r
538 range.setEnd( doc.getById( '_EnlargeB' ), 2 );
\r
540 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
542 assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );
\r
543 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
544 assert.areSame( document.getElementById( '_EnlargeP' ), range.endContainer.$, 'range.endContainer' );
\r
545 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
546 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
549 test_enlarge_element3 : function()
\r
551 // For IE, see the next test.
\r
552 if ( CKEDITOR.env.ie )
\r
555 // <p> [Test <b> <i> Enlarge]</i> this</b> </p>
\r
556 // <p> [Test <b> <i> Enlarge</i>] this</b> </p>
\r
558 var range = new CKEDITOR.dom.range( doc );
\r
559 range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 1 );
\r
560 range.setEnd( doc.getById( '_EnlargeI' ), 1 );
\r
562 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
564 assert.areSame( document.getElementById( '_EnlargeP' ).firstChild, range.startContainer.$, 'range.startContainer' );
\r
565 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
566 assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );
\r
567 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
568 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
571 test_enlarge_element3_ie : function()
\r
573 // IE normalizes whitespaces when parsing the HTML, so we need a
\r
574 // specific test for it.
\r
575 if ( !CKEDITOR.env.ie )
\r
578 // <p>[Test <b><i>Enlarge]</i> this</b></p>
\r
579 // <p>[Test <b><i>Enlarge</i>] this</b></p>
\r
581 var range = new CKEDITOR.dom.range( doc );
\r
582 range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 0 );
\r
583 range.setEnd( doc.getById( '_EnlargeI' ), 1 );
\r
585 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
587 assert.areSame( document.getElementById( '_EnlargeP' ).firstChild, range.startContainer.$, 'range.startContainer' );
\r
588 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
589 assert.areSame( document.getElementById( '_EnlargeB' ), range.endContainer.$, 'range.endContainer' );
\r
590 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
591 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
594 test_enlarge_element4 : function()
\r
596 // For IE, see the next test.
\r
597 if ( CKEDITOR.env.ie )
\r
600 // <p> [Test <b> <i> Enlarge</i> this]</b> </p>
\r
601 // [<p> Test <b> <i> Enlarge</i> this</b> </p>]
\r
603 var range = new CKEDITOR.dom.range( doc );
\r
604 range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 1 );
\r
605 range.setEnd( doc.getById( '_EnlargeB' ).getChild( 2 ), 5 );
\r
607 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
609 assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.startContainer.$, 'range.startContainer' );
\r
610 assert.areSame( doc.getById( '_EnlargeP' ).getIndex(), range.startOffset, 'range.startOffset' );
\r
611 assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.endContainer.$, 'range.endContainer' );
\r
612 assert.areSame( doc.getById( '_EnlargeP' ).getIndex() + 1, range.endOffset, 'range.endOffset' );
\r
613 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
616 test_enlarge_element4_ie : function()
\r
618 // IE normalizes whitespaces when parsing the HTML, so we need a
\r
619 // specific test for it.
\r
620 if ( !CKEDITOR.env.ie )
\r
623 // <p>[Test <b><i>Enlarge</i> this]</b></p>
\r
624 // [<p>Test <b><i>Enlarge</i> this</b></p>]
\r
626 var range = new CKEDITOR.dom.range( doc );
\r
627 range.setStart( doc.getById( '_EnlargeP' ).getFirst(), 0 );
\r
628 range.setEnd( doc.getById( '_EnlargeB' ).getChild( 1 ), 5 );
\r
630 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
632 assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.startContainer.$, 'range.startContainer' );
\r
633 assert.areSame( doc.getById( '_EnlargeP' ).getIndex(), range.startOffset, 'range.startOffset' );
\r
634 assert.areSame( document.getElementById( '_EnlargeP' ).parentNode, range.endContainer.$, 'range.endContainer' );
\r
635 assert.areSame( doc.getById( '_EnlargeP' ).getIndex() + 1, range.endOffset, 'range.endOffset' );
\r
636 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
639 test_enlarge_element5 : function()
\r
641 // For IE, see the next test.
\r
642 if ( CKEDITOR.env.ie )
\r
645 // <p> Test<b> <i> [Enlarge</i> this]</b> </p>
\r
646 // <p> Test<b> [<i> Enlarge</i> this]</b> </p>
\r
648 var range = new CKEDITOR.dom.range( doc );
\r
649 range.setStart( doc.getById( '_EnlargeI1' ).getFirst(), 2 );
\r
650 range.setEnd( doc.getById( '_EnlargeB1' ).getChild( 2 ), 5 );
\r
652 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
654 assert.areSame( document.getElementById( '_EnlargeB1' ), range.startContainer.$, 'range.startContainer' );
\r
655 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
656 assert.areSame( document.getElementById( '_EnlargeB1' ).childNodes[ 2 ], range.endContainer.$, 'range.endContainer' );
\r
657 assert.areSame( 5, range.endOffset, 'range.endOffset' );
\r
658 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
661 test_enlarge_element5_ie : function()
\r
663 // IE normalizes whitespaces when parsing the HTML, so we need a
\r
664 // specific test for it.
\r
665 if ( !CKEDITOR.env.ie )
\r
668 // <p>Test<b> <i>[Enlarge</i> this]</b></p>
\r
669 // <p>Test<b> [<i>Enlarge</i> this]</b></p>
\r
671 var range = new CKEDITOR.dom.range( doc );
\r
672 range.setStart( doc.getById( '_EnlargeI1' ).getFirst(), 0 );
\r
673 range.setEnd( doc.getById( '_EnlargeB1' ).getChild( 2 ), 5 );
\r
675 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
677 assert.areSame( document.getElementById( '_EnlargeB1' ), range.startContainer.$, 'range.startContainer' );
\r
678 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
679 assert.areSame( document.getElementById( '_EnlargeB1' ).childNodes[ 2 ], range.endContainer.$, 'range.endContainer' );
\r
680 assert.areSame( 5, range.endOffset, 'range.endOffset' );
\r
681 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
684 test_enlarge_element6 : function()
\r
686 // For IE, see the next test.
\r
687 if ( CKEDITOR.env.ie )
\r
690 // <p> <b> <i> [Enlarge</i>] this</b> </p>
\r
691 // <p> <b> [<i> Enlarge</i>] this</b> </p>
\r
693 var range = new CKEDITOR.dom.range( doc );
\r
694 range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 2 );
\r
695 range.setEnd( doc.getById( '_EnlargeB2' ), 2 );
\r
697 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
699 assert.areSame( document.getElementById( '_EnlargeB2' ), range.startContainer.$, 'range.startContainer' );
\r
700 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
701 assert.areSame( document.getElementById( '_EnlargeB2' ), range.endContainer.$, 'range.endContainer' );
\r
702 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
703 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
706 test_enlarge_element6_ie : function()
\r
708 // IE normalizes whitespaces when parsing the HTML, so we need a
\r
709 // specific test for it.
\r
710 if ( !CKEDITOR.env.ie )
\r
713 // <p><b><i>[Enlarge</i>] this</b></p>
\r
714 // <p><b>[<i>Enlarge</i>] this</b></p>
\r
716 var range = new CKEDITOR.dom.range( doc );
\r
717 range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 0 );
\r
718 range.setEnd( doc.getById( '_EnlargeB2' ), 1 );
\r
720 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
722 assert.areSame( document.getElementById( '_EnlargeB2' ), range.startContainer.$, 'range.startContainer' );
\r
723 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
724 assert.areSame( document.getElementById( '_EnlargeB2' ), range.endContainer.$, 'range.endContainer' );
\r
725 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
726 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
729 test_enlarge_element7 : function()
\r
731 // For IE, see the next test.
\r
732 if ( CKEDITOR.env.ie )
\r
735 // <p> <b> <i> [Enlarge</i> this]</b> </p>
\r
736 // [<p> <b> <i> Enlarge</i> this</b> </p>]
\r
738 var range = new CKEDITOR.dom.range( doc );
\r
739 range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 2 );
\r
740 range.setEnd( doc.getById( '_EnlargeB2' ), 3 );
\r
742 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
744 assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.startContainer.$, 'range.startContainer' );
\r
745 assert.areSame( doc.getById( '_EnlargeP2' ).getIndex(), range.startOffset, 'range.startOffset' );
\r
746 assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );
\r
747 assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );
\r
748 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
751 test_enlarge_element7_ie : function()
\r
753 // IE normalizes whitespaces when parsing the HTML, so we need a
\r
754 // specific test for it.
\r
755 if ( !CKEDITOR.env.ie )
\r
758 // <p><b><i>[Enlarge</i> this]</b></p>
\r
759 // [<p><b><i>Enlarge</i> this</b></p>]
\r
761 var range = new CKEDITOR.dom.range( doc );
\r
762 range.setStart( doc.getById( '_EnlargeI2' ).getFirst(), 0 );
\r
763 range.setEnd( doc.getById( '_EnlargeB2' ), 2 );
\r
765 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
767 assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.startContainer.$, 'range.startContainer' );
\r
768 assert.areSame( doc.getById( '_EnlargeP2' ).getIndex(), range.startOffset, 'range.startOffset' );
\r
769 assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );
\r
770 assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );
\r
771 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
774 test_enlarge_element8 : function()
\r
776 // For IE, see the next test.
\r
777 if ( CKEDITOR.env.ie )
\r
780 // <p> Test <b> <i> [Enlarge</i> this</b> </p><p> <b> <i> Enlarge</i> this]</b> </p>
\r
781 // <p> Test [<b> <i> Enlarge</i> this</b> </p><p> <b> <i> Enlarge</i> this</b> </p>]
\r
783 var range = new CKEDITOR.dom.range( doc );
\r
784 range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 2 );
\r
785 range.setEnd( doc.getById( '_EnlargeB2' ), 3 );
\r
787 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
789 assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );
\r
790 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
791 assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );
\r
792 assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );
\r
793 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
796 test_enlarge_element8_ie : function()
\r
798 // IE normalizes whitespaces when parsing the HTML, so we need a
\r
799 // specific test for it.
\r
800 if ( !CKEDITOR.env.ie )
\r
803 // <p>Test <b><i>[Enlarge</i> this</b></p><p><b><i>Enlarge</i> this]</b></p>
\r
804 // <p>Test [<b><i>Enlarge</i> this</b></p><p><b><i>Enlarge</i> this</b></p>]
\r
806 var range = new CKEDITOR.dom.range( doc );
\r
807 range.setStart( doc.getById( '_EnlargeI' ).getFirst(), 0 );
\r
808 range.setEnd( doc.getById( '_EnlargeB2' ), 2 );
\r
810 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
812 assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );
\r
813 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
814 assert.areSame( document.getElementById( '_EnlargeP2' ).parentNode, range.endContainer.$, 'range.endContainer' );
\r
815 assert.areSame( doc.getById( '_EnlargeP2' ).getIndex() + 1, range.endOffset, 'range.endOffset' );
\r
816 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
819 test_enlarge_element9 : function()
\r
821 // <p>Test<i> [Enlarge</i>]</p>
\r
822 // <p>Test<i> [Enlarge</i>]</p>
\r
824 var range = new CKEDITOR.dom.range( doc );
\r
825 range.setStart( doc.getById( '_EnlargeI3' ).getFirst(), 1 );
\r
826 range.setEnd( doc.getById( '_EnlargeP3' ), 2 );
\r
828 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
830 assert.areSame( document.getElementById( '_EnlargeI3' ).firstChild, range.startContainer.$, 'range.startContainer' );
\r
831 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
832 assert.areSame( document.getElementById( '_EnlargeP3' ), range.endContainer.$, 'range.endContainer' );
\r
833 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
834 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
837 test_enlarge_element10 : function()
\r
839 // For IE, see the next test.
\r
840 if ( CKEDITOR.env.ie )
\r
843 // <p>Test <i> [Enlarge</i>]</p>
\r
844 // <p>Test [<i> Enlarge</i>]</p>
\r
846 var range = new CKEDITOR.dom.range( doc );
\r
847 range.setStart( doc.getById( '_EnlargeI4' ).getFirst(), 1 );
\r
848 range.setEnd( doc.getById( '_EnlargeP4' ), 2 );
\r
850 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
852 assert.areSame( document.getElementById( '_EnlargeP4' ), range.startContainer.$, 'range.startContainer' );
\r
853 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
854 assert.areSame( document.getElementById( '_EnlargeP4' ), range.endContainer.$, 'range.endContainer' );
\r
855 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
856 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
859 test_enlarge_element10_ie : function()
\r
861 // IE normalizes whitespaces when parsing the HTML, so we need a
\r
862 // specific test for it.
\r
863 if ( !CKEDITOR.env.ie )
\r
866 // <p>Test <i>[Enlarge</i>]</p>
\r
867 // <p>Test [<i>Enlarge</i>]</p>
\r
869 var range = new CKEDITOR.dom.range( doc );
\r
870 range.setStart( doc.getById( '_EnlargeI4' ).getFirst(), 0 );
\r
871 range.setEnd( doc.getById( '_EnlargeP4' ), 2 );
\r
873 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
875 assert.areSame( document.getElementById( '_EnlargeP4' ), range.startContainer.$, 'range.startContainer' );
\r
876 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
877 assert.areSame( document.getElementById( '_EnlargeP4' ), range.endContainer.$, 'range.endContainer' );
\r
878 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
879 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
882 test_enlarge_element11 : function()
\r
884 // <p>Test <i>[Enlarge]</i></p>
\r
885 // <p>Test [<i>Enlarge</i>]</p>
\r
887 var range = new CKEDITOR.dom.range( doc );
\r
888 range.setStart( doc.getById( '_EnlargeI5' ), 0 );
\r
889 range.setEnd( doc.getById( '_EnlargeI5' ), 1 );
\r
891 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
893 assert.areSame( document.getElementById( '_EnlargeP5' ), range.startContainer.$, 'range.startContainer' );
\r
894 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
895 assert.areSame( document.getElementById( '_EnlargeP5' ), range.endContainer.$, 'range.endContainer' );
\r
896 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
897 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
900 test_enlarge_element12 : function()
\r
902 // <p>Test <i><b></b>[Enlarge]</i></p>
\r
903 // <p>Test [<i><b></b>Enlarge</i>]</p>
\r
905 var range = new CKEDITOR.dom.range( doc );
\r
906 range.setStart( doc.getById( '_EnlargeI6' ), 1 );
\r
907 range.setEnd( doc.getById( '_EnlargeI6' ), 2 );
\r
909 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
911 assert.areSame( document.getElementById( '_EnlargeP6' ), range.startContainer.$, 'range.startContainer' );
\r
912 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
913 assert.areSame( document.getElementById( '_EnlargeP6' ), range.endContainer.$, 'range.endContainer' );
\r
914 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
915 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
918 test_enlarge_element13 : function()
\r
920 // <p>Test <i><b></b>[Enlarge]</i></p>
\r
921 // <p>Test [<i><b></b>Enlarge</i>]</p>
\r
923 doc.getById( '_EnlargeP' ).setHtml( 'this <i>is some </i>sample text' );
\r
925 var range = new CKEDITOR.dom.range( doc );
\r
926 range.setStart( doc.getById( '_EnlargeP' ), 0 );
\r
927 range.setEnd( doc.getById( '_EnlargeP' ).getChild( 1 ), 0 );
\r
929 range.enlarge( CKEDITOR.ENLARGE_ELEMENT );
\r
931 assert.areSame( document.getElementById( '_EnlargeP' ), range.startContainer.$, 'range.startContainer' );
\r
932 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
933 assert.areSame( document.getElementById( '_EnlargeP' ).childNodes[ 1 ], range.endContainer.$, 'range.endContainer' );
\r
934 assert.areSame( 0, range.endOffset, 'range.endOffset' );
\r
935 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
938 test_enlarge_list1 : function()
\r
940 var range = getRange( 'S1', null );
\r
941 range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );
\r
943 assert.areSame( document.getElementById( '_EnlargeP7' ), range.startContainer.$, 'range.startContainer' );
\r
944 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
945 assert.areSame( document.getElementById( '_EnlargeP7' ), range.endContainer.$, 'range.endContainer' );
\r
946 assert.areSame( 3, range.endOffset, 'range.endOffset' );
\r
947 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
950 test_enlarge_list2 : function()
\r
952 var range = getRange( 'S2', 'E2' );
\r
953 range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );
\r
955 assert.areSame( document.getElementById( '_EnlargeP8' ), range.startContainer.$, 'range.startContainer' );
\r
956 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
957 assert.areSame( document.getElementById( '_EnlargeP8' ), range.endContainer.$, 'range.endContainer' );
\r
958 assert.areSame( 4, range.endOffset, 'range.endOffset' );
\r
959 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
962 test_enlarge_list3 : function()
\r
964 var range = getRange( 'S3', null );
\r
965 range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );
\r
967 assert.areSame( document.getElementById( '_EnlargeP9' ), range.startContainer.$, 'range.startContainer' );
\r
968 assert.areSame( 2, range.startOffset, 'range.startOffset' );
\r
969 assert.areSame( document.getElementById( '_EnlargeP9' ), range.endContainer.$, 'range.endContainer' );
\r
970 assert.areSame( 3, range.endOffset, 'range.endOffset' );
\r
971 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
974 test_enlarge_list4 : function()
\r
976 var range = getRange( 'S4', null );
\r
977 range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );
\r
979 assert.areSame( document.getElementById( '_EnlargeP10' ), range.startContainer.$, 'range.startContainer' );
\r
980 assert.areSame( 3, range.startOffset, 'range.startOffset' );
\r
981 assert.areSame( document.getElementById( '_EnlargeP10' ), range.endContainer.$, 'range.endContainer' );
\r
982 assert.areSame( 5, range.endOffset, 'range.endOffset' );
\r
983 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
986 test_enlarge_list5 : function()
\r
988 var range = getRange( 'S9', null );
\r
989 var bookmark = range.createBookmark();
\r
990 range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );
\r
992 assert.areSame( document.getElementById( '_EnlargeP15' ), range.startContainer.$, 'range.startContainer' );
\r
993 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
994 assert.areSame( document.getElementById( '_EnlargeP15' ), range.endContainer.$, 'range.endContainer' );
\r
995 assert.areSame( 4, range.endOffset, 'range.endOffset' );
\r
996 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
997 range.moveToBookmark( bookmark );
\r
1000 test_enlarge_block1 : function()
\r
1002 var range = getRange( 'S5', null );
\r
1003 range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );
\r
1005 assert.areSame( document.getElementById( '_EnlargeP11' ), range.startContainer.$, 'range.startContainer' );
\r
1006 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1007 assert.areSame( document.getElementById( '_EnlargeP11'), range.endContainer.$, 'range.endContainer' );
\r
1008 assert.areSame( 5, range.endOffset, 'range.endOffset' );
\r
1009 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
1012 test_enlarge_block2 : function()
\r
1014 var range = getRange( 'S10', null );
\r
1015 var bookmark = range.createBookmark();
\r
1016 range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );
\r
1018 assert.areSame( document.getElementById( '_EnlargeP16' ), range.startContainer.$, 'range.startContainer' );
\r
1019 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1020 assert.areSame( document.getElementById( '_EnlargeP16'), range.endContainer.$, 'range.endContainer' );
\r
1021 assert.areSame( 5, range.endOffset, 'range.endOffset' );
\r
1022 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
1023 range.moveToBookmark( bookmark );
\r
1026 test_enlarge_block3 : function()
\r
1028 var range = getRange( 'S6', null );
\r
1029 range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );
\r
1031 assert.areSame( document.getElementById( '_EnlargeP12' ), range.startContainer.$, 'range.startContainer' );
\r
1032 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1033 assert.areSame( document.getElementById( '_EnlargeP12'), range.endContainer.$, 'range.endContainer' );
\r
1034 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
1035 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
1038 test_enlarge_block4 : function()
\r
1040 var range = getRange( 'S7', null );
\r
1041 range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );
\r
1043 assert.areSame( document.getElementById( '_EnlargeP13' ), range.startContainer.$, 'range.startContainer' );
\r
1044 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1045 assert.areSame( document.getElementById( '_EnlargeP13'), range.endContainer.$, 'range.endContainer' );
\r
1046 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
1047 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
1050 test_enlarge_block5 : function()
\r
1052 var range = getRange( 'S8', null );
\r
1053 range.enlarge( CKEDITOR.ENLARGE_BLOCK_CONTENTS );
\r
1055 assert.areSame( document.getElementById( '_EnlargeP14' ), range.startContainer.$, 'range.startContainer' );
\r
1056 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1057 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1061 * Test enlarge list when there's no nodes between
\r
1062 * range start and the block boundary.
\r
1064 test_enlarge_block6 : function()
\r
1066 var range = getRange( 'S11', null );
\r
1067 range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );
\r
1069 assert.areSame( document.getElementById( '_EnlargeP17' ),
\r
1070 range.startContainer.$, 'range.startContainer' );
\r
1071 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1074 test_deleteContents_W3C_1 : function()
\r
1076 // W3C DOM Range Specs - Section 2.6 - Example 1
\r
1078 var range = new CKEDITOR.dom.range( doc );
\r
1079 range.setStart( doc.getById( '_Para' ).getFirst(), 1 );
\r
1080 range.setEnd( doc.getById( '_Para' ), 2 );
\r
1082 range.deleteContents();
\r
1084 assert.areSame( 't text.', getInnerHtml( '_Para' ), 'HTML after deletion' );
\r
1086 assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );
\r
1087 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
1088 assert.areSame( document.getElementById( '_Para' ).firstChild, range.endContainer.$, 'range.endContainer' );
\r
1089 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
1090 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1093 test_deleteContents_W3C_2 : function()
\r
1095 // W3C DOM Range Specs - Section 2.6 - Example 2
\r
1097 var range = new CKEDITOR.dom.range( doc );
\r
1098 range.setStart( doc.getById( '_B' ).getFirst(), 1 );
\r
1099 range.setEnd( doc.getById( '_B' ).getNext(), 1 );
\r
1101 range.deleteContents();
\r
1103 assert.areSame( 'this is <b id="_b">s</b>text.', getInnerHtml( '_Para' ) );
\r
1105 assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );
\r
1106 assert.areSame( 2, range.startOffset, 'range.startOffset' );
\r
1107 assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );
\r
1108 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
1109 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1112 test_deleteContents_W3C_3 : function()
\r
1114 // W3C DOM Range Specs - Section 2.6 - Example 3
\r
1116 var range = new CKEDITOR.dom.range( doc );
\r
1117 range.setStart( doc.getById( '_B' ).getPrevious(), 1 );
\r
1118 range.setEnd( doc.getById( '_B' ).getFirst(), 1 );
\r
1120 range.deleteContents();
\r
1122 assert.areSame( 't<b id="_b">ome</b> text.', getInnerHtml( '_Para' ) );
\r
1124 assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );
\r
1125 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
1126 assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );
\r
1127 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
1128 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1131 test_deleteContents_W3C_4 : function()
\r
1133 // W3C DOM Range Specs - Section 2.6 - Example 4
\r
1135 var range = new CKEDITOR.dom.range( doc );
\r
1136 range.setStart( doc.getById( '_H1' ).getFirst(), 1 );
\r
1137 range.setEnd( doc.getById( 'playground' ).getLast().getFirst(), 1 );
\r
1139 range.deleteContents();
\r
1141 assert.areSame( '<h1 id="_h1">f</h1><p>nother paragraph.</p>', getInnerHtml( 'playground' ) );
\r
1143 assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );
\r
1144 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
1145 assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );
\r
1146 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
1147 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1150 test_deleteContents_Other : function()
\r
1152 var range = new CKEDITOR.dom.range( doc );
\r
1153 range.setStart( doc.getById( '_H1' ), 0 );
\r
1154 range.setEnd( doc.getById( 'playground' ).getLast(), 1 );
\r
1156 range.deleteContents();
\r
1158 assert.areSame( '<h1 id="_h1"></h1><p></p>', getInnerHtml( 'playground' ) );
\r
1160 assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );
\r
1161 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
1162 assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );
\r
1163 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
1164 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1167 test_deleteContents_Other_2 : function()
\r
1169 var range = new CKEDITOR.dom.range( doc );
\r
1170 range.setStart( doc.getById( 'playground' ), 0 );
\r
1171 range.setEnd( doc.getById( 'playground' ), 2 );
\r
1173 range.deleteContents();
\r
1175 assert.areSame( '<p>another paragraph.</p>', getInnerHtml( 'playground' ) );
\r
1177 assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );
\r
1178 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1179 assert.areSame(document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );
\r
1180 assert.areSame( 0, range.endOffset, 'range.endOffset' );
\r
1181 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1184 test_deleteContents_Other_3 : function()
\r
1186 var range = new CKEDITOR.dom.range( doc );
\r
1187 range.selectNodeContents( doc.getById('_B') );
\r
1189 range.deleteContents();
\r
1191 assert.areSame( '', getInnerHtml('_B') );
\r
1193 assert.areSame( document.getElementById('_B'), range.startContainer.$, 'range.startContainer' );
\r
1194 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1195 assert.areSame( document.getElementById('_B'), range.endContainer.$, 'range.endContainer' );
\r
1196 assert.areSame( 0, range.endOffset, 'range.endOffset' );
\r
1197 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1200 test_deleteContents_Other_4 : function()
\r
1202 var range = new CKEDITOR.dom.range( doc );
\r
1203 range.selectNodeContents( doc.getById('_Para') );
\r
1205 range.deleteContents();
\r
1207 assert.areSame( '', getInnerHtml('_Para') );
\r
1209 assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'range.startContainer' );
\r
1210 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1211 assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'range.endContainer' );
\r
1212 assert.areSame( 0, range.endOffset, 'range.endOffset' );
\r
1213 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1216 test_extractContents_W3C_1 : function()
\r
1218 // W3C DOM Range Specs - Section 2.7 - Example 1
\r
1220 var range = new CKEDITOR.dom.range( doc );
\r
1221 range.setStart( doc.getById( '_Para' ).getFirst(), 1 );
\r
1222 range.setEnd( doc.getById( '_Para' ), 2 );
\r
1224 var docFrag = range.extractContents();
\r
1226 var tmpDiv = doc.createElement( 'div' );
\r
1227 docFrag.appendTo( tmpDiv );
\r
1229 assert.areSame( 'his is <b id="_b">some</b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );
\r
1230 assert.areSame( 't text.', getInnerHtml( '_Para' ), 'HTML after extraction' );
\r
1232 assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );
\r
1233 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
1234 assert.areSame( document.getElementById( '_Para' ).firstChild, range.endContainer.$, 'range.endContainer' );
\r
1235 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
1236 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1239 test_extractContents_W3C_2 : function()
\r
1241 // W3C DOM Range Specs - Section 2.7 - Example 2
\r
1243 var range = new CKEDITOR.dom.range( doc );
\r
1244 range.setStart( doc.getById( '_B' ).getFirst(), 1 );
\r
1245 range.setEnd( doc.getById( '_B' ).getNext(), 2 );
\r
1247 var docFrag = range.extractContents();
\r
1249 var tmpDiv = doc.createElement( 'div' );
\r
1250 docFrag.appendTo( tmpDiv );
\r
1252 assert.areSame( '<b>ome</b> t', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );
\r
1253 assert.areSame( 'this is <b id="_b">s</b>ext.', getInnerHtml( '_Para' ), 'HTML after extraction' );
\r
1255 assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );
\r
1256 assert.areSame( 2, range.startOffset, 'range.startOffset' );
\r
1257 assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );
\r
1258 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
1259 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1262 test_extractContents_W3C_3 : function()
\r
1264 // W3C DOM Range Specs - Section 2.6 - Example 3
\r
1266 var range = new CKEDITOR.dom.range( doc );
\r
1267 range.setStart( doc.getById( '_B' ).getPrevious(), 1 );
\r
1268 range.setEnd( doc.getById( '_B' ).getFirst(), 1 );
\r
1270 var docFrag = range.extractContents();
\r
1272 var tmpDiv = doc.createElement( 'div' );
\r
1273 docFrag.appendTo( tmpDiv );
\r
1275 assert.areSame( 'his is <b>s</b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );
\r
1276 assert.areSame( 't<b id="_b">ome</b> text.', getInnerHtml( '_Para' ), 'HTML after extraction' );
\r
1278 assert.areSame( document.getElementById( '_Para' ), range.startContainer.$, 'range.startContainer' );
\r
1279 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
1280 assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );
\r
1281 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
1282 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1285 test_extractContents_W3C_4 : function()
\r
1287 // W3C DOM Range Specs - Section 2.6 - Example 4
\r
1289 var range = new CKEDITOR.dom.range( doc );
\r
1290 range.setStart( doc.getById( '_H1' ).getFirst(), 1 );
\r
1291 range.setEnd( doc.getById( 'playground' ).getLast().getFirst(), 1 );
\r
1293 var docFrag = range.extractContents();
\r
1295 var tmpDiv = doc.createElement( 'div' );
\r
1296 docFrag.appendTo( tmpDiv );
\r
1298 assert.areSame( '<h1>ckw3crange test</h1><p id="_para">this is <b id="_b">some</b> text.</p><p>a</p>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );
\r
1299 assert.areSame( '<h1 id="_h1">f</h1><p>nother paragraph.</p>', getInnerHtml( 'playground' ) );
\r
1301 assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );
\r
1302 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
1303 assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );
\r
1304 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
1305 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1308 test_extractContents_Other : function()
\r
1310 var range = new CKEDITOR.dom.range( doc );
\r
1311 range.setStart( doc.getById( '_H1' ), 0 );
\r
1312 range.setEnd( doc.getById( 'playground' ).getLast(), 1 );
\r
1314 var docFrag = range.extractContents();
\r
1316 var tmpDiv = doc.createElement( 'div' );
\r
1317 docFrag.appendTo( tmpDiv );
\r
1319 assert.areSame( '<h1>fckw3crange test</h1><p id="_para">this is <b id="_b">some</b> text.</p><p>another paragraph.</p>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );
\r
1320 assert.areSame( '<h1 id="_h1"></h1><p></p>', getInnerHtml( 'playground' ) );
\r
1322 assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );
\r
1323 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
1324 assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );
\r
1325 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
1326 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1329 test_extractContents_Other_2 : function()
\r
1331 var range = new CKEDITOR.dom.range( doc );
\r
1332 range.setStart( doc.getById( 'playground' ), 0 );
\r
1333 range.setEnd( doc.getById( 'playground' ), 2 );
\r
1335 var docFrag = range.extractContents();
\r
1337 var tmpDiv = doc.createElement( 'div' );
\r
1338 docFrag.appendTo( tmpDiv );
\r
1340 assert.areSame( '<h1 id="_h1">fckw3crange test</h1><p id="_para">this is <b id="_b">some</b> text.</p>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );
\r
1341 assert.areSame( '<p>another paragraph.</p>', getInnerHtml( 'playground' ) );
\r
1343 assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );
\r
1344 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1345 assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );
\r
1346 assert.areSame( 0, range.endOffset, 'range.endOffset' );
\r
1347 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1350 test_extractContents_Other_3 : function()
\r
1352 var range = new CKEDITOR.dom.range( doc );
\r
1354 range.selectNodeContents( doc.getById('_B') );
\r
1356 var docFrag = range.extractContents();
\r
1358 var tmpDiv = doc.createElement( 'div' );
\r
1359 docFrag.appendTo( tmpDiv );
\r
1361 assert.areSame( 'some', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );
\r
1362 assert.areSame( '', getInnerHtml('_B'), 'HTML after extraction' );
\r
1364 assert.areSame( document.getElementById('_B'), range.startContainer.$, 'range.startContainer' );
\r
1365 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1366 assert.areSame( document.getElementById('_B'), range.endContainer.$, 'range.endContainer' );
\r
1367 assert.areSame( 0, range.endOffset, 'range.endOffset' );
\r
1368 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1371 test_extractContents_Other_4 : function()
\r
1373 var range = new CKEDITOR.dom.range( doc );
\r
1375 range.selectNodeContents( doc.getById('_Para') );
\r
1377 var docFrag = range.extractContents();
\r
1379 var tmpDiv = doc.createElement( 'div' );
\r
1380 docFrag.appendTo( tmpDiv );
\r
1382 assert.areSame( 'this is <b id="_b">some</b> text.', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );
\r
1383 assert.areSame( '', getInnerHtml('_Para'), 'HTML after extraction' );
\r
1385 assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'range.startContainer' );
\r
1386 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1387 assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'range.endContainer' );
\r
1388 assert.areSame( 0, range.endOffset, 'range.endOffset' );
\r
1389 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1392 test_extractContents_Other_5 : function()
\r
1394 document.getElementById( 'playground' ).innerHTML = '<p><b><i>test</i></b></p>';
\r
1396 var range = new CKEDITOR.dom.range( doc );
\r
1397 range.setStartAfter( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('i')[0] ) );
\r
1398 range.setEndAfter( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('b')[0] ) );
\r
1400 var docFrag = range.extractContents();
\r
1402 var tmpDiv = doc.createElement( 'div' );
\r
1403 docFrag.appendTo( tmpDiv );
\r
1405 assert.areSame( '<b></b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );
\r
1406 assert.areSame( '<p><b><i>test</i></b></p>', getInnerHtml( 'playground' ), 'HTML after extraction' );
\r
1408 assert.areSame( document.getElementById( 'playground' ).firstChild, range.startContainer.$, 'range.startContainer' );
\r
1409 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
1410 assert.areSame( document.getElementById( 'playground' ).firstChild, range.endContainer.$, 'range.endContainer' );
\r
1411 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
1412 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1415 test_extractContents_Other_6 : function()
\r
1417 document.getElementById( 'playground' ).innerHTML = '<p><b><i>test</i></b></p>';
\r
1419 var range = new CKEDITOR.dom.range( doc );
\r
1421 range.setStartBefore( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('b')[0] ) );
\r
1422 range.setEndBefore( new CKEDITOR.dom.element( document.getElementById( 'playground' ).getElementsByTagName('i')[0] ) );
\r
1424 var docFrag = range.extractContents();
\r
1426 var tmpDiv = doc.createElement( 'div' );
\r
1427 docFrag.appendTo( tmpDiv );
\r
1429 assert.areSame( '<b></b>', getInnerHtml( tmpDiv.$ ), 'Extracted HTML' );
\r
1430 assert.areSame( '<p><b><i>test</i></b></p>', getInnerHtml( 'playground' ), 'HTML after extraction' );
\r
1432 assert.areSame( document.getElementById( 'playground' ).firstChild, range.startContainer.$, 'range.startContainer' );
\r
1433 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1434 assert.areSame( document.getElementById( 'playground' ).firstChild, range.endContainer.$, 'range.endContainer' );
\r
1435 assert.areSame( 0, range.endOffset, 'range.endOffset' );
\r
1436 assert.isTrue( range.collapsed, 'range.collapsed' );
\r
1439 test_cloneContents_W3C_1 : function()
\r
1441 // W3C DOM Range Specs - Section 2.7 - Example 1
\r
1443 var range = new CKEDITOR.dom.range( doc );
\r
1444 range.setStart( doc.getById( '_Para' ).getFirst(), 1 );
\r
1445 range.setEnd( doc.getById( '_Para' ), 2 );
\r
1447 var bodyHtml = document.getElementById( 'playground' ).innerHTML;
\r
1449 var docFrag = range.cloneContents();
\r
1451 var tmpDiv = doc.createElement( 'div' );
\r
1452 docFrag.appendTo( tmpDiv );
\r
1454 assert.areSame( 'his is <b>some</b>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );
\r
1456 // The body HTML must remain unchanged.
\r
1457 assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );
\r
1459 // The range must also remain unchanged.
\r
1460 assert.areSame( document.getElementById( '_Para' ).firstChild, range.startContainer.$, 'range.startContainer' );
\r
1461 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
1462 assert.areSame( document.getElementById( '_Para' ), range.endContainer.$, 'range.endContainer' );
\r
1463 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
1464 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
1467 test_cloneContents_W3C_2 : function()
\r
1469 // W3C DOM Range Specs - Section 2.7 - Example 2
\r
1471 var range = new CKEDITOR.dom.range( doc );
\r
1472 range.setStart( doc.getById( '_B' ).getFirst(), 1 );
\r
1473 range.setEnd( doc.getById( '_B' ).getNext(), 2 );
\r
1475 var bodyHtml = document.getElementById( 'playground' ).innerHTML;
\r
1477 var docFrag = range.cloneContents();
\r
1479 var tmpDiv = doc.createElement( 'div' );
\r
1480 docFrag.appendTo( tmpDiv );
\r
1482 assert.areSame( '<b>ome</b> t', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );
\r
1484 // The body HTML must remain unchanged.
\r
1485 assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );
\r
1487 // The range must also remain unchanged.
\r
1488 assert.areSame( document.getElementById( '_B' ).firstChild, range.startContainer.$, 'range.startContainer' );
\r
1489 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
1490 assert.areSame( document.getElementById( '_B' ).nextSibling, range.endContainer.$, 'range.endContainer' );
\r
1491 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
1492 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
1495 test_cloneContents_W3C_3 : function()
\r
1497 // W3C DOM Range Specs - Section 2.6 - Example 3
\r
1499 var range = new CKEDITOR.dom.range( doc );
\r
1500 range.setStart( doc.getById( '_B' ).getPrevious(), 1 );
\r
1501 range.setEnd( doc.getById( '_B' ).getFirst(), 1 );
\r
1503 var bodyHtml = document.getElementById( 'playground' ).innerHTML;
\r
1505 var docFrag = range.cloneContents();
\r
1507 var tmpDiv = doc.createElement( 'div' );
\r
1508 docFrag.appendTo( tmpDiv );
\r
1510 assert.areSame( 'his is <b>s</b>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );
\r
1512 // The body HTML must remain unchanged.
\r
1513 assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );
\r
1515 // The range must also remain unchanged.
\r
1516 assert.areSame( document.getElementById( '_B' ).previousSibling, range.startContainer.$, 'range.startContainer' );
\r
1517 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
1518 assert.areSame( document.getElementById( '_B' ).firstChild, range.endContainer.$, 'range.endContainer' );
\r
1519 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
1520 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
1523 // W3C DOM Range Specs - Section 2.6 - Example 4
\r
1524 test_cloneContents_W3C_4 : function()
\r
1526 var range = new CKEDITOR.dom.range( doc );
\r
1528 range.setStart( doc.getById( '_H1' ).getFirst(), 1 );
\r
1529 range.setEnd( doc.getById( 'playground' ).getLast().getFirst(), 1 );
\r
1531 var bodyHtml = document.getElementById( 'playground' ).innerHTML;
\r
1533 var docFrag = range.cloneContents();
\r
1535 var tmpDiv = doc.createElement( 'div' );
\r
1536 docFrag.appendTo( tmpDiv );
\r
1538 assert.areSame( '<h1>ckw3crange test</h1><p>this is <b>some</b> text.</p><p>a</p>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );
\r
1540 // The body HTML must remain unchanged.
\r
1541 assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );
\r
1543 // The range must also remain unchanged.
\r
1544 assert.areSame( document.getElementById( '_H1' ).firstChild, range.startContainer.$, 'range.startContainer' );
\r
1545 assert.areSame( 1, range.startOffset, 'range.startOffset' );
\r
1546 assert.areSame( document.getElementById( 'playground' ).lastChild.firstChild, range.endContainer.$, 'range.endContainer' );
\r
1547 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
1548 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
1551 test_cloneContents_Other : function()
\r
1553 var range = new CKEDITOR.dom.range( doc );
\r
1555 range.setStart( doc.getById( '_H1' ), 0 );
\r
1556 range.setEnd( doc.getById( 'playground' ).getLast(), 1 );
\r
1558 var bodyHtml = document.getElementById( 'playground' ).innerHTML;
\r
1560 var docFrag = range.cloneContents();
\r
1562 var tmpDiv = doc.createElement( 'div' );
\r
1563 docFrag.appendTo( tmpDiv );
\r
1565 assert.areSame( '<h1>fckw3crange test</h1><p>this is <b>some</b> text.</p><p>another paragraph.</p>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );
\r
1567 // The body HTML must remain unchanged.
\r
1568 assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );
\r
1570 // The range must also remain unchanged.
\r
1571 assert.areSame( document.getElementById( '_H1' ), range.startContainer.$, 'range.startContainer' );
\r
1572 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1573 assert.areSame( document.getElementById( 'playground' ).lastChild, range.endContainer.$, 'range.endContainer' );
\r
1574 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
1575 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
1578 test_cloneContents_Other_2 : function()
\r
1580 var range = new CKEDITOR.dom.range( doc );
\r
1582 range.setStart( doc.getById( 'playground' ), 0 );
\r
1583 range.setEnd( doc.getById( 'playground' ), 2 );
\r
1585 var bodyHtml = document.getElementById( 'playground' ).innerHTML;
\r
1587 var docFrag = range.cloneContents();
\r
1589 var tmpDiv = doc.createElement( 'div' );
\r
1590 docFrag.appendTo( tmpDiv );
\r
1592 assert.areSame( '<h1>fckw3crange test</h1><p>this is <b>some</b> text.</p>', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );
\r
1594 // The body HTML must remain unchanged.
\r
1595 assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );
\r
1597 // The range must also remain unchanged.
\r
1598 assert.areSame( document.getElementById( 'playground' ), range.startContainer.$, 'range.startContainer' );
\r
1599 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1600 assert.areSame( document.getElementById( 'playground' ), range.endContainer.$, 'range.endContainer' );
\r
1601 assert.areSame( 2, range.endOffset, 'range.endOffset' );
\r
1602 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
1605 test_cloneContents_Other_3 : function()
\r
1607 var range = new CKEDITOR.dom.range( doc );
\r
1609 range.selectNodeContents( doc.getById('_B') );
\r
1611 var bodyHtml = document.getElementById( 'playground' ).innerHTML;
\r
1613 var docFrag = range.cloneContents();
\r
1615 var tmpDiv = doc.createElement( 'div' );
\r
1616 docFrag.appendTo( tmpDiv );
\r
1618 assert.areSame( 'some', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );
\r
1620 // The body HTML must remain unchanged.
\r
1621 assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );
\r
1623 assert.areSame( document.getElementById('_B'), range.startContainer.$, 'range.startContainer' );
\r
1624 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1625 assert.areSame( document.getElementById('_B'), range.endContainer.$, 'range.endContainer' );
\r
1626 assert.areSame( 1, range.endOffset, 'range.endOffset' );
\r
1627 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
1630 test_cloneContents_Other_4 : function()
\r
1632 var range = new CKEDITOR.dom.range( doc );
\r
1634 range.selectNodeContents( doc.getById('_Para') );
\r
1636 var bodyHtml = document.getElementById( 'playground' ).innerHTML;
\r
1638 var docFrag = range.cloneContents();
\r
1640 var tmpDiv = doc.createElement( 'div' );
\r
1641 docFrag.appendTo( tmpDiv );
\r
1643 assert.areSame( 'this is <b>some</b> text.', getInnerHtml( tmpDiv.$ ), 'Cloned HTML' );
\r
1645 // The body HTML must remain unchanged.
\r
1646 assert.areSame( bodyHtml.replace( /\s+_cke_expando=["\d]+/g, '' ), document.getElementById( 'playground' ).innerHTML.replace( /\s+_cke_expando=["\d]+/g, '' ), 'The HTML must remain untouched' );
\r
1648 assert.areSame( document.getElementById('_Para'), range.startContainer.$, 'range.startContainer' );
\r
1649 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1650 assert.areSame( document.getElementById('_Para'), range.endContainer.$, 'range.endContainer' );
\r
1651 assert.areSame( 3, range.endOffset, 'range.endOffset' );
\r
1652 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
1655 test_createBookmark2_1 : function()
\r
1657 doc.getById( 'playground' ).setHtml( '<p id="P">This is <b id="B">a test</b></p>' );
\r
1659 var range = new CKEDITOR.dom.range( doc );
\r
1661 range.setStart( doc.getById( 'P' ), 0 );
\r
1662 range.setEnd( doc.getById( 'B' ).getFirst(), 3 );
\r
1664 var bookmark = range.createBookmark2();
\r
1666 range = new CKEDITOR.dom.range( doc );
\r
1667 range.moveToBookmark( bookmark );
\r
1669 assert.areSame( document.getElementById('P'), range.startContainer.$, 'range.startContainer' );
\r
1670 assert.areSame( 0, range.startOffset, 'range.startOffset' );
\r
1671 assert.areSame( document.getElementById('B').firstChild, range.endContainer.$, 'range.endContainer' );
\r
1672 assert.areSame( 3, range.endOffset, 'range.endOffset' );
\r
1673 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
1676 // This test is just like test_createBookmark2_3, but uses a "non
\r
1677 // normalized" bookmark.
\r
1678 test_createBookmark2_2 : function()
\r
1680 var html = '<p id="P">A B <b>C </b>D E</p>';
\r
1682 doc.getById( 'playground' ).setHtml( html );
\r
1684 var p = doc.getById( 'P' );
\r
1686 // Split the text nodes.
\r
1687 p.getFirst().split( 2 ); // Right before "B"
\r
1688 p.getChild( 3 ).split( 2 ); // Right before "E"
\r
1690 assert.areSame( 5, p.getChildCount(), 'The number of nodes after split doesn\'t match' );
\r
1692 var range = new CKEDITOR.dom.range( doc );
\r
1694 // Create a range that enbraces "E".
\r
1695 range.setStartBefore( p.getChild( 4 ) );
\r
1696 range.setEndAfter( p.getChild( 4 ) );
\r
1698 var bookmark = range.createBookmark2();
\r
1700 range = new CKEDITOR.dom.range( doc );
\r
1701 range.moveToBookmark( bookmark );
\r
1703 assert.areSame( document.getElementById('P'), range.startContainer.$, 'range.startContainer' );
\r
1704 assert.areSame( 4, range.startOffset, 'range.startOffset' );
\r
1705 assert.areSame( document.getElementById('P'), range.endContainer.$, 'range.endContainer' );
\r
1706 assert.areSame( 5, range.endOffset, 'range.endOffset' );
\r
1707 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
1710 test_createBookmark2_3 : function()
\r
1712 var html = '<p id="P">A B <b>C </b>D E</p>';
\r
1714 doc.getById( 'playground' ).setHtml( html );
\r
1716 var p = doc.getById( 'P' );
\r
1718 // Split the text nodes.
\r
1719 p.getFirst().split( 2 ); // Right before "B"
\r
1720 p.getChild( 3 ).split( 2 ); // Right before "E"
\r
1722 assert.areSame( 5, p.getChildCount(), 'The number of nodes after split doesn\'t match' );
\r
1724 var range = new CKEDITOR.dom.range( doc );
\r
1726 // Create a range that enbraces "E".
\r
1727 range.setStartBefore( p.getChild( 4 ) );
\r
1728 range.setEndAfter( p.getChild( 4 ) );
\r
1730 var bookmark = range.createBookmark2( true );
\r
1732 // Normalize the contents.
\r
1733 doc.getById( 'playground' ).setHtml( html );
\r
1735 range = new CKEDITOR.dom.range( doc );
\r
1736 range.moveToBookmark( bookmark );
\r
1738 assert.areSame( document.getElementById('P').childNodes[2], range.startContainer.$, 'range.startContainer' );
\r
1739 assert.areSame( 2, range.startOffset, 'range.startOffset' );
\r
1740 assert.areSame( document.getElementById('P'), range.endContainer.$, 'range.endContainer' );
\r
1742 // Note that the endOffset doesn't get normalized as it's not
\r
1743 // needed. Any offset pointing over the container size is meant to
\r
1744 // be at the end of it.
\r
1745 assert.areSame( 5, range.endOffset, 'range.endOffset' );
\r
1746 assert.isFalse( range.collapsed, 'range.collapsed' );
\r
1749 test_checkStartOfBlock1 : function()
\r
1751 var p = doc.getById( 'playground' );
\r
1752 p.setHtml( '<p>Test</p>' );
\r
1755 var range = new CKEDITOR.dom.range( doc );
\r
1757 range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );
\r
1758 range.collapse( true );
\r
1760 assert.isTrue( range.checkStartOfBlock() );
\r
1763 test_checkStartOfBlock2 : function()
\r
1765 var p = doc.getById( 'playground' );
\r
1766 p.setHtml( '<p>Test</p>' );
\r
1769 var range = new CKEDITOR.dom.range( doc );
\r
1771 range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );
\r
1772 range.collapse( true );
\r
1774 assert.isFalse( range.checkStartOfBlock() );
\r
1777 test_checkStartOfBlock3 : function()
\r
1779 var p = doc.getById( 'playground' );
\r
1780 p.setHtml( '<p>Test</p>' );
\r
1783 var range = new CKEDITOR.dom.range( doc );
\r
1785 range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );
\r
1786 range.collapse( true );
\r
1788 assert.isTrue( range.checkStartOfBlock() );
\r
1791 test_checkStartOfBlock4 : function()
\r
1793 var p = doc.getById( 'playground' );
\r
1794 p.setHtml( '<p>Test</p>' );
\r
1797 var range = new CKEDITOR.dom.range( doc );
\r
1799 range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );
\r
1800 range.collapse( true );
\r
1802 assert.isFalse( range.checkStartOfBlock() );
\r
1805 test_checkStartOfBlock5 : function()
\r
1807 var el = doc.getById( 'playground' );
\r
1808 el.setHtml( '<p> Test </p>' );
\r
1809 el = el.getFirst().getFirst();
\r
1811 var range = new CKEDITOR.dom.range( doc );
\r
1813 // IE trims the space in the beginning of text nodes in our case.
\r
1814 // So, let's just check it and make it pass.
\r
1815 range.setStart( el, ( el.substring( 0, 1 ) == 'T' ) ? 0 : 1 );
\r
1816 range.collapse( true );
\r
1818 assert.isTrue( range.checkStartOfBlock() );
\r
1821 test_checkStartOfBlock6 : function()
\r
1823 var p = doc.getById( 'playground' );
\r
1824 p.setHtml( '<p> Test </p>' );
\r
1827 var range = new CKEDITOR.dom.range( doc );
\r
1829 range.setStart( p.getFirst(), 5 );
\r
1830 range.collapse( true );
\r
1832 assert.isFalse( range.checkStartOfBlock() );
\r
1835 test_checkStartOfBlock7 : function()
\r
1837 var el = doc.getById( 'playground' );
\r
1838 el.setHtml( '<p><b>Test</b></p>' );
\r
1839 el = el.getFirst().getFirst();
\r
1841 var range = new CKEDITOR.dom.range( doc );
\r
1842 range.selectNodeContents( el );
\r
1844 assert.isTrue( range.checkStartOfBlock() );
\r
1847 test_checkStartOfBlock8 : function()
\r
1849 var el = doc.getById( 'playground' );
\r
1850 el.setHtml( '<p>A<b>Test</b>B</p>' );
\r
1851 el = el.getFirst().getFirst().getNext();
\r
1853 var range = new CKEDITOR.dom.range( doc );
\r
1854 range.selectNodeContents( el );
\r
1856 assert.isFalse( range.checkStartOfBlock() );
\r
1859 test_checkEndOfBlock1 : function()
\r
1861 var p = doc.getById( 'playground' );
\r
1862 p.setHtml( '<p>Test</p>' );
\r
1865 var range = new CKEDITOR.dom.range( doc );
\r
1867 range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );
\r
1868 range.collapse( true );
\r
1870 assert.isFalse( range.checkEndOfBlock() );
\r
1873 test_checkEndOfBlock2 : function()
\r
1875 var p = doc.getById( 'playground' );
\r
1876 p.setHtml( '<p>Test</p>' );
\r
1879 var range = new CKEDITOR.dom.range( doc );
\r
1881 range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );
\r
1882 range.collapse( true );
\r
1884 assert.isTrue( range.checkEndOfBlock() );
\r
1887 test_checkEndOfBlock3 : function()
\r
1889 var p = doc.getById( 'playground' );
\r
1890 p.setHtml( '<p>Test</p>' );
\r
1893 var range = new CKEDITOR.dom.range( doc );
\r
1895 range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );
\r
1896 range.collapse( true );
\r
1898 assert.isFalse( range.checkEndOfBlock() );
\r
1901 test_checkEndOfBlock4 : function()
\r
1903 var p = doc.getById( 'playground' );
\r
1904 p.setHtml( '<p>Test</p>' );
\r
1907 var range = new CKEDITOR.dom.range( doc );
\r
1909 range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );
\r
1910 range.collapse( true );
\r
1912 assert.isTrue( range.checkEndOfBlock() );
\r
1915 test_checkEndOfBlock5 : function()
\r
1917 var p = doc.getById( 'playground' );
\r
1918 p.setHtml( '<p> Test </p>' );
\r
1921 var range = new CKEDITOR.dom.range( doc );
\r
1923 range.setStart( p.getFirst(), 1 );
\r
1924 range.collapse( true );
\r
1926 assert.isFalse( range.checkEndOfBlock() );
\r
1929 test_checkEndOfBlock6 : function()
\r
1931 var p = doc.getById( 'playground' );
\r
1932 p.setHtml( '<p> Test </p>' );
\r
1935 var range = new CKEDITOR.dom.range( doc );
\r
1937 range.setStart( p.getFirst(), 5 );
\r
1938 range.collapse( true );
\r
1940 assert.isTrue( range.checkEndOfBlock() );
\r
1943 test_checkEndOfBlock7 : function()
\r
1945 var el = doc.getById( 'playground' );
\r
1946 el.setHtml( '<p><b>Test</b></p>' );
\r
1947 el = el.getFirst().getFirst();
\r
1949 var range = new CKEDITOR.dom.range( doc );
\r
1950 range.selectNodeContents( el );
\r
1952 assert.isTrue( range.checkEndOfBlock() );
\r
1955 test_checkEndOfBlock8 : function()
\r
1957 var el = doc.getById( 'playground' );
\r
1958 el.setHtml( '<p>A<b>Test</b>B</p>' );
\r
1959 el = el.getFirst().getFirst().getNext();
\r
1961 var range = new CKEDITOR.dom.range( doc );
\r
1962 range.selectNodeContents( el );
\r
1964 assert.isFalse( range.checkEndOfBlock() );
\r
1967 test_checkStartOfBlock1 : function()
\r
1969 var p = doc.getById( 'playground' );
\r
1970 p.setHtml( '<p>Test</p>' );
\r
1973 var range = new CKEDITOR.dom.range( doc );
\r
1975 range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );
\r
1976 range.collapse( true );
\r
1978 assert.isTrue( range.checkStartOfBlock() );
\r
1981 test_checkStartOfBlock2 : function()
\r
1983 var p = doc.getById( 'playground' );
\r
1984 p.setHtml( '<p>Test</p>' );
\r
1987 var range = new CKEDITOR.dom.range( doc );
\r
1989 range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );
\r
1990 range.collapse( true );
\r
1992 assert.isFalse( range.checkStartOfBlock() );
\r
1995 test_checkStartOfBlock3 : function()
\r
1997 var p = doc.getById( 'playground' );
\r
1998 p.setHtml( '<p>Test</p>' );
\r
2001 var range = new CKEDITOR.dom.range( doc );
\r
2003 range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );
\r
2004 range.collapse( true );
\r
2006 assert.isTrue( range.checkStartOfBlock() );
\r
2009 test_checkStartOfBlock4 : function()
\r
2011 var p = doc.getById( 'playground' );
\r
2012 p.setHtml( '<p>Test</p>' );
\r
2015 var range = new CKEDITOR.dom.range( doc );
\r
2017 range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );
\r
2018 range.collapse( true );
\r
2020 assert.isFalse( range.checkStartOfBlock() );
\r
2023 test_checkStartOfBlock5 : function()
\r
2025 var el = doc.getById( 'playground' );
\r
2026 el.setHtml( '<p> Test </p>' );
\r
2027 el = el.getFirst().getFirst();
\r
2029 var range = new CKEDITOR.dom.range( doc );
\r
2031 // IE trims the space in the beginning of text nodes in our case.
\r
2032 // So, let's just check it and make it pass.
\r
2033 range.setStart( el, ( el.substring( 0, 1 ) == 'T' ) ? 0 : 1 );
\r
2034 range.collapse( true );
\r
2036 assert.isTrue( range.checkStartOfBlock() );
\r
2039 test_checkStartOfBlock6 : function()
\r
2041 var p = doc.getById( 'playground' );
\r
2042 p.setHtml( '<p> Test </p>' );
\r
2045 var range = new CKEDITOR.dom.range( doc );
\r
2047 range.setStart( p.getFirst(), 5 );
\r
2048 range.collapse( true );
\r
2050 assert.isFalse( range.checkStartOfBlock() );
\r
2053 test_checkStartOfBlock7 : function()
\r
2055 var el = doc.getById( 'playground' );
\r
2056 el.setHtml( '<p><b>Test</b></p>' );
\r
2057 el = el.getFirst().getFirst();
\r
2059 var range = new CKEDITOR.dom.range( doc );
\r
2060 range.selectNodeContents( el );
\r
2062 assert.isTrue( range.checkStartOfBlock() );
\r
2065 test_checkStartOfBlock8 : function()
\r
2067 var el = doc.getById( 'playground' );
\r
2068 el.setHtml( '<p>A<b>Test</b>B</p>' );
\r
2069 el = el.getFirst().getFirst().getNext();
\r
2071 var range = new CKEDITOR.dom.range( doc );
\r
2072 range.selectNodeContents( el );
\r
2074 assert.isFalse( range.checkStartOfBlock() );
\r
2077 test_checkEndOfBlock1 : function()
\r
2079 var p = doc.getById( 'playground' );
\r
2080 p.setHtml( '<p>Test</p>' );
\r
2083 var range = new CKEDITOR.dom.range( doc );
\r
2085 range.setStartAt( p, CKEDITOR.POSITION_AFTER_START );
\r
2086 range.collapse( true );
\r
2088 assert.isFalse( range.checkEndOfBlock() );
\r
2091 test_checkEndOfBlock2 : function()
\r
2093 var p = doc.getById( 'playground' );
\r
2094 p.setHtml( '<p>Test</p>' );
\r
2097 var range = new CKEDITOR.dom.range( doc );
\r
2099 range.setStartAt( p, CKEDITOR.POSITION_BEFORE_END );
\r
2100 range.collapse( true );
\r
2102 assert.isTrue( range.checkEndOfBlock() );
\r
2105 test_checkEndOfBlock3 : function()
\r
2107 var p = doc.getById( 'playground' );
\r
2108 p.setHtml( '<p>Test</p>' );
\r
2111 var range = new CKEDITOR.dom.range( doc );
\r
2113 range.setStartAt( p.getFirst(), CKEDITOR.POSITION_AFTER_START );
\r
2114 range.collapse( true );
\r
2116 assert.isFalse( range.checkEndOfBlock() );
\r
2119 test_checkEndOfBlock4 : function()
\r
2121 var p = doc.getById( 'playground' );
\r
2122 p.setHtml( '<p>Test</p>' );
\r
2125 var range = new CKEDITOR.dom.range( doc );
\r
2127 range.setStartAt( p.getFirst(), CKEDITOR.POSITION_BEFORE_END );
\r
2128 range.collapse( true );
\r
2130 assert.isTrue( range.checkEndOfBlock() );
\r
2133 test_checkEndOfBlock5 : function()
\r
2135 var p = doc.getById( 'playground' );
\r
2136 p.setHtml( '<p> Test </p>' );
\r
2139 var range = new CKEDITOR.dom.range( doc );
\r
2141 range.setStart( p.getFirst(), 1 );
\r
2142 range.collapse( true );
\r
2144 assert.isFalse( range.checkEndOfBlock() );
\r
2147 test_checkEndOfBlock6 : function()
\r
2149 var p = doc.getById( 'playground' );
\r
2150 p.setHtml( '<p> Test </p>' );
\r
2153 var range = new CKEDITOR.dom.range( doc );
\r
2155 range.setStart( p.getFirst(), 5 );
\r
2156 range.collapse( true );
\r
2158 assert.isTrue( range.checkEndOfBlock() );
\r
2161 test_checkEndOfBlock7 : function()
\r
2163 var el = doc.getById( 'playground' );
\r
2164 el.setHtml( '<p><b>Test</b></p>' );
\r
2165 el = el.getFirst().getFirst();
\r
2167 var range = new CKEDITOR.dom.range( doc );
\r
2168 range.selectNodeContents( el );
\r
2170 assert.isTrue( range.checkEndOfBlock() );
\r
2173 test_checkEndOfBlock8 : function()
\r
2175 var el = doc.getById( 'playground' );
\r
2176 el.setHtml( '<p>A<b>Test</b>B</p>' );
\r
2177 el = el.getFirst().getFirst().getNext();
\r
2179 var range = new CKEDITOR.dom.range( doc );
\r
2180 range.selectNodeContents( el );
\r
2182 assert.isFalse( range.checkEndOfBlock() );
\r
2186 * Test trim with text range.
\r
2188 test_trim : function()
\r
2190 var text = doc.getById( '_trim_ct').getFirst();
\r
2191 var range = new CKEDITOR.dom.range();
\r
2192 range.setStart(text, 2);
\r
2193 range.setEnd(text, 6);
\r
2196 assert.isFalse( range.collapsed );
\r
2197 assert.isTrue( range.startContainer.equals( doc.getById( '_trim_ct') ) );
\r
2198 assert.areEqual( range.startOffset, 1 );
\r
2199 assert.isTrue( range.endContainer.equals( doc.getById( '_trim_ct') ) );
\r
2200 assert.areEqual( range.endOffset, 2 );
\r
2204 * Trim range which collapsed at text node boundary.
\r
2206 test_trim_3790 : function()
\r
2209 var ct = doc.getById( '_trim_ct');
\r
2210 ct.setHtml( '<span id="_SPAN1">text</span>' );
\r
2211 var text = doc.getById( '_trim_ct').getFirst();
\r
2213 // <span id="_SPAN1">text^</span>
\r
2214 var range = new CKEDITOR.dom.range();
\r
2215 range.setStartAt( doc.getById( '_SPAN1' ).getFirst(), CKEDITOR.POSITION_BEFORE_END );
\r
2216 range.collapse( true );
\r
2217 range.trim( true );
\r
2219 // <span id="_SPAN1">text^</span>
\r
2220 assert.isTrue( range.collapsed );
\r
2221 assert.areEqual( doc.getById( '_SPAN1').$, range.startContainer.$ );
\r
2222 assert.areEqual( range.startOffset, 1 );
\r
2226 * Trim range which collapsed inside text node.
\r
2228 test_trim_3790_2 : function()
\r
2231 var ct = doc.getById( '_trim_ct');
\r
2232 ct.setHtml( '<span id="_SPAN1">text</span>' );
\r
2233 var text = doc.getById( '_trim_ct').getFirst();
\r
2235 // <span id="_SPAN1">te^xt</span>
\r
2236 var range = new CKEDITOR.dom.range();
\r
2237 range.setStart( doc.getById( '_SPAN1' ).getFirst(), 2 );
\r
2238 range.collapse( true );
\r
2239 range.trim( true );
\r
2241 // <span id="_SPAN1">te^xt</span>
\r
2242 assert.isTrue( range.collapsed );
\r
2243 assert.areEqual( doc.getById( '_SPAN1').$, range.startContainer.$ );
\r
2244 assert.areEqual( range.startOffset, 1 );
\r
2248 setUp : function()
\r
2250 document.getElementById( 'playground' ).innerHTML = html1;
\r
2251 document.getElementById( 'playground2' ).innerHTML = html2;
\r
2254 name : document.title
\r
2258 //window.onload = tests.test_trim;
\r
2263 <div id="playground" style="visibility:hidden"><h1 id="_H1">FCKW3CRange Test</h1><p id="_Para">This is <b id="_B">some</b> text.</p><p>Another paragraph.</p></div>
\r
2264 <div id="playground2" style="visibility: hidden">
\r
2266 Test page for CKEditor
\r
2269 This document contains various markup features commonly used by content editors
\r
2270 or "<span id="_Span" lang="fr">rédacteurs de contenu</span>" as they are
\r
2271 called in <a id="_A" href="http://en.wikipedia.org/wiki/France" title="Wikipedia article about France">
\r
2273 It is important that a <acronym id="_Acronym" title="what you see is what you get">WYSIWYG</acronym>
\r
2274 tool has features that are easily available for the editor. If not, there is a risk
\r
2275 that content won't receive <strong id="_Strong">proper</strong> markup. Examples
\r
2276 of commonly found content are:</p>
\r
2284 <li style="color: Red">Links (with optional title) </li>
\r
2285 <li>Lists (like this one)
\r
2287 <li>including nested lists </li>
\r
2297 <li>Language information</li>
\r
2298 <li>Acronyms and abbreviations</li>
\r
2299 <li>Emphasis and strong emphasis </li>
\r
2300 <li>Quotes, inline and block </li>
\r
2304 <h2 style="background-color: Silver">
\r
2307 This text has no block tag. It should be corrected when working with the enter key
\r
2308 set to "p" or "div" tags. The "br" configuration should not make changes instead.
\r
2310 In the test we will try to recreate this document using the editor tools. To make
\r
2311 sure tables can be inserted <em id="_Em">properly</em> we re-visit banana import
\r
2312 statistics from 1998.
\r
2315 This paragraph has and image at the very end of its contents.<img id="_Img" src="img.gif"
\r
2318 This text has no block tag.<br />It should be corrected when working with the enter key
\r
2319 set to "p" or "div" tags. The <strong id="_StrongNoPara">"br" configuration</strong>
\r
2320 should not make changes instead.<br />It has three lines separated by BR tags.
\r
2322 In the test we will try to recreate this document using the editor tools. To make
\r
2323 sure tables can be inserted <em>properly</em> we re-visit banana import statistics
\r
2326 <table summary="Sweden was the top importing country by far in 1998.">
\r
2328 Top banana importers 1998 (value of banana imports in millions of US dollars per
\r
2329 million people)<br />
\r
2336 Millions of US dollars per million people</th>
\r
2346 United Kingdom</td>
\r
2364 United States</td>
\r
2370 For block quotes we will have a look at <a href="http://fawny.org/rhcp.html">what Joe
\r
2371 Clark says about redheads</a>:</p>
\r
2372 <blockquote cite="http://fawny.org/rhcp.html#me">
\r
2374 "Since boyhood I’ve always believed, at the deepest level, that redheads are
\r
2375 standard-bearers of the grandest and most wondrous human beauty."</p>
\r
2378 <img src="img.gif" alt="" /></p>
\r
2380 The above is the CKEditor logo loaded from the FCKeditor.net web site.</p>
\r
2381 <p><b id="_B1">Line 1<br />Line 2<br /><i id="_I1">Line 3</i></b></p>
\r
2382 <p id="_EnlargeP"> Test <b id="_EnlargeB"> <i id="_EnlargeI"> Enlarge</i> this</b> </p>
\r
2383 <p id="_EnlargeP1"> Test<b id="_EnlargeB1"> <i id="_EnlargeI1"> Enlarge</i> this</b> </p>
\r
2384 <p id="_EnlargeP2"> <b id="_EnlargeB2"> <i id="_EnlargeI2"> Enlarge</i> this</b> </p>
\r
2385 <p id="_EnlargeP3">Test<i id="_EnlargeI3"> Enlarge</i></p>
\r
2386 <p id="_EnlargeP4">Test <i id="_EnlargeI4"> Enlarge</i></p>
\r
2387 <p id="_EnlargeP5">Test <i id="_EnlargeI5">Enlarge</i></p>
\r
2388 <p id="_EnlargeP6">Test <i id="_EnlargeI6"><b></b>Enlarge</i></p>
\r
2389 <p id="_EnlargeP7">Test <span id="S1"></span>List<br/ >Item Enlarge</p>
\r
2390 <p id="_EnlargeP8">Test <span id="S2"></span>List<span id="E2"></span> <br /><br />Item Enlarge</p>
\r
2391 <p id="_EnlargeP9">Test List <br /><span id="S3"></span><br />Item Enlarge</p>
\r
2392 <p id="_EnlargeP10">Test List <br /><br />Item<span id="S4"></span> Enlarge</p>
\r
2393 <p id="_EnlargeP11">Test <strong>Block<span id="S5"></span></strong><br /><br />Enlarge</p>
\r
2394 <div id="_EnlargeP12">Test<span id="S6"></span> Block <div>Enlarge</div></div>
\r
2395 <div>Test <div id="_EnlargeP13">Blo<span id="S7"></span>ck</div> Enlarge</div>
\r
2396 <p id="_EnlargeP14"><span id="S8"></span></p>
\r
2397 <p id="_EnlargeP15">Test <span id="S9"></span>List<br/ >Item Enlarge</p>
\r
2398 <p id="_EnlargeP16">Test <strong>Block<span id="S10"></span></strong><br /><br />Enlarge</p>
\r
2399 <p id="_EnlargeP17"><span><span id="S11"></span>Test Block Enlarge<span id="E11"></span></span></p>
\r
2400 <p id="_trim_ct">Test trim</p>
\r
2402 <script type="text/javascript">
\r
2405 html1 = document.getElementById( 'playground' ).innerHTML;
\r
2406 html2 = document.getElementById( 'playground2' ).innerHTML;
\r