fix $setUndoSelection for multiline deltas

This commit is contained in:
nightwing 2011-05-15 18:51:27 +05:00
commit 02f8faee55

View file

@ -691,7 +691,7 @@ var EditSession = function(text, mode) {
if (delta.group == "doc") {
this.doc.revertDeltas(delta.deltas);
lastUndoRange =
this.$setUndoSelection(delta.deltas, true, lastUndoRange);
this.$getUndoSelection(delta.deltas, true, lastUndoRange);
} else {
delta.deltas.forEach(function(foldDelta) {
this.addFolds(foldDelta.folds);
@ -699,6 +699,7 @@ var EditSession = function(text, mode) {
}
}
this.$fromUndo = false;
lastUndoRange && this.selection.setSelectionRange(lastUndoRange);
},
this.redoChanges = function(deltas) {
@ -712,13 +713,14 @@ var EditSession = function(text, mode) {
if (delta.group == "doc") {
this.doc.applyDeltas(delta.deltas);
lastUndoRange =
this.$setUndoSelection(delta.deltas, false, lastUndoRange);
this.$getUndoSelection(delta.deltas, false, lastUndoRange);
}
}
this.$fromUndo = false;
lastUndoRange && this.selection.setSelectionRange(lastUndoRange);
},
this.$setUndoSelection = function(deltas, isUndo, lastUndoRange) {
this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {
function isInsert(delta) {
var insert =
delta.action == "insertText" || delta.action == "insertLines";
@ -726,7 +728,7 @@ var EditSession = function(text, mode) {
}
var delta = deltas[0];
var range;
var range, point;
var lastDeltaIsInsert = false;
if (isInsert(delta)) {
range = delta.range.clone();
@ -739,15 +741,18 @@ var EditSession = function(text, mode) {
for (var i = 1; i < deltas.length; i++) {
delta = deltas[i];
if (isInsert(delta)) {
if (range.compare(delta.range.start) == -1) {
point = delta.range.start;
if (range.compare(point.row, point.column) == -1) {
range.setStart(delta.range.start);
}
if (range.compare(delta.range.end) == 1) {
point = delta.range.end;
if (range.compare(point.row, point.column) == 1) {
range.setEnd(delta.range.end);
}
lastDeltaIsInsert = true;
} else {
if (range.compare(delta.range.start) == -1) {
point = delta.range.start;
if (range.compare(point.row, point.column) == -1) {
range =
Range.fromPoints(delta.range.start, delta.range.start);
}
@ -766,11 +771,6 @@ var EditSession = function(text, mode) {
}
}
if (!range.isEmpty()) {
this.selection.setSelectionRange(range);
} else {
this.selection.moveCursorToPosition(range.start);
}
return range;
},