From 1cf0956ca37a5233aafade71148c13cc46ffbee7 Mon Sep 17 00:00:00 2001 From: regchiu Date: Thu, 11 Apr 2024 13:40:37 +0800 Subject: [PATCH] feat: format json result and show json error --- css/style.css | 5 +++++ index.html | 24 +++++++++++++++++++++--- js/diff_match_patch_uncompressed.js | 24 ++++-------------------- 3 files changed, 30 insertions(+), 23 deletions(-) diff --git a/css/style.css b/css/style.css index b78f6c8..4481f67 100644 --- a/css/style.css +++ b/css/style.css @@ -10,3 +10,8 @@ .width-full { width: 100%; } + +.error { + color: #d12f19; + background:#ffe6e6; +} diff --git a/index.html b/index.html index 4c5f509..fcd5a69 100644 --- a/index.html +++ b/index.html @@ -15,11 +15,15 @@

JSON Diff Demo

Text Version 1:

- + +

Text Version 2:

- + +

Diff timeout:

@@ -70,11 +74,25 @@

Post-diff cleanup:

function launch() { const text1 = document.getElementById('text1').value const text2 = document.getElementById('text2').value + let object1 = null + let object2 = null + try { + object1 = JSON.parse(text1) + } catch (error) { + document.getElementById('text1-error').innerText = 'Parse Text Version 1 error: ' + error + throw ('Parse Text Version 1 error: ' + error) + } + try { + object2 = JSON.parse(text2) + } catch (error) { + document.getElementById('text2-error').innerText = 'Parse Text Version 2 error: ' + error + throw ('Parse Text Version 2 error: ' + error) + } dmp.Diff_Timeout = parseFloat(document.getElementById('timeout').value) dmp.Diff_EditCost = parseFloat(document.getElementById('edit-cost').value) const msStart = (new Date()).getTime() - const d = dmp.diff_main(text1, text2) + const d = dmp.diff_main(JSON.stringify(object1, null, 2), JSON.stringify(object2, null, 2)) const msEnd = (new Date()).getTime() if (document.getElementById('semantic').checked) { diff --git a/js/diff_match_patch_uncompressed.js b/js/diff_match_patch_uncompressed.js index 1fa134f..07d7182 100644 --- a/js/diff_match_patch_uncompressed.js +++ b/js/diff_match_patch_uncompressed.js @@ -1284,35 +1284,19 @@ diff_match_patch.prototype.diff_prettyJSON = function(diffs) { diff_insert: [], diff_delete: [] }; - var pattern_amp = /&/g; - var pattern_lt = //g; - var pattern_para = /\n/g; - var pattern_opening_brace = /{/g; - var pattern_closing_brace = /}/g; - var pattern_comma = /,/g; - var pattern_opening_bracket = /\[/g; - var pattern_closing_bracket = /\]/g; for (var x = 0; x < diffs.length; x++) { var op = diffs[x][0]; // Operation (insert, delete, equal) var data = diffs[x][1]; // Text of change. - var text = data.replace(pattern_amp, '&').replace(pattern_lt, '<') - .replace(pattern_gt, '>').replace(pattern_para, '¶
') - .replace(pattern_opening_brace, '{
') - .replace(pattern_closing_brace, '
}') - .replace(pattern_opening_bracket, '[
') - .replace(pattern_closing_bracket, '
]') - .replace(pattern_comma, ',
'); switch (op) { case DIFF_INSERT: - html['diff_insert'][x] = '' + text + ''; + html['diff_insert'][x] = '' + data + ''; break; case DIFF_DELETE: - html['diff_delete'][x] = '' + text + ''; + html['diff_delete'][x] = '' + data + ''; break; case DIFF_EQUAL: - html['diff_insert'][x] = '' + text + ''; - html['diff_delete'][x] = '' + text + ''; + html['diff_insert'][x] = '' + data + ''; + html['diff_delete'][x] = '' + data + ''; break; } }