diff --git a/openslides/motions/static/js/motions/diff.js b/openslides/motions/static/js/motions/diff.js index 42767c9f0..82b962aec 100644 --- a/openslides/motions/static/js/motions/diff.js +++ b/openslides/motions/static/js/motions/diff.js @@ -976,6 +976,7 @@ angular.module('OpenSlidesApp.motions.diff', ['OpenSlidesApp.motions.lineNumberi wrapDel.appendChild(currChild); } else { this.addCSSClass(currChild, 'delete'); + this._removeColorStyles(currChild); } } for (i = 0; i < newTextWithBreaks.childNodes.length; i++) { @@ -987,6 +988,7 @@ angular.module('OpenSlidesApp.motions.diff', ['OpenSlidesApp.motions.lineNumberi wrapIns.appendChild(currChild); } else { this.addCSSClass(currChild, 'insert'); + this._removeColorStyles(currChild); } } @@ -1018,6 +1020,38 @@ angular.module('OpenSlidesApp.motions.diff', ['OpenSlidesApp.motions.lineNumberi }); }; + /** + * This function removes color-Attributes from the styles of this node or a descendant, + * as they interfer with the green/red color in HTML and PDF + * + * For the moment, it is sufficient to do this only in paragraph diff mode, as we fall back to this mode anyway + * once we encounter SPANs or other tags inside of INS/DEL-tags + * + * @param {Element} node + * @private + */ + this._removeColorStyles = function (node) { + var styles = node.getAttribute('style'); + if (styles && styles.indexOf('color') > -1) { + var stylesNew = []; + styles.split(';').forEach(function(style) { + if (!style.match(/^\s*color\s*:/i)) { + stylesNew.push(style); + } + }); + if (stylesNew.join(";") === '') { + node.removeAttribute('style'); + } else { + node.setAttribute('style', stylesNew.join(";")); + } + } + for (var i = 0; i < node.childNodes.length; i++) { + if (node.childNodes[i].nodeType === ELEMENT_NODE) { + this._removeColorStyles(node.childNodes[i]); + } + } + }; + /** * This function calculates the diff between two strings and tries to fix problems with the resulting HTML. * If lineLength and firstLineNumber is given, line numbers will be returned es well diff --git a/tests/karma/motions/diff.service.test.js b/tests/karma/motions/diff.service.test.js index 46c7c3ec6..8ec67b78e 100644 --- a/tests/karma/motions/diff.service.test.js +++ b/tests/karma/motions/diff.service.test.js @@ -463,6 +463,22 @@ describe('linenumbering', function () { expect(diff).toBe(expected.toLowerCase()); }); + + it('removed inline colors in inserted/deleted parts (1)', function () { + var before = "

...so frißt er Euch alle mit Haut und Haar.

", + after = "

...so frißt er Euch alle mit Haut und Haar.

"; + var diff = diffService.diff(before, after); + + expect(diff).toBe('

...so frißt er Euch alle mit Haut und Haar.

...so frißt er Euch alle mit Haut und Haar.

'); + }); + + it('removed inline colors in inserted/deleted parts (2)', function () { + var before = "

...so frißt er Euch alle mit Haut und Haar.

", + after = "

...so frißt er Euch alle mit Haut und Haar.

"; + var diff = diffService.diff(before, after); + + expect(diff).toBe('

...so frißt er Euch alle mit Haut und Haar.

...so frißt er Euch alle mit Haut und Haar.

'); + }); }); describe('ignoring line numbers', function () { @@ -509,11 +525,11 @@ describe('linenumbering', function () { after = "

holen, da rief sie alle sieben herbei und sprach:

\n\n

Hello

\n\n

World

\n\n

Ya

\n\n

Die Geißlein sagten: \" Liebe Mutter, wir wollen uns schon in acht nehmen, du kannst ohne

"; var diff = diffService.diff(before, after); expect(diff).toBe("

 holen, da rief sie alle sieben herbei und sprach:

\n\n" + - "

 \"Liebe Kinder, ich will hinaus in den Wald, seid auf der Hut vor dem Wolf! Wenn er
 hereinkommt, frisst er euch alle mit Haut und Haar. Der Bösewicht verstellt sich oft, aber
 an der rauen Stimme und an seinen schwarzen Füßen werdet ihr ihn schon erkennen.\"

\n\n

 Die Geißlein sagten: \" Liebe Mutter, wir wollen uns schon in acht nehmen, du kannst ohne

" + + "

 \"Liebe Kinder, ich will hinaus in den Wald, seid auf der Hut vor dem Wolf! Wenn er
 hereinkommt, frisst er euch alle mit Haut und Haar. Der Bösewicht verstellt sich oft, aber
 an der rauen Stimme und an seinen schwarzen Füßen werdet ihr ihn schon erkennen.\"

\n\n

 Die Geißlein sagten: \" Liebe Mutter, wir wollen uns schon in acht nehmen, du kannst ohne

" + "

holen, da rief sie alle sieben herbei und sprach:

\n\n" + - "

Hello

\n\n" + - "

World

\n\n" + - "

Ya

\n\n" + + "

Hello

\n\n" + + "

World

\n\n" + + "

Ya

\n\n" + "

Die Geißlein sagten: \" Liebe Mutter, wir wollen uns schon in acht nehmen, du kannst ohne

"); }); });