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:
aldendaniels 2014-01-11 15:48:38 -06:00
commit 7f1bc7af2f

View file

@ -100,15 +100,20 @@ 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) { function $pointsInOrder(point1, point2, equalPointsInOrder) {
var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;
return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);
} }
function getTransformedPoint(delta, point, moveIfEqual) { this.$getTransformedPoint = function (delta, point) {
// 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.range.end.row - delta.range.start.row); 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); var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.range.end.column - delta.range.start.column);
@ -116,7 +121,7 @@ var Anchor = exports.Anchor = function(doc, row, column) {
var deltaEnd = (deltaIsInsert ? deltaStart : delta.range.end); // Collapse insert range. var deltaEnd = (deltaIsInsert ? deltaStart : delta.range.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)) {
return { return {
row: point.row, row: point.row,
column: point.column column: point.column
@ -124,7 +129,7 @@ var Anchor = exports.Anchor = function(doc, row, column) {
} }
// DELTA BEFORE POINT: Move point by delta shift. // DELTA BEFORE POINT: Move point by delta shift.
if (_pointsInOrder(deltaEnd, point, !moveIfEqual)) { if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {
return { return {
row: point.row + deltaRowShift, row: point.row + deltaRowShift,
column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)
@ -139,11 +144,6 @@ var Anchor = exports.Anchor = function(doc, row, column) {
row: deltaStart.row, row: deltaStart.row,
column: deltaStart.column column: deltaStart.column
}; };
}
var delta = e.data;
var point = getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);
this.setPosition(point.row, point.column, true);
}; };
/** /**