fix $setUndoSelection for multiline deltas
This commit is contained in:
parent
893c36c313
commit
02f8faee55
1 changed files with 12 additions and 12 deletions
|
|
@ -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;
|
||||
},
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue