@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
@@ -0,0 +1,577 @@
1
+ ## Base type editors
2
+
3
+ ### Hidden
4
+ **Description**
5
+ Base editor class for hidden values.
6
+
7
+ **Trigger:** ``"type": "hidden"``<br>
8
+ **Supported Types:** N/A<br>
9
+ **Global options:** N/A<br>
10
+ **Schema options:** N/A<br>
11
+ **Options callback** N/A<br>
12
+ **Required options:** none<br>
13
+ **Source:** src/editors/hidden.js
14
+ <br>
15
+
16
+ ### Integer
17
+ **Description**
18
+ Base editor class for integer values.
19
+
20
+ **Trigger:** ``"type": "integer"``<br>
21
+ **Supported Types:** N/A<br>
22
+ **Global options:** N/A<br>
23
+ **Schema options:** N/A<br>
24
+ **Options callback** N/A<br>
25
+ **Required options:** none<br>
26
+ **Source:** src/editors/integer.js
27
+ <br>
28
+
29
+ ### Number
30
+ **Description**
31
+ Base editor class for numeric values.
32
+
33
+ **Trigger:** ``"type": "number"``<br>
34
+ **Supported Types:** N/A<br>
35
+ **Global options:** N/A<br>
36
+ **Schema options:** N/A<br>
37
+ **Options callback** N/A<br>
38
+ **Required options:** none<br>
39
+ **Source:** src/editors/number.js
40
+ <br>
41
+
42
+ ### String
43
+ **Description**
44
+ Base editor class for string values.
45
+
46
+ **Trigger:** ``"type": "string"``<br>
47
+ **Supported Types:** N/A<br>
48
+ **Global options:** N/A<br>
49
+ **Schema options:** N/A<br>
50
+ **Options callback** N/A<br>
51
+ **Required options:** none<br>
52
+ **Source:** src/editors/string.js
53
+ <br>
54
+
55
+ ## Special format editors
56
+
57
+ ### ACE
58
+ **Description**
59
+ Ace is an embeddable code editor written in JavaScript. It matches the features and performance of native editors such as Sublime, Vim and TextMate.<br>
60
+ For configuration options, see the [ACE homepage](https://ace.c9.io/://).
61
+
62
+ **Triggers:** <details><summary>Click to expand!</summary>
63
+ ``"format": "actionscript"``<br>
64
+ ``"format": "batchfile"``<br>
65
+ ``"format": "c"``<br>
66
+ ``"format": "c++"``<br>
67
+ ``"format": "cpp"``<br>
68
+ ``"format": "coffee"``<br>
69
+ ``"format": "csharp"``<br>
70
+ ``"format": "css"``<br>
71
+ ``"format": "dart"``<br>
72
+ ``"format": "django"``<br>
73
+ ``"format": "ejs"``<br>
74
+ ``"format": "erlang"``<br>
75
+ ``"format": "golang"``<br>
76
+ ``"format": "groovy"``<br>
77
+ ``"format": "handlebars"``<br>
78
+ ``"format": "haskell"``<br>
79
+ ``"format": "haxe"``<br>
80
+ ``"format": "html"``<br>
81
+ ``"format": "ini"``<br>
82
+ ``"format": "jade"``<br>
83
+ ``"format": "java"``<br>
84
+ ``"format": "javascript"``<br>
85
+ ``"format": "json"``<br>
86
+ ``"format": "less"``<br>
87
+ ``"format": "lisp"``<br>
88
+ ``"format": "lua"``<br>
89
+ ``"format": "makefile"``<br>
90
+ ``"format": "matlab"``<br>
91
+ ``"format": "mysql"``<br>
92
+ ``"format": "objectivec"``<br>
93
+ ``"format": "pascal"``<br>
94
+ ``"format": "perl"``<br>
95
+ ``"format": "pgsql"``<br>
96
+ ``"format": "php"``<br>
97
+ ``"format": "python"``<br>
98
+ ``"format": "prql"``<br>
99
+ ``"format": "r"``<br>
100
+ ``"format": "ruby"``<br>
101
+ ``"format": "rust"``<br>
102
+ ``"format": "sass"``<br>
103
+ ``"format": "scala"``<br>
104
+ ``"format": "scss"``<br>
105
+ ``"format": "smarty"``<br>
106
+ ``"format": "sql"``<br>
107
+ ``"format": "sqlserver"``<br>
108
+ ``"format": "stylus"``<br>
109
+ ``"format": "svg"``<br>
110
+ ``"format": "typescript"``<br>
111
+ ``"format": "twig"``<br>
112
+ ``"format": "vbscript"``<br>
113
+ ``"format": "xml"``<br>
114
+ ``"format": "yaml"``<br>
115
+ ``"format": "zig"
116
+ </details>
117
+
118
+ **Supported Types:** string<br>
119
+ **Global options:** ``JSONEditor.defaults.options.ace``<br>
120
+ **Schema options:** ``options.ace``<br>
121
+ **Options callback** ``JSONEditor.defaults.callbacks.ace``<br>
122
+ **Required options:** none<br>
123
+ **Source:** src/editors/ace.js
124
+
125
+ *Note: if you use a CDN version of the ACE library, you need to set the ACE ``basePath`` variable to the path of the CDN library. You can do it like this. (Tested with jsdelivr.net)*
126
+ ````javascript
127
+ var aceScript = document.querySelector('script[src*="ace-builds"]');
128
+ if (aceScript.src && window.ace) {
129
+ window.ace.config.set('basePath', aceScript.src.replace(/(.*\/)[^\/]+$/g, "$1"));
130
+ }
131
+ ````
132
+ <br>
133
+
134
+ ### Autocomplete
135
+ **Description**
136
+ Accessible autocomplete component for vanilla JavaScript.<br>
137
+ For configuration options, see the [Autocomplete homepage](https://autocomplete.trevoreyre.com/#/javascript-component).
138
+
139
+ **Trigger:** ``"format": "autocomplete"``<br>
140
+ **Supported Types:** string<br>
141
+ **Global options:** ``JSONEditor.defaults.options.autocomplete``<br>
142
+ **Schema options:** ``options.autocomplete``<br>
143
+ **Options callback** ``JSONEditor.defaults.callbacks.autocomplete``<br>
144
+ **Required options:** ``search`` (callback)<br>
145
+ **Source:** src/editors/autocomplete.js
146
+ <br>
147
+
148
+ #### Example
149
+
150
+ Javascript
151
+
152
+ ```
153
+ window.JSONEditor.defaults.callbacks = {
154
+ "autocomplete": {
155
+ // This is callback functions for the "autocomplete" editor
156
+ // In the schema you refer to the callback function by key
157
+ // Note: 1st parameter in callback is ALWAYS a reference to the current editor.
158
+ // So you need to add a variable to the callback to hold this (like the
159
+ // "jseditor_editor" variable in the examples below.)
160
+
161
+ // Setup API calls
162
+ "search_za": function search(jseditor_editor, input) {
163
+ var url = '/eiao/api/json-object?filter[or][][data_json][LIKE]=' + encodeURI(input) +'&filter[or][][uuid][LIKE]=' + encodeURI(input);;
164
+
165
+ return new Promise(function (resolve) {
166
+ if (input.length < 2) {
167
+ return resolve([]);
168
+ }
169
+
170
+ fetch(url).then(function (response) {
171
+ return response.json();
172
+ }).then(function (data) {
173
+ resolve(data);
174
+ });
175
+ });
176
+ },
177
+ "renderResult_za": function(jseditor_editor, result, props) {
178
+ return ['<li ' + props + '>',
179
+ '<div class="eiao-object-title">' + result.data_json + '</div>',
180
+ '<div class="eiao-object-snippet">' + result.uuid.substring(0,7) + ' <small>' + result.schema_uuid.substring(0,5) + '<small></div>',
181
+ '</li>'].join('');
182
+ },
183
+ "getResultValue_za": function getResultValue(jseditor_editor, result) {
184
+ return result.uuid;
185
+ }
186
+ }
187
+ };
188
+ ```
189
+
190
+ JSON-schema
191
+
192
+ ```json
193
+ {
194
+ "items": {
195
+ "title": "UUID",
196
+ "type": "string",
197
+ "description": "reference (autocomplete)",
198
+ "format": "autocomplete",
199
+ "options": {
200
+ "autocomplete": {
201
+ "search": "search_za",
202
+ "getResultValue": "getResultValue_za",
203
+ "renderResult": "renderResult_za",
204
+ "autoSelect": true
205
+ }
206
+ }
207
+ },
208
+ "title": "Project references",
209
+ "type": "array"
210
+ }
211
+ ```
212
+
213
+ ### Checkbox
214
+ **Description**
215
+ Checkbox format.
216
+
217
+ **Trigger:** ``"format": "checkbox"`` + enum<br>
218
+ **Supported Types:** string, integer, number, boolean<br>
219
+ **Global options:** N/A<br>
220
+ **Schema options:** N/A<br>
221
+ **Options callback** N/A<br>
222
+ **Required options:** none<br>
223
+ **Source:** src/editors/checkbox.js
224
+ <br>
225
+
226
+ ### Cleave
227
+ **Description**
228
+ Format your &lt;input/&gt; content when you are typing.
229
+ * Credit card number formatting
230
+ * Phone number formatting
231
+ * Date formatting
232
+ * Numeral formatting
233
+ * Custom delimiter, prefix and blocks pattern
234
+
235
+ For configuration options, see the [Cleave homepage](https://nosir.github.io/cleave.js/).
236
+
237
+ **Trigger:** ``options.cleave``<br>
238
+ **Supported Types:** string, number, integer, boolean<br>
239
+ **Global options:** ``JSONEditor.defaults.options.cleave``<br>
240
+ **Schema options:** ``options.cleave``<br>
241
+ **Options callback** ``JSONEditor.defaults.callbacks.cleave``<br>
242
+ **Required options:** none<br>
243
+ **Source:** src/editors/string.js
244
+ <br>
245
+
246
+ ### IMask
247
+ **Description**
248
+ Javascript input mask.
249
+
250
+ For configuration options, see the [IMask homepage](https://imask.js.org/).
251
+
252
+ **Trigger:** ``options.imask<br>
253
+ **Supported Types:** string, number, integer, boolean<br>
254
+ **Global options:** ``JSONEditor.defaults.options.imask``<br>
255
+ **Schema options:** ``options.imask``<br>
256
+ **Options callback** ``JSONEditor.defaults.callbacks.imask``<br>
257
+ **Required options:** none<br>
258
+ **Special options:** ``returnUnmasked`` when true, returns the unmasked value<br>
259
+ **Source:** src/editors/string.js
260
+
261
+ IMask configuration format is not "JSON friendly" as it is possible to set the mask to an object ("Date", "Number", "IMask.MaskedEnum" and "IMask.MaskedRange") or a regular expression. In order for those to work, you will have to enclose them in quotes. And for regular expressions, you will also have to prefix the quoted regular expression with the keyword "regex:"
262
+
263
+
264
+ Example of an iMask mask config:
265
+ ````javascript
266
+ mask: [
267
+ {
268
+ mask: 'RGB,RGB,RGB',
269
+ blocks: {
270
+ RGB: {
271
+ mask: IMask.MaskedRange,
272
+ from: 0,
273
+ to: 255
274
+ }
275
+ }
276
+ },
277
+ {
278
+ mask: /^#[0-9a-f]{0,6}$/i
279
+ }
280
+ ]
281
+ ````
282
+ The same config "converted" to JSON-Editor format:
283
+
284
+ ````javascript
285
+ "mask": [{
286
+ "mask": "RGB,RGB,RGB",
287
+ "blocks": {
288
+ "RGB": {
289
+ "mask": "IMask.MaskedRange",
290
+ "from": 0,
291
+ "to": 255
292
+ }
293
+ }
294
+ },
295
+ {
296
+ "mask": "regex:/^#[0-9a-f]{0,6}$/i"
297
+ }]
298
+ ````
299
+
300
+
301
+ <br>
302
+
303
+ ### Flatpickr
304
+ **Description**
305
+ Lightweight and powerful datetime picker.<br>
306
+ For configuration options, see the [Flatpickr homepage](https://flatpickr.js.org/).
307
+
308
+ **Trigger:** ``"format": "datetime-local"``, ``"format": "date"`` or ``"format": "time"``<br>
309
+ **Supported Types:** string, integer<br>
310
+ **Global options:** ``JSONEditor.defaults.options.flatpickr<br>
311
+ **Schema options:** ``options.flatpickr<br>
312
+ **Options callback** ``JSONEditor.defaults.callbacks.flatpickr<br>
313
+ **Required options:** none<br>
314
+ **Source:** src/editors/datetime.js
315
+ <br>
316
+
317
+ ### Jodit
318
+ **Description**
319
+ An excellent WYSIWYG editor written in pure TypeScript without the use of additional libraries.<br>
320
+ For configuration options, see the [Jodit homepage](https://xdsoft.net/jodit/).
321
+
322
+ **Trigger:** ``"format": "jodit"``<br>
323
+ **Supported Types:** string<br>
324
+ **Global options:** ``JSONEditor.defaults.options.jodit``<br>
325
+ **Schema options:** ``options.jodit``<br>
326
+ **Options callback** ``JSONEditor.defaults.callbacks.jodit``<br>
327
+ **Required options:** none<br>
328
+ **Source:** src/editors/jodit.js
329
+ <br>
330
+
331
+ ### SCEditor
332
+ **Description**
333
+ A lightweight, open source, WYSIWYG BBCode and (X)HTML editor.<br>
334
+ For configuration options, see the [SCEditor homepage](https://www.sceditor.com/).
335
+
336
+ **Triggers:** ``"format": "xhtml"`` or ``"format": "bbcode"``<br>
337
+ **Supported Types:** string<br>
338
+ **Global options:** ``JSONEditor.defaults.options.sceditor``<br>
339
+ **Schema options:** ``options.sceditor``<br>
340
+ **Options callback** ``JSONEditor.defaults.callbacks.sceditor``<br>
341
+ **Required options:** none<br>
342
+ **Source:** src/editors/sceditor.js
343
+ <br>
344
+
345
+ ### Select2
346
+ **Description**
347
+ Select2 gives you a customizable select box with support for searching, tagging, remote data sets, infinite scrolling, and many other highly used options.<br>
348
+ For configuration options, see the [Select2 homepage](https://select2.org/).
349
+
350
+ **Trigger:** ``"format": "select2"``<br>
351
+ **Supported Types:** string, number, integer, boolean (using enum)<br>
352
+ **Global options:** ``JSONEditor.defaults.options.select2``<br>
353
+ **Schema options:** ``options.select2``<br>
354
+ **Options callback** ``JSONEditor.defaults.callbacks.select2``<br>
355
+ **Required options:** none<br>
356
+ **Source:** src/editors/select2.js and src/editors/array/select2.js
357
+ <br>
358
+
359
+ ### Selectize
360
+ **Description**
361
+ Selectize is the hybrid of a textbox and &lt;select&gt; box. It's jQuery-based and it's useful for tagging, contact lists, country selectors, and so on..<br>
362
+ For configuration options, see the [Selectize homepage](https://selectize.github.io/selectize.js/).
363
+
364
+ **Trigger:** ``"format": "selectize"``<br>
365
+ **Supported Types:** string, number, integer, boolean (using enum)<br>
366
+ **Global options:** ``JSONEditor.defaults.options.selectize``<br>
367
+ **Schema options:** ``options.selectize``<br>
368
+ **Options callback** ``JSONEditor.defaults.callbacks.selectize``<br>
369
+ **Required options:** none<br>
370
+ **Source:** src/editors/selectize.js and src/editors/array/selectize.js
371
+ <br>
372
+
373
+ ### SimpleMDE
374
+ **Description**
375
+ SimpleMDE is a simple, embeddable, and beautiful JS markdown editor.<br>
376
+ For configuration options, see the [SimpleMDE homepage](https://simplemde.com/).
377
+
378
+ **Trigger:** ``"format": "markdown"``<br>
379
+ **Supported Types:** string<br>
380
+ **Global options:** ``JSONEditor.defaults.options.simplemde``<br>
381
+ **Schema options:** ``options.simplemde``<br>
382
+ **Options callback** ``JSONEditor.defaults.callbacks.simplemde``<br>
383
+ **Required options:** none<br>
384
+ **Special options:** ``autorefresh`` when true, fixes problem with Chrome and editor inside Tabs<br>
385
+ **Source:** src/editors/simplemde.js
386
+ <br>
387
+
388
+ ### Starrating
389
+ **Description**
390
+ Star based rating.
391
+
392
+ **Trigger:** ``"format": "rating"``<br>
393
+ **Supported Types:** string, integer<br>
394
+ **Global options:** ``JSONEditor.defaults.options.rating<br>
395
+ **Schema options:** ``options.rating<br>
396
+ **Options callback** N/A<br>
397
+ **Required options:** none<br>
398
+ **Source:** src/editors/starrating.js
399
+ <br>
400
+
401
+ ### Upload
402
+ **Description**
403
+ Upload files to server.
404
+
405
+ **Trigger:** ``"format": "upload"``<br>
406
+ **Supported Types:** string<br>
407
+ **Global options:** ``JSONEditor.defaults.options.upload<br>
408
+ **Schema options:** ``options.upload<br>
409
+ **Options callback** ``JSONEditor.defaults.callbacks.upload<br>
410
+ **Required options:** ``upload_handler``<br>
411
+ **Source:** src/editors/upload.js
412
+ <br>
413
+
414
+
415
+ | Option | Type | Description | Default value |
416
+ |--|--|--|--|
417
+ | title | string | Title of the Browse button | "Browse"
418
+ | auto_upload | boolean | Trigger file upload button automatically | false
419
+ | allow_reupload | boolean | Allow reupload of file (overrides the readonly state) | false
420
+ | hide_input | boolean | Hide the Browse button and name display (Only works if 'enable_drag_drop' is true) | false
421
+ | enable_drag_drop | boolean | Enable Drag&Drop uploading. | false
422
+ | drop_zone_top | boolean | Position of dropzone. **true**=before button input, **false**=after button input | false
423
+ | drop_zone_text | string | Text displayed in dropzone box | "Drag & Drop file here"
424
+ | alt_drop_zone | string | Alternate DropZone DOM Selector (Can be created inside another property) |
425
+ | mime_type | string/array | If set, restrict upload to mime type(s) |
426
+ | max_upload_size | integer | Maximum file size allowed. 0 = no limit | 0
427
+ | upload_handler | function | Callback function for handling uploads to server |
428
+ <br>
429
+
430
+
431
+ ### UUID
432
+ **Description**
433
+ UUID format with autogenerated uuid value. Value must be a valid [RFC 4122](https://www.ietf.org/rfc/rfc4122.txt) uuid (Universally Unique IDentifier). If field has no initial value (startval) then a random uuid will be autogenerated.
434
+
435
+ **Trigger:** ``"format": "uuid"``<br>
436
+ **Supported Types:** string<br>
437
+ **Global options:** N/A<br>
438
+ **Schema options:** N/A<br>
439
+ **Options callback** N/A<br>
440
+ **Required options:** none<br>
441
+ **Source:** src/editors/uuid.js
442
+ <br>
443
+
444
+ ### Picker
445
+ **Description**
446
+ Optional support for color format using vanilla JS color picker with alpha selection.
447
+
448
+ **Trigger:** ``"format": "color"``<br>
449
+ **Supported Types:** string<br>
450
+ **Global options:** JSONEditor.defaults.options.colorpicker<br>
451
+ **Schema options:** options.colorpicker<br>
452
+ **Options callback** JSONEditor.defaults.callbacks.colorpicker<br>
453
+ **Required options:** none<br>
454
+ **Source:** src/editors/colorpicker.js
455
+ <br>
456
+
457
+ ## Non-Active editors (Editors that return no results)
458
+
459
+ ### Button
460
+ **Description**
461
+ The Button editor is a special editor that doesn't return any results. It can be used to trigger various JavaScript features, such as a Submit button.
462
+
463
+ **Trigger:** ``"type": "button"``<br>
464
+ **Supported Types:** N/A<br>
465
+ **Global options:** N/A<br>
466
+ **Schema options:** text, action, icon, validated<br>
467
+ **Options callback** window.JSONEditor.defaults.callbacks.button<br>
468
+ **Required options:** action<br>
469
+ **Source:** src/editors/button.js
470
+ <br>
471
+
472
+ ### Info
473
+ **Description**
474
+ The Info editor is a special editor that doesn't return any results. It can be used to insert textual blocks inside the form.
475
+ Only properties available are title and description (bodytext).
476
+
477
+ **Trigger:** ``"type": "info"``<br>
478
+ **Supported Types:** N/A<br>
479
+ **Global options:** N/A<br>
480
+ **Schema options:** N/A<br>
481
+ **Options callback** N/A<br>
482
+ **Required options:** none<br>
483
+ **Source:** src/editors/info.js
484
+ <br>
485
+
486
+
487
+ ## Option callback functions
488
+ The JSON Schema format doesn't support function values, but some 3rd-Party libraries has callback functions as options.
489
+ To enable/use those type of options, you can create global callback functions and then refer to then by name in the schema options.
490
+
491
+ *Note: The 1st parameter passed to the callback function is ALWAYS the current edtor instance. So you need to modify the callback functions to accommodate this.*
492
+
493
+ ### Example option callback for Cleave.js
494
+ <details><summary>Click to expand!</summary>
495
+ This example defines a callback function named "showCreditCardType" and shows how it is used inside the schema options.
496
+
497
+ **JavaScript:**
498
+ ````javascript
499
+ // Add Cleave.js options namespace to Global callback list
500
+ window.JSONEditor.defaults.callbacks.cleave = {
501
+ // 1st parameter in callback is ALWAYS a reference to current editor instance.
502
+ "showCreditCardType": function(jseditor_editor, type) {
503
+ var el = jseditor_editor.element.nextSibling;
504
+ if (el) el.innerHTML = 'Card type: <strong>' + type + '</strong>';
505
+ }
506
+ };
507
+ ````
508
+ **Schema:**
509
+ ````json
510
+ {
511
+ "type": "object",
512
+ "properties": {
513
+ "creditcard": {
514
+ "type": "string",
515
+ "title": "Credit Card",
516
+ "description": " ",
517
+ "options": {
518
+ "inputAttributes": {
519
+ "placeholder": "enter credit card number"
520
+ },
521
+ "cleave": {
522
+ "creditCard": true,
523
+ "onCreditCardTypeChanged": "showCreditCardType"
524
+ }
525
+ }
526
+ }
527
+ }
528
+ }
529
+ ````
530
+ </details>
531
+
532
+ <br>
533
+
534
+
535
+
536
+ # Themes
537
+
538
+ Themes have own options for changing various aspects of the display.
539
+
540
+ ## Bootstrap 4
541
+
542
+ | Option | Default | Description
543
+ | ------------- | ------ | -----
544
+ | `input_size` | `normal` | Changes `input` size, can be `normal`, `small` or `large`
545
+ | `custom_forms` | `false` | Apply Bootstrap custom forms
546
+ | `object_indent` | `true` | Indent nested object elements (use nested `.card` layout)
547
+ | `object_background` | `bg-light` | Bootstrap 4 card background [modifier class](https://getbootstrap.com/docs/4.1/getting-started/introduction/)
548
+ | `object_text` | `''` | Bootstrap 4 card text color modifier class [modifier class](https://getbootstrap.com/docs/4.1/getting-started/introduction/)
549
+ | `table_border` | `false` | Add border to array "table" row and cells
550
+ | `table_zebrastyle` | `false` | Add "zebra style" to array "table" rows
551
+ | `tooltip` | `bootstrap` | how to display tooltips (infoText). Can be `browser` for native `[title]`, `css` for simple CSS Styling, or `bootstrap` for TWBS/Popper.js handling
552
+
553
+ ## Spectre
554
+
555
+ | Option | Default | Description
556
+ | ------------- | ------ | -----
557
+ | `input_size` | `normal` | Changes `input` size, can be `normal`, `small` or `large`
558
+ | `label_bold` | `true` | Labels in bold
559
+ | `object_indent` | `false` | Indent nested object elements
560
+ | `object_border` | `false` |Add border around object elements
561
+ | `align_bottom` | `false` | Align elements to bottom of flex container
562
+ | `table_border` | `false` | Add border to array "table" row and cells
563
+ | `table_zebrastyle` | `false` | Add "zebra style" to array "table" rows
564
+
565
+ ## Tailwind
566
+
567
+ | Option | Default | Description
568
+ | ------------- | ------ | -----
569
+ | `input_size` | `normal` | Changes `input` size, can be `normal`, `small` or `large`
570
+ | `label_bold` | `false` | Labels in bold
571
+ | `object_panel_default` | `true` | Indicates whether to use rules as default or alternate style
572
+ | `object_indent` | `false` | Indent nested object elements
573
+ | `object_border` | `false` |Add border around object elements
574
+ | `align_bottom` | `false` | Align elements to bottom of flex container
575
+ | `table_border` | `false` | Add border to array "table" row and cells
576
+ | `table_hdiv` | `false` | Add bottom-border to array "table" cells
577
+ | `table_zebrastyle` | `false` | Add "zebra style" to array "table" rows
package/UPGRADING.md ADDED
@@ -0,0 +1,46 @@
1
+ # Upgrading
2
+
3
+ ## From 1.x to 2.x
4
+
5
+ ### Option `description`
6
+
7
+ In order to display HTML in descriptions, include "purify" ahead of "jsoneditor". With CDN eg:
8
+
9
+ ```
10
+ <script src="https://cdn.jsdelivr.net/npm/dompurify@latest/dist/purify.min.js"></script>
11
+ <script src="https://cdn.jsdelivr.net/npm/@json-editor/json-editor@latest/dist/jsoneditor.min.js"></script>
12
+ ```
13
+
14
+ ### Format `select`
15
+
16
+ With usage of *selectize* plugin, same applies for other plugins
17
+
18
+ ```
19
+ "format": "select"
20
+ ```
21
+
22
+ needs to be changed to
23
+
24
+ ```
25
+ "format": "selectize"
26
+ ```
27
+
28
+ and
29
+
30
+ ```
31
+ "options": {
32
+ "selectize_options": {
33
+ ...
34
+ }
35
+ }
36
+ ```
37
+
38
+ to
39
+
40
+ ```
41
+ "options": {
42
+ "selectize": {
43
+ ...
44
+ }
45
+ }
46
+ ```
@@ -0,0 +1,55 @@
1
+ const glob = require('glob')
2
+ const fs = require('fs')
3
+ const path = require('path')
4
+ const css2json = require('css2json')
5
+
6
+ class CssToJson {
7
+ constructor (params) {
8
+ this.pattern = params.pattern
9
+ }
10
+
11
+ apply (compiler) {
12
+ compiler.hooks.entryOption.tap('CssToJson', (context, entry) => {
13
+ glob(this.pattern, (err, files) => {
14
+ if (err) throw err
15
+ files.forEach(this.convert)
16
+ })
17
+ })
18
+ }
19
+
20
+ convert (file) {
21
+ const target =
22
+ path.join(path.dirname(path.resolve(file)), path.basename(file, '.css')) + '.css.js'
23
+
24
+ if (fs.existsSync(target) && (fs.statSync(file).mtime < fs.statSync(target).mtime)) {
25
+ return
26
+ }
27
+
28
+ const css = fs.readFileSync(file, { encoding: 'utf-8' })
29
+ const rules = Object.entries(css2json(css))
30
+ .map(
31
+ ([selector, block]) =>
32
+ `"${formatSelector(selector)}":"${concatBlock(block)}"`
33
+ )
34
+ .join(',')
35
+ fs.writeFileSync(target, `/* eslint-disable */\nexport default {${rules}}\n/* eslint-enable */\n`)
36
+ }
37
+ }
38
+
39
+ function formatSelector (selector) {
40
+ return _fixQuote(selector).replace(/\r?\n/g, ' ')
41
+ }
42
+
43
+ function concatBlock (value) {
44
+ const block = Object.entries(value)
45
+ .map(([property, value]) => `${property}:${encodeURIComponent(value)}`)
46
+ .join(';')
47
+
48
+ return _fixQuote(block)
49
+ }
50
+
51
+ function _fixQuote (str) {
52
+ return str.replace(/"/g, "'")
53
+ }
54
+
55
+ module.exports = CssToJson