diff --git a/openslides/motions/static/js/motions/diff.js b/openslides/motions/static/js/motions/diff.js
index a9da86782..486ed936c 100644
--- a/openslides/motions/static/js/motions/diff.js
+++ b/openslides/motions/static/js/motions/diff.js
@@ -185,17 +185,17 @@ angular.module('OpenSlidesApp.motions.diff', ['OpenSlidesApp.motions.lineNumberi
};
this._serializeDom = function(node, stripLineNumbers) {
- if (node.nodeType == TEXT_NODE) {
+ if (node.nodeType === TEXT_NODE) {
return node.nodeValue.replace(//g, ">");
}
if (stripLineNumbers && (
lineNumberingService._isOsLineNumberNode(node) || lineNumberingService._isOsLineBreakNode(node))) {
return '';
}
- if (node.nodeName == 'OS-LINEBREAK') {
+ if (node.nodeName === 'OS-LINEBREAK') {
return '';
}
- if (node.nodeName == 'BR') {
+ if (node.nodeName === 'BR') {
var br = '
/g, ">");
+ if (node.childNodes[i].nodeType === TEXT_NODE) {
+ html += node.childNodes[i].nodeValue.replace(/&/g, "&").replace(//g, ">");
} else if (!stripLineNumbers || (!lineNumberingService._isOsLineNumberNode(node.childNodes[i]) && !lineNumberingService._isOsLineBreakNode(node.childNodes[i]))) {
html += this._serializeDom(node.childNodes[i], stripLineNumbers);
}
}
- if (node.nodeType != DOCUMENT_FRAGMENT_NODE) {
+ if (node.nodeType !== DOCUMENT_FRAGMENT_NODE) {
html += '' + node.nodeName + '>';
}
diff --git a/tests/karma/motions/diff.service.test.js b/tests/karma/motions/diff.service.test.js
index adbfb6b32..ef354b675 100644
--- a/tests/karma/motions/diff.service.test.js
+++ b/tests/karma/motions/diff.service.test.js
@@ -300,6 +300,13 @@ describe('linenumbering', function () {
expect(containsError).toBe(-1);
expect(containsCorrectVersion > 0).toBe(true);
});
+
+ it('keeps ampersands escaped', function() {
+ var pre = '
' + noMarkup(1) + 'foo & bar
', + after = '' + noMarkup(1) + 'foo & bar ins
'; + var merged = diffService.replaceLines(pre, after, 1, 2, true); + expect(merged).toBe('foo & bar ins
'); + }); }); describe('detecting the type of change', function() {