This repository was archived by the owner on Mar 6, 2018. It is now read-only.
Repository navigation
Expand file tree
/
Copy pathscript.js
More file actions
118 lines (104 loc) · 2.75 KB
/
Copy pathscript.js
File metadata and controls
118 lines (104 loc) · 2.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
(function () {
'use strict'
var ooPatch = JSON8Patch
var sections = [
{
id: 'input',
value: {
"firstName": "John",
"lastName": "Smith",
"age": 25,
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumber": [
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "fax",
"number": "646 555-4567"
}
],
"gender": {
"type": "male"
}
}
},
{
id: 'patch'
},
{
id: 'output',
value: {
"firstName": "John",
"lastName": "Smith",
"age": 25,
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"gender": {
"type": "male"
}
}
}
]
var editors = {}
document.addEventListener('DOMContentLoaded', function () {
sections.forEach(function (section) {
var input = section.textarea = document.querySelector('div#' + section.id + ' textarea')
if (section.value) {
input.value = JSON.stringify(section.value, null, 2)
}
editors[section.id] = section.editor = CodeMirror.fromTextArea(section.textarea, {
lineNumbers: true,
mode: section.value ? "application/json" : "text/plain",
gutters: ["CodeMirror-lint-markers", "CodeMirror-foldgutter"],
lint: true,
matchBrackets: true,
autoCloseBrackets: true,
foldGutter: true,
readOnly: section.id === 'patch'
})
})
function run () {
var input
var output
try {
input = JSON.parse(editors['input'].getValue())
} catch (e) {
editors['patch'].setOption('mode', 'text/plain');
editors['patch'].setValue('original is not valid JSON\n\n' + e)
return
}
try {
output = JSON.parse(editors['output'].getValue())
} catch (e) {
editors['patch'].setOption('mode', 'text/plain');
editors['patch'].setValue('edited is not valid JSON\n\n' + e)
return
}
var diffResult
try {
diffResult = ooPatch.diff(input, output)
} catch (e) {
editors['patch'].setOption('mode', 'text/plain');
editors['patch'].setValue('patch is not valid\n\n' + e)
return
}
editors['patch'].setOption('mode', 'application/json');
editors['patch'].setValue(JSON.stringify(diffResult, null, 2))
}
[editors['input'], editors['output']].forEach(function (editor) {
editor.on('change', run)
})
run()
})
}())