@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
@@ -1,118 +1,125 @@
1
- var assert = require('assert');
2
- var value = '';
3
-
4
- Feature('string');
5
-
6
- Scenario('should have correct initial value', async (I) => {
7
- I.amOnPage('string-ace-editor.html');
8
- I.click('.get-value');
9
- value = await I.grabValueFrom('.debug');
10
- assert.equal(value, '[]');
11
- });
12
-
13
- Scenario('should have coerent values', async (I) => {
14
- I.amOnPage('string-ace-editor.html');
15
- I.click('Add item');
16
- I.see('item 1');
17
- I.seeElement('.ace_editor');
18
-
19
- I.click('.ace_editor');
20
- I.pressKey('__YELLOW__');
21
- I.see('__YELLOW__');
22
-
23
- I.click('.get-value');
24
- value = await I.grabValueFrom('.debug');
25
- assert.equal(value, JSON.stringify([{"editor":"__YELLOW__"}]));
26
- });
27
-
28
- Scenario('should have correct initial value', async (I) => {
29
- I.amOnPage('string-sceditor.html');
30
- I.click('.get-value');
31
- value = await I.grabValueFrom('.debug');
32
- assert.equal(value, '[]');
33
- });
34
-
35
- Scenario('editor value and String editor should have coerent values', async (I) => {
36
- I.amOnPage('string-sceditor.html');
37
- I.click('Add item');
38
- I.see('item 1');
1
+ /* global Feature Scenario */
2
+
3
+ var assert = require('assert')
4
+
5
+ Feature('string')
6
+
7
+ Scenario('ace editor should have correct initial value', async ({ I }) => {
8
+ I.amOnPage('string-ace-editor.html')
9
+ I.click('.get-value')
10
+ I.waitForValue('.debug', '[]')
11
+ })
12
+
13
+ Scenario('should have coerent values', async ({ I }) => {
14
+ I.amOnPage('string-ace-editor.html')
15
+ I.click('Add item')
16
+ I.see('item 1')
17
+ I.seeElement('.ace_editor')
18
+ I.click('.ace_editor')
19
+ I.pressKeys('__YELLOW__')
20
+ I.click('.ace_editor')
21
+ I.see('__YELLOW__')
22
+
23
+ I.click('.get-value')
24
+ I.waitForValue('.debug', JSON.stringify([{ editor: '__YELLOW__' }]))
25
+ })
26
+
27
+ Scenario('sceditor should have correct initial value', async ({ I }) => {
28
+ I.amOnPage('string-sceditor.html')
29
+ I.click('.get-value')
30
+ I.waitForValue('.debug', '[]')
31
+ })
32
+
33
+ Scenario('editor value and String editor should have coerent values @optional', async ({ I }) => {
34
+ I.amOnPage('string-sceditor.html')
35
+ I.click('Add item')
36
+ I.see('item 1')
39
37
 
40
38
  // enters first iframe, writes text on the body and then exits
41
- I.switchTo('[data-schemapath="root.0.editor"] iframe');
42
- I.click('body');
43
- I.pressKey('__YELLOW__');
44
- I.see('__YELLOW__');
45
- I.switchTo();
46
-
47
- I.click('.get-value');
48
- value = await I.grabValueFrom('.debug');
49
- assert.equal(value, JSON.stringify([{"editor":"<p>__YELLOW__<br></p>"}]));
50
- });
51
-
52
- Scenario('Should work correctly in arrays @optional', async (I) => {
53
- I.amOnPage('string-sceditor.html');
54
- I.click('Add item');
55
- I.click('Add item');
56
- I.see('item 1');
57
- I.see('item 2');
39
+ I.switchTo(0)
40
+ I.click('body')
41
+ I.pressKeys('__YELLOW__')
42
+ I.see('__YELLOW__')
43
+ I.switchTo()
44
+
45
+ I.click('.get-value')
46
+ I.waitForValue('.debug', JSON.stringify([{ editor: '<p>__YELLOW__</p>' }]))
47
+ })
48
+
49
+ Scenario('Should work correctly in arrays @optional', async ({ I }) => {
50
+ I.amOnPage('string-sceditor.html')
51
+ I.click('Add item')
52
+ I.click('Add item')
53
+ I.see('item 1')
54
+ I.see('item 2')
58
55
 
59
56
  // enters first iframe, writes text on the body and then exits
60
- I.switchTo('[data-schemapath="root.0.editor"] iframe');
61
- I.click('body');
62
- I.pressKey('__YELLOW__');
63
- I.see('__YELLOW__');
64
- I.switchTo();
57
+ I.switchTo(0)
58
+ I.click('body')
59
+ I.pressKeys('__YELLOW__')
60
+ I.see('__YELLOW__')
61
+ I.switchTo()
65
62
 
66
63
  // enters first iframe and read text
67
- I.switchTo('[data-schemapath="root.0.editor"] iframe');
68
- I.see('__YELLOW__');
69
- I.switchTo();
64
+ I.switchTo(0)
65
+ I.see('__YELLOW__')
66
+ I.switchTo()
70
67
 
71
- // enters secod iframe, writes text on the body and then exits
72
- I.switchTo('[data-schemapath="root.1.editor"] iframe');
73
- I.click('body');
74
- I.pressKey('__BLUE__');
75
- I.see('__BLUE__');
76
- I.switchTo();
68
+ // enters second iframe, writes text on the body and then exits
69
+ I.switchTo(1)
70
+ I.click('body')
71
+ I.pressKeys('__BLUE__')
72
+
73
+ I.see('__BLUE__')
74
+ I.switchTo()
77
75
 
78
76
  // enters second iframe and read text
79
- I.switchTo('[data-schemapath="root.1.editor"] iframe');
80
- I.see('__BLUE__');
81
- I.switchTo();
77
+ I.switchTo(1)
78
+ I.see('__BLUE__')
79
+ I.switchTo()
82
80
 
83
- I.click('.get-value');
84
- value = await I.grabValueFrom('.debug');
85
- assert.equal(value, JSON.stringify([{"editor":"<p>__YELLOW__<br></p>"},{"editor":"<p>__BLUE__<br></p>"}]));
81
+ I.click('.get-value')
82
+ I.waitForValue('.debug', JSON.stringify([{ editor: '<p>__YELLOW__<br></p>' }, { editor: '<p>__BLUE__<br></p>' }]))
86
83
 
87
- I.click('.json-editor-btn-movedown');
88
- I.click('.get-value');
89
- value = await I.grabValueFrom('.debug');
90
- assert.equal(value, JSON.stringify([{"editor":"<p>__BLUE__<br></p>"},{"editor":"<p>__YELLOW__<br></p>"}]));
84
+ I.click('.json-editor-btn-movedown')
85
+ I.click('.get-value')
86
+ I.waitForValue('.debug', JSON.stringify([{ editor: '<p>__BLUE__<br></p>' }, { editor: '<p>__YELLOW__<br></p>' }]))
91
87
 
92
88
  // the last 2 tests will fail because Sceditors iframes loose their content when the iframe is reloaded.
93
89
 
94
90
  // enters first iframe and read text
95
- I.switchTo('[data-schemapath="root.0.editor"] iframe');
96
- I.see('__BLUE__');
97
- I.switchTo();
91
+ I.switchTo(0)
92
+ I.see('__BLUE__')
93
+ I.switchTo()
98
94
 
99
95
  // enters second iframe and read text
100
- I.switchTo('[data-schemapath="root.1.editor"] iframe');
101
- I.see('__YELLOW__');
102
- I.switchTo();
103
-
104
- });
105
-
106
- Scenario('should be readonly if specified and not disabled', async (I) => {
107
- I.amOnPage('read-only.html');
108
- I.seeElement('[name="root[string]"]');
109
- value = await I.grabAttributeFrom('[name="root[string]"]', 'readonly');
110
- assert.equal(value, 'true');
111
- });
112
-
113
- Scenario('should have a custom attribute with custom value', async (I) => {
114
- I.amOnPage('string-custom-attributes.html');
115
- I.seeElement('[name="root[custom_attributes]"]');
116
- value = await I.grabAttributeFrom('[name="root[custom_attributes]"]', 'custom-attribute');
117
- assert.equal(value, 'custom-value');
118
- });
96
+ I.switchTo(1)
97
+ I.see('__YELLOW__')
98
+ I.switchTo()
99
+ })
100
+
101
+ Scenario('should be readonly if specified and not disabled @readOnly', async ({ I }) => {
102
+ I.amOnPage('read-only.html')
103
+ I.seeReadOnlyAttribute('[name="root[string]"]')
104
+ })
105
+
106
+ Scenario('should have a custom attribute with custom value', async ({ I }) => {
107
+ I.amOnPage('string-custom-attributes.html')
108
+ I.seeElement('[name="root[custom_attributes]"]')
109
+ assert.strictEqual(await I.grabAttributeFrom('[name="root[custom_attributes]"]', 'custom-attribute'), 'custom-value')
110
+ })
111
+
112
+ Scenario('should work with cleave.js library', async ({ I }) => {
113
+ I.amOnPage('string-cleave.html')
114
+ I.seeElement('[name="root[cleave_test]"]')
115
+ await I.fillField('[name="root[cleave_test]"]', '12345678901234567890')
116
+ I.click('.get-value')
117
+ I.waitForValue('.debug', JSON.stringify({ cleave_test: '1234.567.890-1234' }))
118
+ })
119
+
120
+ Scenario('ace editor should have correct initial @prompt-paste-max-length-reached', async ({ I }) => {
121
+ I.amOnPage('prompt-paste-max-length-reached.html')
122
+ I.waitForElement('.je-ready')
123
+ I.click('#paste')
124
+ I.seeInPopup('Pasted text exceeded maximum length of 5 and will be clipped.')
125
+ })
@@ -1,60 +1,65 @@
1
- var assert = require('assert');
1
+ /* global Feature Scenario */
2
2
 
