Skip to content

Commit 1cf0956

Browse files
committed
feat: format json result and show json error
1 parent 7f1c54e commit 1cf0956

File tree

3 files changed

+30
-23
lines changed

3 files changed

+30
-23
lines changed

css/style.css

+5
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,8 @@
1010
.width-full {
1111
width: 100%;
1212
}
13+
14+
.error {
15+
color: #d12f19;
16+
background:#ffe6e6;
17+
}

index.html

+21-3
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,15 @@ <h1>JSON Diff Demo</h1>
1515
<div class="flex-row">
1616
<div class="width-half">
1717
<h2>Text Version 1:</h2>
18-
<textarea id="text1" class="width-full" rows="10">{"Aidan Gillen": {"array": ["Game of Thron\"es","The Wire"],"string": "some string","int": 2,"aboolean": true, "boolean": true,"object": {"foo": "bar","object1": {"new prop1": "new prop value"},"object2": {"new prop1": "new prop value"},"object3": {"new prop1": "new prop value"},"object4": {"new prop1": "new prop value"}}},"Amy Ryan": {"one": "In Treatment","two": "The Wire"},"Annie Fitzgerald": ["Big Love","True Blood"],"Anwan Glover": ["Treme","The Wire"],"Alexander Skarsgard": ["Generation Kill","True Blood"], "Clarke Peters": null}</textarea>
18+
<textarea id="text1" class="width-full"
19+
rows="10">{"Aidan Gillen": {"array": ["Game of Thron\"es","The Wire"],"string": "some string","int": 2,"aboolean": true, "boolean": true,"object": {"foo": "bar","object1": {"new prop1": "new prop value"},"object2": {"new prop1": "new prop value"},"object3": {"new prop1": "new prop value"},"object4": {"new prop1": "new prop value"}}},"Amy Ryan": {"one": "In Treatment","two": "The Wire"},"Annie Fitzgerald": ["Big Love","True Blood"],"Anwan Glover": ["Treme","The Wire"],"Alexander Skarsgard": ["Generation Kill","True Blood"], "Clarke Peters": null}</textarea>
20+
<label id="text1-error" for="text1" class="error"></label>
1921
</div>
2022
<div class="width-half">
2123
<h2>Text Version 2:</h2>
22-
<textarea id="text2" class="width-full" rows="10">{"Aidan Gillen": {"array": ["Game of Thrones","The Wire"],"string": "some string","int": "2","otherint": 4, "aboolean": "true", "boolean": false,"object": {"foo": "bar"}},"Amy Ryan": ["In Treatment","The Wire"],"Annie Fitzgerald": ["True Blood","Big Love","The Sopranos","Oz"],"Anwan Glover": ["Treme","The Wire"],"Alexander Skarsg?rd": ["Generation Kill","True Blood"],"Alice Farmer": ["The Corner","Oz","The Wire"]}</textarea>
24+
<textarea id="text2" class="width-full"
25+
rows="10">{"Aidan Gillen": {"array": ["Game of Thrones","The Wire"],"string": "some string","int": "2","otherint": 4, "aboolean": "true", "boolean": false,"object": {"foo": "bar"}},"Amy Ryan": ["In Treatment","The Wire"],"Annie Fitzgerald": ["True Blood","Big Love","The Sopranos","Oz"],"Anwan Glover": ["Treme","The Wire"],"Alexander Skarsg?rd": ["Generation Kill","True Blood"],"Alice Farmer": ["The Corner","Oz","The Wire"]}</textarea>
26+
<label id="text2-error" for="text2" class="error"></label>
2327
</div>
2428
</div>
2529
<h3>Diff timeout:</h3>
@@ -70,11 +74,25 @@ <H3>Post-diff cleanup:</H3>
7074
function launch() {
7175
const text1 = document.getElementById('text1').value
7276
const text2 = document.getElementById('text2').value
77+
let object1 = null
78+
let object2 = null
79+
try {
80+
object1 = JSON.parse(text1)
81+
} catch (error) {
82+
document.getElementById('text1-error').innerText = 'Parse Text Version 1 error: ' + error
83+
throw ('Parse Text Version 1 error: ' + error)
84+
}
85+
try {
86+
object2 = JSON.parse(text2)
87+
} catch (error) {
88+
document.getElementById('text2-error').innerText = 'Parse Text Version 2 error: ' + error
89+
throw ('Parse Text Version 2 error: ' + error)
90+
}
7391
dmp.Diff_Timeout = parseFloat(document.getElementById('timeout').value)
7492
dmp.Diff_EditCost = parseFloat(document.getElementById('edit-cost').value)
7593

7694
const msStart = (new Date()).getTime()
77-
const d = dmp.diff_main(text1, text2)
95+
const d = dmp.diff_main(JSON.stringify(object1, null, 2), JSON.stringify(object2, null, 2))
7896
const msEnd = (new Date()).getTime()
7997

8098
if (document.getElementById('semantic').checked) {

js/diff_match_patch_uncompressed.js

+4-20
Original file line numberDiff line numberDiff line change
@@ -1284,35 +1284,19 @@ diff_match_patch.prototype.diff_prettyJSON = function(diffs) {
12841284
diff_insert: [],
12851285
diff_delete: []
12861286
};
1287-
var pattern_amp = /&/g;
1288-
var pattern_lt = /</g;
1289-
var pattern_gt = />/g;
1290-
var pattern_para = /\n/g;
1291-
var pattern_opening_brace = /{/g;
1292-
var pattern_closing_brace = /}/g;
1293-
var pattern_comma = /,/g;
1294-
var pattern_opening_bracket = /\[/g;
1295-
var pattern_closing_bracket = /\]/g;
12961287
for (var x = 0; x < diffs.length; x++) {
12971288
var op = diffs[x][0]; // Operation (insert, delete, equal)
12981289
var data = diffs[x][1]; // Text of change.
1299-
var text = data.replace(pattern_amp, '&amp;').replace(pattern_lt, '&lt;')
1300-
.replace(pattern_gt, '&gt;').replace(pattern_para, '&para;<br>')
1301-
.replace(pattern_opening_brace, '&#123;<br>')
1302-
.replace(pattern_closing_brace, '<br>&#125;')
1303-
.replace(pattern_opening_bracket, '&#91;<br>')
1304-
.replace(pattern_closing_bracket, '<br>&#93;')
1305-
.replace(pattern_comma, '&#44;<br>');
13061290
switch (op) {
13071291
case DIFF_INSERT:
1308-
html['diff_insert'][x] = '<ins style="background:#e6ffe6;">' + text + '</ins>';
1292+
html['diff_insert'][x] = '<ins style="background:#e6ffe6;">' + data + '</ins>';
13091293
break;
13101294
case DIFF_DELETE:
1311-
html['diff_delete'][x] = '<del style="background:#ffe6e6;">' + text + '</del>';
1295+
html['diff_delete'][x] = '<del style="background:#ffe6e6;">' + data + '</del>';
13121296
break;
13131297
case DIFF_EQUAL:
1314-
html['diff_insert'][x] = '<span>' + text + '</span>';
1315-
html['diff_delete'][x] = '<span>' + text + '</span>';
1298+
html['diff_insert'][x] = '<span>' + data + '</span>';
1299+
html['diff_delete'][x] = '<span>' + data + '</span>';
13161300
break;
13171301
}
13181302
}

0 commit comments

Comments
 (0)