From b34025654132ce4f1f5803f514be235bf452b5cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Ho=CC=88=C3=9Fl?= Date: Thu, 11 May 2017 23:01:47 +0200 Subject: [PATCH] Detect broken HTML after diff (Fixed #3229) --- openslides/motions/static/js/motions/diff.js | 26 +++++++++++++++++++- tests/karma/motions/diff.service.test.js | 13 ++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/openslides/motions/static/js/motions/diff.js b/openslides/motions/static/js/motions/diff.js index 4e436c320..42767c9f0 100644 --- a/openslides/motions/static/js/motions/diff.js +++ b/openslides/motions/static/js/motions/diff.js @@ -918,6 +918,16 @@ angular.module('OpenSlidesApp.motions.diff', ['OpenSlidesApp.motions.lineNumberi return true; } + // Opening tags, followed by or , indicate broken HTML (if it's not a / ) + var brokenRegexp = /<(\w+)[^>]*><\/(ins|del)>/gi, + result; + while ((result = brokenRegexp.exec(html)) !== null) { + if (result[1].toLowerCase() !== 'ins' && result[1].toLowerCase() !== 'del') { + return true; + } + } + + // If other HTML tags are contained within INS/DEL (e.g. "Test

"), let's better be cautious // The "!!(found=...)"-construction is only used to make jshint happy :) var findDel = /(.*?)<\/del>/gi, @@ -1090,13 +1100,27 @@ angular.module('OpenSlidesApp.motions.diff', ['OpenSlidesApp.motions.lineNumberi return out; }); + // Remove tags that only delete line numbers diffUnnormalized = diffUnnormalized.replace( /((
)?]+OS-LINE-NUMBER[^>]+?>\s*<\/span>)<\/del>/gi, function(found,tag) { - return tag.toLowerCase().replace(/> <\/span/gi, "> /gi, + '
' + ); + diffUnnormalized = diffUnnormalized.replace( + /]+OS-LINE-NUMBER[^>]+?>\s*<\/span>/gi, + function(found) { + return found.toLowerCase().replace(/> <\/span/gi, "> " + noMarkup(4) + "Go on" ); }); + + it('detects broken HTML and lowercases class names', function () { + var before = "

 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

", + 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

" + + "

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

"); + }); }); describe('addCSSClassToFirstTag function', function () {