do not throw for broken anchors since that can break editor

This commit is contained in:
nightwing 2014-11-20 23:23:46 +04:00
commit 004a19855a

View file

@ -70,7 +70,6 @@ var Anchor = exports.Anchor = function(doc, row, column) {
* @returns {Object} * @returns {Object}
**/ **/
this.getPosition = function() { this.getPosition = function() {
//process.exit(2)
return this.$clipPositionToDocument(this.row, this.column); return this.$clipPositionToDocument(this.row, this.column);
}; };
@ -107,7 +106,7 @@ var Anchor = exports.Anchor = function(doc, row, column) {
if (delta.start.row > this.row) if (delta.start.row > this.row)
return; return;
var point = this.$getTransformedPoint(delta, {row: this.row, column: this.column}); var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);
this.setPosition(point.row, point.column, true); this.setPosition(point.row, point.column, true);
}; };
@ -116,14 +115,13 @@ var Anchor = exports.Anchor = function(doc, row, column) {
return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);
} }
this.$getTransformedPoint = function (delta, point) { function $getTransformedPoint(delta, point, moveIfEqual) {
// Get delta info. // Get delta info.
var moveIfEqual = this.$insertRight; var deltaIsInsert = delta.action == "insert";
var deltaIsInsert = (delta.action == "insert")
var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);
var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);
var deltaStart = delta.start; var deltaStart = delta.start;
var deltaEnd = (deltaIsInsert ? deltaStart : delta.end); // Collapse insert range. var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.
// DELTA AFTER POINT: No change needed. // DELTA AFTER POINT: No change needed.
if ($pointsInOrder(point, deltaStart, moveIfEqual)) { if ($pointsInOrder(point, deltaStart, moveIfEqual)) {
@ -142,14 +140,13 @@ var Anchor = exports.Anchor = function(doc, row, column) {
} }
// DELTA ENVELOPS POINT (delete only): Move point to delta start. // DELTA ENVELOPS POINT (delete only): Move point to delta start.
if (delta.action != "remove") // TODO warn if delta.action != "remove" ?
throw "Delete action expected.";
return { return {
row: deltaStart.row, row: deltaStart.row,
column: deltaStart.column column: deltaStart.column
}; };
}; }
/** /**
* Sets the anchor position to the specified row and column. If `noClip` is `true`, the position is not clipped. * Sets the anchor position to the specified row and column. If `noClip` is `true`, the position is not clipped.