Cscott has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/84438


Change subject: Factor out `ve.dm.Transaction.pushReplaceInternal`.
......................................................................

Factor out `ve.dm.Transaction.pushReplaceInternal`.

This helps us keep the `lengthDifference` and "maybe include metadata"
accounting in one place.

Change-Id: I4d38c1e1f3936679758d04b3f83d0d311fdaa65c
---
M modules/ve/dm/ve.dm.Transaction.js
1 file changed, 30 insertions(+), 12 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/38/84438/1

diff --git a/modules/ve/dm/ve.dm.Transaction.js 
b/modules/ve/dm/ve.dm.Transaction.js
index 25dc08a..3c307e0 100644
--- a/modules/ve/dm/ve.dm.Transaction.js
+++ b/modules/ve/dm/ve.dm.Transaction.js
@@ -891,6 +891,33 @@
 };
 
 /**
+ * Add a replace operation (internal helper).
+ *
+ * @private
+ * @method
+ * @param {Array} remove Data removed.
+ * @param {Array} insert Data to insert.
+ * @param {Array|undefined} removeMetadata Metadata removed.
+ * @param {Array} insertMetadata Metadata to insert.
+ */
+ve.dm.Transaction.prototype.pushReplaceInternal = function ( remove, insert, 
removeMetadata, insertMetadata ) {
+       if ( remove.length === 0 && insert.length === 0) {
+               return; // no-op
+       }
+       var op = {
+               'type': 'replace',
+               'remove': remove,
+               'insert': insert
+       };
+       if ( removeMetadata !== undefined && insertMetadata !== undefined ) {
+               op.removeMetadata = removeMetadata;
+               op.insertMetadata = insertMetadata;
+       }
+       this.operations.push( op );
+       this.lengthDifference += insert.length - remove.length;
+};
+
+/**
  * Add a replace operation, keeping metadata in sync if required.
  *
  * Note that metadata attached to removed content is moved so that it
@@ -915,7 +942,7 @@
                return;
        }
 
-       var op, end = this.operations.length - 1,
+       var end = this.operations.length - 1,
                lastOp = end >= 0 ? this.operations[end] : null,
                penultOp = end >= 1 ? this.operations[ end - 1 ] : null,
                range = new ve.Range( offset, offset + removeLength ),
@@ -974,17 +1001,8 @@
                throw new Error( 'replace after replaceMetadata not allowed' );
        }
 
-       op = {
-               'type': 'replace',
-               'remove': remove,
-               'insert': insert
-       };
-       if ( insertMetadata !== undefined ) {
-               op.removeMetadata = removeMetadata;
-               op.insertMetadata = insertMetadata;
-       }
-       this.operations.push( op );
-       this.lengthDifference += insert.length - remove.length;
+       this.pushReplaceInternal( remove, insert, removeMetadata, 
insertMetadata );
+
        if ( extraMetadata !== undefined ) {
                this.pushReplaceMetadata( [], extraMetadata );
        }

-- 
To view, visit https://gerrit.wikimedia.org/r/84438
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4d38c1e1f3936679758d04b3f83d0d311fdaa65c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Cscott <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to