3
- Feature('table');
3
+ Feature('table')
4
4
 
5
- Scenario('should have correct initial value', async (I) => {
6
- I.amOnPage('table.html');
7
- I.click('.get-value');
8
- value = await I.grabValueFrom('.debug');
9
- assert.equal(value, '[]');
10
- });
5
+ Scenario('should have correct initial value', async ({ I }) => {
6
+ I.amOnPage('table.html')
7
+ I.click('.get-value')
8
+ I.waitForValue('.debug', '[]')
9
+ })
11
10
 
12
- Scenario('should ask for confirmation on node delete', async (I) => {
13
- I.amOnPage('table.html');
14
- I.click('Add Node');
15
- I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
16
- I.click('[data-schemapath="root.0"] .json-editor-btn-delete');
17
- I.seeInPopup('Are you sure you want to remove this node?');
18
- I.cancelPopup();
19
- I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
20
- I.click('[data-schemapath="root.0"] .json-editor-btn-delete');
21
- I.seeInPopup('Are you sure you want to remove this node?');
22
- I.acceptPopup();
23
- I.dontSeeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
24
- });
11
+ Scenario('should ask for confirmation on node delete', async ({ I }) => {
12
+ I.amOnPage('table.html')
13
+ I.click('Add Node')
14
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
15
+ I.amCancellingPopups()
16
+ I.click('[data-schemapath="root.0"] .json-editor-btn-delete')
17
+ I.seeInPopup('Are you sure you want to remove this item?')
18
+ I.cancelPopup()
19
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
20
+ I.amAcceptingPopups()
21
+ I.click('[data-schemapath="root.0"] .json-editor-btn-delete')
22
+ I.seeInPopup('Are you sure you want to remove this item?')
23
+ I.acceptPopup()
24
+ I.dontSeeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
25
+ })
25
26
 
26
- Scenario('should ask for confirmation on node delete last', async (I) => {
27
- I.amOnPage('table.html');
28
- I.click('Add Node');
29
- I.click('Add Node');
30
- I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
31
- I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete');
32
- I.click('Delete Last Node');
33
- I.seeInPopup('Are you sure you want to remove this node?');
34
- I.cancelPopup();
35
- I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
36
- I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete');
37
- I.click('Delete Last Node');
38
- I.seeInPopup('Are you sure you want to remove this node?');
39
- I.acceptPopup();
40
- I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
41
- I.dontSeeElement('[data-schemapath="root.1"] .json-editor-btn-delete');
42
- });
27
+ Scenario('should ask for confirmation on node delete last', async ({ I }) => {
28
+ I.amOnPage('table.html')
29
+ I.click('Add Node')
30
+ I.click('Add Node')
31
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
32
+ I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
33
+ I.amCancellingPopups()
34
+ I.click('Delete Last Node')
35
+ I.seeInPopup('Are you sure you want to remove this item?')
36
+ I.cancelPopup()
37
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
38
+ I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
39
+ I.amAcceptingPopups()
40
+ I.click('Delete Last Node')
41
+ I.seeInPopup('Are you sure you want to remove this item?')
42
+ I.acceptPopup()
43
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
44
+ I.dontSeeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
45
+ })
43
46
 
44
- Scenario('should ask for confirmation on node delete all', async (I) => {
45
- I.amOnPage('table.html');
46
- I.click('Add Node');
47
- I.click('Add Node');
48
- I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
49
- I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete');
50
- I.click('Delete All');
51
- I.seeInPopup('Are you sure you want to remove this node?');
52
- I.cancelPopup();
53
- I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
54
- I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete');
55
- I.click('Delete All');
56
- I.seeInPopup('Are you sure you want to remove this node?');
57
- I.acceptPopup();
58
- I.dontSeeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
59
- I.dontSeeElement('[data-schemapath="root.1"] .json-editor-btn-delete');
60
- });
47
+ Scenario('should ask for confirmation on node delete all', async ({ I }) => {
48
+ I.amOnPage('table.html')
49
+ I.click('Add Node')
50
+ I.click('Add Node')
51
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
52
+ I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
53
+ I.amCancellingPopups()
54
+ I.click('Delete All')
55
+ I.seeInPopup('Are you sure you want to remove this item?')
56
+ I.cancelPopup()
57
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
58
+ I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
59
+ I.amAcceptingPopups()
60
+ I.click('Delete All')
61
+ I.seeInPopup('Are you sure you want to remove this item?')
62
+ I.acceptPopup()
63
+ I.dontSeeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
64
+ I.dontSeeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
65
+ })
@@ -1,13 +1,16 @@
1
+ /* global Feature Scenario */
1
2
 
2
- Feature('Tabs');
3
+ const { DEFAULT_WAIT_TIME } = require('../test-config')
3
4
 
4
- Scenario('test top-tabs', (I) => {
5
- I.amOnPage('tabs.html');
6
- I.click('Add Person');
7
- I.see('1 -');
8
- I.see('validation failed')
9
- I.fillField('root[1][name]', 'Somebody')
10
- //pause();
11
- I.click('body')
12
- I.see('validation passed')
13
- });
5
+ Feature('Tabs')
6
+
7
+ Scenario('test @top-tabs', ({ I }) => {
8
+ I.amOnPage('tabs.html')
9
+ I.waitForElement('[data-schemapath="root"] .json-editor-btn-add')
10
+ I.click('[data-schemapath="root"] .json-editor-btn-add')
11
+ I.waitForText('1 -', DEFAULT_WAIT_TIME)
12
+ I.waitForText('validation failed', DEFAULT_WAIT_TIME)
13
+ I.fillField('root[1][name]', 'Somebody')
14
+ I.pressKey('Tab')
15
+ I.waitForText('validation passed', DEFAULT_WAIT_TIME)
16
+ })
@@ -0,0 +1,48 @@
1
+ /* global Feature Scenario */
2
+
3
+ const assert = require('assert')
4
+
5
+ Feature('uuid')
6
+
7
+ Scenario('should have initial value matching uuid @uuid', async ({ I }) => {
8
+ I.amOnPage('uuid.html')
9
+ I.wait(1)
10
+ const value = await I.grabValueFrom('[name="root[uuid]"]')
11
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)), true)
12
+ })
13
+
14
+ Scenario('should have initial value matching uuid in arrays @uuid', async ({ I }) => {
15
+ I.click('Add uuid string array item')
16
+ I.click('Add uuid string array item')
17
+ const value0 = await I.grabValueFrom('[name="root[uuidStringArray][0]"]')
18
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value0)), true)
19
+ const value1 = await I.grabValueFrom('[name="root[uuidStringArray][1]"]')
20
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value1)), true)
21
+ })
22
+
23
+ Scenario('should have initial value matching uuid in arrays of objects with @uuid', async ({ I }) => {
24
+ I.click('Add uuid object array item')
25
+ I.click('Add uuid object array item')
26
+ const value0 = await I.grabValueFrom('[name="root[uuidObjectArray][0][uuid]"]')
27
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value0)), true)
28
+ const value1 = await I.grabValueFrom('[name="root[uuidObjectArray][1][uuid]"]')
29
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value1)), true)
30
+ })
31
+
32
+ Scenario('should have initial value matching uuid in arrays (table) of strings with @uuid', async ({ I }) => {
33
+ I.click('Add uuid string table item')
34
+ I.click('Add uuid string table item')
35
+ const value0 = await I.grabValueFrom('[name="root[uuidStringTable][0]')
36
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value0)), true)
37
+ const value1 = await I.grabValueFrom('[name="root[uuidStringTable][1]')
38
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value1)), true)
39
+ })
40
+
41
+ Scenario('should have initial value matching uuid in arrays (table) of objects with @uuid', async ({ I }) => {
42
+ I.click('Add uuid object table item')
43
+ I.click('Add uuid object table item')
44
+ const value0 = await I.grabValueFrom('[name="root[uuidObjectTable][0][uuid]"]')
45
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value0)), true)
46
+ const value1 = await I.grabValueFrom('[name="root[uuidObjectTable][1][uuid]"]')
47
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value1)), true)
48
+ })
@@ -1,12 +1,16 @@
1
+ /* global Feature Scenario */
2
+
1
3
  // Note: validation.html has its own way of testing; this test simply tests if the output of that test conforms to the expected output
