Catrope has uploaded a new change for review.

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


Change subject: Add a transaction builder for replacing the contents of an 
internal node
......................................................................

Add a transaction builder for replacing the contents of an internal node

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


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

diff --git a/modules/ve/dm/ve.dm.Transaction.js 
b/modules/ve/dm/ve.dm.Transaction.js
index 787cfd7..80b81a5 100644
--- a/modules/ve/dm/ve.dm.Transaction.js
+++ b/modules/ve/dm/ve.dm.Transaction.js
@@ -154,6 +154,29 @@
 };
 
 /**
+ * Generate a transaction that replaces the contents of an internal node.
+ *
+ * @param {ve.dm.Document} doc Document to create transaction for
+ * @param {ve.dm.InternalNode|ve.Range} nodeOrRange Internal node or inner 
range of such
+ * @param {Array} newData Linear model data to replace the contents of the 
internal node with
+ * @returns {ve.dm.Transaction} Transaction that replaces the contents of the 
internal node
+ * @throws {Error} nodeOrRange must be a ve.dm.Node or a ve.Range
+ */
+ve.dm.Transaction.newFromInternalNodeReplacement = function ( doc, 
nodeOrRange, newData ) {
+       var tx = new ve.dm.Transaction(), range = nodeOrRange;
+       if ( range instanceof ve.dm.Node ) {
+               range = range.getRange();
+       }
+       if ( !( range instanceof ve.Range ) ) {
+               throw new Error( 'nodeOrRange must be a ve.dm.Node or a 
ve.Range' );
+       }
+       tx.pushRetain( range.start );
+       tx.pushReplace( doc, range.start, range.end - range.start, newData );
+       tx.pushRetain( doc.data.getLength() - range.end );
+       return tx;
+};
+
+/**
  * Generate a transaction that changes an attribute.
  *
  * @static
diff --git a/modules/ve/test/dm/ve.dm.Transaction.test.js 
b/modules/ve/test/dm/ve.dm.Transaction.test.js
index 7944daa..5311f27 100644
--- a/modules/ve/test/dm/ve.dm.Transaction.test.js
+++ b/modules/ve/test/dm/ve.dm.Transaction.test.js
@@ -661,6 +661,40 @@
        runConstructorTests( assert, ve.dm.Transaction.newFromRemoval, cases );
 } );
 
+QUnit.test( 'newFromInternalNodeReplacement', function ( assert ) {
+       var i, key, store, doc = ve.dm.example.createExampleDocument( 
'internalData' ),
+               paragraph = [ { 'type': 'paragraph' }, 'H', 'e', 'l', 'l', 'o', 
{ 'type': '/paragraph' } ],
+               secondNode = doc.internalList.getItemNode( 1 ),
+               cases = {
+                       'replacing first internal node with paragraph': {
+                               'args': [doc, new ve.Range( 7, 12 ), paragraph],
+                               'ops': [
+                                       { 'type': 'retain', 'length': 7 },
+                                       {
+                                               'type': 'replace',
+                                               'remove': doc.data.slice( 7, 12 
),
+                                               'insert': paragraph
+                                       },
+                                       { 'type': 'retain', 'length': 15 }
+                               ]
+                       },
+                       'replacing second internal node with two paragraphs': {
+                               'args': [doc, secondNode, paragraph.concat( 
paragraph )],
+                               'ops': [
+                                       { 'type': 'retain', 'length': 14 },
+                                       {
+                                               'type': 'replace',
+                                               'remove': 
doc.data.getDataSlice( secondNode.getRange() ),
+                                               'insert': paragraph.concat( 
paragraph )
+                                       },
+                                       { 'type': 'retain', 'length': 8 }
+                               ]
+                       }
+               };
+       QUnit.expect( ve.getObjectKeys( cases ).length );
+       runConstructorTests( assert, 
ve.dm.Transaction.newFromInternalNodeReplacement, cases );
+} );
+
 QUnit.test( 'newFromAttributeChange', function ( assert ) {
        var doc = ve.dm.example.createExampleDocument(),
                cases = {

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I69d362c4694104313dd2634434eddfbaf9435b22
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Catrope <roan.katt...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to