jenkins-bot has submitted this change and it was merged.
Change subject: [BREAKING CHANGE] Generalize ve.compareOffsetPaths() to
ve.compareTuples()
......................................................................
[BREAKING CHANGE] Generalize ve.compareOffsetPaths() to ve.compareTuples()
ve.compareOffsetPaths() was essentially a generic tuple comparator
already. This commit makes its behavior for tuples of different
lengths more useful and renames it to ve.compareTuples().
Change-Id: I693129cfbdb061099a9fa14779c07b8b9d2d7363
---
M src/ve.utils.js
1 file changed, 24 insertions(+), 11 deletions(-)
Approvals:
Krinkle: Looks good to me, approved
Jforrester: Looks good to me, but someone else must approve
jenkins-bot: Verified
diff --git a/src/ve.utils.js b/src/ve.utils.js
index cf63d0e..a95443d 100644
--- a/src/ve.utils.js
+++ b/src/ve.utils.js
@@ -1234,20 +1234,34 @@
};
/**
- * Compare two offset paths for position in document
+ * Compare two tuples in lexicographical order.
*
- * @param {number[]} path1 First offset path
- * @param {number[]} path2 Second offset path
- * @return {number} negative, zero or positive number
+ * This function first compares `a[0]` with `b[0]`, then `a[1]` with `b[1]`,
etc.
+ * until it encounters a pair where `a[k] != b[k]`; then returns `a[k] - b[k]`.
+ *
+ * If `a[k] == b[k]` for every `k`, this function returns 0.
+ *
+ * If a and b are of unequal length, but `a[k] == b[k]` for all `k` that exist
in both a and b, then
+ * this function returns `Infinity` (if a is longer) or `-Infinity` (if b is
longer).
+ *
+ * @param {number[]} a First tuple
+ * @param {number[]} b Second tuple
+ * @return {number} `a[k] - b[k]` where k is the lowest k such that `a[k] !=
b[k]`
*/
-ve.compareOffsetPaths = function ( path1, path2 ) {
+ve.compareTuples = function ( a, b ) {
var i, len;
- for ( i = 0, len = Math.min( path1.length, path2.length ); i < len; i++
) {
- if ( path1[ i ] !== path2[ i ] ) {
- return path1[ i ] - path2[ i ];
+ for ( i = 0, len = Math.min( a.length, b.length ); i < len; i++ ) {
+ if ( a[i] !== b[i] ) {
+ return a[i] - b[i];
}
}
- return path1.length - path2.length;
+ if ( a.length > b.length ) {
+ return Infinity;
+ }
+ if ( a.length < b.length ) {
+ return -Infinity;
+ }
+ return 0;
};
/**
@@ -1260,12 +1274,11 @@
* @return {number} negative, zero or positive number
*/
ve.compareDocumentOrder = function ( node1, offset1, node2, offset2 ) {
-
var commonAncestor = ve.getCommonAncestor( node1, node2 );
if ( commonAncestor === null ) {
throw new Error( 'No common ancestor' );
}
- return ve.compareOffsetPaths(
+ return ve.compareTuples(
ve.getOffsetPath( commonAncestor, node1, offset1 ),
ve.getOffsetPath( commonAncestor, node2, offset2 )
);
--
To view, visit https://gerrit.wikimedia.org/r/203473
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I693129cfbdb061099a9fa14779c07b8b9d2d7363
Gerrit-PatchSet: 3
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Catrope <[email protected]>
Gerrit-Reviewer: Jforrester <[email protected]>
Gerrit-Reviewer: Krinkle <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits