Detect broken HTML after diff (Fixed #3229)
This commit is contained in:
parent
2833341867
commit
b340256541
@ -918,6 +918,16 @@ angular.module('OpenSlidesApp.motions.diff', ['OpenSlidesApp.motions.lineNumberi
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Opening tags, followed by </del> or </ins>, indicate broken HTML (if it's not a <ins> / <del>)
|
||||||
|
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. "<ins>Test</p></ins>"), let's better be cautious
|
// If other HTML tags are contained within INS/DEL (e.g. "<ins>Test</p></ins>"), let's better be cautious
|
||||||
// The "!!(found=...)"-construction is only used to make jshint happy :)
|
// The "!!(found=...)"-construction is only used to make jshint happy :)
|
||||||
var findDel = /<del>(.*?)<\/del>/gi,
|
var findDel = /<del>(.*?)<\/del>/gi,
|
||||||
@ -1090,13 +1100,27 @@ angular.module('OpenSlidesApp.motions.diff', ['OpenSlidesApp.motions.lineNumberi
|
|||||||
return out;
|
return out;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Remove <del> tags that only delete line numbers
|
||||||
diffUnnormalized = diffUnnormalized.replace(
|
diffUnnormalized = diffUnnormalized.replace(
|
||||||
/<del>((<BR CLASS="OS-LINE-BREAK">)?<span[^>]+OS-LINE-NUMBER[^>]+?>\s*<\/span>)<\/del>/gi,
|
/<del>((<BR CLASS="OS-LINE-BREAK">)?<span[^>]+OS-LINE-NUMBER[^>]+?>\s*<\/span>)<\/del>/gi,
|
||||||
function(found,tag) {
|
function(found,tag) {
|
||||||
return tag.toLowerCase().replace(/> <\/span/gi, "> </span");
|
return tag;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Lowercase line number markup
|
||||||
|
diffUnnormalized = diffUnnormalized.replace(
|
||||||
|
/<BR CLASS="OS-LINE-BREAK">/gi,
|
||||||
|
'<br class="os-line-break">'
|
||||||
|
);
|
||||||
|
diffUnnormalized = diffUnnormalized.replace(
|
||||||
|
/<span[^>]+OS-LINE-NUMBER[^>]+?>\s*<\/span>/gi,
|
||||||
|
function(found) {
|
||||||
|
return found.toLowerCase().replace(/> <\/span/gi, "> </span");
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
if (diffUnnormalized.substr(0, workaroundPrepend.length) === workaroundPrepend) {
|
if (diffUnnormalized.substr(0, workaroundPrepend.length) === workaroundPrepend) {
|
||||||
diffUnnormalized = diffUnnormalized.substring(workaroundPrepend.length);
|
diffUnnormalized = diffUnnormalized.substring(workaroundPrepend.length);
|
||||||
}
|
}
|
||||||
|
@ -503,6 +503,19 @@ describe('linenumbering', function () {
|
|||||||
"<div>" + noMarkup(4) + "Go on</div>"
|
"<div>" + noMarkup(4) + "Go on</div>"
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('detects broken HTML and lowercases class names', function () {
|
||||||
|
var before = "<p><span class=\"os-line-number line-number-3\" data-line-number=\"3\" contenteditable=\"false\"> </span>holen, da rief sie alle sieben herbei und sprach:</p>\n\n<p><span class=\"os-line-number line-number-4\" data-line-number=\"4\" contenteditable=\"false\"> </span><span style=\"color: #000000;\">\"Liebe Kinder, ich will hinaus in den Wald, seid auf der Hut vor dem Wolf! Wenn er <br class=\"os-line-break\"><span class=\"os-line-number line-number-5\" data-line-number=\"5\" contenteditable=\"false\"> </span>hereinkommt, frisst er euch alle mit Haut und Haar. Der Bösewicht verstellt sich oft, aber <br class=\"os-line-break\"><span class=\"os-line-number line-number-6\" data-line-number=\"6\" contenteditable=\"false\"> </span>an der rauen Stimme und an seinen schwarzen Füßen werdet ihr ihn schon erkennen.\"</span></p>\n\n<p><span class=\"os-line-number line-number-7\" data-line-number=\"7\" contenteditable=\"false\"> </span>Die Geißlein sagten: \" Liebe Mutter, wir wollen uns schon in acht nehmen, du kannst ohne </p>",
|
||||||
|
after = "<p>holen, da rief sie alle sieben herbei und sprach:</p>\n\n<p><span style=\"color: #000000;\">Hello</span></p>\n\n<p><span style=\"color: #000000;\">World</span></p>\n\n<p><span style=\"color: #000000;\">Ya</span></p>\n\n<p>Die Geißlein sagten: \" Liebe Mutter, wir wollen uns schon in acht nehmen, du kannst ohne</p>";
|
||||||
|
var diff = diffService.diff(before, after);
|
||||||
|
expect(diff).toBe("<P class=\"delete\"><SPAN class=\"os-line-number line-number-3\" data-line-number=\"3\" contenteditable=\"false\"> </SPAN>holen, da rief sie alle sieben herbei und sprach:</P><DEL>\n\n</DEL>" +
|
||||||
|
"<P class=\"delete\"><SPAN class=\"os-line-number line-number-4\" data-line-number=\"4\" contenteditable=\"false\"> </SPAN><SPAN style=\"color: #000000;\">\"Liebe Kinder, ich will hinaus in den Wald, seid auf der Hut vor dem Wolf! Wenn er <BR class=\"os-line-break\"><SPAN class=\"os-line-number line-number-5\" data-line-number=\"5\" contenteditable=\"false\"> </SPAN>hereinkommt, frisst er euch alle mit Haut und Haar. Der Bösewicht verstellt sich oft, aber <BR class=\"os-line-break\"><SPAN class=\"os-line-number line-number-6\" data-line-number=\"6\" contenteditable=\"false\"> </SPAN>an der rauen Stimme und an seinen schwarzen Füßen werdet ihr ihn schon erkennen.\"</SPAN></P><DEL>\n\n</DEL><P class=\"delete\"><SPAN class=\"os-line-number line-number-7\" data-line-number=\"7\" contenteditable=\"false\"> </SPAN>Die Geißlein sagten: \" Liebe Mutter, wir wollen uns schon in acht nehmen, du kannst ohne </P>" +
|
||||||
|
"<P class=\"insert\">holen, da rief sie alle sieben herbei und sprach:</P><INS>\n\n</INS>" +
|
||||||
|
"<P class=\"insert\"><SPAN style=\"color: #000000;\">Hello</SPAN></P><INS>\n\n</INS>" +
|
||||||
|
"<P class=\"insert\"><SPAN style=\"color: #000000;\">World</SPAN></P><INS>\n\n</INS>" +
|
||||||
|
"<P class=\"insert\"><SPAN style=\"color: #000000;\">Ya</SPAN></P><INS>\n\n</INS>" +
|
||||||
|
"<P class=\"insert\">Die Geißlein sagten: \" Liebe Mutter, wir wollen uns schon in acht nehmen, du kannst ohne</P>");
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('addCSSClassToFirstTag function', function () {
|
describe('addCSSClassToFirstTag function', function () {
|
||||||
|
Loading…
Reference in New Issue
Block a user