Merge pull request #3287 from CatoTH/diff-bugfix

Fix a bug where a single moved word was not highlighted in the diff
This commit is contained in:
Emanuel Schütze 2017-06-07 20:15:48 +02:00 committed by GitHub
commit 5a945c3a71
2 changed files with 25 additions and 2 deletions

View File

@ -863,18 +863,33 @@ angular.module('OpenSlidesApp.motions.diff', ['OpenSlidesApp.motions.lineNumberi
}
}
var currOldRow = 0;
for (i = 0; i < out.n.length; i++) {
if (out.n[i].text === undefined) {
if (out.n[i] !== "") {
str += '<ins>' + out.n[i] + "</ins>";
}
} else if (out.n[i].row < currOldRow) {
str += '<ins>' + out.n[i].text + "</ins>";
} else {
var pre = "";
for (var j = out.n[i].row + 1; j < out.o.length && out.o[j].text === undefined; j++) {
pre += '<del>' + out.o[j] + "</del>";
if ((i + 1) < out.n.length && out.n[i + 1].row !== undefined && out.n[i + 1].row > out.n[i].row + 1) {
for (var n = out.n[i].row + 1; n < out.n[i + 1].row; n++) {
if (out.o[n].text === undefined) {
pre += '<del>' + out.o[n] + "</del>";
} else {
pre += '<del>' + out.o[n].text + "</del>";
}
}
} else {
for (var j = out.n[i].row + 1; j < out.o.length && out.o[j].text === undefined; j++) {
pre += '<del>' + out.o[j] + "</del>";
}
}
str += out.n[i].text + pre;
currOldRow = out.n[i].row;
}
}
}

View File

@ -479,6 +479,14 @@ describe('linenumbering', function () {
expect(diff).toBe('<P class="delete">...so frißt er Euch alle mit Haut und Haar.</P><P class="insert">...so frißt er <SPAN style="font-size: 2em; opacity: 0.5">Euch alle</SPAN> mit Haut und Haar.</P>');
});
it('marks a single moved word as deleted and inserted again', function () {
var before = '<p>tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren bla, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>',
after = '<p>tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd bla, no sea takimata sanctus est Lorem ipsum dolor gubergren sit amet.</p>';
var diff = diffService.diff(before, after);
expect(diff).toBe('<p>tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd <del>gubergren </del>bla, no sea takimata sanctus est Lorem ipsum dolor <ins>gubergren </ins>sit amet.</p>');
});
});
describe('ignoring line numbers', function () {