Break out Anchor.onChange helper functions
This should be faster since we don't have to re-initialize the helper functions each time Anchor.onChange is fired.
This commit is contained in:
parent
6b280bf6bb
commit
7f1bc7af2f
1 changed files with 39 additions and 39 deletions
|
|
@ -100,50 +100,50 @@ var Anchor = exports.Anchor = function(doc, row, column) {
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
this.onChange = function(e) {
|
this.onChange = function(e) {
|
||||||
|
var delta = e.data;
|
||||||
|
var point = this.$getTransformedPoint(delta, {row: this.row, column: this.column});
|
||||||
|
this.setPosition(point.row, point.column, true);
|
||||||
|
};
|
||||||
|
|
||||||
|
function $pointsInOrder(point1, point2, equalPointsInOrder) {
|
||||||
|
var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;
|
||||||
|
return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$getTransformedPoint = function (delta, point) {
|
||||||
|
|
||||||
function _pointsInOrder(point1, point2, equalPointsInOrder) {
|
// Get delta info.
|
||||||
var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;
|
var moveIfEqual = this.$insertRight;
|
||||||
return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);
|
var deltaIsInsert = (delta.action == 'insert')
|
||||||
}
|
var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.range.end.row - delta.range.start.row);
|
||||||
|
var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.range.end.column - delta.range.start.column);
|
||||||
function getTransformedPoint(delta, point, moveIfEqual) {
|
var deltaStart = delta.range.start;
|
||||||
|
var deltaEnd = (deltaIsInsert ? deltaStart : delta.range.end); // Collapse insert range.
|
||||||
// Get delta info.
|
|
||||||
var deltaIsInsert = (delta.action == 'insert')
|
// DELTA AFTER POINT: No change needed.
|
||||||
var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.range.end.row - delta.range.start.row);
|
if ($pointsInOrder(point, deltaStart, moveIfEqual)) {
|
||||||
var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.range.end.column - delta.range.start.column);
|
|
||||||
var deltaStart = delta.range.start;
|
|
||||||
var deltaEnd = (deltaIsInsert ? deltaStart : delta.range.end); // Collapse insert range.
|
|
||||||
|
|
||||||
// DELTA AFTER POINT: No change needed.
|
|
||||||
if (_pointsInOrder(point, deltaStart, moveIfEqual)) {
|
|
||||||
return {
|
|
||||||
row: point.row,
|
|
||||||
column: point.column
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// DELTA BEFORE POINT: Move point by delta shift.
|
|
||||||
if (_pointsInOrder(deltaEnd, point, !moveIfEqual)) {
|
|
||||||
return {
|
|
||||||
row: point.row + deltaRowShift,
|
|
||||||
column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// DELTA ENVELOPS POINT (delete only): Move point to delta start.
|
|
||||||
if (delta.action != 'remove')
|
|
||||||
throw 'Delete action expected.';
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
row: deltaStart.row,
|
row: point.row,
|
||||||
column: deltaStart.column
|
column: point.column
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
var delta = e.data;
|
// DELTA BEFORE POINT: Move point by delta shift.
|
||||||
var point = getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);
|
if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {
|
||||||
this.setPosition(point.row, point.column, true);
|
return {
|
||||||
|
row: point.row + deltaRowShift,
|
||||||
|
column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// DELTA ENVELOPS POINT (delete only): Move point to delta start.
|
||||||
|
if (delta.action != 'remove')
|
||||||
|
throw 'Delete action expected.';
|
||||||
|
|
||||||
|
return {
|
||||||
|
row: deltaStart.row,
|
||||||
|
column: deltaStart.column
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue