@wirenboard/json-editor 2.5.3-wb13
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/.env-dist +2 -0
- package/.eslintrc +7 -0
- package/.gitattributes +1 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +9 -0
- package/.github/issue_template +25 -0
- package/.github/workflows/build.yml +58 -0
- package/.travis.yml +70 -0
- package/CHANGELOG.md +915 -0
- package/CONTRIBUTING.md +92 -0
- package/LICENSE +20 -0
- package/Makefile +26 -0
- package/README.md +1646 -0
- package/README_ADDON.md +573 -0
- package/UPGRADING.md +46 -0
- package/build/CssToJson.js +55 -0
- package/codecept.conf.js +35 -0
- package/config/.eslintrc +7 -0
- package/config/codeceptjs_helpers.js +139 -0
- package/config/helpers.js +10 -0
- package/config/karma.conf.js +93 -0
- package/config/readme.md +31 -0
- package/config/webpack.common.js +75 -0
- package/config/webpack.dev.js +15 -0
- package/config/webpack.nonmin.js +19 -0
- package/config/webpack.prod.js +25 -0
- package/dist/jsoneditor.js +14 -0
- package/dist/nonmin/jsoneditor.js +29097 -0
- package/dist/nonmin/jsoneditor.js.map +1 -0
- package/docs/ace_editor.html +56 -0
- package/docs/advanced.html +136 -0
- package/docs/basic.html +63 -0
- package/docs/basic_person.json +26 -0
- package/docs/choices.html +86 -0
- package/docs/cleave.html +132 -0
- package/docs/colorpicker.html +194 -0
- package/docs/css_integration.html +135 -0
- package/docs/datetime.html +305 -0
- package/docs/describedby.html +161 -0
- package/docs/enumsource.html +67 -0
- package/docs/images/categoriesDemo.png +0 -0
- package/docs/images/inheritance_tree.png +0 -0
- package/docs/images/jsoneditor.png +0 -0
- package/docs/imask.html +192 -0
- package/docs/index.html +579 -0
- package/docs/materialize_css.html +164 -0
- package/docs/meta_schema.json +705 -0
- package/docs/multiple_upload_base64.html +65 -0
- package/docs/person.json +73 -0
- package/docs/polyfills/assign.js +29 -0
- package/docs/radio.html +156 -0
- package/docs/recursive.html +170 -0
- package/docs/select2.html +99 -0
- package/docs/selectize.html +100 -0
- package/docs/signature.html +42 -0
- package/docs/starrating.html +137 -0
- package/docs/upload.html +131 -0
- package/docs/uuid.html +70 -0
- package/docs/wysiwyg.html +56 -0
- package/jasmine.json +11 -0
- package/json-editor-json-editor-2.5.3-wb13.tgz +0 -0
- package/package.json +100 -0
- package/release-notes.md +88 -0
- package/src/core.js +412 -0
- package/src/defaults.js +402 -0
- package/src/editor.js +707 -0
- package/src/editors/ace.js +89 -0
- package/src/editors/array/choices.js +103 -0
- package/src/editors/array/select2.js +110 -0
- package/src/editors/array/selectize.js +103 -0
- package/src/editors/array.css +9 -0
- package/src/editors/array.css.js +3 -0
- package/src/editors/array.js +818 -0
- package/src/editors/autocomplete.js +58 -0
- package/src/editors/base64.js +157 -0
- package/src/editors/button.js +97 -0
- package/src/editors/checkbox.js +95 -0
- package/src/editors/choices.css +3 -0
- package/src/editors/choices.css.js +3 -0
- package/src/editors/choices.js +69 -0
- package/src/editors/colorpicker.js +103 -0
- package/src/editors/datetime.js +141 -0
- package/src/editors/describedby.js +188 -0
- package/src/editors/enum.js +136 -0
- package/src/editors/hidden.js +127 -0
- package/src/editors/index.js +81 -0
- package/src/editors/info.js +20 -0
- package/src/editors/integer.js +19 -0
- package/src/editors/ip.js +36 -0
- package/src/editors/jodit.js +64 -0
- package/src/editors/multiple.js +409 -0
- package/src/editors/multiselect.js +218 -0
- package/src/editors/null.js +18 -0
- package/src/editors/number.js +51 -0
- package/src/editors/object.css +41 -0
- package/src/editors/object.css.js +3 -0
- package/src/editors/object.js +1290 -0
- package/src/editors/radio.js +111 -0
- package/src/editors/sceditor.js +72 -0
- package/src/editors/select.js +370 -0
- package/src/editors/select2.js +110 -0
- package/src/editors/selectize.js +112 -0
- package/src/editors/signature.js +113 -0
- package/src/editors/simplemde.js +100 -0
- package/src/editors/starrating.css +52 -0
- package/src/editors/starrating.css.js +3 -0
- package/src/editors/starrating.js +135 -0
- package/src/editors/stepper.js +27 -0
- package/src/editors/string.js +372 -0
- package/src/editors/table.js +516 -0
- package/src/editors/upload.js +321 -0
- package/src/editors/uuid.js +56 -0
- package/src/iconlib.js +24 -0
- package/src/iconlibs/bootstrap2.js +28 -0
- package/src/iconlibs/bootstrap3.js +28 -0
- package/src/iconlibs/fontawesome3.js +28 -0
- package/src/iconlibs/fontawesome4.js +28 -0
- package/src/iconlibs/fontawesome5.js +28 -0
- package/src/iconlibs/foundation2.js +24 -0
- package/src/iconlibs/foundation3.js +28 -0
- package/src/iconlibs/index.js +25 -0
- package/src/iconlibs/jqueryui.js +28 -0
- package/src/iconlibs/materialicons.js +49 -0
- package/src/iconlibs/openiconic.js +28 -0
- package/src/iconlibs/spectre.js +28 -0
- package/src/resolvers.js +128 -0
- package/src/schemaloader.js +408 -0
- package/src/style.css +150 -0
- package/src/style.css.js +3 -0
- package/src/templates/default.js +52 -0
- package/src/templates/ejs.js +13 -0
- package/src/templates/handlebars.js +1 -0
- package/src/templates/hogan.js +10 -0
- package/src/templates/index.js +21 -0
- package/src/templates/lodash.js +9 -0
- package/src/templates/markup.js +9 -0
- package/src/templates/mustache.js +9 -0
- package/src/templates/swig.js +1 -0
- package/src/templates/underscore.js +9 -0
- package/src/theme.js +659 -0
- package/src/themes/barebones.css +35 -0
- package/src/themes/barebones.css.js +3 -0
- package/src/themes/barebones.js +28 -0
- package/src/themes/bootstrap2.js +319 -0
- package/src/themes/bootstrap3.css +0 -0
- package/src/themes/bootstrap3.css.js +3 -0
- package/src/themes/bootstrap3.js +315 -0
- package/src/themes/bootstrap4.css +89 -0
- package/src/themes/bootstrap4.css.js +3 -0
- package/src/themes/bootstrap4.js +690 -0
- package/src/themes/bootstrap5.css.js +3 -0
- package/src/themes/foundation.js +569 -0
- package/src/themes/html.css +60 -0
- package/src/themes/html.css.js +3 -0
- package/src/themes/html.js +71 -0
- package/src/themes/index.js +28 -0
- package/src/themes/jqueryui.js +198 -0
- package/src/themes/materialize.js +426 -0
- package/src/themes/spectre.css +208 -0
- package/src/themes/spectre.css.js +3 -0
- package/src/themes/spectre.js +406 -0
- package/src/themes/tailwind.css +249 -0
- package/src/themes/tailwind.css.js +3 -0
- package/src/themes/tailwind.js +443 -0
- package/src/utilities.js +138 -0
- package/src/validator.js +877 -0
- package/src/validators/ip-validator.js +51 -0
- package/tests/Dockerfile +3 -0
- package/tests/README.md +48 -0
- package/tests/codeceptjs/codecept.json +42 -0
- package/tests/codeceptjs/constrains/if-then-else_test.js +143 -0
- package/tests/codeceptjs/core_test.js +217 -0
- package/tests/codeceptjs/editors/advanced_test.js +13 -0
- package/tests/codeceptjs/editors/array_any_of_test.js +50 -0
- package/tests/codeceptjs/editors/array_test.js +900 -0
- package/tests/codeceptjs/editors/button_test.js +35 -0
- package/tests/codeceptjs/editors/checkbox_test.js +21 -0
- package/tests/codeceptjs/editors/colorpicker_test.js +27 -0
- package/tests/codeceptjs/editors/datetime_test.js +33 -0
- package/tests/codeceptjs/editors/inheritance_test.js +11 -0
- package/tests/codeceptjs/editors/integer_test.js +84 -0
- package/tests/codeceptjs/editors/issues/issue-gh-812_test.js +32 -0
- package/tests/codeceptjs/editors/jodit_test.js +24 -0
- package/tests/codeceptjs/editors/multiselect_test.js +8 -0
- package/tests/codeceptjs/editors/number_test.js +82 -0
- package/tests/codeceptjs/editors/object_test.js +204 -0
- package/tests/codeceptjs/editors/option-no_default_values_test.js +42 -0
- package/tests/codeceptjs/editors/programmatic-changes_test.js +20 -0
- package/tests/codeceptjs/editors/radio_test.js +10 -0
- package/tests/codeceptjs/editors/rating_test.js +13 -0
- package/tests/codeceptjs/editors/select_test.js +22 -0
- package/tests/codeceptjs/editors/stepper_test.js +27 -0
- package/tests/codeceptjs/editors/string_test.js +118 -0
- package/tests/codeceptjs/editors/table-confirm-delete_test.js +67 -0
- package/tests/codeceptjs/editors/tabs_test.js +14 -0
- package/tests/codeceptjs/editors/uuid_test.js +21 -0
- package/tests/codeceptjs/editors/validation_test.js +14 -0
- package/tests/codeceptjs/meta-schema_test.js +17 -0
- package/tests/codeceptjs/schemaloader_test.js +13 -0
- package/tests/codeceptjs/steps.d.ts +13 -0
- package/tests/codeceptjs/steps_file.js +12 -0
- package/tests/codeceptjs/themes_test.js +519 -0
- package/tests/docker-compose.yml +34 -0
- package/tests/fixtures/basic_person.json +26 -0
- package/tests/fixtures/nested_object.json +26 -0
- package/tests/fixtures/person.json +55 -0
- package/tests/fixtures/recursive.json +8 -0
- package/tests/fixtures/some_types.json +32 -0
- package/tests/fixtures/string.json +3 -0
- package/tests/fixtures/validation.json +1140 -0
- package/tests/pages/_demo.html +475 -0
- package/tests/pages/advanced.html +137 -0
- package/tests/pages/anyof.html +80 -0
- package/tests/pages/array-anyof.html +142 -0
- package/tests/pages/array-checkboxes.html +41 -0
- package/tests/pages/array-choices.html +45 -0
- package/tests/pages/array-integers.html +37 -0
- package/tests/pages/array-move-events.html +61 -0
- package/tests/pages/array-multiselects.html +42 -0
- package/tests/pages/array-nested-arrays.html +40 -0
- package/tests/pages/array-numbers.html +37 -0
- package/tests/pages/array-objects.html +42 -0
- package/tests/pages/array-ratings.html +40 -0
- package/tests/pages/array-selectize.html +51 -0
- package/tests/pages/array-selects.html +36 -0
- package/tests/pages/array-strings.html +36 -0
- package/tests/pages/array.html +42 -0
- package/tests/pages/assets/pages.css +130 -0
- package/tests/pages/button-callbacks.html +77 -0
- package/tests/pages/checkbox-labels.html +114 -0
- package/tests/pages/colorpicker-no-3rd-party.html +43 -0
- package/tests/pages/colorpicker-use-vanilla-picker.html +50 -0
- package/tests/pages/core.html +118 -0
- package/tests/pages/datetime.html +76 -0
- package/tests/pages/form-name.html +108 -0
- package/tests/pages/grid-strict.html +311 -0
- package/tests/pages/grid.html +284 -0
- package/tests/pages/if-then-else-allOf.html +117 -0
- package/tests/pages/inheritance.html +76 -0
- package/tests/pages/integer.html +68 -0
- package/tests/pages/issues/_template.html +50 -0
- package/tests/pages/issues/issue-gh-812.html +110 -0
- package/tests/pages/issues/issue-gh-823-meta-schema.html +35 -0
- package/tests/pages/issues/issue-gh-848.html +81 -0
- package/tests/pages/meta_schema.json +705 -0
- package/tests/pages/number.html +89 -0
- package/tests/pages/object-no-additional-properties.html +65 -0
- package/tests/pages/object-no-duplicated-id.html +68 -0
- package/tests/pages/object-required-properties.html +236 -0
- package/tests/pages/object-with-dependencies-array.html +46 -0
- package/tests/pages/object-with-dependencies.html +60 -0
- package/tests/pages/object.html +79 -0
- package/tests/pages/oneof.html +103 -0
- package/tests/pages/option-no_default_values.html +58 -0
- package/tests/pages/programmatic-changes.html +120 -0
- package/tests/pages/read-only.html +105 -0
- package/tests/pages/select.html +41 -0
- package/tests/pages/stepper.html +59 -0
- package/tests/pages/string-ace-editor.html +52 -0
- package/tests/pages/string-cleave.html +46 -0
- package/tests/pages/string-custom-attributes.html +62 -0
- package/tests/pages/string-formats.html +52 -0
- package/tests/pages/string-formats2.html +57 -0
- package/tests/pages/string-jodit-editor.html +49 -0
- package/tests/pages/string-sceditor.html +62 -0
- package/tests/pages/table-move-events.html +56 -0
- package/tests/pages/table.html +46 -0
- package/tests/pages/tabs.html +131 -0
- package/tests/pages/themes.html +527 -0
- package/tests/pages/translate-property.html +247 -0
- package/tests/pages/urn.html +93 -0
- package/tests/pages/uuid.html +72 -0
- package/tests/pages/validation.html +99 -0
- package/tests/unit/.eslintrc +8 -0
- package/tests/unit/core.spec.js +309 -0
- package/tests/unit/defaults.spec.js +40 -0
- package/tests/unit/editor.spec.js +160 -0
- package/tests/unit/editors/array.spec.js +86 -0
- package/tests/unit/editors/object.spec.js +79 -0
- package/tests/unit/editors/table.spec.js +91 -0
- package/tests/unit/readme.md +35 -0
- package/tests/unit/schemaloader.spec.js +498 -0
- package/tests/unit/validator.spec.js +94 -0
- package/tests/unit/validators/ip-validator.spec.js +62 -0
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8"/>
|
|
5
|
+
<title>JSON Editor Interactive Example</title>
|
|
6
|
+
<script src="../../dist/nonmin/jsoneditor.js"></script>
|
|
7
|
+
<script src="https://cdn.jsdelivr.net/npm/lz-string@1.4.4/libs/lz-string.min.js"></script>
|
|
8
|
+
<link rel='stylesheet' id='theme-link'>
|
|
9
|
+
<link rel='stylesheet' id='iconlib-link'>
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<div class='container grid-xl'>
|
|
13
|
+
<div class="row columns md:flex">
|
|
14
|
+
<div class='col-8 col-md-8 w-8/12'>
|
|
15
|
+
<h1>Editor</h1>
|
|
16
|
+
<p>Below is the editor generated from the JSON Schema.</p>
|
|
17
|
+
<div id="json-editor-form"></div>
|
|
18
|
+
</div>
|
|
19
|
+
<div class='col-4 col-md-4 w-4/12'>
|
|
20
|
+
<div>
|
|
21
|
+
<a class="btn btn-primary" id="direct-link" title="preserves schema, value, and options">Direct Link</a>
|
|
22
|
+
<a class="btn btn-secondary" href="?" title="reload editor with default example settings">reset</a>
|
|
23
|
+
</div>
|
|
24
|
+
<h2>JSON Output</h2>
|
|
25
|
+
<p>You can also make changes to the JSON here and set the value in the editor by clicking "Update Form"</p>
|
|
26
|
+
<label for="output-textarea"></label>
|
|
27
|
+
<button class='btn btn-primary btn-block' id='setvalue'>Update Form</button>
|
|
28
|
+
<textarea id='output-textarea' rows="15" style="width: 100%; font-family: monospace;"
|
|
29
|
+
class='form-control'></textarea>
|
|
30
|
+
<h2>Validation</h2>
|
|
31
|
+
<label for="validate-textarea">This will update whenever the form changes to show validation errors if there
|
|
32
|
+
are any.</label><br>
|
|
33
|
+
<textarea id='validate-textarea' readonly disabled class='form-control'></textarea>
|
|
34
|
+
<h2>Options</h2>
|
|
35
|
+
<div>
|
|
36
|
+
<label for="boolean-options-select">Boolean options</label><br>
|
|
37
|
+
<select multiple size="15" id="boolean-options-select" class="form-control browser-default">
|
|
38
|
+
<option value='required_by_default'>Object properties required by default</option>
|
|
39
|
+
<option value='display_required_only'>Only show required properties by default</option>
|
|
40
|
+
<option value='remove_empty_properties'>Remove empty properties</option>
|
|
41
|
+
<option value='show_opt_in'>Show optional properties (with checkbox)</option>
|
|
42
|
+
<option value='no_additional_properties'>No additional object properties</option>
|
|
43
|
+
<option value='ajax'>Allow loading schemas via Ajax</option>
|
|
44
|
+
<option value='disable_edit_json'>Disable "Edit JSON" buttons</option>
|
|
45
|
+
<option value='disable_collapse'>Disable collapse buttons</option>
|
|
46
|
+
<option value='disable_properties'>Disable properties buttons</option>
|
|
47
|
+
<option value='disable_array_add'>Disable array add buttons</option>
|
|
48
|
+
<option value='disable_array_reorder'>Disable array move buttons</option>
|
|
49
|
+
<option value='disable_array_delete'>Disable array delete buttons</option>
|
|
50
|
+
<option value='enable_array_copy'>Add copy buttons to arrays</option>
|
|
51
|
+
<option value='array_controls_top'>Array controls will be displayed at top of list</option>
|
|
52
|
+
<option value='disable_array_delete_all_rows'>Disable array delete all rows buttons</option>
|
|
53
|
+
<option value='disable_array_delete_last_row'>Disable array delete last row buttons</option>
|
|
54
|
+
</select>
|
|
55
|
+
</div>
|
|
56
|
+
<div>
|
|
57
|
+
<label for="theme-select">theme</label><br>
|
|
58
|
+
<select id='theme-select' name="theme" class='form-control browser-default'>
|
|
59
|
+
<option value='barebones'>Barebones</option>
|
|
60
|
+
<option value='bootstrap4'>Bootstrap 4</option>
|
|
61
|
+
<option value='html'>HTML</option>
|
|
62
|
+
<option value='spectre'>Spectre</option>
|
|
63
|
+
<option value='tailwind'>Tailwind</option>
|
|
64
|
+
</select>
|
|
65
|
+
</div>
|
|
66
|
+
<div>
|
|
67
|
+
<label for="iconlib-select">iconlib</label><br>
|
|
68
|
+
<select id='iconlib-select' name="iconlib" class='form-control browser-default'>
|
|
69
|
+
<option value='fontawesome3'>fontawesome 3</option>
|
|
70
|
+
<option value='fontawesome4'>fontawesome 4</option>
|
|
71
|
+
<option value='fontawesome5'>fontawesome 5</option>
|
|
72
|
+
<option value='jqueryui'>jQuery UI</option>
|
|
73
|
+
<option value='openiconic'>Open Iconic</option>
|
|
74
|
+
<option value='spectre'>Spectre</option>
|
|
75
|
+
</select>
|
|
76
|
+
</div>
|
|
77
|
+
<div>
|
|
78
|
+
<label for="object-layout-select">Object Layout</label><br>
|
|
79
|
+
<select id='object-layout-select' class='form-control browser-default'>
|
|
80
|
+
<option value='normal'>normal</option>
|
|
81
|
+
<option value='grid'>grid</option>
|
|
82
|
+
</select>
|
|
83
|
+
</div>
|
|
84
|
+
<div>
|
|
85
|
+
<label for="show-errors-select">Show Errors</label><br>
|
|
86
|
+
<select id='show-errors-select' class='form-control browser-default'>
|
|
87
|
+
<option value='interaction'>On Interaction</option>
|
|
88
|
+
<option value='change'>On Field Change</option>
|
|
89
|
+
<option value='always'>Always</option>
|
|
90
|
+
<option value='never'>Never</option>
|
|
91
|
+
</select>
|
|
92
|
+
</div>
|
|
93
|
+
<div>
|
|
94
|
+
<label for="lib-select"
|
|
95
|
+
title="It's recommended that you click the Direct Link after changing these options">Include
|
|
96
|
+
External Library</label><br>
|
|
97
|
+
<select multiple size="10" id='lib-select' class='form-control browser-default'
|
|
98
|
+
title="It's reccomended that you click the Direct Link after changing these options">
|
|
99
|
+
<option value='ace_editor'>Ace Editor</option>
|
|
100
|
+
<option value='choices'>Choices</option>
|
|
101
|
+
<option value='sceditor'>SCEditor</option>
|
|
102
|
+
<option value='simplemde'>SimpleMDE</option>
|
|
103
|
+
<option value='select2'>Select2</option>
|
|
104
|
+
<option value='selectize'>Selectize</option>
|
|
105
|
+
<option value='flatpickr'>Flatpickr</option>
|
|
106
|
+
<option value='signature_pad'>Signature Pad</option>
|
|
107
|
+
<option value='mathjs'>Math.js</option>
|
|
108
|
+
<option value='cleavejs'>Cleave.js</option>
|
|
109
|
+
</select>
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
<div class="row columns md:flex">
|
|
114
|
+
<div class='col-12 col-md-12 w-12/12'>
|
|
115
|
+
<h2>Schema</h2>
|
|
116
|
+
<label for="schema-textarea">You can change the schema and see how the generated form looks. After you make
|
|
117
|
+
changes, click "Update Schema"</label>
|
|
118
|
+
<button class='btn btn-primary btn-block' id='setschema'>Update Schema</button>
|
|
119
|
+
<textarea id='schema-textarea' rows="30" style="width: 100%; font-family: monospace;"
|
|
120
|
+
class='form-control'></textarea>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
<script>
|
|
125
|
+
|
|
126
|
+
const defaultSchema = {}
|
|
127
|
+
|
|
128
|
+
// parse url -> merge options -> refreshUI() -> initJsoneditor() -> direct link
|
|
129
|
+
|
|
130
|
+
/* ------------------------------------------------------------------- data */
|
|
131
|
+
|
|
132
|
+
let data = {}
|
|
133
|
+
|
|
134
|
+
let defaultOptions = {
|
|
135
|
+
iconlib: 'fontawesome5',
|
|
136
|
+
object_layout: 'normal',
|
|
137
|
+
schema: defaultSchema,
|
|
138
|
+
show_errors: 'interaction',
|
|
139
|
+
theme: 'bootstrap4'
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
let jsoneditor = null
|
|
143
|
+
let directLink = document.querySelector('#direct-link')
|
|
144
|
+
|
|
145
|
+
const booleanOptionsSelect = document.querySelector('#boolean-options-select')
|
|
146
|
+
const head = document.getElementsByTagName('head')[0]
|
|
147
|
+
const iconlibSelect = document.querySelector('#iconlib-select')
|
|
148
|
+
const iconlibLink = document.querySelector('#iconlib-link')
|
|
149
|
+
const libSelect = document.querySelector('#lib-select')
|
|
150
|
+
const jsonEditorForm = document.querySelector('#json-editor-form')
|
|
151
|
+
const objectLayoutSelect = document.querySelector('#object-layout-select')
|
|
152
|
+
const outputTextarea = document.querySelector('#output-textarea')
|
|
153
|
+
const schemaTextarea = document.querySelector('#schema-textarea')
|
|
154
|
+
const setSchema = document.querySelector('#setschema')
|
|
155
|
+
const setValue = document.querySelector('#setvalue')
|
|
156
|
+
const showErrorsSelect = document.querySelector('#show-errors-select')
|
|
157
|
+
const themeSelect = document.querySelector('#theme-select')
|
|
158
|
+
const themeLink = document.querySelector('#theme-link')
|
|
159
|
+
const validateTextarea = document.querySelector('#validate-textarea')
|
|
160
|
+
|
|
161
|
+
/* -------------------------------------------------------------- parse url */
|
|
162
|
+
|
|
163
|
+
const parseUrl = () => {
|
|
164
|
+
const url = window.location.search
|
|
165
|
+
const queryParamsString = url.substring(1, url.length)
|
|
166
|
+
const queryParams = queryParamsString.split('&')
|
|
167
|
+
|
|
168
|
+
if (queryParamsString.length) {
|
|
169
|
+
queryParams.forEach((queryParam) => {
|
|
170
|
+
const splittedParam = queryParam.split('=')
|
|
171
|
+
const param = splittedParam[0]
|
|
172
|
+
const value = splittedParam[1]
|
|
173
|
+
|
|
174
|
+
// data query param
|
|
175
|
+
if (param === 'data') {
|
|
176
|
+
// compress schema and value
|
|
177
|
+
try {
|
|
178
|
+
data = JSON.parse(LZString.decompressFromBase64(value))
|
|
179
|
+
} catch (reason) {
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
})
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
mergeOptions()
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/* ----------------------------------------------------------- mergeOptions */
|
|
189
|
+
|
|
190
|
+
const mergeOptions = () => {
|
|
191
|
+
data.options = Object.assign(defaultOptions, data.options)
|
|
192
|
+
refreshUI()
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/* -------------------------------------------------------------- refreshUI */
|
|
196
|
+
|
|
197
|
+
const refreshUI = () => {
|
|
198
|
+
// schema
|
|
199
|
+
schemaTextarea.value = JSON.stringify(data.options.schema, null, 2)
|
|
200
|
+
|
|
201
|
+
// theme
|
|
202
|
+
const themeMap = {
|
|
203
|
+
barebones: '',
|
|
204
|
+
bootstrap4: 'https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css',
|
|
205
|
+
html: '',
|
|
206
|
+
spectre: 'https://unpkg.com/spectre.css/dist/spectre.min.css',
|
|
207
|
+
tailwind: 'https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css'
|
|
208
|
+
}
|
|
209
|
+
themeLink.href = themeMap[data.options.theme]
|
|
210
|
+
themeSelect.value = data.options.theme
|
|
211
|
+
|
|
212
|
+
// iconlLib
|
|
213
|
+
const iconLibMap = {
|
|
214
|
+
fontawesome3: 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/3.2.1/css/font-awesome.css',
|
|
215
|
+
fontawesome4: 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.0.3/css/font-awesome.css',
|
|
216
|
+
fontawesome5: 'https://use.fontawesome.com/releases/v5.6.1/css/all.css',
|
|
217
|
+
jqueryui: 'https://code.jquery.com/ui/1.10.3/themes/south-street/jquery-ui.css',
|
|
218
|
+
openiconic: 'https://cdnjs.cloudflare.com/ajax/libs/open-iconic/1.1.1/font/css/open-iconic.min.css',
|
|
219
|
+
spectre: 'https://unpkg.com/spectre.css/dist/spectre-icons.min.css'
|
|
220
|
+
}
|
|
221
|
+
iconlibLink.href = iconLibMap[data.options.iconlib]
|
|
222
|
+
iconlibSelect.value = data.options.iconlib
|
|
223
|
+
|
|
224
|
+
// object_layout
|
|
225
|
+
objectLayoutSelect.value = data.options.object_layout
|
|
226
|
+
|
|
227
|
+
// show_errors
|
|
228
|
+
showErrorsSelect.value = data.options.show_errors
|
|
229
|
+
|
|
230
|
+
// boolean values
|
|
231
|
+
let booleanOptions = booleanOptionsSelect.children
|
|
232
|
+
for (let i = 0; i < booleanOptions.length; i++) {
|
|
233
|
+
const booleanValue = booleanOptions[i]
|
|
234
|
+
if (data.options[booleanValue.value]) {
|
|
235
|
+
booleanValue.selected = true
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// libs
|
|
240
|
+
let libMapping = {
|
|
241
|
+
ace_editor: {
|
|
242
|
+
js: [
|
|
243
|
+
'https://cdn.jsdelivr.net/npm/ace-editor-builds@1.2.4/src-min-noconflict/ace.js'
|
|
244
|
+
],
|
|
245
|
+
css: []
|
|
246
|
+
},
|
|
247
|
+
choices: {
|
|
248
|
+
js: [
|
|
249
|
+
'https://cdn.jsdelivr.net/npm/choices.js/public/assets/scripts/choices.min.js'
|
|
250
|
+
],
|
|
251
|
+
css: [
|
|
252
|
+
'https://cdn.jsdelivr.net/npm/choices.js/public/assets/styles/choices.min.css'
|
|
253
|
+
]
|
|
254
|
+
},
|
|
255
|
+
cleavejs: {
|
|
256
|
+
js: [
|
|
257
|
+
'https://cdn.jsdelivr.net/npm/cleave.js@1.4.7/dist/cleave.min.js'
|
|
258
|
+
],
|
|
259
|
+
css: []
|
|
260
|
+
},
|
|
261
|
+
sceditor: {
|
|
262
|
+
js: [
|
|
263
|
+
'https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js',
|
|
264
|
+
'https://cdn.jsdelivr.net/npm/sceditor@2.1.3/minified/sceditor.min.js',
|
|
265
|
+
'https://cdn.jsdelivr.net/npm/sceditor@2.1.3/minified/formats/bbcode.js',
|
|
266
|
+
'https://cdn.jsdelivr.net/npm/sceditor@2.1.3/minified/formats/xhtml.js'
|
|
267
|
+
],
|
|
268
|
+
css: [
|
|
269
|
+
'https://cdn.jsdelivr.net/npm/sceditor@2.1.3/minified/themes/default.min.css'
|
|
270
|
+
]
|
|
271
|
+
},
|
|
272
|
+
simplemde: {
|
|
273
|
+
js: [
|
|
274
|
+
'https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.js'
|
|
275
|
+
],
|
|
276
|
+
css: [
|
|
277
|
+
'https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css'
|
|
278
|
+
]
|
|
279
|
+
},
|
|
280
|
+
select2: {
|
|
281
|
+
js: [
|
|
282
|
+
'https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js',
|
|
283
|
+
'https://cdn.jsdelivr.net/npm/select2@4.0.6-rc.1/dist/js/select2.min.js'
|
|
284
|
+
],
|
|
285
|
+
css: [
|
|
286
|
+
'https://cdn.jsdelivr.net/npm/select2@4.0.6-rc.1/dist/css/select2.min.css'
|
|
287
|
+
]
|
|
288
|
+
},
|
|
289
|
+
selectize: {
|
|
290
|
+
js: [
|
|
291
|
+
'https://cdn.jsdelivr.net/npm/selectize@0.12.6/dist/js/standalone/selectize.min.js'
|
|
292
|
+
],
|
|
293
|
+
css: [
|
|
294
|
+
'https://cdn.jsdelivr.net/npm/selectize@0.12.6/dist/css/selectize.min.css',
|
|
295
|
+
'https://cdn.jsdelivr.net/npm/selectize@0.12.6/dist/css/selectize.default.min.css'
|
|
296
|
+
]
|
|
297
|
+
},
|
|
298
|
+
flatpickr: {
|
|
299
|
+
js: [
|
|
300
|
+
'https://cdn.jsdelivr.net/npm/flatpickr'
|
|
301
|
+
],
|
|
302
|
+
css: [
|
|
303
|
+
'https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css'
|
|
304
|
+
]
|
|
305
|
+
},
|
|
306
|
+
signature_pad: {
|
|
307
|
+
js: [
|
|
308
|
+
'https://cdn.jsdelivr.net/npm/signature_pad@2.3.2/dist/signature_pad.min.js'
|
|
309
|
+
],
|
|
310
|
+
css: []
|
|
311
|
+
},
|
|
312
|
+
mathjs: {
|
|
313
|
+
js: [
|
|
314
|
+
'https://cdn.jsdelivr.net/npm/mathjs@5.3.1/dist/math.min.js'
|
|
315
|
+
],
|
|
316
|
+
css: []
|
|
317
|
+
},
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
if (data.selectedLibs || data.unselectedLibs) {
|
|
321
|
+
|
|
322
|
+
let booleanOptions = booleanOptionsSelect.children
|
|
323
|
+
for (let i = 0; i < booleanOptions.length; i++) {
|
|
324
|
+
const booleanValue = booleanOptions[i]
|
|
325
|
+
if (data.options[booleanValue.value]) {
|
|
326
|
+
booleanValue.selected = true
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
const libSelectChildren = libSelect.children
|
|
331
|
+
for (let i = 0; i < libSelectChildren.length; i++) {
|
|
332
|
+
const child = libSelectChildren[i]
|
|
333
|
+
child.selected = data.selectedLibs.includes(child.value)
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// remove libraries
|
|
337
|
+
data.unselectedLibs.forEach((selectedLib) => {
|
|
338
|
+
const concat = libMapping[selectedLib].js.concat(libMapping[selectedLib].css)
|
|
339
|
+
concat.forEach(() => {
|
|
340
|
+
const className = '.external_' + selectedLib
|
|
341
|
+
const toRemove = head.querySelector(className)
|
|
342
|
+
if (toRemove) {
|
|
343
|
+
toRemove.parentNode.removeChild(toRemove)
|
|
344
|
+
}
|
|
345
|
+
})
|
|
346
|
+
})
|
|
347
|
+
|
|
348
|
+
// add libraries
|
|
349
|
+
data.selectedLibs.forEach((selectedLib) => {
|
|
350
|
+
// add js
|
|
351
|
+
libMapping[selectedLib].js.forEach((js) => {
|
|
352
|
+
let scriptElement = document.createElement('script')
|
|
353
|
+
scriptElement.type = 'text/javascript'
|
|
354
|
+
scriptElement.src = js
|
|
355
|
+
scriptElement.async = false
|
|
356
|
+
scriptElement.classList.add('external_' + selectedLib)
|
|
357
|
+
head.appendChild(scriptElement)
|
|
358
|
+
})
|
|
359
|
+
// add css
|
|
360
|
+
libMapping[selectedLib].css.forEach((css) => {
|
|
361
|
+
const linkElement = document.createElement('link')
|
|
362
|
+
linkElement.setAttribute('rel', 'stylesheet')
|
|
363
|
+
linkElement.setAttribute('type', 'text/css')
|
|
364
|
+
linkElement.setAttribute('href', css)
|
|
365
|
+
linkElement.classList.add('external_' + selectedLib)
|
|
366
|
+
head.appendChild(linkElement)
|
|
367
|
+
})
|
|
368
|
+
})
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
initJsoneditor()
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/* --------------------------------------------------------- initJsoneditor */
|
|
375
|
+
|
|
376
|
+
const initJsoneditor = () => {
|
|
377
|
+
// destroy old JSONEditor instance if exists
|
|
378
|
+
if (jsoneditor) {
|
|
379
|
+
jsoneditor.destroy()
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// new instance of JSONEditor
|
|
383
|
+
jsoneditor = new window.JSONEditor(jsonEditorForm, data.options)
|
|
384
|
+
|
|
385
|
+
// listen for changes
|
|
386
|
+
jsoneditor.on('change', function () {
|
|
387
|
+
// output
|
|
388
|
+
let json = jsoneditor.getValue()
|
|
389
|
+
outputTextarea.value = JSON.stringify(json, null, 2)
|
|
390
|
+
|
|
391
|
+
// validate
|
|
392
|
+
let validationErrors = jsoneditor.validate()
|
|
393
|
+
if (validationErrors.length) {
|
|
394
|
+
validateTextarea.value = JSON.stringify(validationErrors, null, 2)
|
|
395
|
+
} else {
|
|
396
|
+
validateTextarea.value = 'valid'
|
|
397
|
+
}
|
|
398
|
+
})
|
|
399
|
+
updateDirectLink()
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/* ------------------------------------------------------- updateDirectLink */
|
|
403
|
+
|
|
404
|
+
const updateDirectLink = () => {
|
|
405
|
+
let url = window.location.href.replace(/\?.*/, '')
|
|
406
|
+
url += '?data='
|
|
407
|
+
url += LZString.compressToBase64(JSON.stringify(data))
|
|
408
|
+
directLink.href = url
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/* -------------------------------------------------------- event listeners */
|
|
412
|
+
|
|
413
|
+
setValue.addEventListener('click', function () {
|
|
414
|
+
jsoneditor.setValue(JSON.parse(outputTextarea.value))
|
|
415
|
+
})
|
|
416
|
+
|
|
417
|
+
setSchema.addEventListener('click', function () {
|
|
418
|
+
try {
|
|
419
|
+
data.options.schema = JSON.parse(schemaTextarea.value)
|
|
420
|
+
} catch (e) {
|
|
421
|
+
alert('Invalid Schema: ' + e.message)
|
|
422
|
+
return
|
|
423
|
+
}
|
|
424
|
+
refreshUI()
|
|
425
|
+
})
|
|
426
|
+
|
|
427
|
+
themeSelect.addEventListener('change', function () {
|
|
428
|
+
data.options.theme = this.value || ''
|
|
429
|
+
refreshUI()
|
|
430
|
+
})
|
|
431
|
+
|
|
432
|
+
iconlibSelect.addEventListener('change', function () {
|
|
433
|
+
data.options.iconlib = this.value || ''
|
|
434
|
+
refreshUI()
|
|
435
|
+
})
|
|
436
|
+
|
|
437
|
+
objectLayoutSelect.addEventListener('change', function () {
|
|
438
|
+
data.options.object_layout = this.value || ''
|
|
439
|
+
refreshUI()
|
|
440
|
+
})
|
|
441
|
+
|
|
442
|
+
showErrorsSelect.addEventListener('change', function () {
|
|
443
|
+
data.options.show_errors = this.value || ''
|
|
444
|
+
refreshUI()
|
|
445
|
+
})
|
|
446
|
+
|
|
447
|
+
booleanOptionsSelect.addEventListener('change', function () {
|
|
448
|
+
let booleanOptions = this.children
|
|
449
|
+
for (let i = 0; i < booleanOptions.length; i++) {
|
|
450
|
+
data.options[booleanOptions[i].value] = booleanOptions[i].selected
|
|
451
|
+
}
|
|
452
|
+
refreshUI()
|
|
453
|
+
})
|
|
454
|
+
|
|
455
|
+
libSelect.addEventListener('change', function () {
|
|
456
|
+
data.selectedLibs = []
|
|
457
|
+
data.unselectedLibs = []
|
|
458
|
+
|
|
459
|
+
const libs = this.children
|
|
460
|
+
|
|
461
|
+
for (let i = 0; i < libs.length; i++) {
|
|
462
|
+
if (libs[i].selected) {
|
|
463
|
+
data.selectedLibs.push(libs[i].value)
|
|
464
|
+
} else {
|
|
465
|
+
data.unselectedLibs.push(libs[i].value)
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
refreshUI()
|
|
469
|
+
})
|
|
470
|
+
|
|
471
|
+
parseUrl()
|
|
472
|
+
|
|
473
|
+
</script>
|
|
474
|
+
</body>
|
|
475
|
+
</html>
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<title>Advanced JSON Editor Example</title>
|
|
6
|
+
|
|
7
|
+
<script src="../../dist/jsoneditor.js"></script>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<h1>Advanced JSON Editor Example</h1>
|
|
11
|
+
|
|
12
|
+
<p>This example demonstrates the following:</p>
|
|
13
|
+
<ul>
|
|
14
|
+
<li>Loading external schemas via ajax (using $ref)</li>
|
|
15
|
+
<li>Setting the editor's value from javascript (try the Restore to Default button)</li>
|
|
16
|
+
<li>Validating the editor's contents (try setting name to an empty string)</li>
|
|
17
|
+
<li>Macro templates (try changing the city or state fields and watch the citystate field update automatically)</li>
|
|
18
|
+
<li>Enabling and disabling editor fields</li>
|
|
19
|
+
</ul>
|
|
20
|
+
|
|
21
|
+
<button id='submit'>Submit (console.log)</button>
|
|
22
|
+
<button id='restore'>Restore to Default</button>
|
|
23
|
+
<button id='enable_disable'>Disable/Enable Form</button>
|
|
24
|
+
<span id='valid_indicator'></span>
|
|
25
|
+
|
|
26
|
+
<div id='editor_holder'></div>
|
|
27
|
+
|
|
28
|
+
<script>
|
|
29
|
+
// This is the starting value for the editor
|
|
30
|
+
// We will use this to seed the initial editor
|
|
31
|
+
// and to provide a "Restore to Default" button.
|
|
32
|
+
var starting_value = [
|
|
33
|
+
{
|
|
34
|
+
name: "John Smith",
|
|
35
|
+
age: 35,
|
|
36
|
+
gender: "male",
|
|
37
|
+
location: {
|
|
38
|
+
city: "San Francisco",
|
|
39
|
+
state: "California",
|
|
40
|
+
citystate: ""
|
|
41
|
+
},
|
|
42
|
+
pets: [
|
|
43
|
+
{
|
|
44
|
+
name: "Spot",
|
|
45
|
+
type: "dog",
|
|
46
|
+
fixed: true
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "Whiskers",
|
|
50
|
+
type: "cat",
|
|
51
|
+
fixed: false
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
// Initialize the editor
|
|
58
|
+
var editor = new JSONEditor(document.getElementById('editor_holder'),{
|
|
59
|
+
// Enable fetching schemas via ajax
|
|
60
|
+
ajax: true,
|
|
61
|
+
|
|
62
|
+
// The schema for the editor
|
|
63
|
+
schema: {
|
|
64
|
+
type: "array",
|
|
65
|
+
title: "People",
|
|
66
|
+
format: "tabs",
|
|
67
|
+
items: {
|
|
68
|
+
title: "Person",
|
|
69
|
+
headerTemplate: "{{i}} - {{self.name}}",
|
|
70
|
+
oneOf: [
|
|
71
|
+
{
|
|
72
|
+
$ref: "../fixtures/basic_person.json",
|
|
73
|
+
title: "Basic Person"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
$ref: "../fixtures/person.json",
|
|
77
|
+
title: "Complex Person"
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
// Seed the form with a starting value
|
|
84
|
+
startval: starting_value,
|
|
85
|
+
|
|
86
|
+
// Disable additional properties
|
|
87
|
+
no_additional_properties: true,
|
|
88
|
+
|
|
89
|
+
// Require all properties by default
|
|
90
|
+
required_by_default: true
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// Hook up the submit button to log to the console
|
|
94
|
+
document.getElementById('submit').addEventListener('click',function() {
|
|
95
|
+
// Get the value from the editor
|
|
96
|
+
console.log(editor.getValue());
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
// Hook up the Restore to Default button
|
|
100
|
+
document.getElementById('restore').addEventListener('click',function() {
|
|
101
|
+
editor.setValue(starting_value);
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// Hook up the enable/disable button
|
|
105
|
+
document.getElementById('enable_disable').addEventListener('click',function() {
|
|
106
|
+
// Enable form
|
|
107
|
+
if(!editor.isEnabled()) {
|
|
108
|
+
editor.enable();
|
|
109
|
+
}
|
|
110
|
+
// Disable form
|
|
111
|
+
else {
|
|
112
|
+
editor.disable();
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
// Hook up the validation indicator to update its
|
|
117
|
+
// status whenever the editor changes
|
|
118
|
+
editor.on('change',function() {
|
|
119
|
+
// Get an array of errors from the validator
|
|
120
|
+
var errors = editor.validate();
|
|
121
|
+
|
|
122
|
+
var indicator = document.getElementById('valid_indicator');
|
|
123
|
+
|
|
124
|
+
// Not valid
|
|
125
|
+
if(errors.length) {
|
|
126
|
+
indicator.style.color = 'red';
|
|
127
|
+
indicator.textContent = "not valid";
|
|
128
|
+
}
|
|
129
|
+
// Valid
|
|
130
|
+
else {
|
|
131
|
+
indicator.style.color = 'green';
|
|
132
|
+
indicator.textContent = "valid";
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
</script>
|
|
136
|
+
</body>
|
|
137
|
+
</html>
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8"/>
|
|
5
|
+
<title>oneOf</title>
|
|
6
|
+
<link rel="stylesheet" id="theme-link" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
|
|
7
|
+
<link rel="stylesheet" id="iconlib-link" href="https://use.fontawesome.com/releases/v5.6.1/css/all.css">
|
|
8
|
+
<script src="../../dist/jsoneditor.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
|
|
12
|
+
<div class="container">
|
|
13
|
+
<textarea class="value form-control" rows="10"></textarea>
|
|
14
|
+
<button class='get-value'>Get Value</button>
|
|
15
|
+
<button class='set-value'>Set Value</button>
|
|
16
|
+
<div class='json-editor-container'></div>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
<script>
|
|
21
|
+
var jsonEditorContainer = document.querySelector('.json-editor-container');
|
|
22
|
+
var value = document.querySelector('.value');
|
|
23
|
+
|
|
24
|
+
var schema = {
|
|
25
|
+
"title": "Person",
|
|
26
|
+
"type": "object",
|
|
27
|
+
"required": [
|
|
28
|
+
"age"
|
|
29
|
+
],
|
|
30
|
+
"properties": {
|
|
31
|
+
"age": {
|
|
32
|
+
"anyOf": [
|
|
33
|
+
{
|
|
34
|
+
"type": "number",
|
|
35
|
+
"title": "Value, number"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"type": "string",
|
|
39
|
+
"title": "Value, string",
|
|
40
|
+
"minLength": 1
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"type": "null",
|
|
44
|
+
"title": "Value, null"
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
var editor = new JSONEditor(jsonEditorContainer, {
|
|
52
|
+
schema: schema,
|
|
53
|
+
theme: 'bootstrap4',
|
|
54
|
+
show_errors: 'always',
|
|
55
|
+
iconlib: 'fontawesome5',
|
|
56
|
+
object_layout: 'normal',
|
|
57
|
+
disable_collapse: true,
|
|
58
|
+
disable_edit_json: true,
|
|
59
|
+
disable_properties: true,
|
|
60
|
+
use_default_values: false,
|
|
61
|
+
required_by_default: true,
|
|
62
|
+
disable_array_reorder: true,
|
|
63
|
+
disable_array_delete_all_rows: true,
|
|
64
|
+
disable_array_delete_last_row: true,
|
|
65
|
+
keep_oneof_values: false
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
document.querySelector('.get-value').addEventListener('click', function () {
|
|
69
|
+
value.value = JSON.stringify(editor.getValue());
|
|
70
|
+
console.log(editor.getValue());
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
document.querySelector('.set-value').addEventListener('click', function () {
|
|
74
|
+
editor.setValue({number_range: 2})
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
</script>
|
|
78
|
+
|
|
79
|
+
</body>
|
|
80
|
+
</html>
|