some more anchor tests and fixes
This commit is contained in:
parent
56e691f31f
commit
7dfa56c6b8
2 changed files with 42 additions and 4 deletions
|
|
@ -71,8 +71,17 @@ var Anchor = exports.Anchor = function(doc, row, column) {
|
|||
this.onChange = function(e) {
|
||||
var delta = e.data;
|
||||
var range = delta.range;
|
||||
var pos = this.getPosition();
|
||||
|
||||
if (range.start.row == range.end.row && range.start.row != this.pos.row)
|
||||
return;
|
||||
|
||||
if (range.start.row > this.pos.row)
|
||||
return;
|
||||
|
||||
if (range.start.row == this.pos.row && range.start.column > this.pos.column)
|
||||
return;
|
||||
|
||||
var pos = this.getPosition();
|
||||
if (delta.action === "insertText") {
|
||||
if (range.start.row === pos.row && range.start.column <= pos.column) {
|
||||
if (range.start.row === range.end.row) {
|
||||
|
|
@ -92,8 +101,12 @@ var Anchor = exports.Anchor = function(doc, row, column) {
|
|||
}
|
||||
}
|
||||
else if (delta.action == "removeText") {
|
||||
if (range.start.row == pos.row && range.start.column <= pos.column) {
|
||||
pos.column -= Math.max(0, range.end.column - range.start.column);
|
||||
if (range.start.row == pos.row && range.start.column < pos.column) {
|
||||
if (range.end.column >= pos.column)
|
||||
pos.column = range.start.column;
|
||||
else
|
||||
pos.column = Math.max(0, pos.column - (range.end.column - range.start.column));
|
||||
|
||||
} else if (range.start.row !== range.end.row && range.start.row < pos.row) {
|
||||
if (range.end.row == pos.row) {
|
||||
pos.column = Math.max(0, pos.column - range.end.column) + range.start.column;
|
||||
|
|
@ -102,7 +115,7 @@ var Anchor = exports.Anchor = function(doc, row, column) {
|
|||
}
|
||||
else if (range.end.row == pos.row) {
|
||||
pos.row -= range.end.row - range.start.row;
|
||||
pos.column = pos.column - range.end.column + range.start.column;
|
||||
pos.column = Math.max(0, pos.column - range.end.column) + range.start.column;
|
||||
}
|
||||
} else if (delta.action == "removeLines") {
|
||||
if (range.start.row <= pos.row) {
|
||||
|
|
|
|||
|
|
@ -91,6 +91,23 @@ var Test = {
|
|||
assert.position(anchor.getPosition(), 1, 2);
|
||||
},
|
||||
|
||||
"test remove range which contains the anchor should move the anchor to the start of the range": function() {
|
||||
var doc = new Document("juhu\nkinners");
|
||||
var anchor = new Anchor(doc, 0, 3);
|
||||
|
||||
doc.remove(new Range(0, 1, 1, 3));
|
||||
assert.position(anchor.getPosition(), 0, 1);
|
||||
},
|
||||
|
||||
"test delete character before the anchor should have no effect": function() {
|
||||
var doc = new Document("juhu\nkinners");
|
||||
var anchor = new Anchor(doc, 1, 4);
|
||||
|
||||
doc.remove(new Range(1, 4, 1, 5));
|
||||
console.log(doc.$lines);
|
||||
assert.position(anchor.getPosition(), 1, 4);
|
||||
},
|
||||
|
||||
"test delete lines in anchor line before anchor should move anchor row": function() {
|
||||
var doc = new Document("juhu\n1\n2\nkinners");
|
||||
var anchor = new Anchor(doc, 3, 4);
|
||||
|
|
@ -123,6 +140,14 @@ var Test = {
|
|||
assert.position(anchor.getPosition(), 1, 0);
|
||||
},
|
||||
|
||||
"test remove after the anchor should have no effect": function() {
|
||||
var doc = new Document("juhu\nkinners\n123");
|
||||
var anchor = new Anchor(doc, 1, 2);
|
||||
|
||||
doc.remove(new Range(1, 4, 2, 2));
|
||||
assert.position(anchor.getPosition(), 1, 2);
|
||||
},
|
||||
|
||||
"test anchor changes triggered by document changes should emit change event": function(next) {
|
||||
var doc = new Document("juhu\nkinners\n123");
|
||||
var anchor = new Anchor(doc, 1, 5);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue