@json-editor/json-editor 1.4.0-beta.0 → 1.17.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.
Files changed (435) hide show
  1. package/.claude/settings.local.json +8 -0
  2. package/.env +2 -0
  3. package/.env-dist +2 -0
  4. package/.eslintrc +10 -0
  5. package/.github/PULL_REQUEST_TEMPLATE.md +9 -0
  6. package/.github/workflows/build.yml +70 -0
  7. package/.travis.yml +62 -16
  8. package/CHANGELOG.md +483 -113
  9. package/CONTRIBUTING.md +43 -4
  10. package/Makefile +26 -0
  11. package/README.md +632 -121
  12. package/README_ADDON.md +577 -0
  13. package/UPGRADING.md +46 -0
  14. package/build/CssToJson.js +55 -0
  15. package/codecept.conf.js +35 -0
  16. package/config/.eslintrc +7 -0
  17. package/config/codeceptjs_helpers.js +146 -0
  18. package/config/helpers.js +10 -0
  19. package/config/karma.conf.js +89 -0
  20. package/config/readme.md +31 -0
  21. package/config/webpack.common.js +71 -0
  22. package/config/webpack.dev.js +15 -0
  23. package/config/webpack.nonmin.js +19 -0
  24. package/config/webpack.prod.js +24 -0
  25. package/dist/jsoneditor.js +2 -11550
  26. package/dist/jsoneditor.js.LICENSE.txt +15 -0
  27. package/dist/nonmin/jsoneditor.js +31392 -0
  28. package/dist/nonmin/jsoneditor.js.map +1 -0
  29. package/docs/basic.html +2 -2
  30. package/docs/basic_person.json +2 -1
  31. package/docs/choices.html +86 -0
  32. package/docs/cleave.html +11 -19
  33. package/docs/colorpicker.html +194 -0
  34. package/docs/css_integration.html +56 -54
  35. package/docs/custom-editor.html +92 -0
  36. package/docs/datetime.html +48 -21
  37. package/docs/describedby.html +42 -35
  38. package/docs/enumsource.html +67 -0
  39. package/docs/form-submission.html +162 -0
  40. package/docs/imask.html +192 -0
  41. package/docs/index.html +600 -582
  42. package/docs/materialize_css.html +1 -1
  43. package/docs/meta-schema.html +793 -0
  44. package/docs/meta_schema.json +446 -400
  45. package/docs/polyfills/assign.js +29 -0
  46. package/docs/radio.html +9 -17
  47. package/docs/recursive.html +15 -17
  48. package/docs/scripts/ajv-validator.js +8695 -0
  49. package/docs/select2.html +15 -9
  50. package/docs/selectize.html +11 -9
  51. package/docs/signature.html +12 -11
  52. package/docs/starrating.html +5 -17
  53. package/docs/upload.html +33 -23
  54. package/docs/uuid.html +70 -0
  55. package/docs/wysiwyg.html +14 -7
  56. package/jasmine.json +11 -0
  57. package/package.json +74 -25
  58. package/release-notes.md +90 -0
  59. package/src/core.js +411 -611
  60. package/src/defaults.js +381 -327
  61. package/src/editor.js +733 -544
  62. package/src/editors/ace.js +90 -0
  63. package/src/editors/array/choices.js +104 -0
  64. package/src/editors/array/select2.js +112 -0
  65. package/src/editors/array/selectize.js +107 -130
  66. package/src/editors/array.css +9 -0
  67. package/src/editors/array.css.js +3 -0
  68. package/src/editors/array.js +812 -695
  69. package/src/editors/autocomplete.js +59 -0
  70. package/src/editors/base64.js +148 -129
  71. package/src/editors/button.js +104 -0
  72. package/src/editors/checkbox.js +111 -76
  73. package/src/editors/choices.css +3 -0
  74. package/src/editors/choices.css.js +3 -0
  75. package/src/editors/choices.js +71 -0
  76. package/src/editors/colorpicker.js +105 -0
  77. package/src/editors/datetime.js +93 -79
  78. package/src/editors/describedby.js +141 -125
  79. package/src/editors/enum.js +131 -116
  80. package/src/editors/hidden.js +100 -86
  81. package/src/editors/index.js +81 -0
  82. package/src/editors/info.js +28 -0
  83. package/src/editors/integer.js +21 -8
  84. package/src/editors/ip.js +36 -0
  85. package/src/editors/jodit.js +66 -0
  86. package/src/editors/multiple.js +380 -241
  87. package/src/editors/multiselect.js +207 -207
  88. package/src/editors/null.js +15 -11
  89. package/src/editors/number.js +39 -30
  90. package/src/editors/object.css +41 -0
  91. package/src/editors/object.css.js +3 -0
  92. package/src/editors/object.js +1190 -1068
  93. package/src/editors/radio.js +117 -101
  94. package/src/editors/sceditor.js +74 -0
  95. package/src/editors/select.js +318 -342
  96. package/src/editors/select2.js +112 -0
  97. package/src/editors/selectize.js +89 -338
  98. package/src/editors/signature.js +100 -104
  99. package/src/editors/simplemde.js +103 -0
  100. package/src/{styles → editors}/starrating.css +11 -2
  101. package/src/editors/starrating.css.js +3 -0
  102. package/src/editors/starrating.js +126 -95
  103. package/src/editors/stepper.js +27 -0
  104. package/src/editors/string.js +352 -426
  105. package/src/editors/table.js +486 -410
  106. package/src/editors/upload.js +297 -131
  107. package/src/editors/uuid.js +49 -0
  108. package/src/iconlib.js +22 -27
  109. package/src/iconlibs/bootstrap.js +28 -0
  110. package/src/iconlibs/bootstrap2.js +28 -17
  111. package/src/iconlibs/bootstrap3.js +28 -17
  112. package/src/iconlibs/fontawesome3.js +28 -17
  113. package/src/iconlibs/fontawesome4.js +28 -18
  114. package/src/iconlibs/fontawesome5.js +28 -18
  115. package/src/iconlibs/foundation2.js +24 -17
  116. package/src/iconlibs/foundation3.js +28 -17
  117. package/src/iconlibs/index.js +27 -0
  118. package/src/iconlibs/jqueryui.js +28 -17
  119. package/src/iconlibs/materialicons.js +49 -44
  120. package/src/iconlibs/openiconic.js +28 -0
  121. package/src/iconlibs/spectre.js +28 -0
  122. package/src/resolvers.js +135 -0
  123. package/src/schemaloader.js +639 -0
  124. package/src/style.css +157 -0
  125. package/src/style.css.js +3 -0
  126. package/src/templates/default.js +46 -51
  127. package/src/templates/ejs.js +8 -10
  128. package/src/templates/handlebars.js +1 -3
  129. package/src/templates/hogan.js +7 -9
  130. package/src/templates/index.js +21 -0
  131. package/src/templates/lodash.js +6 -8
  132. package/src/templates/markup.js +6 -8
  133. package/src/templates/mustache.js +6 -8
  134. package/src/templates/swig.js +1 -3
  135. package/src/templates/underscore.js +6 -8
  136. package/src/theme.js +717 -433
  137. package/src/themes/barebones.css +35 -0
  138. package/src/themes/barebones.css.js +3 -0
  139. package/src/themes/barebones.js +31 -0
  140. package/src/themes/bootstrap2.js +302 -265
  141. package/src/themes/bootstrap3.css +53 -0
  142. package/src/themes/bootstrap3.css.js +3 -0
  143. package/src/themes/bootstrap3.js +355 -262
  144. package/src/themes/bootstrap4.css +89 -0
  145. package/src/themes/bootstrap4.css.js +3 -0
  146. package/src/themes/bootstrap4.js +743 -237
  147. package/src/themes/bootstrap5.css +97 -0
  148. package/src/themes/bootstrap5.css.js +3 -0
  149. package/src/themes/bootstrap5.js +687 -0
  150. package/src/themes/foundation.js +535 -472
  151. package/src/themes/html.css +60 -0
  152. package/src/themes/html.css.js +3 -0
  153. package/src/themes/html.js +69 -82
  154. package/src/themes/index.js +29 -0
  155. package/src/themes/jqueryui.js +181 -167
  156. package/src/themes/materialize.js +263 -292
  157. package/src/themes/spectre.css +208 -0
  158. package/src/themes/spectre.css.js +3 -0
  159. package/src/themes/spectre.js +443 -0
  160. package/src/themes/tailwind.css +303 -0
  161. package/src/themes/tailwind.css.js +3 -0
  162. package/src/themes/tailwind.js +469 -0
  163. package/src/utilities.js +127 -68
  164. package/src/validator.js +909 -565
  165. package/src/validators/ip-validator.js +51 -0
  166. package/tests/Dockerfile +3 -0
  167. package/tests/README.md +25 -5
  168. package/tests/codeceptjs/codecept.json +9 -2
  169. package/tests/codeceptjs/constrains/contains_test.js +37 -0
  170. package/tests/codeceptjs/constrains/dependentRequired_test.js +33 -0
  171. package/tests/codeceptjs/constrains/dependentSchemas_test.js +16 -0
  172. package/tests/codeceptjs/constrains/if-then-else_test.js +186 -0
  173. package/tests/codeceptjs/core_test.js +534 -63
  174. package/tests/codeceptjs/editors/advanced_test.js +12 -9
  175. package/tests/codeceptjs/editors/array_any_of_test.js +50 -0
  176. package/tests/codeceptjs/editors/array_test.js +923 -657
  177. package/tests/codeceptjs/editors/autocomplete_test.js +15 -0
  178. package/tests/codeceptjs/editors/button_test.js +50 -0
  179. package/tests/codeceptjs/editors/checkbox_test.js +21 -6
  180. package/tests/codeceptjs/editors/colorpicker_test.js +29 -0
  181. package/tests/codeceptjs/editors/datetime_test.js +33 -0
  182. package/tests/codeceptjs/editors/inheritance_test.js +10 -0
  183. package/tests/codeceptjs/editors/integer_test.js +82 -64
  184. package/tests/codeceptjs/editors/jodit_test.js +23 -0
  185. package/tests/codeceptjs/editors/multiple_test.js +27 -0
  186. package/tests/codeceptjs/editors/multiselect_test.js +6 -7
  187. package/tests/codeceptjs/editors/number_test.js +75 -60
  188. package/tests/codeceptjs/editors/object_test.js +322 -80
  189. package/tests/codeceptjs/editors/option-no_default_values_test.js +42 -0
  190. package/tests/codeceptjs/editors/programmatic-changes_test.js +20 -0
  191. package/tests/codeceptjs/editors/purify_test.js +26 -0
  192. package/tests/codeceptjs/editors/radio_test.js +9 -0
  193. package/tests/codeceptjs/editors/range_test.js +10 -0
  194. package/tests/codeceptjs/editors/rating_test.js +10 -10
  195. package/tests/codeceptjs/editors/select_test.js +47 -18
  196. package/tests/codeceptjs/editors/starrating_test.js +15 -0
  197. package/tests/codeceptjs/editors/stepper_test.js +37 -0
  198. package/tests/codeceptjs/editors/string_test.js +107 -91
  199. package/tests/codeceptjs/editors/table-confirm-delete_test.js +60 -54
  200. package/tests/codeceptjs/editors/tabs_test.js +15 -11
  201. package/tests/codeceptjs/editors/uuid_test.js +48 -0
  202. package/tests/codeceptjs/editors/validation_test.js +13 -9
  203. package/tests/codeceptjs/issues/issue-gh-1133_test.js +9 -0
  204. package/tests/codeceptjs/issues/issue-gh-1158-2_test.js +10 -0
  205. package/tests/codeceptjs/issues/issue-gh-1158_test.js +8 -0
  206. package/tests/codeceptjs/issues/issue-gh-1164_test.js +9 -0
  207. package/tests/codeceptjs/issues/issue-gh-1171_test.js +11 -0
  208. package/tests/codeceptjs/issues/issue-gh-1211_test.js +17 -0
  209. package/tests/codeceptjs/issues/issue-gh-1257_test.js +11 -0
  210. package/tests/codeceptjs/issues/issue-gh-1272_test.js +21 -0
  211. package/tests/codeceptjs/issues/issue-gh-1330_test.js +8 -0
  212. package/tests/codeceptjs/issues/issue-gh-1338_test.js +18 -0
  213. package/tests/codeceptjs/issues/issue-gh-1347_test.js +8 -0
  214. package/tests/codeceptjs/issues/issue-gh-1364_test.js +13 -0
  215. package/tests/codeceptjs/issues/issue-gh-1367_test.js +11 -0
  216. package/tests/codeceptjs/issues/issue-gh-1383_test.js +9 -0
  217. package/tests/codeceptjs/issues/issue-gh-1384_test.js +9 -0
  218. package/tests/codeceptjs/issues/issue-gh-1410_test.js +13 -0
  219. package/tests/codeceptjs/issues/issue-gh-1422_test.js +9 -0
  220. package/tests/codeceptjs/issues/issue-gh-1431_test.js +12 -0
  221. package/tests/codeceptjs/issues/issue-gh-1439_test.js +12 -0
  222. package/tests/codeceptjs/issues/issue-gh-1452_test.js +10 -0
  223. package/tests/codeceptjs/issues/issue-gh-1453_test.js +18 -0
  224. package/tests/codeceptjs/issues/issue-gh-1461_test.js +14 -0
  225. package/tests/codeceptjs/issues/issue-gh-1463_test.js +9 -0
  226. package/tests/codeceptjs/issues/issue-gh-1471_test.js +17 -0
  227. package/tests/codeceptjs/issues/issue-gh-1485_test.js +13 -0
  228. package/tests/codeceptjs/issues/issue-gh-1491_test.js +9 -0
  229. package/tests/codeceptjs/issues/issue-gh-1525_test.js +9 -0
  230. package/tests/codeceptjs/issues/issue-gh-1536_test.js +12 -0
  231. package/tests/codeceptjs/issues/issue-gh-1538_test.js +10 -0
  232. package/tests/codeceptjs/issues/issue-gh-1541_test.js +8 -0
  233. package/tests/codeceptjs/issues/issue-gh-1559_test.js +15 -0
  234. package/tests/codeceptjs/issues/issue-gh-1562_test.js +12 -0
  235. package/tests/codeceptjs/issues/issue-gh-1586_test.js +15 -0
  236. package/tests/codeceptjs/issues/issue-gh-1636_test.js +9 -0
  237. package/tests/codeceptjs/issues/issue-gh-795_test.js +13 -0
  238. package/tests/codeceptjs/issues/issue-gh-810_test.js +52 -0
  239. package/tests/codeceptjs/issues/issue-gh-812_test.js +25 -0
  240. package/tests/codeceptjs/meta-schema_test.js +85 -0
  241. package/tests/codeceptjs/schemaloader_test.js +14 -0
  242. package/tests/codeceptjs/steps.d.ts +13 -0
  243. package/tests/codeceptjs/steps_file.js +4 -4
  244. package/tests/codeceptjs/test-config.js +3 -0
  245. package/tests/codeceptjs/themes_test.js +564 -0
  246. package/tests/docker-compose-local.yml +5 -0
  247. package/tests/docker-compose.yml +11 -19
  248. package/tests/fixtures/basic_person.json +2 -1
  249. package/tests/fixtures/definitions.json +22 -0
  250. package/tests/fixtures/nested_object.json +26 -0
  251. package/tests/fixtures/properties.json +20 -0
  252. package/tests/fixtures/some_types.json +32 -0
  253. package/tests/fixtures/validation.json +1347 -0
  254. package/tests/pages/_demo.html +475 -0
  255. package/tests/pages/advanced.html +1 -1
  256. package/tests/pages/anyof-2.html +91 -0
  257. package/tests/pages/anyof.html +82 -0
  258. package/tests/pages/array-anyof.html +145 -0
  259. package/tests/pages/array-checkboxes-infotext.html +55 -0
  260. package/tests/pages/array-checkboxes.html +5 -2
  261. package/tests/pages/array-choices.html +48 -0
  262. package/tests/pages/array-events-table.html +70 -0
  263. package/tests/pages/array-events.html +75 -0
  264. package/tests/pages/array-header-template.html +60 -0
  265. package/tests/pages/array-integers.html +5 -2
  266. package/tests/pages/array-multiselects.html +5 -2
  267. package/tests/pages/array-nested-arrays.html +5 -2
  268. package/tests/pages/array-numbers.html +5 -2
  269. package/tests/pages/array-objects.html +5 -2
  270. package/tests/pages/array-ratings.html +5 -2
  271. package/tests/pages/array-selectize-create.html +63 -0
  272. package/tests/pages/array-selectize.html +10 -8
  273. package/tests/pages/array-selects.html +5 -2
  274. package/tests/pages/array-strings.html +5 -2
  275. package/tests/pages/array-table-responsive.html +66 -0
  276. package/tests/pages/array-unique-items-sort.html +81 -0
  277. package/tests/pages/array.html +5 -2
  278. package/tests/pages/assets/autocomplete.css +1 -0
  279. package/tests/pages/assets/autocomplete.min.js +1 -0
  280. package/tests/pages/assets/pages.css +130 -0
  281. package/tests/pages/autocomplete.html +72 -0
  282. package/tests/pages/button-callbacks.html +79 -0
  283. package/tests/pages/button-icons.html +39 -0
  284. package/tests/pages/button_state_mode_1.html +35 -0
  285. package/tests/pages/button_state_mode_2.html +36 -0
  286. package/tests/pages/checkbox-labels.html +116 -0
  287. package/tests/pages/colorpicker-no-3rd-party.html +45 -0
  288. package/tests/pages/colorpicker-use-vanilla-picker.html +52 -0
  289. package/tests/pages/container-attributes.html +51 -0
  290. package/tests/pages/contains.html +39 -0
  291. package/tests/pages/core.html +14 -7
  292. package/tests/pages/datetime.html +78 -0
  293. package/tests/pages/dependentRequired.html +72 -0
  294. package/tests/pages/dependentSchemas.html +53 -0
  295. package/tests/pages/disable-button-in-object-editors.html +57 -0
  296. package/tests/pages/editor-show-validation-errors.html +54 -0
  297. package/tests/pages/enforce-const.html +168 -0
  298. package/tests/pages/error-messages.html +48 -0
  299. package/tests/pages/form-name.html +111 -0
  300. package/tests/pages/grid-strict.html +10 -13
  301. package/tests/pages/grid.html +4 -7
  302. package/tests/pages/if-else.html +58 -0
  303. package/tests/pages/if-then-else-allOf.html +118 -0
  304. package/tests/pages/if-then-else-disable-fields.html +70 -0
  305. package/tests/pages/if-then-else.html +65 -0
  306. package/tests/pages/if-then.html +58 -0
  307. package/tests/pages/inheritance.html +80 -0
  308. package/tests/pages/integer.html +17 -10
  309. package/tests/pages/issues/_template.html +50 -0
  310. package/tests/pages/issues/issue-gh-1133.html +64 -0
  311. package/tests/pages/issues/issue-gh-1158-2.html +189 -0
  312. package/tests/pages/issues/issue-gh-1158.html +50 -0
  313. package/tests/pages/issues/issue-gh-1164.html +71 -0
  314. package/tests/pages/issues/issue-gh-1165.html +63 -0
  315. package/tests/pages/issues/issue-gh-1165.json +8 -0
  316. package/tests/pages/issues/issue-gh-1171.html +39 -0
  317. package/tests/pages/issues/issue-gh-1211.html +1022 -0
  318. package/tests/pages/issues/issue-gh-1233-failing.html +46 -0
  319. package/tests/pages/issues/issue-gh-1233-passing.html +49 -0
  320. package/tests/pages/issues/issue-gh-1257.html +77 -0
  321. package/tests/pages/issues/issue-gh-1272.html +167 -0
  322. package/tests/pages/issues/issue-gh-1330.html +52 -0
  323. package/tests/pages/issues/issue-gh-1338.html +74 -0
  324. package/tests/pages/issues/issue-gh-1347.html +142 -0
  325. package/tests/pages/issues/issue-gh-1364.html +64 -0
  326. package/tests/pages/issues/issue-gh-1367.html +49 -0
  327. package/tests/pages/issues/issue-gh-1383.html +31 -0
  328. package/tests/pages/issues/issue-gh-1383.json +14 -0
  329. package/tests/pages/issues/issue-gh-1384.html +31 -0
  330. package/tests/pages/issues/issue-gh-1384.json +36 -0
  331. package/tests/pages/issues/issue-gh-1410.html +57 -0
  332. package/tests/pages/issues/issue-gh-1422.html +68 -0
  333. package/tests/pages/issues/issue-gh-1431.html +49 -0
  334. package/tests/pages/issues/issue-gh-1439.html +69 -0
  335. package/tests/pages/issues/issue-gh-1452.html +98 -0
  336. package/tests/pages/issues/issue-gh-1453.html +45 -0
  337. package/tests/pages/issues/issue-gh-1461.html +55 -0
  338. package/tests/pages/issues/issue-gh-1463.html +41 -0
  339. package/tests/pages/issues/issue-gh-1466.html +63 -0
  340. package/tests/pages/issues/issue-gh-1471.html +49 -0
  341. package/tests/pages/issues/issue-gh-1485.html +59 -0
  342. package/tests/pages/issues/issue-gh-1491.html +59 -0
  343. package/tests/pages/issues/issue-gh-1525.html +62 -0
  344. package/tests/pages/issues/issue-gh-1536.html +55 -0
  345. package/tests/pages/issues/issue-gh-1538.html +56 -0
  346. package/tests/pages/issues/issue-gh-1541.html +51 -0
  347. package/tests/pages/issues/issue-gh-1541.json +9 -0
  348. package/tests/pages/issues/issue-gh-1559.html +68 -0
  349. package/tests/pages/issues/issue-gh-1562.html +170 -0
  350. package/tests/pages/issues/issue-gh-1586.html +48 -0
  351. package/tests/pages/issues/issue-gh-1636.html +52 -0
  352. package/tests/pages/issues/issue-gh-795.html +58 -0
  353. package/tests/pages/issues/issue-gh-810.html +149 -0
  354. package/tests/pages/issues/issue-gh-812.html +113 -0
  355. package/tests/pages/issues/issue-gh-823-meta-schema.html +35 -0
  356. package/tests/pages/issues/issue-gh-848.html +81 -0
  357. package/tests/pages/keep_only_existing_values.html +81 -0
  358. package/tests/pages/load-events.html +61 -0
  359. package/tests/pages/maxContains.html +40 -0
  360. package/tests/pages/meta-schema.html +793 -0
  361. package/tests/pages/meta_schema.json +740 -0
  362. package/tests/pages/minContains.html +40 -0
  363. package/tests/pages/number.html +53 -6
  364. package/tests/pages/object-case-sensitive-property-search-false.html +42 -0
  365. package/tests/pages/object-case-sensitive-property-search-true.html +42 -0
  366. package/tests/pages/object-no-additional-properties.html +68 -0
  367. package/tests/pages/object-no-duplicated-id.html +70 -0
  368. package/tests/pages/object-required-properties.html +56 -20
  369. package/tests/pages/object-show-opt-in.html +111 -0
  370. package/tests/pages/object-with-dependencies-array.html +58 -0
  371. package/tests/pages/object-with-dependencies.html +62 -0
  372. package/tests/pages/object.html +5 -3
  373. package/tests/pages/oneof-2.html +91 -0
  374. package/tests/pages/oneof.html +105 -0
  375. package/tests/pages/opt-in-widget.html +134 -0
  376. package/tests/pages/option-dependencies.html +107 -0
  377. package/tests/pages/option-no_default_values.html +60 -0
  378. package/tests/pages/per-editor-options.html +44 -0
  379. package/tests/pages/placeholder-options.html +57 -0
  380. package/tests/pages/programmatic-changes.html +121 -0
  381. package/tests/pages/prompt-paste-max-length-reached.html +51 -0
  382. package/tests/pages/purify.html +66 -0
  383. package/tests/pages/range.html +62 -0
  384. package/tests/pages/read-only.html +60 -8
  385. package/tests/pages/ready.html +44 -0
  386. package/tests/pages/references.html +168 -0
  387. package/tests/pages/remove-false-properties.html +85 -0
  388. package/tests/pages/select-values.html +91 -0
  389. package/tests/pages/select.html +4 -3
  390. package/tests/pages/show-validation-errors.html +73 -0
  391. package/tests/pages/starrating.html +86 -0
  392. package/tests/pages/stepper-manual.html +59 -0
  393. package/tests/pages/stepper.html +61 -0
  394. package/tests/pages/string-ace-editor.html +7 -3
  395. package/tests/pages/string-cleave.html +48 -0
  396. package/tests/pages/string-custom-attributes.html +9 -6
  397. package/tests/pages/string-formats.html +54 -0
  398. package/tests/pages/string-formats2.html +59 -0
  399. package/tests/pages/{array-move-events.html → string-jodit-editor.html} +21 -29
  400. package/tests/pages/string-sceditor.html +9 -7
  401. package/tests/pages/string-simplemde-editor.html +83 -0
  402. package/tests/pages/switcher-option.html +69 -0
  403. package/tests/pages/table.html +4 -2
  404. package/tests/pages/tabs.html +1 -1
  405. package/tests/pages/themes.html +517 -0
  406. package/tests/pages/title-hidden.html +75 -0
  407. package/tests/pages/translate-property.html +248 -0
  408. package/tests/pages/urn.html +98 -0
  409. package/tests/pages/use-name-attributes.html +207 -0
  410. package/tests/pages/uuid.html +113 -0
  411. package/tests/pages/validation-messages.json +705 -0
  412. package/tests/pages/validation.html +20 -730
  413. package/tests/unit/.eslintrc +8 -0
  414. package/tests/unit/core.spec.js +320 -0
  415. package/tests/unit/defaults.spec.js +40 -0
  416. package/tests/unit/editor.spec.js +172 -0
  417. package/tests/unit/editors/array.spec.js +87 -0
  418. package/tests/unit/editors/object.spec.js +81 -0
  419. package/tests/unit/editors/table.spec.js +93 -0
  420. package/tests/unit/readme.md +35 -0
  421. package/tests/unit/schemaloader.spec.js +576 -0
  422. package/tests/unit/validator.spec.js +104 -0
  423. package/tests/unit/validators/ip-validator.spec.js +62 -0
  424. package/Gruntfile.js +0 -228
  425. package/dist/css/jsoneditor.min.css +0 -1
  426. package/dist/jsoneditor.js.map +0 -1
  427. package/dist/jsoneditor.min.js +0 -19
  428. package/dist/jsoneditor.min.js.map +0 -1
  429. package/src/class.js +0 -68
  430. package/src/editors/rating.js +0 -152
  431. package/src/ie9.js +0 -51
  432. package/src/intro.js +0 -23
  433. package/src/jquery.js +0 -64
  434. package/src/outro.js +0 -2
  435. package/src/themes/jsoneditor.barebones-theme.js +0 -60
