@matrixreq/htmldiff 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/js/htmldiff.js +5 -2
- package/package.json +1 -1
- package/test/diff.spec.js +2 -2
- package/test/edge_cases.spec.js +25 -23
package/js/htmldiff.js
CHANGED
|
@@ -332,9 +332,12 @@
|
|
|
332
332
|
return '<' + (tagName[1].toLowerCase()) + '>';
|
|
333
333
|
}
|
|
334
334
|
|
|
335
|
-
// Otherwise, the token is text, collapse the whitespace
|
|
335
|
+
// Otherwise, the token is text, collapse the whitespace
|
|
336
|
+
// (except new lines, see https://matrixreq.atlassian.net/browse/MATRIX-7880)
|
|
337
|
+
// potentially, this also causing the problems with prettified HTML (with "\n" between the tags),
|
|
338
|
+
// so it's required to "flatten" html before passing it to the diffing function
|
|
336
339
|
if (token) {
|
|
337
|
-
return token.replace(/(\
|
|
340
|
+
return token.replace(/([^\S\r\n]+| | )/g, ' ');
|
|
338
341
|
}
|
|
339
342
|
return token;
|
|
340
343
|
}
|
package/package.json
CHANGED
package/test/diff.spec.js
CHANGED
|
@@ -29,9 +29,9 @@ describe('Diff', function(){
|
|
|
29
29
|
|
|
30
30
|
describe('Whitespace differences', function(){
|
|
31
31
|
it('should collapse adjacent whitespace', function(){
|
|
32
|
-
expect(cut('Much \
|
|
32
|
+
expect(cut('Much \t spaces', 'Much spaces')).to.equal('Much spaces');
|
|
33
33
|
});
|
|
34
|
-
|
|
34
|
+
|
|
35
35
|
it('should consider non-breaking spaces as equal', function(){
|
|
36
36
|
expect(cut('Hello world', 'Hello world')).to.equal('Hello world');
|
|
37
37
|
});
|
package/test/edge_cases.spec.js
CHANGED
|
@@ -2,30 +2,32 @@ const diff = require('../js/htmldiff');
|
|
|
2
2
|
|
|
3
3
|
describe('Edge cases', () => {
|
|
4
4
|
it('removes deleted closing-opening tag pair', () => {
|
|
5
|
-
const before =
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
<p><img src="img2.jpg" /></p>
|
|
9
|
-
<p>something</p>
|
|
10
|
-
</div>
|
|
11
|
-
`;
|
|
12
|
-
const after = `
|
|
13
|
-
<div>
|
|
14
|
-
<p>
|
|
15
|
-
<img src="img1.jpg" />
|
|
16
|
-
<img src="img2.jpg" />
|
|
17
|
-
</p>
|
|
18
|
-
<p>something</p>
|
|
19
|
-
</div>
|
|
20
|
-
`;
|
|
21
|
-
const res = `
|
|
22
|
-
<div>
|
|
23
|
-
<p><img src="img1.jpg" /><del>
|
|
24
|
-
</del><img src="img2.jpg" /></p>
|
|
25
|
-
<p>something</p>
|
|
26
|
-
</div>
|
|
27
|
-
`;
|
|
5
|
+
const before = `<div><p><img src="img1.jpg" /></p><p><img src="img2.jpg" /></p><p>something</p></div>`;
|
|
6
|
+
const after = `<div><p><img src="img1.jpg" /><img src="img2.jpg" /></p><p>something</p></div>`;
|
|
7
|
+
const res = `<div><p><img src="img1.jpg" /><del></del><img src="img2.jpg" /></p><p>something</p></div>`;
|
|
28
8
|
|
|
29
9
|
expect(diff(before, after)).to.eql(res);
|
|
30
10
|
});
|
|
11
|
+
|
|
12
|
+
it('preserves new lines', () => {
|
|
13
|
+
const before = `<div>this isain text control Donec ullamcorper tortor quis augue egestas ultricies. Aenean vehicula molestie ex. Praesent id dolor at mauris efficitur ultrices. Vestibulum rutrum sit amet odio quis gravida. Praesent id augue maximus, faucibus tellus in, mattis augue. Pellentesque ullamcorper, ante et vestibulum tempus, libero nisl consequat massa, vel aliquam massa nibh in sapie</div>`;
|
|
14
|
+
const after = `<div>this isain text control Donec ullamcorper tortor quis augue egestas ultricies. Aenean vehicula molestie ex. Praesent id do at mauris efficitur ultrices. Vestibulum rutrum sit amet odio quis gravida. Praesent id augue maximus, faucibus tellus in, mattisugue. Pellentesque ullamcorper, ante et tempus, libero nisl consequat massa, vel aliquam massa nibh
|
|
15
|
+
|
|
16
|
+
jndfoewnf[owe 1123123242
|
|
17
|
+
%^&*()(*&^%$#@#$%^&*()
|
|
18
|
+
|
|
19
|
+
BNXOISAN'FOSER3154
|
|
20
|
+
65+
|
|
21
|
+
5SSDC</div>`;
|
|
22
|
+
const res = `<div>this isain text control Donec ullamcorper tortor quis augue egestas ultricies. Aenean vehicula molestie ex. Praesent id <del data-operation-index="1">dolor</del><ins data-operation-index="1">do</ins> at mauris efficitur ultrices. Vestibulum rutrum sit amet odio quis gravida. Praesent id augue maximus, faucibus tellus in, <del data-operation-index="3">mattis augue.</del><ins data-operation-index="3">mattisugue.</ins> Pellentesque ullamcorper, ante et<del data-operation-index="5"> vestibulum</del> tempus, libero nisl consequat massa, vel aliquam massa nibh<del data-operation-index="7"> in sapie</del><ins data-operation-index="7">
|
|
23
|
+
|
|
24
|
+
jndfoewnf[owe 1123123242
|
|
25
|
+
%^&*()(*&^%$#@#$%^&*()
|
|
26
|
+
|
|
27
|
+
BNXOISAN'FOSER3154
|
|
28
|
+
65+
|
|
29
|
+
5SSDC</ins></div>`;
|
|
30
|
+
|
|
31
|
+
expect(diff(before, after)).to.eql(res);
|
|
32
|
+
})
|
|
31
33
|
});
|