Skip to content

Commit 1c7ca13

Browse files
committed
Remove the invalid </br> and </hr> elements after the diff again.
These void elements are invalid html. I think they were originally added long ago in the diff() function to simplify the algorithm to find closing elements. But </br> is interpreted as <br> in recent browsers, resulting in a double line break.
1 parent 566a45f commit 1c7ca13

File tree

5 files changed

+29
-7
lines changed

5 files changed

+29
-7
lines changed

dist/htmldiff.js

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/htmldiff.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/htmldiff.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1297,5 +1297,6 @@ export default function diff(
12971297
const beforeTokens = htmlToTokens(before.replace(/<br>/g, '<br></br>').replace(/<\s*hr([^>]*)>/, '<hr$1></hr>'));
12981298
const afterTokens = htmlToTokens(after.replace(/<br>/g, '<br></br>').replace(/<\s*hr([^>]*)>/, '<hr$1></hr>'));
12991299
const ops = calculateOperations(beforeTokens, afterTokens);
1300-
return renderOperations(beforeTokens, afterTokens, ops, dataPrefix, className);
1300+
const result = renderOperations(beforeTokens, afterTokens, ops, dataPrefix, className);
1301+
return result.replace(/<\/br>/g, '').replace(/<\/hr>/g, '');
13011302
}

test/diff.spec.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,4 +446,24 @@ describe('Diff', function(){
446446
);
447447
});
448448
});
449+
450+
describe('void elements', function(){
451+
it('Line break should remain valid', function() {
452+
expect(diff(
453+
'Hello world<br>Another line',
454+
'Hello test world<br>Another line'))
455+
.to.equal(
456+
'Hello<ins data-operation-index="1"> test</ins> world<br>Another line'
457+
);
458+
});
459+
460+
it('Horizontal rule should remain valid', function() {
461+
expect(diff(
462+
'Hello world<hr>Another line',
463+
'Hello test world<hr>Another line'))
464+
.to.equal(
465+
'Hello<ins data-operation-index="1"> test</ins> world<hr>Another line'
466+
);
467+
});
468+
});
449469
});

test/pain_games.spec.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ const fancyEditDiff = `<table>
105105
<tbody>
106106
<tr>
107107
<td><p>a</p><p>aa</p></td>
108-
<td>b<br></br>bb</td>
108+
<td>b<br>bb</td>
109109
</tr>
110110
<tr>
111111
<td><ul><li>c</li><li>cc</li></ul></td>
@@ -124,7 +124,7 @@ const basicToFancy = `<table>
124124
<tbody>
125125
<tr>
126126
<td><p>a</p><p data-diff-node="ins" data-operation-index="3"><ins data-operation-index="3">aa</ins></p></td>
127-
<td>b<br data-diff-node="ins" data-operation-index="5"></br><ins data-operation-index="5">bb</ins></td>
127+
<td>b<br data-diff-node="ins" data-operation-index="5"><ins data-operation-index="5">bb</ins></td>
128128
</tr>
129129
<tr>
130130
<td><del data-operation-index="7">c</del><ul data-diff-node="ins" data-operation-index="7"><li data-diff-node="ins" data-operation-index="7"><ins data-operation-index="7">c</ins></li><li data-diff-node="ins" data-operation-index="7"><ins data-operation-index="7">cc</ins></li></ul></td>
@@ -143,7 +143,7 @@ const fancyToBasic = `<table>
143143
<tbody>
144144
<tr>
145145
<td><p>a</p><p data-diff-node="del" data-operation-index="3"><del data-operation-index="3">aa</del></p></td>
146-
<td>b<br data-diff-node="del" data-operation-index="5"></br><del data-operation-index="5">bb</del></td>
146+
<td>b<br data-diff-node="del" data-operation-index="5"><del data-operation-index="5">bb</del></td>
147147
</tr>
148148
<tr>
149149
<td><ul data-diff-node="del" data-operation-index="7"><li data-diff-node="del" data-operation-index="7"><del data-operation-index="7">c</del></li><li data-diff-node="del" data-operation-index="7"><del data-operation-index="7">cc</del></li></ul><ins data-operation-index="7">c</ins></td>
@@ -249,7 +249,7 @@ describe('Pain Games', function(){
249249
'<tbody data-diff-node="ins" data-operation-index="0">' +
250250
'<tr data-diff-node="ins" data-operation-index="0">' +
251251
'<td data-diff-node="ins" data-operation-index="0"><p data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">a</ins></p><p data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">aa</ins></p></td>' +
252-
'<td data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">b</ins><br data-diff-node="ins" data-operation-index="0"></br><ins data-operation-index="0">bb</ins></td>' +
252+
'<td data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">b</ins><br data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">bb</ins></td>' +
253253
'</tr>' +
254254
'<tr data-diff-node="ins" data-operation-index="0">' +
255255
'<td data-diff-node="ins" data-operation-index="0"><ul data-diff-node="ins" data-operation-index="0"><li data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">c</ins></li><li data-diff-node="ins" data-operation-index="0"><ins data-operation-index="0">cc</ins></li></ul></td>' +

0 commit comments

Comments
 (0)