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