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