Cscott has uploaded a new change for review.

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


Change subject: Add `ve.dm.Transaction.newNoOp` constructor.
......................................................................

Add `ve.dm.Transaction.newNoOp` constructor.

Make it easier to create a no-op transaction (with a appropriate
retain/retainMetadata operations).

Change-Id: I77f19a2c532f4a47f51d2d8669c9d38c98ae8105
---
M modules/ve/dm/ve.dm.Transaction.js
M modules/ve/test/dm/ve.dm.Transaction.test.js
2 files changed, 37 insertions(+), 2 deletions(-)


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

diff --git a/modules/ve/dm/ve.dm.Transaction.js 
b/modules/ve/dm/ve.dm.Transaction.js
index 3c307e0..5f319b1 100644
--- a/modules/ve/dm/ve.dm.Transaction.js
+++ b/modules/ve/dm/ve.dm.Transaction.js
@@ -75,8 +75,7 @@
        // Validate range
        if ( range.isCollapsed() ) {
                // Empty range, nothing to remove, retain up to the end of the 
document (for completeness)
-               tx.pushFinalRetain( doc, 0 );
-               return tx;
+               return ve.dm.Transaction.newNoOp( doc );
        }
        // Select nodes and validate selection
        selection = doc.selectNodes( range, 'covered' );
@@ -598,6 +597,18 @@
        return tx;
 };
 
+/**
+ * Generate a transaction that does nothing.
+ *
+ * @param {ve.dm.Document} doc Document to generate a transaction for
+ * @returns {ve.dm.Transaction}
+ */
+ve.dm.Transaction.newNoOp = function ( doc ) {
+       var tx = new ve.dm.Transaction( [ 'newNoOp' ] );
+       tx.pushFinalRetain( doc, 0 );
+       return tx;
+};
+
 /* Methods */
 
 /**
@@ -611,6 +622,7 @@
  */
 ve.dm.Transaction.prototype.isNoOp = function () {
        return (
+               ve.compare( this.intention, [ 'newNoOp' ] ) ||
                this.operations.length === 0 ||
                ( this.operations.length === 1 && this.operations[0].type === 
'retain' )
        );
diff --git a/modules/ve/test/dm/ve.dm.Transaction.test.js 
b/modules/ve/test/dm/ve.dm.Transaction.test.js
index 9e3851f..116c6b9 100644
--- a/modules/ve/test/dm/ve.dm.Transaction.test.js
+++ b/modules/ve/test/dm/ve.dm.Transaction.test.js
@@ -42,6 +42,29 @@
 
 /* Tests */
 
+QUnit.test( 'newNoOp', function ( assert ) {
+       var doc = ve.dm.example.createExampleDocument(),
+               listWithMetaDoc = ve.dm.example.createExampleDocument( 
'listWithMeta' ),
+               cases;
+       cases = {
+               'example document': {
+                       'args': [ doc ],
+                       'ops': [
+                               { 'type': 'retain', 'length': 63 }
+                       ]
+               },
+               'trailing metadata': {
+                       'args': [ listWithMetaDoc ],
+                       'ops': [
+                               { 'type': 'retain', 'length': 12 },
+                               { 'type': 'retainMetadata', 'length': 1 }
+                       ]
+               }
+       };
+       QUnit.expect( ve.getObjectKeys( cases ).length );
+       runConstructorTests( assert, ve.dm.Transaction.newNoOp, cases );
+} );
+
 QUnit.test( 'newFromInsertion', function ( assert ) {
        var i, key,
                doc = ve.dm.example.createExampleDocument(),

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I77f19a2c532f4a47f51d2d8669c9d38c98ae8105
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