Index: trunk/extensions/VisualEditor/tests/es/es.DocumentNode.test.js |
— | — | @@ -174,21 +174,21 @@ |
175 | 175 | { |
176 | 176 | 'node': root2, |
177 | 177 | 'input': new es.Range( 0, 1 ), |
178 | | - 'output': [{ 'node': f, 'range': new es.Range( 0, 0 ) }], |
| 178 | + 'output': [{ 'node': f, 'range': new es.Range( 0, 0 ), 'globalRange': new es.Range( 1, 1 ) }], |
179 | 179 | 'desc': 'Range starting before the beginning of a node and ending at the beginning' |
180 | 180 | }, |
181 | 181 | // Test 3 |
182 | 182 | { |
183 | 183 | 'node': root2, |
184 | 184 | 'input': new es.Range( 10, 15 ), |
185 | | - 'output': [{ 'node': g, 'range': new es.Range( 0, 4 ) }], |
| 185 | + 'output': [{ 'node': g, 'range': new es.Range( 0, 4 ), 'globalRange': new es.Range( 11, 15 ) }], |
186 | 186 | 'desc': 'Range starting before the beginning of a node and ending in the middle' |
187 | 187 | }, |
188 | 188 | // Test 4 |
189 | 189 | { |
190 | 190 | 'node': root2, |
191 | 191 | 'input': new es.Range( 20, 29 ), |
192 | | - 'output': [{ 'node': h, 'range': new es.Range( 0, 8 ) }], |
| 192 | + 'output': [{ 'node': h, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 21, 29 ) }], |
193 | 193 | 'desc': 'Range starting before the beginning of a node and ending at the end' |
194 | 194 | }, |
195 | 195 | // Test 5 |
— | — | @@ -202,70 +202,70 @@ |
203 | 203 | { |
204 | 204 | 'node': root2, |
205 | 205 | 'input': new es.Range( 11, 11 ), |
206 | | - 'output': [{ 'node': g, 'range': new es.Range( 0, 0 ) }], |
| 206 | + 'output': [{ 'node': g, 'range': new es.Range( 0, 0 ), 'globalRange': new es.Range( 11, 11 ) }], |
207 | 207 | 'desc': 'Zero-length range at the beginning of a node' |
208 | 208 | }, |
209 | 209 | // Test 7 |
210 | 210 | { |
211 | 211 | 'node': root2, |
212 | 212 | 'input': new es.Range( 21, 26 ), |
213 | | - 'output': [{ 'node': h, 'range': new es.Range( 0, 5 ) }], |
| 213 | + 'output': [{ 'node': h, 'range': new es.Range( 0, 5 ), 'globalRange': new es.Range( 21, 26 ) }], |
214 | 214 | 'desc': 'Range starting at the beginning of a node and ending in the middle' |
215 | 215 | }, |
216 | 216 | // Test 8 |
217 | 217 | { |
218 | 218 | 'node': root2, |
219 | 219 | 'input': new es.Range( 1, 9 ), |
220 | | - 'output': [{ 'node': f, 'range': new es.Range( 0, 8 ) }], |
| 220 | + 'output': [{ 'node': f, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 1, 9 ) }], |
221 | 221 | 'desc': 'Range starting at the beginning of a node and ending at the end' |
222 | 222 | }, |
223 | 223 | // Test 9 |
224 | 224 | { |
225 | 225 | 'node': root2, |
226 | 226 | 'input': new es.Range( 11, 20 ), |
227 | | - 'output': [{ 'node': g, 'range': new es.Range( 0, 8 ) }], |
| 227 | + 'output': [{ 'node': g, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 11, 19 ) }], |
228 | 228 | 'desc': 'Range starting at the beginning of a node and ending past the end' |
229 | 229 | }, |
230 | 230 | // Test 10 |
231 | 231 | { |
232 | 232 | 'node': root2, |
233 | 233 | 'input': new es.Range( 22, 22 ), |
234 | | - 'output': [{ 'node': h, 'range': new es.Range( 1, 1 ) }], |
| 234 | + 'output': [{ 'node': h, 'range': new es.Range( 1, 1 ), 'globalRange': new es.Range( 22, 22 ) }], |
235 | 235 | 'desc': 'Zero-length range in the middle of a node' |
236 | 236 | }, |
237 | 237 | // Test 11 |
238 | 238 | { |
239 | 239 | 'node': root2, |
240 | 240 | 'input': new es.Range( 2, 7 ), |
241 | | - 'output': [{ 'node': f, 'range': new es.Range( 1, 6 ) }], |
| 241 | + 'output': [{ 'node': f, 'range': new es.Range( 1, 6 ), 'globalRange': new es.Range( 2, 7 ) }], |
242 | 242 | 'desc': 'Range starting and ending in the middle of the same node' |
243 | 243 | }, |
244 | 244 | // Test 12 |
245 | 245 | { |
246 | 246 | 'node': root2, |
247 | 247 | 'input': new es.Range( 13, 19 ), |
248 | | - 'output': [{ 'node': g, 'range': new es.Range( 2, 8 ) }], |
| 248 | + 'output': [{ 'node': g, 'range': new es.Range( 2, 8 ), 'globalRange': new es.Range( 13, 19 ) }], |
249 | 249 | 'desc': 'Range starting in the middle of a node and ending at the end' |
250 | 250 | }, |
251 | 251 | // Test 13 |
252 | 252 | { |
253 | 253 | 'node': root2, |
254 | 254 | 'input': new es.Range( 24, 30 ), |
255 | | - 'output': [{ 'node': h, 'range': new es.Range( 3, 8 ) }], |
| 255 | + 'output': [{ 'node': h, 'range': new es.Range( 3, 8 ), 'globalRange': new es.Range( 24, 29 ) }], |
256 | 256 | 'desc': 'Range starting in the middle of a node and ending past the end' |
257 | 257 | }, |
258 | 258 | // Test 14 |
259 | 259 | { |
260 | 260 | 'node': root2, |
261 | 261 | 'input': new es.Range( 9, 9 ), |
262 | | - 'output': [{ 'node': f, 'range': new es.Range( 8, 8 ) }], |
| 262 | + 'output': [{ 'node': f, 'range': new es.Range( 8, 8 ), 'globalRange': new es.Range( 9, 9 ) }], |
263 | 263 | 'desc': 'Zero-length range at the end of a node' |
264 | 264 | }, |
265 | 265 | // Test 15 |
266 | 266 | { |
267 | 267 | 'node': root2, |
268 | 268 | 'input': new es.Range( 19, 20 ), |
269 | | - 'output': [{ 'node': g, 'range': new es.Range( 8, 8 ) }], |
| 269 | + 'output': [{ 'node': g, 'range': new es.Range( 8, 8 ), 'globalRange': new es.Range( 19, 19 ) }], |
270 | 270 | 'desc': 'Range starting at the end of a node and ending past the end' |
271 | 271 | }, |
272 | 272 | // Test 16 |
— | — | @@ -291,7 +291,7 @@ |
292 | 292 | 'input': new es.Range( 0, 11 ), |
293 | 293 | 'output': [ |
294 | 294 | { 'node': f }, |
295 | | - { 'node': g, 'range': new es.Range( 0, 0 ) } |
| 295 | + { 'node': g, 'range': new es.Range( 0, 0 ), 'globalRange': new es.Range( 11, 11 ) } |
296 | 296 | ], |
297 | 297 | 'desc': 'Range starting before the beginning of the first node and ending at the beginning of the second node' |
298 | 298 | }, |
— | — | @@ -301,7 +301,7 @@ |
302 | 302 | 'input': new es.Range( 0, 14 ), |
303 | 303 | 'output': [ |
304 | 304 | { 'node': f }, |
305 | | - { 'node': g, 'range': new es.Range( 0, 3 ) } |
| 305 | + { 'node': g, 'range': new es.Range( 0, 3 ), 'globalRange': new es.Range( 11, 14 ) } |
306 | 306 | ], |
307 | 307 | 'desc': 'Range starting before the beginning of the first node and ending in the middle of the second node' |
308 | 308 | }, |
— | — | @@ -311,7 +311,7 @@ |
312 | 312 | 'input': new es.Range( 0, 19 ), |
313 | 313 | 'output': [ |
314 | 314 | { 'node': f }, |
315 | | - { 'node': g, 'range': new es.Range( 0, 8 ) } |
| 315 | + { 'node': g, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 11, 19 ) } |
316 | 316 | ], |
317 | 317 | 'desc': 'Range starting before the beginning of the first node and ending at the end of the second node' |
318 | 318 | }, |
— | — | @@ -332,7 +332,7 @@ |
333 | 333 | 'output': [ |
334 | 334 | { 'node': f }, |
335 | 335 | { 'node': g }, |
336 | | - { 'node': h, 'range': new es.Range( 0, 0 ) } |
| 336 | + { 'node': h, 'range': new es.Range( 0, 0 ), 'globalRange': new es.Range( 21, 21 ) } |
337 | 337 | ], |
338 | 338 | 'desc': 'Range starting before the beginning of the first node and ending at the beginning of the third node' |
339 | 339 | }, |
— | — | @@ -343,7 +343,7 @@ |
344 | 344 | 'output': [ |
345 | 345 | { 'node': f }, |
346 | 346 | { 'node': g }, |
347 | | - { 'node': h, 'range': new es.Range( 0, 6 ) } |
| 347 | + { 'node': h, 'range': new es.Range( 0, 6 ), 'globalRange': new es.Range( 21, 27 ) } |
348 | 348 | ], |
349 | 349 | 'desc': 'Range starting before the beginning of the first node and ending in the middle of the third node' |
350 | 350 | }, |
— | — | @@ -354,7 +354,7 @@ |
355 | 355 | 'output': [ |
356 | 356 | { 'node': f }, |
357 | 357 | { 'node': g }, |
358 | | - { 'node': h, 'range': new es.Range( 0, 8 ) } |
| 358 | + { 'node': h, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 21, 29 ) } |
359 | 359 | ], |
360 | 360 | 'desc': 'Range starting before the beginning of the first node and ending at the end of the third node' |
361 | 361 | }, |
— | — | @@ -374,8 +374,8 @@ |
375 | 375 | 'node': root2, |
376 | 376 | 'input': new es.Range( 1, 11 ), |
377 | 377 | 'output': [ |
378 | | - { 'node': f, 'range': new es.Range( 0, 8 ) }, |
379 | | - { 'node': g, 'range': new es.Range( 0, 0 ) } |
| 378 | + { 'node': f, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 1, 9 ) }, |
| 379 | + { 'node': g, 'range': new es.Range( 0, 0 ), 'globalRange': new es.Range( 11, 11 ) } |
380 | 380 | ], |
381 | 381 | 'desc': 'Range starting at the beginning of the first node and ending at the beginning of the second node' |
382 | 382 | }, |
— | — | @@ -384,8 +384,8 @@ |
385 | 385 | 'node': root2, |
386 | 386 | 'input': new es.Range( 1, 14 ), |
387 | 387 | 'output': [ |
388 | | - { 'node': f, 'range': new es.Range( 0, 8 ) }, |
389 | | - { 'node': g, 'range': new es.Range( 0, 3 ) } |
| 388 | + { 'node': f, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 1, 9 ) }, |
| 389 | + { 'node': g, 'range': new es.Range( 0, 3 ), 'globalRange': new es.Range( 11, 14 ) } |
390 | 390 | ], |
391 | 391 | 'desc': 'Range starting at the beginning of the first node and ending in the middle of the second node' |
392 | 392 | }, |
— | — | @@ -394,8 +394,8 @@ |
395 | 395 | 'node': root2, |
396 | 396 | 'input': new es.Range( 1, 19 ), |
397 | 397 | 'output': [ |
398 | | - { 'node': f, 'range': new es.Range( 0, 8 ) }, |
399 | | - { 'node': g, 'range': new es.Range( 0, 8 ) } |
| 398 | + { 'node': f, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 1, 9 ) }, |
| 399 | + { 'node': g, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 11, 19 ) } |
400 | 400 | ], |
401 | 401 | 'desc': 'Range starting at the beginning of the first node and ending at the end of the second node' |
402 | 402 | }, |
— | — | @@ -404,7 +404,7 @@ |
405 | 405 | 'node': root2, |
406 | 406 | 'input': new es.Range( 1, 20 ), |
407 | 407 | 'output': [ |
408 | | - { 'node': f, 'range': new es.Range( 0, 8 ) }, |
| 408 | + { 'node': f, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 1, 9 ) }, |
409 | 409 | { 'node': g } |
410 | 410 | ], |
411 | 411 | 'desc': 'Range starting at the beginning of the first node and ending between the second and the third node' |
— | — | @@ -414,9 +414,9 @@ |
415 | 415 | 'node': root2, |
416 | 416 | 'input': new es.Range( 1, 21 ), |
417 | 417 | 'output': [ |
418 | | - { 'node': f, 'range': new es.Range( 0, 8 ) }, |
| 418 | + { 'node': f, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 1, 9 ) }, |
419 | 419 | { 'node': g }, |
420 | | - { 'node': h, 'range': new es.Range( 0, 0 ) } |
| 420 | + { 'node': h, 'range': new es.Range( 0, 0 ), 'globalRange': new es.Range( 21, 21 ) } |
421 | 421 | ], |
422 | 422 | 'desc': 'Range starting at the beginning of the first node and ending at the beginning of the third node' |
423 | 423 | }, |
— | — | @@ -425,9 +425,9 @@ |
426 | 426 | 'node': root2, |
427 | 427 | 'input': new es.Range( 1, 27 ), |
428 | 428 | 'output': [ |
429 | | - { 'node': f, 'range': new es.Range( 0, 8 ) }, |
| 429 | + { 'node': f, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 1, 9 ) }, |
430 | 430 | { 'node': g }, |
431 | | - { 'node': h, 'range': new es.Range( 0, 6 ) } |
| 431 | + { 'node': h, 'range': new es.Range( 0, 6 ), 'globalRange': new es.Range( 21, 27 ) } |
432 | 432 | ], |
433 | 433 | 'desc': 'Range starting at the beginning of the first node and ending in the middle of the third node' |
434 | 434 | }, |
— | — | @@ -436,9 +436,9 @@ |
437 | 437 | 'node': root2, |
438 | 438 | 'input': new es.Range( 1, 29 ), |
439 | 439 | 'output': [ |
440 | | - { 'node': f, 'range': new es.Range( 0, 8 ) }, |
| 440 | + { 'node': f, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 1, 9 ) }, |
441 | 441 | { 'node': g }, |
442 | | - { 'node': h, 'range': new es.Range( 0, 8 ) } |
| 442 | + { 'node': h, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 21, 29 ) } |
443 | 443 | ], |
444 | 444 | 'desc': 'Range starting at the beginning of the first node and ending at the end of the third node' |
445 | 445 | }, |
— | — | @@ -447,7 +447,7 @@ |
448 | 448 | 'node': root2, |
449 | 449 | 'input': new es.Range( 1, 30 ), |
450 | 450 | 'output': [ |
451 | | - { 'node': f, 'range': new es.Range( 0, 8 ) }, |
| 451 | + { 'node': f, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 1, 9 ) }, |
452 | 452 | { 'node': g }, |
453 | 453 | { 'node': h } |
454 | 454 | ], |
— | — | @@ -458,8 +458,8 @@ |
459 | 459 | 'node': root2, |
460 | 460 | 'input': new es.Range( 5, 11 ), |
461 | 461 | 'output': [ |
462 | | - { 'node': f, 'range': new es.Range( 4, 8 ) }, |
463 | | - { 'node': g, 'range': new es.Range( 0, 0 ) } |
| 462 | + { 'node': f, 'range': new es.Range( 4, 8 ), 'globalRange': new es.Range( 5, 9 ) }, |
| 463 | + { 'node': g, 'range': new es.Range( 0, 0 ), 'globalRange': new es.Range( 11, 11 ) } |
464 | 464 | ], |
465 | 465 | 'desc': 'Range starting in the middle of the first node and ending at the beginning of the second node' |
466 | 466 | }, |
— | — | @@ -468,8 +468,8 @@ |
469 | 469 | 'node': root2, |
470 | 470 | 'input': new es.Range( 5, 14 ), |
471 | 471 | 'output': [ |
472 | | - { 'node': f, 'range': new es.Range( 4, 8 ) }, |
473 | | - { 'node': g, 'range': new es.Range( 0, 3 ) } |
| 472 | + { 'node': f, 'range': new es.Range( 4, 8 ), 'globalRange': new es.Range( 5, 9 ) }, |
| 473 | + { 'node': g, 'range': new es.Range( 0, 3 ), 'globalRange': new es.Range( 11, 14 ) } |
474 | 474 | ], |
475 | 475 | 'desc': 'Range starting in the middle of the first node and ending in the middle of the second node' |
476 | 476 | }, |
— | — | @@ -478,8 +478,8 @@ |
479 | 479 | 'node': root2, |
480 | 480 | 'input': new es.Range( 5, 19 ), |
481 | 481 | 'output': [ |
482 | | - { 'node': f, 'range': new es.Range( 4, 8 ) }, |
483 | | - { 'node': g, 'range': new es.Range( 0, 8 ) } |
| 482 | + { 'node': f, 'range': new es.Range( 4, 8 ), 'globalRange': new es.Range( 5, 9 ) }, |
| 483 | + { 'node': g, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 11, 19 ) } |
484 | 484 | ], |
485 | 485 | 'desc': 'Range starting in the middle of the first node and ending at the end of the second node' |
486 | 486 | }, |
— | — | @@ -488,7 +488,7 @@ |
489 | 489 | 'node': root2, |
490 | 490 | 'input': new es.Range( 5, 20 ), |
491 | 491 | 'output': [ |
492 | | - { 'node': f, 'range': new es.Range( 4, 8 ) }, |
| 492 | + { 'node': f, 'range': new es.Range( 4, 8 ), 'globalRange': new es.Range( 5, 9 ) }, |
493 | 493 | { 'node': g } |
494 | 494 | ], |
495 | 495 | 'desc': 'Range starting in the middle of the first node and ending between the second and the third node' |
— | — | @@ -498,9 +498,9 @@ |
499 | 499 | 'node': root2, |
500 | 500 | 'input': new es.Range( 5, 21 ), |
501 | 501 | 'output': [ |
502 | | - { 'node': f, 'range': new es.Range( 4, 8 ) }, |
| 502 | + { 'node': f, 'range': new es.Range( 4, 8 ), 'globalRange': new es.Range( 5, 9 ) }, |
503 | 503 | { 'node': g }, |
504 | | - { 'node': h, 'range': new es.Range( 0, 0 ) } |
| 504 | + { 'node': h, 'range': new es.Range( 0, 0 ), 'globalRange': new es.Range( 21, 21 ) } |
505 | 505 | ], |
506 | 506 | 'desc': 'Range starting in the middle of the first node and ending at the beginning of the third node' |
507 | 507 | }, |
— | — | @@ -509,9 +509,9 @@ |
510 | 510 | 'node': root2, |
511 | 511 | 'input': new es.Range( 5, 27 ), |
512 | 512 | 'output': [ |
513 | | - { 'node': f, 'range': new es.Range( 4, 8 ) }, |
| 513 | + { 'node': f, 'range': new es.Range( 4, 8 ), 'globalRange': new es.Range( 5, 9 ) }, |
514 | 514 | { 'node': g }, |
515 | | - { 'node': h, 'range': new es.Range( 0, 6 ) } |
| 515 | + { 'node': h, 'range': new es.Range( 0, 6 ), 'globalRange': new es.Range( 21, 27 ) } |
516 | 516 | ], |
517 | 517 | 'desc': 'Range starting in the middle of the first node and ending in the middle of the third node' |
518 | 518 | }, |
— | — | @@ -520,9 +520,9 @@ |
521 | 521 | 'node': root2, |
522 | 522 | 'input': new es.Range( 5, 29 ), |
523 | 523 | 'output': [ |
524 | | - { 'node': f, 'range': new es.Range( 4, 8 ) }, |
| 524 | + { 'node': f, 'range': new es.Range( 4, 8 ), 'globalRange': new es.Range( 5, 9 ) }, |
525 | 525 | { 'node': g }, |
526 | | - { 'node': h, 'range': new es.Range( 0, 8 ) } |
| 526 | + { 'node': h, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 21, 29 ) } |
527 | 527 | ], |
528 | 528 | 'desc': 'Range starting in the middle of the first node and ending at the end of the third node' |
529 | 529 | }, |
— | — | @@ -531,7 +531,7 @@ |
532 | 532 | 'node': root2, |
533 | 533 | 'input': new es.Range( 5, 30 ), |
534 | 534 | 'output': [ |
535 | | - { 'node': f, 'range': new es.Range( 4, 8 ) }, |
| 535 | + { 'node': f, 'range': new es.Range( 4, 8 ), 'globalRange': new es.Range( 5, 9 ) }, |
536 | 536 | { 'node': g }, |
537 | 537 | { 'node': h } |
538 | 538 | ], |
— | — | @@ -542,8 +542,8 @@ |
543 | 543 | 'node': root2, |
544 | 544 | 'input': new es.Range( 9, 11 ), |
545 | 545 | 'output': [ |
546 | | - { 'node': f, 'range': new es.Range( 8, 8 ) }, |
547 | | - { 'node': g, 'range': new es.Range( 0, 0 ) } |
| 546 | + { 'node': f, 'range': new es.Range( 8, 8 ), 'globalRange': new es.Range( 9, 9 ) }, |
| 547 | + { 'node': g, 'range': new es.Range( 0, 0 ), 'globalRange': new es.Range( 11, 11 ) } |
548 | 548 | ], |
549 | 549 | 'desc': 'Range starting at the end of the first node and ending at the beginning of the second node' |
550 | 550 | }, |
— | — | @@ -552,8 +552,8 @@ |
553 | 553 | 'node': root2, |
554 | 554 | 'input': new es.Range( 9, 14 ), |
555 | 555 | 'output': [ |
556 | | - { 'node': f, 'range': new es.Range( 8, 8 ) }, |
557 | | - { 'node': g, 'range': new es.Range( 0, 3 ) } |
| 556 | + { 'node': f, 'range': new es.Range( 8, 8 ), 'globalRange': new es.Range( 9, 9 ) }, |
| 557 | + { 'node': g, 'range': new es.Range( 0, 3 ), 'globalRange': new es.Range( 11, 14 ) } |
558 | 558 | ], |
559 | 559 | 'desc': 'Range starting at the end of the first node and ending in the middle of the second node' |
560 | 560 | }, |
— | — | @@ -562,8 +562,8 @@ |
563 | 563 | 'node': root2, |
564 | 564 | 'input': new es.Range( 9, 19 ), |
565 | 565 | 'output': [ |
566 | | - { 'node': f, 'range': new es.Range( 8, 8 ) }, |
567 | | - { 'node': g, 'range': new es.Range( 0, 8 ) } |
| 566 | + { 'node': f, 'range': new es.Range( 8, 8 ), 'globalRange': new es.Range( 9, 9 ) }, |
| 567 | + { 'node': g, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 11, 19 ) } |
568 | 568 | ], |
569 | 569 | 'desc': 'Range starting at the end of the first node and ending at the end of the second node' |
570 | 570 | }, |
— | — | @@ -572,7 +572,7 @@ |
573 | 573 | 'node': root2, |
574 | 574 | 'input': new es.Range( 9, 20 ), |
575 | 575 | 'output': [ |
576 | | - { 'node': f, 'range': new es.Range( 8, 8 ) }, |
| 576 | + { 'node': f, 'range': new es.Range( 8, 8 ), 'globalRange': new es.Range( 9, 9 ) }, |
577 | 577 | { 'node': g } |
578 | 578 | ], |
579 | 579 | 'desc': 'Range starting at the end of the first node and ending between the second and the third node' |
— | — | @@ -582,9 +582,9 @@ |
583 | 583 | 'node': root2, |
584 | 584 | 'input': new es.Range( 9, 21 ), |
585 | 585 | 'output': [ |
586 | | - { 'node': f, 'range': new es.Range( 8, 8 ) }, |
| 586 | + { 'node': f, 'range': new es.Range( 8, 8 ), 'globalRange': new es.Range( 9, 9 ) }, |
587 | 587 | { 'node': g }, |
588 | | - { 'node': h, 'range': new es.Range( 0, 0 ) } |
| 588 | + { 'node': h, 'range': new es.Range( 0, 0 ), 'globalRange': new es.Range( 21, 21 ) } |
589 | 589 | ], |
590 | 590 | 'desc': 'Range starting at the end of the first node and ending at the beginning of the third node' |
591 | 591 | }, |
— | — | @@ -593,9 +593,9 @@ |
594 | 594 | 'node': root2, |
595 | 595 | 'input': new es.Range( 9, 27 ), |
596 | 596 | 'output': [ |
597 | | - { 'node': f, 'range': new es.Range( 8, 8 ) }, |
| 597 | + { 'node': f, 'range': new es.Range( 8, 8 ), 'globalRange': new es.Range( 9, 9 ) }, |
598 | 598 | { 'node': g }, |
599 | | - { 'node': h, 'range': new es.Range( 0, 6 ) } |
| 599 | + { 'node': h, 'range': new es.Range( 0, 6 ), 'globalRange': new es.Range( 21, 27 ) } |
600 | 600 | ], |
601 | 601 | 'desc': 'Range starting at the end of the first node and ending in the middle of the third node' |
602 | 602 | }, |
— | — | @@ -604,9 +604,9 @@ |
605 | 605 | 'node': root2, |
606 | 606 | 'input': new es.Range( 9, 29 ), |
607 | 607 | 'output': [ |
608 | | - { 'node': f, 'range': new es.Range( 8, 8 ) }, |
| 608 | + { 'node': f, 'range': new es.Range( 8, 8 ), 'globalRange': new es.Range( 9, 9 ) }, |
609 | 609 | { 'node': g }, |
610 | | - { 'node': h, 'range': new es.Range( 0, 8 ) } |
| 610 | + { 'node': h, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 21, 29 ) } |
611 | 611 | ], |
612 | 612 | 'desc': 'Range starting at the end of the first node and ending at the end of the third node' |
613 | 613 | }, |
— | — | @@ -615,7 +615,7 @@ |
616 | 616 | 'node': root2, |
617 | 617 | 'input': new es.Range( 9, 30 ), |
618 | 618 | 'output': [ |
619 | | - { 'node': f, 'range': new es.Range( 8, 8 ) }, |
| 619 | + { 'node': f, 'range': new es.Range( 8, 8 ), 'globalRange': new es.Range( 9, 9 ) }, |
620 | 620 | { 'node': g }, |
621 | 621 | { 'node': h } |
622 | 622 | ], |
— | — | @@ -627,7 +627,7 @@ |
628 | 628 | 'input': new es.Range( 10, 21 ), |
629 | 629 | 'output': [ |
630 | 630 | { 'node': g }, |
631 | | - { 'node': h, 'range': new es.Range( 0, 0 ) } |
| 631 | + { 'node': h, 'range': new es.Range( 0, 0 ), 'globalRange': new es.Range( 21, 21 ) } |
632 | 632 | ], |
633 | 633 | 'desc': 'Range starting between the first and the second node and ending at the beginning of the third node' |
634 | 634 | }, |
— | — | @@ -637,21 +637,21 @@ |
638 | 638 | 'input': new es.Range( 10, 27 ), |
639 | 639 | 'output': [ |
640 | 640 | { 'node': g }, |
641 | | - { 'node': h, 'range': new es.Range( 0, 6 ) } |
| 641 | + { 'node': h, 'range': new es.Range( 0, 6 ), 'globalRange': new es.Range( 21, 27 ) } |
642 | 642 | ], |
643 | 643 | 'desc': 'Range starting between the first and the second node and ending in the middle of the third node' |
644 | 644 | }, |
645 | | - // Test 56 |
| 645 | + // Test 52 |
646 | 646 | { |
647 | 647 | 'node': root2, |
648 | 648 | 'input': new es.Range( 10, 29 ), |
649 | 649 | 'output': [ |
650 | 650 | { 'node': g }, |
651 | | - { 'node': h, 'range': new es.Range( 0, 8 ) } |
| 651 | + { 'node': h, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 21, 29 ) } |
652 | 652 | ], |
653 | 653 | 'desc': 'Range starting between the first and the second node and ending at the end of the third node' |
654 | 654 | }, |
655 | | - // Test 57 |
| 655 | + // Test 53 |
656 | 656 | { |
657 | 657 | 'node': root2, |
658 | 658 | 'input': new es.Range( 10, 30 ), |
— | — | @@ -661,170 +661,170 @@ |
662 | 662 | ], |
663 | 663 | 'desc': 'Range starting between the first and the second node and ending past the end of the third node' |
664 | 664 | }, |
665 | | - // Test 58 |
| 665 | + // Test 54 |
666 | 666 | { |
667 | 667 | 'node': root2, |
668 | 668 | 'input': new es.Range( 11, 21 ), |
669 | 669 | 'output': [ |
670 | | - { 'node': g, 'range': new es.Range( 0, 8 ) }, |
671 | | - { 'node': h, 'range': new es.Range( 0, 0 ) } |
| 670 | + { 'node': g, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 11, 19 ) }, |
| 671 | + { 'node': h, 'range': new es.Range( 0, 0 ), 'globalRange': new es.Range( 21, 21 ) } |
672 | 672 | ], |
673 | 673 | 'desc': 'Range starting at the beginning of the second node and ending at the beginning of the third node' |
674 | 674 | }, |
675 | | - // Test 59 |
| 675 | + // Test 55 |
676 | 676 | { |
677 | 677 | 'node': root2, |
678 | 678 | 'input': new es.Range( 11, 27 ), |
679 | 679 | 'output': [ |
680 | | - { 'node': g, 'range': new es.Range( 0, 8 ) }, |
681 | | - { 'node': h, 'range': new es.Range( 0, 6 ) } |
| 680 | + { 'node': g, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 11, 19 ) }, |
| 681 | + { 'node': h, 'range': new es.Range( 0, 6 ), 'globalRange': new es.Range( 21, 27 ) } |
682 | 682 | ], |
683 | 683 | 'desc': 'Range starting at the beginning of the second node and ending in the middle of the third node' |
684 | 684 | }, |
685 | | - // Test 60 |
| 685 | + // Test 56 |
686 | 686 | { |
687 | 687 | 'node': root2, |
688 | 688 | 'input': new es.Range( 11, 29 ), |
689 | 689 | 'output': [ |
690 | | - { 'node': g, 'range': new es.Range( 0, 8 ) }, |
691 | | - { 'node': h, 'range': new es.Range( 0, 8 ) } |
| 690 | + { 'node': g, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 11, 19 ) }, |
| 691 | + { 'node': h, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 21, 29 ) } |
692 | 692 | ], |
693 | 693 | 'desc': 'Range starting at the beginning of the second node and ending at the end of the third node' |
694 | 694 | }, |
695 | | - // Test 61 |
| 695 | + // Test 57 |
696 | 696 | { |
697 | 697 | 'node': root2, |
698 | 698 | 'input': new es.Range( 11, 30 ), |
699 | 699 | 'output': [ |
700 | | - { 'node': g, 'range': new es.Range( 0, 8 ) }, |
| 700 | + { 'node': g, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 11, 19 ) }, |
701 | 701 | { 'node': h } |
702 | 702 | ], |
703 | 703 | 'desc': 'Range starting at the beginning of the second node and ending past the end of the third node' |
704 | 704 | }, |
705 | | - // Test 62 |
| 705 | + // Test 58 |
706 | 706 | { |
707 | 707 | 'node': root2, |
708 | 708 | 'input': new es.Range( 14, 21 ), |
709 | 709 | 'output': [ |
710 | | - { 'node': g, 'range': new es.Range( 3, 8 ) }, |
711 | | - { 'node': h, 'range': new es.Range( 0, 0 ) } |
| 710 | + { 'node': g, 'range': new es.Range( 3, 8 ), 'globalRange': new es.Range( 14, 19 ) }, |
| 711 | + { 'node': h, 'range': new es.Range( 0, 0 ), 'globalRange': new es.Range( 21, 21 ) } |
712 | 712 | ], |
713 | 713 | 'desc': 'Range starting in the middle of the second node and ending at the beginning of the third node' |
714 | 714 | }, |
715 | | - // Test 63 |
| 715 | + // Test 59 |
716 | 716 | { |
717 | 717 | 'node': root2, |
718 | 718 | 'input': new es.Range( 14, 27 ), |
719 | 719 | 'output': [ |
720 | | - { 'node': g, 'range': new es.Range( 3, 8 ) }, |
721 | | - { 'node': h, 'range': new es.Range( 0, 6 ) } |
| 720 | + { 'node': g, 'range': new es.Range( 3, 8 ), 'globalRange': new es.Range( 14, 19 ) }, |
| 721 | + { 'node': h, 'range': new es.Range( 0, 6 ), 'globalRange': new es.Range( 21, 27 ) } |
722 | 722 | ], |
723 | 723 | 'desc': 'Range starting in the middle of the second node and ending in the middle of the third node' |
724 | 724 | }, |
725 | | - // Test 64 |
| 725 | + // Test 60 |
726 | 726 | { |
727 | 727 | 'node': root2, |
728 | 728 | 'input': new es.Range( 14, 29 ), |
729 | 729 | 'output': [ |
730 | | - { 'node': g, 'range': new es.Range( 3, 8 ) }, |
731 | | - { 'node': h, 'range': new es.Range( 0, 8 ) } |
| 730 | + { 'node': g, 'range': new es.Range( 3, 8 ), 'globalRange': new es.Range( 14, 19 ) }, |
| 731 | + { 'node': h, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 21, 29 ) } |
732 | 732 | ], |
733 | 733 | 'desc': 'Range starting in the middle of the second node and ending at the end of the third node' |
734 | 734 | }, |
735 | | - // Test 65 |
| 735 | + // Test 61 |
736 | 736 | { |
737 | 737 | 'node': root2, |
738 | 738 | 'input': new es.Range( 14, 30 ), |
739 | 739 | 'output': [ |
740 | | - { 'node': g, 'range': new es.Range( 3, 8 ) }, |
| 740 | + { 'node': g, 'range': new es.Range( 3, 8 ), 'globalRange': new es.Range( 14, 19 ) }, |
741 | 741 | { 'node': h } |
742 | 742 | ], |
743 | 743 | 'desc': 'Range starting in the middle of the second node and ending past the end of the third node' |
744 | 744 | }, |
745 | | - // Test 66 |
| 745 | + // Test 62 |
746 | 746 | { |
747 | 747 | 'node': root2, |
748 | 748 | 'input': new es.Range( 19, 21 ), |
749 | 749 | 'output': [ |
750 | | - { 'node': g, 'range': new es.Range( 8, 8 ) }, |
751 | | - { 'node': h, 'range': new es.Range( 0, 0 ) } |
| 750 | + { 'node': g, 'range': new es.Range( 8, 8 ), 'globalRange': new es.Range( 19, 19 ) }, |
| 751 | + { 'node': h, 'range': new es.Range( 0, 0 ), 'globalRange': new es.Range( 21, 21 ) } |
752 | 752 | ], |
753 | 753 | 'desc': 'Range starting at the end of the second node and ending at the beginning of the third node' |
754 | 754 | }, |
755 | | - // Test 67 |
| 755 | + // Test 63 |
756 | 756 | { |
757 | 757 | 'node': root2, |
758 | 758 | 'input': new es.Range( 19, 27 ), |
759 | 759 | 'output': [ |
760 | | - { 'node': g, 'range': new es.Range( 8, 8 ) }, |
761 | | - { 'node': h, 'range': new es.Range( 0, 6 ) } |
| 760 | + { 'node': g, 'range': new es.Range( 8, 8 ), 'globalRange': new es.Range( 19, 19 ) }, |
| 761 | + { 'node': h, 'range': new es.Range( 0, 6 ), 'globalRange': new es.Range( 21, 27 ) } |
762 | 762 | ], |
763 | 763 | 'desc': 'Range starting at the end of the second node and ending in the middle of the third node' |
764 | 764 | }, |
765 | | - // Test 68 |
| 765 | + // Test 64 |
766 | 766 | { |
767 | 767 | 'node': root2, |
768 | 768 | 'input': new es.Range( 19, 29 ), |
769 | 769 | 'output': [ |
770 | | - { 'node': g, 'range': new es.Range( 8, 8 ) }, |
771 | | - { 'node': h, 'range': new es.Range( 0, 8 ) } |
| 770 | + { 'node': g, 'range': new es.Range( 8, 8 ), 'globalRange': new es.Range( 19, 19 ) }, |
| 771 | + { 'node': h, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 21, 29 ) } |
772 | 772 | ], |
773 | 773 | 'desc': 'Range starting at the end of the second node and ending at the end of the third node' |
774 | 774 | }, |
775 | | - // Test 69 |
| 775 | + // Test 65 |
776 | 776 | { |
777 | 777 | 'node': root2, |
778 | 778 | 'input': new es.Range( 19, 30 ), |
779 | 779 | 'output': [ |
780 | | - { 'node': g, 'range': new es.Range( 8, 8 ) }, |
| 780 | + { 'node': g, 'range': new es.Range( 8, 8 ), 'globalRange': new es.Range( 19, 19 ) }, |
781 | 781 | { 'node': h } |
782 | 782 | ], |
783 | 783 | 'desc': 'Range starting at the end of the second node and ending past the end of the third node' |
784 | 784 | }, |
785 | 785 | // Tests for childless nodes |
786 | 786 | |
787 | | - // Test 70 |
| 787 | + // Test 66 |
788 | 788 | { |
789 | 789 | 'node': g, |
790 | 790 | 'input': new es.Range( 1, 3 ), |
791 | 791 | 'output': [ |
792 | | - { 'node': g, 'range': new es.Range( 1, 3 ) } |
| 792 | + { 'node': g, 'range': new es.Range( 1, 3 ), 'globalRange': new es.Range( 1, 3 ) } |
793 | 793 | ], |
794 | 794 | 'desc': 'Childless node given, range not out of bounds' |
795 | 795 | }, |
796 | | - // Test 72 |
| 796 | + // Test 67 |
797 | 797 | { |
798 | 798 | 'node': g, |
799 | 799 | 'input': new es.Range( 0, 8 ), |
800 | 800 | 'output': [ |
801 | | - { 'node': g, 'range': new es.Range( 0, 8 ) } |
| 801 | + { 'node': g, 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 0, 8 ) } |
802 | 802 | ], |
803 | 803 | 'desc': 'Childless node given, range covers entire node' |
804 | 804 | }, |
805 | 805 | // Tests for out-of-bounds cases |
806 | 806 | |
807 | | - // Test 73 |
| 807 | + // Test 68 |
808 | 808 | { |
809 | 809 | 'node': g, |
810 | 810 | 'input': new es.Range( -1, 3 ), |
811 | 811 | 'exception': /^The start offset of the range is negative$/, |
812 | 812 | 'desc': 'Childless node given, range start out of bounds' |
813 | 813 | }, |
814 | | - // Test 74 |
| 814 | + // Test 69 |
815 | 815 | { |
816 | 816 | 'node': g, |
817 | 817 | 'input': new es.Range( 1, 9 ), |
818 | 818 | 'exception': /^The end offset of the range is past the end of the node$/, |
819 | 819 | 'desc': 'Childless node given, range end out of bounds' |
820 | 820 | }, |
821 | | - // Test 75 |
| 821 | + // Test 70 |
822 | 822 | { |
823 | 823 | 'node': root2, |
824 | 824 | 'input': new es.Range( 31, 35 ), |
825 | 825 | 'exception': /^The start offset of the range is past the end of the node$/, |
826 | 826 | 'desc': 'Node with children given, range start out of bounds' |
827 | 827 | }, |
828 | | - // Test 76 |
| 828 | + // Test 71 |
829 | 829 | { |
830 | 830 | 'node': root2, |
831 | 831 | 'input': new es.Range( 30, 35 ), |
— | — | @@ -833,44 +833,44 @@ |
834 | 834 | }, |
835 | 835 | // Tests for recursion cases |
836 | 836 | |
837 | | - // Test 77 |
| 837 | + // Test 72 |
838 | 838 | { |
839 | 839 | 'node': big, |
840 | 840 | 'input': new es.Range( 2, 10 ), |
841 | 841 | 'output': [ |
842 | | - { 'node': big.children[0], 'range': new es.Range( 1, 3 ) }, |
843 | | - { 'node': big.children[1], 'range': new es.Range( 0, 4 ) } |
| 842 | + { 'node': big.children[0], 'range': new es.Range( 1, 3 ), 'globalRange': new es.Range( 2, 4 ) }, |
| 843 | + { 'node': big.children[1], 'range': new es.Range( 0, 4 ), 'globalRange': new es.Range( 6, 10 ) } |
844 | 844 | ], |
845 | 845 | 'desc': 'Select from before the b to after the d' |
846 | 846 | }, |
847 | | - // Test 78 |
| 847 | + // Test 73 |
848 | 848 | { |
849 | 849 | 'node': big, |
850 | | - 'input': new es.Range( 3, 29 ), |
| 850 | + 'input': new es.Range( 3, 33 ), |
851 | 851 | 'output': [ |
852 | | - { 'node': big.children[0], 'range': new es.Range( 2, 8 ) }, |
| 852 | + { 'node': big.children[0], 'range': new es.Range( 2, 3 ), 'globalRange': new es.Range( 3, 4 ) }, |
853 | 853 | { 'node': big.children[1] }, |
854 | | - { 'node': big.children[2], 'range': new es.Range( 0, 8 ) } |
| 854 | + { 'node': big.children[2], 'range': new es.Range( 0, 1 ), 'globalRange': new es.Range( 32, 33 ) } |
855 | 855 | ], |
856 | 856 | 'desc': 'Select from before the c to after the h' |
857 | 857 | }, |
858 | | - // Test 79 |
| 858 | + // Test 74 |
859 | 859 | { |
860 | 860 | 'node': big, |
861 | | - 'input': new es.Range( 9, 17 ), |
| 861 | + 'input': new es.Range( 9, 20 ), |
862 | 862 | 'output': [ |
863 | | - { 'node': big.children[1].children[0].children[0].children[0], 'range': new es.Range( 0, 1 ) }, |
864 | | - { 'node': big.children[1].children[0].children[0].children[1], 'range': new es.Range( 0, 5 ) } |
| 863 | + { 'node': big.children[1].children[0].children[0].children[0], 'range': new es.Range( 0, 1 ), 'globalRange': new es.Range( 9, 10 ) }, |
| 864 | + { 'node': big.children[1].children[0].children[0].children[1], 'range': new es.Range( 0, 8 ), 'globalRange': new es.Range( 12, 20 ) } |
865 | 865 | ], |
866 | 866 | 'desc': 'Select from before the d to after the f, with recursion' |
867 | 867 | }, |
868 | | - // Test 80 |
| 868 | + // Test 75 |
869 | 869 | { |
870 | 870 | 'node': big, |
871 | | - 'input': new es.Range( 9, 17 ), |
| 871 | + 'input': new es.Range( 9, 20 ), |
872 | 872 | 'shallow': true, |
873 | 873 | 'output': [ |
874 | | - { 'node': big.children[1], 'range': new es.Range( 3, 11 ) } |
| 874 | + { 'node': big.children[1], 'range': new es.Range( 3, 14 ), 'globalRange': new es.Range( 9, 20 ) } |
875 | 875 | ], |
876 | 876 | 'desc': 'Select from before the d to after the f, without recursion' |
877 | 877 | } |
— | — | @@ -890,6 +890,15 @@ |
891 | 891 | a[i].range.end !== b[i].range.end |
892 | 892 | ) |
893 | 893 | ) |
| 894 | + ) || ( |
| 895 | + ( typeof a[i].globalRange !== typeof b[i].globalRange ) || |
| 896 | + ( |
| 897 | + a[i].globalRange !== undefined && |
| 898 | + ( |
| 899 | + a[i].globalRange.start !== b[i].globalRange.start || |
| 900 | + a[i].globalRange.end !== b[i].globalRange.end |
| 901 | + ) |
| 902 | + ) |
894 | 903 | ) |
895 | 904 | ) { |
896 | 905 | return false; |
Index: trunk/extensions/VisualEditor/modules/es/bases/es.DocumentBranchNode.js |
— | — | @@ -138,7 +138,7 @@ |
139 | 139 | * @method |
140 | 140 | * @param {es.Range} range Range to select nodes within |
141 | 141 | * @param {Boolean} [shallow] Do not recurse into child nodes of child nodes |
142 | | - * @returns {Array} List of objects with 'node' and 'range' properties describing nodes which are |
| 142 | + * @returns {Array} List of objects with 'node', 'range' and 'globalRange' properties describing nodes which are |
143 | 143 | * covered by the range and the range within the node that is covered |
144 | 144 | */ |
145 | 145 | es.DocumentBranchNode.prototype.selectNodes = function( range, shallow ) { |
— | — | @@ -149,6 +149,7 @@ |
150 | 150 | } |
151 | 151 | var nodes = [], |
152 | 152 | i, |
| 153 | + j, |
153 | 154 | left, |
154 | 155 | right, |
155 | 156 | start = range.start, |
— | — | @@ -166,7 +167,7 @@ |
167 | 168 | if ( end > this.getContentLength() ) { |
168 | 169 | throw 'The end offset of the range is past the end of the node'; |
169 | 170 | } |
170 | | - return [{ 'node': this, 'range': new es.Range( start, end ) }]; |
| 171 | + return [{ 'node': this, 'range': new es.Range( start, end ), 'globalRange': new es.Range( start, end ) }]; |
171 | 172 | } |
172 | 173 | |
173 | 174 | // This node has children, loop over them |
— | — | @@ -187,11 +188,21 @@ |
188 | 189 | // The range is entirely inside this.children[i] |
189 | 190 | if ( shallow ) { |
190 | 191 | nodes = [ |
191 | | - { 'node': this.children[i], 'range': new es.Range( start - left, end - left ) } |
| 192 | + { |
| 193 | + 'node': this.children[i], |
| 194 | + 'range': new es.Range( start - left, end - left ), |
| 195 | + 'globalRange': new es.Range( start, end ) |
| 196 | + } |
192 | 197 | ]; |
193 | 198 | } else { |
194 | 199 | // Recurse into this.children[i] |
195 | 200 | nodes = this.children[i].selectNodes( new es.Range( start - left, end - left ) ); |
| 201 | + // Adjust globalRange |
| 202 | + for ( j = 0; j < nodes.length; j++ ) { |
| 203 | + if ( nodes[j].globalRange !== undefined ) { |
| 204 | + nodes[j].globalRange = es.Range.newFromTranslatedRange( nodes[j].globalRange, left ); |
| 205 | + } |
| 206 | + } |
196 | 207 | } |
197 | 208 | // Since the start and end are both inside this.children[i], we know for sure that we're |
198 | 209 | // done, so return |
— | — | @@ -199,13 +210,19 @@ |
200 | 211 | } else if ( startInside ) { |
201 | 212 | // The start is inside this.children[i] but the end isn't |
202 | 213 | // Add a range from the start of the range to the end of this.children[i] |
203 | | - nodes.push( |
204 | | - { 'node': this.children[i], 'range': new es.Range( start - left, right - left ) } |
205 | | - ); |
| 214 | + nodes.push( { |
| 215 | + 'node': this.children[i], |
| 216 | + 'range': new es.Range( start - left, right - left ), |
| 217 | + 'globalRange': new es.Range( start, right ) |
| 218 | + } ); |
206 | 219 | } else if ( endInside ) { |
207 | 220 | // The end is inside this.children[i] but the start isn't |
208 | 221 | // Add a range from the start of this.children[i] to the end of the range |
209 | | - nodes.push( { 'node': this.children[i], 'range': new es.Range( 0, end - left ) } ); |
| 222 | + nodes.push( { |
| 223 | + 'node': this.children[i], |
| 224 | + 'range': new es.Range( 0, end - left ), |
| 225 | + 'globalRange': new es.Range( left, end ) |
| 226 | + } ); |
210 | 227 | // We've found the end, so we're done |
211 | 228 | return nodes; |
212 | 229 | } else if ( end == right + 1 ) { |