2
4
 
3
- Feature('Validations');
5
+ const { DEFAULT_WAIT_TIME } = require('../test-config')
6
+
7
+ Feature('Validations')
4
8
 
5
- Scenario('test validations in validation.html', (I) => {
6
- I.amOnPage('validation.html');
7
- var numberOfTestItemsExpected = 129;
8
- I.waitForElement("#output div:nth-child("+numberOfTestItemsExpected+")", 10);
9
- I.seeNumberOfElements("#output div", numberOfTestItemsExpected);
10
- I.see("success");
11
- I.dontSee('Fail');
12
- });
9
+ Scenario('test validations in validation.html', ({ I }) => {
10
+ I.amOnPage('validation.html')
11
+ const numberOfTestItemsExpected = 158
12
+ I.waitForElement('#output div:nth-child(' + numberOfTestItemsExpected + ')', DEFAULT_WAIT_TIME)
13
+ I.seeNumberOfElements('#output div', numberOfTestItemsExpected)
14
+ I.see('success')
15
+ I.dontSee('fail')
16
+ })
@@ -0,0 +1,9 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('GitHub issue 1133')
4
+
5
+ Scenario('GitHub issue 1133 should remain fixed @issue-1133', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1133.html')
7
+ I.waitForElement('.je-ready')
8
+ I.waitForValue('#value', '{"SaveDataMask":"DP"}')
9
+ })
@@ -0,0 +1,10 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('issues')
4
+
5
+ Scenario('GitHub issue 1165 should remain fixed @issue-1165 @schemaloader', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1165.html')
7
+ I.waitForText('Add item')
8
+ I.click('Add item')
9
+ I.waitForText('external-schema')
10
+ })
@@ -0,0 +1,8 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('issues')
4
+
5
+ Scenario('GitHub issue 1158 should remain fixed @issue-1158', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1158.html')
7
+ I.seeElement('[name="root[name]"]')
8
+ })
@@ -0,0 +1,9 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('GitHub issue 1164')
4
+
5
+ Scenario('GitHub issue 1164 should remain fixed @issue-1164', ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1164.html')
7
+ I.waitForElement('.je-ready')
8
+ I.waitForValue('#value', '{"arrayEnumSelect":["one"],"stringEnumRadio":"one","numberEnumRadio":1.1,"integerEnumRadio":1}')
9
+ })
@@ -0,0 +1,11 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('issues')
4
+
5
+ Scenario('GitHub issue 1171 should remain fixed @issue-1171', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1171.html')
7
+ I.waitForElement('.je-ready')
8
+ I.dontSeeCheckedAttribute('[id="root[1]"]')
9
+ I.checkOption('[id="root[1]"]')
10
+ I.dontSeeCheckedAttribute('[id="root[0]"]')
11
+ })
@@ -0,0 +1,17 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('issues')
4
+
5
+ Scenario('GitHub issue 1211 should remain fixed @issue-1211 @schemaloader', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1211.html')
7
+ I.waitForText('Rule collection')
8
+ I.waitForText('SSID & MAC Groups')
9
+ I.waitForText('Certificate Extensions')
10
+ I.click('Rule')
11
+ I.waitForText('Generic Allow Rule')
12
+ I.click('Group')
13
+ I.waitForText('Group 1')
14
+ I.click('Extension')
15
+ I.waitForText('OID')
16
+ I.waitForValue('#value', '{"rules":[{"type":"any","name":"","description":"","enabled":false}],"groups":[{"type":"ssid-group","ssid-group":[],"name":"","description":""}],"certificate-extensions":[{"name":"","oid":""}],"trustedroots":[],"intuneids":[]}')
17
+ })
@@ -0,0 +1,11 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('GitHub issue 1257')
4
+
5
+ Scenario('GitHub issue 1257 should remain fixed @issue-1257', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1257.html')
7
+ I.waitForElement('.je-ready')
8
+ I.click('[data-schemapath="root.colors"] .json-editor-btntype-add')
9
+ I.waitForValue('#value', '{"colors":[{"text":"X","color":"#fefaac"}],"color":"#fefaac"}')
10
+ I.waitForValue('[name="root[colors][0][color]"]', '#fefaac')
11
+ })
@@ -0,0 +1,21 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('issues')
4
+
5
+ Scenario('GitHub issue 1272 should remain fixed @issue-1272', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1272.html')
7
+ I.waitForElement('.je-ready')
8
+ I.selectOption('[name="root[recorder][albums]"]', 'album2')
9
+ I.waitForText('song1')
10
+ I.dontSee('array editor')
11
+ I.selectOption('[data-schemapath="root.recorder.album2"] .je-switcher', 'SideB')
12
+ I.waitForText('array editor')
13
+ I.dontSee('song1')
14
+ I.selectOption('[data-schemapath="root.recorder.album2"] .je-switcher', 'SideA')
15
+ I.waitForText('song1')
16
+ I.dontSee('array editor')
17
+ I.selectOption('[name="root[recorder][albums]"]', 'album1')
18
+ I.selectOption('[name="root[recorder][albums]"]', 'album2')
19
+ I.waitForText('song1')
20
+ I.dontSee('array editor')
21
+ })
@@ -0,0 +1,8 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('issues')
4
+
5
+ Scenario('GitHub issue 1330 should remain fixed @issue-1330 @multiselect', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1330.html')
7
+ I.waitForElement('[data-schemapath="root.test"] input[type="checkbox"]')
8
+ })
@@ -0,0 +1,18 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('issues')
4
+
5
+ Scenario('GitHub issue 1338 should remain fixed @issue-1338', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1338.html')
7
+ I.waitForText('Value required')
8
+ I.fillField('[id="root[field_a]"]', 'test')
9
+ I.pressKey('Tab')
10
+ I.waitForInvisible('.invalid-feedback')
11
+ I.dontSee('Value required')
12
+ I.refreshPage()
13
+ I.waitForText('Value required')
14
+ I.fillField('[id="root[field_b]"]', 'test')
15
+ I.pressKey('Tab')
16
+ I.waitForInvisible('.invalid-feedback')
17
+ I.dontSee('Value required')
18
+ })
@@ -0,0 +1,8 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('issues')
4
+
5
+ Scenario('GitHub issue 1347 should remain fixed @issue-1347', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1347.html')
7
+ I.waitForValue('#value', '{"caplzsone":[{"dateField1":"","amountField1":"","amountField2":"","amountField3":"","amountField4":""}],"caplzszero":[{"dateField1":"","amountField1":"9999","amountField2":"2222","amountField3":"3333","amountField4":"4444"},{"dateField1":"","amountField1":"6666","amountField2":"7777","amountField3":"8888","amountField4":"9999"}]}')
8
+ })
@@ -0,0 +1,13 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('GitHub issue 1364')
4
+
5
+ Scenario('GitHub issue 1364 should remain fixed @issue-1364', ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1364.html')
7
+ I.waitForElement('.je-ready')
8
+ I.waitForValue('#value', '{"engine":"none","child1":{}}')
9
+ I.selectOption('[id="root[engine]"]', 'test1')
10
+ I.waitForValue('#value', '{"engine":"test1","child1":{"L2Name":""},"L1Name":""}')
11
+ I.selectOption('[id="root[engine]"]', 'none')
12
+ I.waitForValue('#value', '{"engine":"none","child1":{}}')
13
+ })
@@ -0,0 +1,11 @@
1
+ /* global Feature Scenario */
2
+ const assert = require('assert')
3
+
4
+ Feature('GitHub issue 1367')
5
+
6
+ Scenario('GitHub issue 1367 should remain fixed @issue-1367', async ({ I }) => {
7
+ I.amOnPage('issues/issue-gh-1367.html')
8
+ I.waitForElement('.je-ready')
9
+ I.click('canvas')
10
+ assert.match(await I.grabValueFrom('#value'), /base64/)
11
+ })