@json-editor/json-editor 1.3.5 → 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 (436) 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 +63 -9
  8. package/CHANGELOG.md +1152 -0
  9. package/CONTRIBUTING.md +44 -5
  10. package/Makefile +26 -0
  11. package/README.md +765 -138
  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 -11013
  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 +161 -0
  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 +606 -423
  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 +156 -0
  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 +385 -306
  61. package/src/editor.js +761 -520
  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 +108 -86
  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 +190 -0
  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 +1209 -1007
  93. package/src/editors/radio.js +128 -0
  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 -426
  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 -264
  141. package/src/themes/bootstrap3.css +53 -0
  142. package/src/themes/bootstrap3.css.js +3 -0
  143. package/src/themes/bootstrap3.js +356 -259
  144. package/src/themes/bootstrap4.css +89 -0
  145. package/src/themes/bootstrap4.css.js +3 -0
  146. package/src/themes/bootstrap4.js +744 -234
  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 +539 -465
  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 -166
  156. package/src/themes/materialize.js +263 -291
  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 +914 -551
  165. package/src/validators/ip-validator.js +51 -0
  166. package/tests/Dockerfile +3 -0
  167. package/tests/README.md +27 -6
  168. package/tests/codeceptjs/codecept.json +29 -5
  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 -68
  174. package/tests/codeceptjs/editors/advanced_test.js +12 -10
  175. package/tests/codeceptjs/editors/array_any_of_test.js +50 -0
  176. package/tests/codeceptjs/editors/array_test.js +935 -677
  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 -8
  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 -71
  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 -9
  187. package/tests/codeceptjs/editors/number_test.js +75 -67
  188. package/tests/codeceptjs/editors/object_test.js +337 -28
  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 -16
  195. package/tests/codeceptjs/editors/select_test.js +46 -23
  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 +108 -101
  199. package/tests/codeceptjs/editors/table-confirm-delete_test.js +60 -55
  200. package/tests/codeceptjs/editors/tabs_test.js +14 -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 +23 -17
  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 +54 -0
  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 +308 -0
  301. package/tests/pages/grid.html +281 -0
  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 +261 -0
  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 -226
  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/docs/demo.html +0 -646
  430. package/src/class.js +0 -68
  431. package/src/editors/rating.js +0 -152
  432. package/src/ie9.js +0 -51
  433. package/src/intro.js +0 -23
  434. package/src/jquery.js +0 -64
  435. package/src/outro.js +0 -2
  436. package/src/themes/jsoneditor.barebones-theme.js +0 -60
package/docs/basic.html CHANGED
@@ -7,10 +7,10 @@
7
7
  </head>
8
8
  <body>
9
9
  <h1>Basic JSON Editor Example</h1>
10
-
10
+
11
11
  <div id='editor_holder'></div>
12
12
  <button id='submit'>Submit (console.log)</button>
13
-
13
+
14
14
  <script>
15
15
  // Initialize the editor with a JSON schema
16
16
  var editor = new JSONEditor(document.getElementById('editor_holder'),{
@@ -18,7 +18,8 @@
18
18
  "type": "string",
19
19
  "enum": [
20
20
  "male",
21
- "female"
21
+ "female",
22
+ "other"
22
23
  ]
23
24
  }
24
25
  }
@@ -0,0 +1,86 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>JSON Editor Choices Integration Example</title>
6
+ <script src="https://cdn.jsdelivr.net/npm/@json-editor/json-editor@latest/dist/jsoneditor.min.js"></script>
7
+ <script src="https://cdn.jsdelivr.net/npm/choices.js/public/assets/scripts/choices.min.js"></script>
8
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/choices.js/public/assets/styles/choices.min.css">
9
+ <style>
10
+ .choices > * {
11
+ box-sizing: border-box;
12
+ }
13
+ </style>
14
+ </head>
15
+ <body>
16
+ <h1>JSON Editor Choices Integration Example</h1>
17
+
18
+ <p style='margin-bottom:20px;'>This example demonstrates JSONEditor's integration with Choices</p>
19
+
20
+ <div id='editor_holder'></div>
21
+ <button id='submit'>Submit (console.log)</button>
22
+
23
+ <script>
24
+ // Initialize the editor with a JSON schema
25
+ var editor = new JSONEditor(document.getElementById('editor_holder'),{
26
+ schema: {
27
+ type: "object",
28
+ title: "Text",
29
+ required: ["fontSize","color","font","weight","possibleFonts"],
30
+ properties: {
31
+ fontSize: {
32
+ format: "choices",
33
+ type: "integer",
34
+ enum: [10,11,12,14,16,18,20,22,24,36,48,60,72,100],
35
+ default: 24,
36
+ options: {
37
+ choices_options: {
38
+ shouldSort: false
39
+ }
40
+ }
41
+ },
42
+ color: {
43
+ type: "string",
44
+ format: "choices",
45
+ enum: ["black","red","green","blue","yellow","orange","purple","brown","white","cyan","magenta"]
46
+ },
47
+ font: {
48
+ type: "string",
49
+ format: "choices",
50
+ enumSource: "possible_fonts",
51
+ watch: {
52
+ "possible_fonts": "root.possibleFonts"
53
+ }
54
+ },
55
+ weight: {
56
+ type: "string",
57
+ format: "choices",
58
+ enum: ["normal","bold","bolder","lighter"],
59
+ options: {
60
+ enum_titles: ["Normal (400)","Bold (700)","Bolder (900)","Lighter (200)"]
61
+ }
62
+ },
63
+ possibleFonts: {
64
+ type: "array",
65
+ format: "choices",
66
+ uniqueItems: true,
67
+ items: {
68
+ type: "string"
69
+ },
70
+ default: ["Arial","Times","Helvetica","Comic Sans"]
71
+ }
72
+ }
73
+ },
74
+ startval: {
75
+ color: "red"
76
+ }
77
+ });
78
+
79
+ // Hook up the submit button to log to the console
80
+ document.getElementById('submit').addEventListener('click',function() {
81
+ // Get the value from the editor
82
+ console.log(editor.getValue());
83
+ });
84
+ </script>
85
+ </body>
86
+ </html>
package/docs/cleave.html CHANGED
@@ -10,25 +10,17 @@
10
10
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
11
11
 
12
12
  <!-- jQuery -->
13
- <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
14
-
15
- <!-- Bootstrap3 -->
16
- <!-- Latest compiled and minified CSS -->
17
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
18
- <!-- Optional theme -->
19
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" >
20
- <!-- Latest compiled and minified JavaScript -->
21
- <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" ></script>
22
-
23
- <!-- Foundation
24
- <script type="text/javascript" src=""></script>
25
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/foundation/6.2.4/foundation.min.css" />
26
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/foundicons/3.0.0/foundation-icons.css" />
27
- -->
13
+ <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
14
+
15
+ <!-- Bootstrap4 -->
16
+ <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
17
+
18
+ <!-- fontawesome5 -->
19
+ <link rel='stylesheet' href='https://use.fontawesome.com/releases/v5.6.1/css/all.css'>
28
20
 
29
21
  <!-- Cleave.js -->
30
- <script src="https://cdn.jsdelivr.net/npm/cleave.js@1.4.7/dist/cleave.min.js" integrity="sha256-/vtm6dO6rn9i2XRWyrQX8uvtO0qHrkYiEuI5hNvFHHk=" crossorigin="anonymous"></script>
31
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/cleave.js@1.4.7/dist/addons/cleave-phone.dk.js"></script>
22
+ <script src="https://cdn.jsdelivr.net/npm/cleave.js@1.5.8/dist/cleave.min.js" crossorigin="anonymous"></script>
23
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/cleave.js@1.5.8/dist/addons/cleave-phone.dk.js"></script>
32
24
  <!-- JSON-Editor -->
33
25
  <script src="https://cdn.jsdelivr.net/npm/@json-editor/json-editor@latest/dist/jsoneditor.min.js"></script>
34
26
 
@@ -57,9 +49,9 @@
57
49
  }
58
50
 
59
51
  var options = {
60
- "theme": "bootstrap3",
52
+ "theme": "bootstrap4",
61
53
  "template": "handlebars",
62
- "iconlib": "bootstrap3",
54
+ "iconlib": "fontawesome5",
63
55
  "schema": {
64
56
  "title": "Cleave.js editor examples",
65
57
  "id": "test",
@@ -0,0 +1,194 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Colorpicker editor Example</title>
5
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
6
+
7
+ <!-- Enable responsive viewport -->
8
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
+
10
+ <!-- fontawesome5 -->
11
+ <link rel='stylesheet' href='https://use.fontawesome.com/releases/v5.6.1/css/all.css'>
12
+
13
+ <!-- JSON-Editor -->
14
+ <script src="https://cdn.jsdelivr.net/npm/@json-editor/json-editor@latest/dist/jsoneditor.min.js"></script>
15
+
16
+ <!-- vanilla picker -->
17
+ <script src="https://cdn.jsdelivr.net/npm/vanilla-picker@2.10.1/dist/vanilla-picker.min.js" integrity="sha256-3fnRmJ7NTcR4T37E9L7tvEHuRHMGBdvnvlGq2CbRw80=" crossorigin="anonymous"></script>
18
+ <style type="text/css">
19
+ body {
20
+ margin: 1em;
21
+ }
22
+
23
+ </style>
24
+ </head>
25
+ <body>
26
+ <h1>Colorpicker editor Example</h1>
27
+
28
+ <div id='editor_holder'></div>
29
+ <button id='submit'>Submit (console.log)</button>
30
+ <button id='enable'>Disable</button>
31
+
32
+
33
+ <script>
34
+
35
+ // Initialize the editor
36
+ var editor = new JSONEditor(document.getElementById('editor_holder'), {
37
+ theme: "html",
38
+ iconlib: "fontawesome5",
39
+ disable_collapse: true,
40
+ disable_edit_json: true,
41
+ disable_properties: true,
42
+ //no_additional_properties: true,
43
+ schema: {
44
+ 'type': 'object',
45
+ 'title': 'color input use colorpicker',
46
+ 'format': 'grid',
47
+ 'properties': {
48
+ 'rgb': {
49
+ 'title': 'use rgb format',
50
+ 'type': 'string',
51
+ 'format': 'color',
52
+ 'default': 'rgb(0,0,0)',
53
+ 'options': {
54
+ 'colorpicker': {
55
+ 'editorFormat': 'rgb'
56
+ }
57
+ }
58
+ },
59
+ 'rgba': {
60
+ 'title': 'use rgba format',
61
+ 'type': 'string',
62
+ 'format': 'color',
63
+ 'default': 'rgba(0,0,0,1)',
64
+ 'options': {
65
+ 'colorpicker': {
66
+ 'editorFormat': 'rgb',
67
+ 'alpha': true
68
+ }
69
+ }
70
+ },
71
+ 'hsl': {
72
+ 'title': 'use hsl format',
73
+ 'type': 'string',
74
+ 'format': 'color',
75
+ 'default': 'hsl(0,0,0)',
76
+ 'options': {
77
+ 'colorpicker': {
78
+ 'editorFormat': 'hsl'
79
+ }
80
+ }
81
+ },
82
+ 'hsla': {
83
+ 'title': 'use hsla format',
84
+ 'type': 'string',
85
+ 'format': 'color',
86
+ 'default': 'hsl(0,0,0,1)',
87
+ 'options': {
88
+ 'colorpicker': {
89
+ 'editorFormat': 'hsl',
90
+ 'alpha': true
91
+ }
92
+ }
93
+ },
94
+ 'hex': {
95
+ 'title': 'use hex format',
96
+ 'type': 'string',
97
+ 'format': 'color',
98
+ 'default': '#000000'
99
+ },
100
+ 'hexa': {
101
+ 'title': 'use hexa format',
102
+ 'type': 'string',
103
+ 'format': 'color',
104
+ 'default': '#000000',
105
+ 'options': {
106
+ 'colorpicker': {
107
+ 'alpha': true
108
+ }
109
+ }
110
+ },
111
+ 'inline': {
112
+ 'title': 'inline colorpicker',
113
+ 'type': 'string',
114
+ 'format': 'color',
115
+ 'default': '#000000',
116
+ 'options': {
117
+ 'colorpicker': {
118
+ 'popup': false
119
+ }
120
+ }
121
+ },
122
+ 'top': {
123
+ 'title': 'position: top',
124
+ 'type': 'string',
125
+ 'format': 'color',
126
+ 'default': '#000000',
127
+ 'options': {
128
+ 'colorpicker': {
129
+ 'popup': 'top'
130
+ }
131
+ }
132
+ },
133
+ 'right': {
134
+ 'title': 'position: right',
135
+ 'type': 'string',
136
+ 'format': 'color',
137
+ 'default': '#000000',
138
+ 'options': {
139
+ 'colorpicker': {
140
+ 'popup': 'right'
141
+ }
142
+ }
143
+ },
144
+ 'left': {
145
+ 'title': 'position: left',
146
+ 'type': 'string',
147
+ 'format': 'color',
148
+ 'default': '#000000',
149
+ 'options': {
150
+ 'colorpicker': {
151
+ 'popup': 'left'
152
+ }
153
+ }
154
+ }
155
+ }
156
+ }
157
+ });
158
+
159
+ function validate() {
160
+ var errors = editor.validate();
161
+ console.log(editor.getValue());
162
+ if(errors.length) {
163
+ // errors is an array of objects, each with a `path`, `property`, and `message` parameter
164
+ // `property` is the schema keyword that triggered the validation error (e.g. "minLength")
165
+ // `path` is a dot separated path into the JSON object (e.g. "root.path.to.field")
166
+ editor.root.showValidationErrors(errors);
167
+ console.log('ERRORS', errors);
168
+ }
169
+ else {
170
+ // It's valid!
171
+ console.log('OK');
172
+ }
173
+ }
174
+
175
+ // Hook up the submit button to log to the console
176
+ document.getElementById('submit').addEventListener('click',function() {
177
+ // Get the value from the editor
178
+ validate();
179
+ });
180
+ document.getElementById('enable').addEventListener('click',function(e) {
181
+ // Get the value from the editor
182
+ if(e.target.innerText == 'Disable') {
183
+ e.target.innerText = "Enable"
184
+ editor.disable()
185
+ } else {
186
+ e.target.innerText = 'Disable'
187
+ editor.enable()
188
+ }
189
+
190
+
191
+ });
192
+ </script>
193
+ </body>
194
+ </html>
@@ -3,65 +3,67 @@
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
5
  <title>CSS Integration JSON Editor Example</title>
6
-
7
- <!-- Foundation CSS framework (Bootstrap and jQueryUI also supported) -->
8
- <link rel='stylesheet' href='//cdn.jsdelivr.net/foundation/5.0.2/css/foundation.min.css'>
9
- <!-- Font Awesome icons (Bootstrap, Foundation, and jQueryUI also supported) -->
10
- <link rel='stylesheet' href='//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.0.3/css/font-awesome.css'>
6
+
7
+ <link rel="stylesheet" href="https://unpkg.com/spectre.css/dist/spectre.min.css">
8
+ <link rel="stylesheet" href="https://unpkg.com/spectre.css/dist/spectre-exp.min.css">
9
+ <link rel="stylesheet" href="https://unpkg.com/spectre.css/dist/spectre-icons.min.css">
11
10
 
12
11
  <script src="https://cdn.jsdelivr.net/npm/@json-editor/json-editor@latest/dist/jsoneditor.min.js"></script>
13
-
12
+
14
13
  <script>
15
14
  // Set the default CSS theme and icon library globally
16
- JSONEditor.defaults.theme = 'foundation5';
17
- JSONEditor.defaults.iconlib = 'fontawesome4';
15
+ JSONEditor.defaults.theme = 'spectre';
16
+ JSONEditor.defaults.iconlib = 'spectre';
18
17
  </script>
18
+ <style>
19
+ .container {
20
+ max-width:960px;
21
+ margin: 0 auto
22
+ }
23
+ </style>
19
24
  </head>
20
25
  <body>
21
- <div class='row'>
22
- <div class='medium-12 columns'>
23
- <h1>CSS Integration JSON Editor Example</h1>
26
+ <div class='container'>
27
+ <div class='columns'>
28
+ <h1 class='col-md-12'>CSS Integration JSON Editor Example</h1>
24
29
  </div>
25
- </div>
26
- <div class='row'>
27
- <div class='medium-6 columns'>
28
- <p>JSON Editor supports these popular CSS frameworks:</p>
29
- <ul>
30
- <li>Bootstrap 2</li>
31
- <li>Bootstrap 3</li>
32
- <li>Foundation 3</li>
33
- <li>Foundation 4</li>
34
- <li>Foundation 5 (shown here)</li>
35
- <li>jQuery UI</li>
36
- </ul>
30
+ <div class='columns'>
31
+ <div class='column col-md-6'>
32
+ <p>JSON Editor supports these popular CSS frameworks:</p>
33
+ <ul>
34
+ <li>bootstrap 3</li>
35
+ <li>bootstrap 4</li>
36
+ <li>bootstrap 5</li>
37
+ <li>spectre.css (shown here)</li>
38
+ <li>tailwind</li>
39
+ </ul>
40
+ </div>
41
+ <div class='column col-md-6'>
42
+ <p>JSON Editor supports these popular icon libraries:</p>
43
+ <ul>
44
+ <li>jQueryUI</li>
45
+ <li>Font Awesome 3</li>
46
+ <li>Font Awesome 4</li>
47
+ <li>Font Awesome 5</li>
48
+ <li>spectre.css (shown here)</li>
49
+ </ul>
50
+ </div>
37
51
  </div>
38
- <div class='medium-6 columns'>
39
- <p>JSON Editor supports these popular icon libraries:</p>
40
- <ul>
41
- <li>Bootstrap 2 Glyphicons</li>
42
- <li>Bootstrap 3 Glyphicons</li>
43
- <li>Foundicons 2</li>
44
- <li>Foundicons 3</li>
45
- <li>jQueryUI</li>
46
- <li>Font Awesome 3</li>
47
- <li>Font Awesome 4 (shown here)</li>
48
- </ul>
52
+ <div class='columns'>
53
+ <div class='column col-md-12'>
54
+ <button id='submit' class='tiny'>Submit (console.log)</button>
55
+ <button id='restore' class='secondary tiny'>Restore to Default</button>
56
+ <span id='valid_indicator' class='label'></span>
57
+ </div>
49
58
  </div>
50
- </div>
51
- <div class='row'>
52
- <div class='medium-12-columns'>
53
- <button id='submit' class='tiny'>Submit (console.log)</button>
54
- <button id='restore' class='secondary tiny'>Restore to Default</button>
55
- <span id='valid_indicator' class='label'></span>
59
+ <div class='columns'>
60
+ <div class='column col-md-12' id='editor_holder'></div>
56
61
  </div>
57
62
  </div>
58
- <div class='row'>
59
- <div id='editor_holder' class='medium-12 columns'></div>
60
- </div>
61
-
63
+
62
64
  <script>
63
65
  // This is the starting value for the editor
64
- // We will use this to seed the initial editor
66
+ // We will use this to seed the initial editor
65
67
  // and to provide a "Restore to Default" button.
66
68
  var starting_value = {
67
69
  name: "John Smith",
@@ -84,41 +86,41 @@
84
86
  }
85
87
  ]
86
88
  };
87
-
89
+
88
90
  // Initialize the editor
89
91
  var editor = new JSONEditor(document.getElementById('editor_holder'),{
90
92
  // Enable fetching schemas via ajax
91
93
  ajax: true,
92
-
94
+
93
95
  // The schema for the editor
94
96
  schema: {
95
97
  $ref: "person.json",
96
98
  format: "grid"
97
99
  },
98
-
100
+
99
101
  // Seed the form with a starting value
100
102
  startval: starting_value
101
103
  });
102
-
104
+
103
105
  // Hook up the submit button to log to the console
104
106
  document.getElementById('submit').addEventListener('click',function() {
105
107
  // Get the value from the editor
106
108
  console.log(editor.getValue());
107
109
  });
108
-
110
+
109
111
  // Hook up the Restore to Default button
110
112
  document.getElementById('restore').addEventListener('click',function() {
111
113
  editor.setValue(starting_value);
112
114
  });
113
-
114
- // Hook up the validation indicator to update its
115
+
116
+ // Hook up the validation indicator to update its
115
117
  // status whenever the editor changes
116
118
  editor.on('change',function() {
117
119
  // Get an array of errors from the validator
118
120
  var errors = editor.validate();
119
-
121
+
120
122
  var indicator = document.getElementById('valid_indicator');
121
-
123
+
122
124
  // Not valid
123
125
  if(errors.length) {
124
126
  indicator.className = 'label alert';
@@ -0,0 +1,92 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8"/>
5
+ <title>Custom Editor Example</title>
6
+ <script src="https://cdn.jsdelivr.net/npm/@json-editor/json-editor@latest/dist/jsoneditor.js"></script>
7
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
8
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script>
9
+ </head>
10
+ <body>
11
+
12
+ <div class="container">
13
+ <h1>Custom Editor Example (switch)</h1>
14
+ <p>Bootstrap 5 style switch editor</p>
15
+
16
+ <div id='editor_holder'></div>
17
+ <br>
18
+ <br>
19
+ <p>Value:</p>
20
+ <pre id="value"></pre>
21
+ </div>
22
+
23
+ <script>
24
+ /* --------------------------------------------- create custom editor class */
25
+
26
+ class CustomEditor extends JSONEditor.AbstractEditor {
27
+ build () {
28
+ super.build()
29
+
30
+ // control
31
+ this.control = document.createElement('div')
32
+ this.control.classList.add('form-check')
33
+ this.control.classList.add('form-switch')
34
+
35
+ // input
36
+ this.input = document.createElement('input')
37
+ this.input.setAttribute('type', 'checkbox')
38
+ this.input.setAttribute('id', this.path + 'test')
39
+ this.input.classList.add('form-check-input')
40
+
41
+ // label
42
+ this.label = document.createElement('label')
43
+ this.label.setAttribute('for', this.path + 'test')
44
+ this.label.classList.add('form-check-label')
45
+ this.label.textContent = this.schema.title
46
+
47
+ // appends
48
+ this.container.appendChild(this.control)
49
+ this.control.appendChild(this.input)
50
+ this.control.appendChild(this.label)
51
+ }
52
+
53
+ postBuild () {
54
+ super.postBuild()
55
+
56
+ this.input.addEventListener('change', e => {
57
+ e.preventDefault()
58
+ e.stopPropagation()
59
+ this.value = e.currentTarget.checked
60
+ this.onChange(true)
61
+ })
62
+ }
63
+ }
64
+
65
+ /* ---------------------------------------------- add class to editors list */
66
+
67
+ JSONEditor.defaults.editors.customEditor = CustomEditor
68
+
69
+ /* ----------------------------------------------------------- add resolver */
70
+
71
+ JSONEditor.defaults.resolvers.unshift(function (schema) {
72
+ if (schema.type === 'boolean' && schema.format === 'custom') {
73
+ return 'customEditor'
74
+ }
75
+ })
76
+
77
+ /* ----------------------------------------------------- instanciate editor */
78
+
79
+ var editor = new JSONEditor(document.getElementById('editor_holder'), {
80
+ schema: {
81
+ 'type': 'boolean',
82
+ 'format': 'custom',
83
+ 'title': 'Custom'
84
+ }
85
+ })
86
+
87
+ editor.on('change', function () {
88
+ document.querySelector('#value').textContent = JSON.stringify(editor.getValue(), null, 2)
89
+ })
90
+ </script>
91
+ </body>
92
+ </html>