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 <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits