Esanders has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/373706 )

Change subject: DiffElement: Fix insert/delete-to-end loops
......................................................................

DiffElement: Fix insert/delete-to-end loops

Bug: T173860
Change-Id: Ic1c2d997e3295d0cc4d5445c2ef10daa0e9abd54
---
M src/ui/elements/ve.ui.DiffElement.js
M tests/ui/ve.ui.DiffElement.test.js
2 files changed, 37 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor 
refs/changes/06/373706/1

diff --git a/src/ui/elements/ve.ui.DiffElement.js 
b/src/ui/elements/ve.ui.DiffElement.js
index 3a877e7..ea6a12e 100644
--- a/src/ui/elements/ve.ui.DiffElement.js
+++ b/src/ui/elements/ve.ui.DiffElement.js
@@ -194,7 +194,7 @@
  * Render the diff
  */
 ve.ui.DiffElement.prototype.renderDiff = function () {
-       var i, j, k, ilen, jlen, klen, nodes, move, documentSpacerNode, 
internalListSpacerNode, li, groupName,
+       var i, j, ilen, jlen, move, documentSpacerNode, internalListSpacerNode, 
li, groupName,
                noChanges, group, headingNode, names, category, 
internalListGroup,
                internalListDiffDiv, anyInternalListChanges, internalListItem,
                documentNode = this.$document[ 0 ],
@@ -306,17 +306,17 @@
                if ( this.oldDocChildren[ i ] === undefined ) {
 
                        // Everything else in the new doc is an insert
-                       nodes = this.newDocChildren.slice( j );
-                       for ( k = 0, klen = nodes.length; k < klen; k++ ) {
-                               diffQueue.push( [ 'getNodeElements', nodes[ k 
], 'insert' ] );
+                       while ( j < this.newDocChildren.length ) {
+                               diffQueue.push( [ 'getNodeElements', 
this.newDocChildren[ j ], 'insert' ] );
+                               j++;
                        }
 
                } else if ( this.newDocChildren[ j ] === undefined ) {
 
                        // Everything else in the old doc is a remove
-                       nodes = this.oldDocChildren.slice( i );
-                       for ( k = 0, klen = nodes.length; k < klen; k++ ) {
-                               diffQueue.push( [ 'getNodeElements', nodes[ k 
], 'remove' ] );
+                       while ( i < this.oldDocChildren.length ) {
+                               diffQueue.push( [ 'getNodeElements', 
this.oldDocChildren[ i ], 'remove' ] );
+                               i++;
                        }
 
                } else if ( this.remove.indexOf( i ) !== -1 ) {
diff --git a/tests/ui/ve.ui.DiffElement.test.js 
b/tests/ui/ve.ui.DiffElement.test.js
index befa3d3..d3e66dc 100644
--- a/tests/ui/ve.ui.DiffElement.test.js
+++ b/tests/ui/ve.ui.DiffElement.test.js
@@ -191,6 +191,36 @@
                                        '</div>'
                        },
                        {
+                               msg: 'Multi-node insert',
+                               oldDoc: '',
+                               newDoc: '<p>foo</p><p>bar</p>',
+                               expected:
+                                       '<div 
class="ve-ui-diffElement-doc-child-change">' +
+                                               '<p 
data-diff-action="remove"></p>' +
+                                       '</div>' +
+                                       '<div 
class="ve-ui-diffElement-doc-child-change">' +
+                                               '<p 
data-diff-action="insert"><ins>foo</ins></p>' +
+                                       '</div>' +
+                                       '<div 
class="ve-ui-diffElement-doc-child-change">' +
+                                               '<p 
data-diff-action="insert"><ins>bar</ins></p>' +
+                                       '</div>'
+                       },
+                       {
+                               msg: 'Multi-node remove',
+                               oldDoc: '<p>foo</p><p>bar</p>',
+                               newDoc: '',
+                               expected:
+                                       '<div 
class="ve-ui-diffElement-doc-child-change">' +
+                                               '<p 
data-diff-action="remove"><del>foo</del></p>' +
+                                       '</div>' +
+                                       '<div 
class="ve-ui-diffElement-doc-child-change">' +
+                                               '<p 
data-diff-action="remove"><del>bar</del></p>' +
+                                       '</div>' +
+                                       '<div 
class="ve-ui-diffElement-doc-child-change">' +
+                                               '<p 
data-diff-action="insert"></p>' +
+                                       '</div>'
+                       },
+                       {
                                msg: 'Inline node inserted',
                                oldDoc: '<p>foo bar baz quux</p>',
                                newDoc: '<p>foo bar <!--whee--> baz quux</p>',

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic1c2d997e3295d0cc4d5445c2ef10daa0e9abd54
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <esand...@wikimedia.org>

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

Reply via email to