@@ -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>
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE html>
2
- <html>
2
+ <html lang="en">
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
5
  <title>Advanced JSON Editor Example</title>
@@ -0,0 +1,91 @@
1
+ <!DOCTYPE html>
2
+ <html lang="de">
3
+ <head>
4
+ <meta charset="utf-8"/>
5
+ <title>anyOf</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
+ <h1>Test</h1>
14
+ <label for="value">Value</label>
15
+ <textarea class="form-control" id="value" rows="12" style="font-size: 12px; font-family: monospace;"></textarea>
16
+ <button id='set-value'>Set Value</button>
17
+ <div class='json-editor-container'></div>
18
+ </div>
19
+
20
+ <script>
21
+ var jsonEditorContainer = document.querySelector('.json-editor-container')
22
+ var value = document.querySelector('#value')
23
+ var setValue = document.querySelector('#set-value')
24
+ var schema = {
25
+ 'title': 'anyOf',
26
+ 'type': 'object',
27
+ 'properties': {
28
+ 'test': {
29
+ 'anyOf': [
30
+ {
31
+ 'type': 'string',
32
+ 'title': 'Value, string',
33
+ 'const': 'test'
34
+ },
35
+ {
36
+ 'type': 'boolean',
37
+ 'title': 'Value, boolean',
38
+ 'const': true
39
+ },
40
+ {
41
+ 'type': 'array',
42
+ 'title': 'Value, array',
43
+ 'const': [0]
44
+ },
45
+ {
46
+ 'type': 'object',
47
+ 'title': 'Value, object',
48
+ 'required': ['test'],
49
+ 'const': { 'test': 'test' }
50
+ },
51
+ {
52
+ 'type': 'number',
53
+ 'title': 'Value, number',
54
+ 'const': 1.1
55
+ },
56
+ {
57
+ 'type': 'integer',
58
+ 'title': 'Value, integer',
59
+ 'const': 1.1
60
+ },
61
+ {
62
+ 'type': 'null',
63
+ 'title': 'Value, null'
64
+ }
65
+ ]
66
+ }
67
+ }
68
+ }
69
+
70
+ var editor = new JSONEditor(jsonEditorContainer, {
71
+ schema: schema,
72
+ theme: 'bootstrap4',
73
+ show_errors: 'always',
74
+ iconlib: 'fontawesome5',
75
+ disable_collapse: true,
76
+ disable_edit_json: true,
77
+ disable_properties: true,
78
+ keep_oneof_values: false
79
+ })
80
+
81
+ editor.on('change', function () {
82
+ value.value = JSON.stringify(editor.getValue())
83
+ })
84
+
85
+ setValue.addEventListener('click', function () {
86
+ editor.setValue(JSON.parse(value.value))
87
+ })
88
+ </script>
89
+
90
+ </body>
91
+ </html>
@@ -0,0 +1,82 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8"/>
5
+ <title>anyOf</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
+ <h1>Test</h1>
14
+ <label for="value">value</label>
15
+ <textarea id="value" class="value form-control" rows="10"></textarea>
16
+ <button class='get-value'>Get Value</button>
17
+ <button class='set-value'>Set Value</button>
18
+ <div class='json-editor-container'></div>
19
+ </div>
20
+
21
+
22
+ <script>
23
+ var jsonEditorContainer = document.querySelector('.json-editor-container');
24
+ var value = document.querySelector('.value');
25
+
26
+ var schema = {
27
+ "title": "Person",
28
+ "type": "object",
29
+ "required": [
30
+ "age"
31
+ ],
32
+ "properties": {
33
+ "age": {
34
+ "anyOf": [
35
+ {
36
+ "type": "number",
37
+ "title": "Value, number"
38
+ },
39
+ {
40
+ "type": "string",
41
+ "title": "Value, string",
42
+ "minLength": 1
43
+ },
44
+ {
45
+ "type": "null",
46
+ "title": "Value, null"
47
+ }
48
+ ]
49
+ }
50
+ }
51
+ }
52
+
53
+ var editor = new JSONEditor(jsonEditorContainer, {
54
+ schema: schema,
55
+ theme: 'bootstrap4',
56
+ show_errors: 'always',
57
+ iconlib: 'fontawesome5',
58
+ object_layout: 'normal',
59
+ disable_collapse: true,
60
+ disable_edit_json: true,
61
+ disable_properties: true,
62
+ use_default_values: false,
63
+ required_by_default: true,
64
+ disable_array_reorder: true,
65
+ disable_array_delete_all_rows: true,
66
+ disable_array_delete_last_row: true,
67
+ keep_oneof_values: false
68
+ });
69
+
70
+ document.querySelector('.get-value').addEventListener('click', function () {
71
+ value.value = JSON.stringify(editor.getValue());
72
+ console.log(editor.getValue());
73
+ });
74
+
75
+ document.querySelector('.set-value').addEventListener('click', function () {
76
+ editor.setValue({number_range: 2})
77
+ });
78
+
79
+ </script>
80
+
81
+ </body>
82
+ </html>