Esanders has uploaded a new change for review.
https://gerrit.wikimedia.org/r/161978
Change subject: Make newFromTranslatedRange a method (translate)
......................................................................
Make newFromTranslatedRange a method (translate)
For consistency we use methods for range modification (e.g. flip, truncate)
Change-Id: I5d3596b40c9943bc0b037074a065d4f719bb1405
---
M src/dm/ve.dm.DocumentSynchronizer.js
M src/ui/actions/ve.ui.IndentationAction.js
M src/ve.Range.js
M tests/ve.Range.test.js
4 files changed, 20 insertions(+), 22 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor
refs/changes/78/161978/1
diff --git a/src/dm/ve.dm.DocumentSynchronizer.js
b/src/dm/ve.dm.DocumentSynchronizer.js
index 3d13b72..7e35791 100644
--- a/src/dm/ve.dm.DocumentSynchronizer.js
+++ b/src/dm/ve.dm.DocumentSynchronizer.js
@@ -58,7 +58,7 @@
ve.dm.DocumentSynchronizer.synchronizers.annotation = function ( action ) {
// Queue events for all leaf nodes covered by the range
var i,
- adjustedRange = ve.Range.newFromTranslatedRange( action.range,
this.adjustment ),
+ adjustedRange = action.range.translate( this.adjustment ),
selection = this.document.selectNodes( adjustedRange, 'leaves'
);
for ( i = 0; i < selection.length; i++ ) {
// No tree synchronization needed
@@ -122,7 +122,7 @@
ve.dm.DocumentSynchronizer.synchronizers.rebuild = function ( action ) {
var firstNode, parent, index, numNodes,
// Find the nodes contained by oldRange
- adjustedOldRange = ve.Range.newFromTranslatedRange(
action.oldRange, this.adjustment ),
+ adjustedOldRange = action.oldRange.translate( this.adjustment ),
selection = this.document.selectNodes( adjustedOldRange,
'siblings' );
// If the document is empty, selection[0].node will be the document (so
no parent)
diff --git a/src/ui/actions/ve.ui.IndentationAction.js
b/src/ui/actions/ve.ui.IndentationAction.js
index 1e6bd91..918b7ff 100644
--- a/src/ui/actions/ve.ui.IndentationAction.js
+++ b/src/ui/actions/ve.ui.IndentationAction.js
@@ -165,7 +165,7 @@
surfaceModel.change( tx );
selection = tx.translateRange( selection );
// tx.translateRange( innerListItemRange ) doesn't do what we want
- innerListItemRange = ve.Range.newFromTranslatedRange( listItemRange, 2
);
+ innerListItemRange = listItemRange.translate( 2 );
outerListItemRange = new ve.Range( listItemRange.start,
listItemRange.end + 2 );
// (2) Merge the listItem into the previous listItem (if there is one)
@@ -242,7 +242,7 @@
);
surfaceModel.change( tx );
// tx.translateRange( listItemRange ) doesn't do what we want
- listItemRange = ve.Range.newFromTranslatedRange( listItemRange,
2 );
+ listItemRange = listItemRange.translate( 2 );
}
if ( documentModel.data.getData( listItemRange.end ).type !== '/list' )
{
// (1b) listItem is not the last child, split the list after
listItem
@@ -293,7 +293,7 @@
);
surfaceModel.change( tx );
// tx.translateRange( splitListRange ) doesn't do what
we want
- splitListRange = ve.Range.newFromTranslatedRange(
splitListRange, 2 );
+ splitListRange = splitListRange.translate( 2 );
}
if ( documentModel.data.getData( splitListRange.end ).type !==
'/listItem' ) {
// (3b) Split parentListItem after list
diff --git a/src/ve.Range.js b/src/ve.Range.js
index 55919cb..32e48d0 100644
--- a/src/ve.Range.js
+++ b/src/ve.Range.js
@@ -50,18 +50,6 @@
};
/**
- * Create a new range that's a translated version of another.
- *
- * @static
- * @param {ve.Range} range Range to base new range on
- * @param {number} distance Distance to move range by
- * @returns {ve.Range} New translated range
- */
-ve.Range.newFromTranslatedRange = function ( range, distance ) {
- return new ve.Range( range.from + distance, range.to + distance );
-};
-
-/**
* Create a range object that covers all of the given ranges.
*
* @static
@@ -142,6 +130,16 @@
};
/**
+ * Get a range that's a translated version of this one.
+ *
+ * @param {number} distance Distance to move range by
+ * @returns {ve.Range} New translated range
+ */
+ve.Range.prototype.translate = function ( distance ) {
+ return new ve.Range( this.from + distance, this.to + distance );
+};
+
+/**
* Check if two ranges are equal, taking direction into account.
*
* @param {ve.Range|null} other
diff --git a/tests/ve.Range.test.js b/tests/ve.Range.test.js
index 22ceebf..06cc74f 100644
--- a/tests/ve.Range.test.js
+++ b/tests/ve.Range.test.js
@@ -44,7 +44,7 @@
} );
-QUnit.test( 'Modification (flip, truncate, expand, clone)', 15, function (
assert ) {
+QUnit.test( 'Modification (flip, truncate, expand, translate, clone)', 17,
function ( assert ) {
var range = new ve.Range( 100, 200 );
assert.equalRange( range.flip(), new ve.Range( 200, 100 ), 'flip
reverses the range' );
@@ -65,15 +65,15 @@
assert.equalRange( range.expand( new ve.Range( 50 ) ), new ve.Range(
50, 200 ), 'non-overlapping expand to left' );
assert.equalRange( range.expand( new ve.Range( 150, 50 ) ), new
ve.Range( 50, 200 ), 'backwards overlapping expand to left' );
+ assert.equalRange( range.translate( 10 ), new ve.Range( 110, 210 ),
'translate 10' );
+ assert.equalRange( range.translate( -10 ), new ve.Range( 90, 190 ),
'translate -10' );
+
assert.strictEqual( range.flip().expand( new ve.Range( 250 )
).isBackwards(), true, 'expands preserves backwards' );
} );
-QUnit.test( 'Factory methods & serialization (newFromTranslatedRange,
newCoveringRange, newFromJSON, toJSON)', 8, function ( assert ) {
+QUnit.test( 'Factory methods & serialization (newCoveringRange, newFromJSON,
toJSON)', 6, function ( assert ) {
var range = new ve.Range( 100, 200 );
-
- assert.equalRange( ve.Range.newFromTranslatedRange( range, 10 ), new
ve.Range( 110, 210 ), 'translate 10' );
- assert.equalRange( ve.Range.newFromTranslatedRange( range, -10 ), new
ve.Range( 90, 190 ), 'translate -10' );
assert.equalRange(
ve.Range.newCoveringRange( [ range, new ve.Range( 150, 250 ) ]
),
--
To view, visit https://gerrit.wikimedia.org/r/161978
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I5d3596b40c9943bc0b037074a065d4f719bb1405
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits