(dv, force)
| 329 | } |
| 330 | |
| 331 | function alignChunks(dv, force) { |
| 332 | if (!dv.dealigned && !force) return; |
| 333 | if (!dv.orig.curOp) return dv.orig.operation(function() { |
| 334 | alignChunks(dv, force); |
| 335 | }); |
| 336 | |
| 337 | dv.dealigned = false; |
| 338 | var other = dv.mv.left == dv ? dv.mv.right : dv.mv.left; |
| 339 | if (other) { |
| 340 | ensureDiff(other); |
| 341 | other.dealigned = false; |
| 342 | } |
| 343 | var linesToAlign = findAlignedLines(dv, other); |
| 344 | |
| 345 | // Clear old aligners |
| 346 | var aligners = dv.mv.aligners; |
| 347 | for (var i = 0; i < aligners.length; i++) |
| 348 | aligners[i].clear(); |
| 349 | aligners.length = 0; |
| 350 | |
| 351 | var cm = [dv.orig, dv.edit], scroll = []; |
| 352 | if (other) cm.push(other.orig); |
| 353 | for (var i = 0; i < cm.length; i++) |
| 354 | scroll.push(cm[i].getScrollInfo().top); |
| 355 | |
| 356 | for (var ln = 0; ln < linesToAlign.length; ln++) |
| 357 | alignLines(cm, linesToAlign[ln], aligners); |
| 358 | |
| 359 | for (var i = 0; i < cm.length; i++) |
| 360 | cm[i].scrollTo(null, scroll[i]); |
| 361 | } |
| 362 | |
| 363 | function alignLines(cm, lines, aligners) { |
| 364 | var maxOffset = 0, offset = []; |
no test coverage detected