@wirenboard/json-editor 2.5.3-wb13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/.env-dist +2 -0
  2. package/.eslintrc +7 -0
  3. package/.gitattributes +1 -0
  4. package/.github/PULL_REQUEST_TEMPLATE.md +9 -0
  5. package/.github/issue_template +25 -0
  6. package/.github/workflows/build.yml +58 -0
  7. package/.travis.yml +70 -0
  8. package/CHANGELOG.md +915 -0
  9. package/CONTRIBUTING.md +92 -0
  10. package/LICENSE +20 -0
  11. package/Makefile +26 -0
  12. package/README.md +1646 -0
  13. package/README_ADDON.md +573 -0
  14. package/UPGRADING.md +46 -0
  15. package/build/CssToJson.js +55 -0
  16. package/codecept.conf.js +35 -0
  17. package/config/.eslintrc +7 -0
  18. package/config/codeceptjs_helpers.js +139 -0
  19. package/config/helpers.js +10 -0
  20. package/config/karma.conf.js +93 -0
  21. package/config/readme.md +31 -0
  22. package/config/webpack.common.js +75 -0
  23. package/config/webpack.dev.js +15 -0
  24. package/config/webpack.nonmin.js +19 -0
  25. package/config/webpack.prod.js +25 -0
  26. package/dist/jsoneditor.js +14 -0
  27. package/dist/nonmin/jsoneditor.js +29097 -0
  28. package/dist/nonmin/jsoneditor.js.map +1 -0
  29. package/docs/ace_editor.html +56 -0
  30. package/docs/advanced.html +136 -0
  31. package/docs/basic.html +63 -0
  32. package/docs/basic_person.json +26 -0
  33. package/docs/choices.html +86 -0
  34. package/docs/cleave.html +132 -0
  35. package/docs/colorpicker.html +194 -0
  36. package/docs/css_integration.html +135 -0
  37. package/docs/datetime.html +305 -0
  38. package/docs/describedby.html +161 -0
  39. package/docs/enumsource.html +67 -0
  40. package/docs/images/categoriesDemo.png +0 -0
  41. package/docs/images/inheritance_tree.png +0 -0
  42. package/docs/images/jsoneditor.png +0 -0
  43. package/docs/imask.html +192 -0
  44. package/docs/index.html +579 -0
  45. package/docs/materialize_css.html +164 -0
  46. package/docs/meta_schema.json +705 -0
  47. package/docs/multiple_upload_base64.html +65 -0
  48. package/docs/person.json +73 -0
  49. package/docs/polyfills/assign.js +29 -0
  50. package/docs/radio.html +156 -0
  51. package/docs/recursive.html +170 -0
  52. package/docs/select2.html +99 -0
  53. package/docs/selectize.html +100 -0
  54. package/docs/signature.html +42 -0
  55. package/docs/starrating.html +137 -0
  56. package/docs/upload.html +131 -0
  57. package/docs/uuid.html +70 -0
  58. package/docs/wysiwyg.html +56 -0
  59. package/jasmine.json +11 -0
  60. package/json-editor-json-editor-2.5.3-wb13.tgz +0 -0
  61. package/package.json +100 -0
  62. package/release-notes.md +88 -0
  63. package/src/core.js +412 -0
  64. package/src/defaults.js +402 -0
  65. package/src/editor.js +707 -0
  66. package/src/editors/ace.js +89 -0
  67. package/src/editors/array/choices.js +103 -0
  68. package/src/editors/array/select2.js +110 -0
  69. package/src/editors/array/selectize.js +103 -0
  70. package/src/editors/array.css +9 -0
  71. package/src/editors/array.css.js +3 -0
  72. package/src/editors/array.js +818 -0
  73. package/src/editors/autocomplete.js +58 -0
  74. package/src/editors/base64.js +157 -0
  75. package/src/editors/button.js +97 -0
  76. package/src/editors/checkbox.js +95 -0
  77. package/src/editors/choices.css +3 -0
  78. package/src/editors/choices.css.js +3 -0
  79. package/src/editors/choices.js +69 -0
  80. package/src/editors/colorpicker.js +103 -0
  81. package/src/editors/datetime.js +141 -0
  82. package/src/editors/describedby.js +188 -0
  83. package/src/editors/enum.js +136 -0
  84. package/src/editors/hidden.js +127 -0
  85. package/src/editors/index.js +81 -0
  86. package/src/editors/info.js +20 -0
  87. package/src/editors/integer.js +19 -0
  88. package/src/editors/ip.js +36 -0
  89. package/src/editors/jodit.js +64 -0
  90. package/src/editors/multiple.js +409 -0
  91. package/src/editors/multiselect.js +218 -0
  92. package/src/editors/null.js +18 -0
  93. package/src/editors/number.js +51 -0
  94. package/src/editors/object.css +41 -0
  95. package/src/editors/object.css.js +3 -0
  96. package/src/editors/object.js +1290 -0
  97. package/src/editors/radio.js +111 -0
  98. package/src/editors/sceditor.js +72 -0
  99. package/src/editors/select.js +370 -0
  100. package/src/editors/select2.js +110 -0
  101. package/src/editors/selectize.js +112 -0
  102. package/src/editors/signature.js +113 -0
  103. package/src/editors/simplemde.js +100 -0
  104. package/src/editors/starrating.css +52 -0
  105. package/src/editors/starrating.css.js +3 -0
  106. package/src/editors/starrating.js +135 -0
  107. package/src/editors/stepper.js +27 -0
  108. package/src/editors/string.js +372 -0
  109. package/src/editors/table.js +516 -0
  110. package/src/editors/upload.js +321 -0
  111. package/src/editors/uuid.js +56 -0
  112. package/src/iconlib.js +24 -0
  113. package/src/iconlibs/bootstrap2.js +28 -0
  114. package/src/iconlibs/bootstrap3.js +28 -0
  115. package/src/iconlibs/fontawesome3.js +28 -0
  116. package/src/iconlibs/fontawesome4.js +28 -0
  117. package/src/iconlibs/fontawesome5.js +28 -0
  118. package/src/iconlibs/foundation2.js +24 -0
  119. package/src/iconlibs/foundation3.js +28 -0
  120. package/src/iconlibs/index.js +25 -0
  121. package/src/iconlibs/jqueryui.js +28 -0
  122. package/src/iconlibs/materialicons.js +49 -0
  123. package/src/iconlibs/openiconic.js +28 -0
  124. package/src/iconlibs/spectre.js +28 -0
  125. package/src/resolvers.js +128 -0
  126. package/src/schemaloader.js +408 -0
  127. package/src/style.css +150 -0
  128. package/src/style.css.js +3 -0
  129. package/src/templates/default.js +52 -0
  130. package/src/templates/ejs.js +13 -0
  131. package/src/templates/handlebars.js +1 -0
  132. package/src/templates/hogan.js +10 -0
  133. package/src/templates/index.js +21 -0
  134. package/src/templates/lodash.js +9 -0
  135. package/src/templates/markup.js +9 -0
  136. package/src/templates/mustache.js +9 -0
  137. package/src/templates/swig.js +1 -0
  138. package/src/templates/underscore.js +9 -0
  139. package/src/theme.js +659 -0
  140. package/src/themes/barebones.css +35 -0
  141. package/src/themes/barebones.css.js +3 -0
  142. package/src/themes/barebones.js +28 -0
  143. package/src/themes/bootstrap2.js +319 -0
  144. package/src/themes/bootstrap3.css +0 -0
  145. package/src/themes/bootstrap3.css.js +3 -0
  146. package/src/themes/bootstrap3.js +315 -0
  147. package/src/themes/bootstrap4.css +89 -0
  148. package/src/themes/bootstrap4.css.js +3 -0
  149. package/src/themes/bootstrap4.js +690 -0
  150. package/src/themes/bootstrap5.css.js +3 -0
  151. package/src/themes/foundation.js +569 -0
  152. package/src/themes/html.css +60 -0
  153. package/src/themes/html.css.js +3 -0
  154. package/src/themes/html.js +71 -0
  155. package/src/themes/index.js +28 -0
  156. package/src/themes/jqueryui.js +198 -0
  157. package/src/themes/materialize.js +426 -0
  158. package/src/themes/spectre.css +208 -0
  159. package/src/themes/spectre.css.js +3 -0
  160. package/src/themes/spectre.js +406 -0
  161. package/src/themes/tailwind.css +249 -0
  162. package/src/themes/tailwind.css.js +3 -0
  163. package/src/themes/tailwind.js +443 -0
  164. package/src/utilities.js +138 -0
  165. package/src/validator.js +877 -0
  166. package/src/validators/ip-validator.js +51 -0
  167. package/tests/Dockerfile +3 -0
  168. package/tests/README.md +48 -0
  169. package/tests/codeceptjs/codecept.json +42 -0
  170. package/tests/codeceptjs/constrains/if-then-else_test.js +143 -0
  171. package/tests/codeceptjs/core_test.js +217 -0
  172. package/tests/codeceptjs/editors/advanced_test.js +13 -0
  173. package/tests/codeceptjs/editors/array_any_of_test.js +50 -0
  174. package/tests/codeceptjs/editors/array_test.js +900 -0
  175. package/tests/codeceptjs/editors/button_test.js +35 -0
  176. package/tests/codeceptjs/editors/checkbox_test.js +21 -0
  177. package/tests/codeceptjs/editors/colorpicker_test.js +27 -0
  178. package/tests/codeceptjs/editors/datetime_test.js +33 -0
  179. package/tests/codeceptjs/editors/inheritance_test.js +11 -0
  180. package/tests/codeceptjs/editors/integer_test.js +84 -0
  181. package/tests/codeceptjs/editors/issues/issue-gh-812_test.js +32 -0
  182. package/tests/codeceptjs/editors/jodit_test.js +24 -0
  183. package/tests/codeceptjs/editors/multiselect_test.js +8 -0
  184. package/tests/codeceptjs/editors/number_test.js +82 -0
  185. package/tests/codeceptjs/editors/object_test.js +204 -0
  186. package/tests/codeceptjs/editors/option-no_default_values_test.js +42 -0
  187. package/tests/codeceptjs/editors/programmatic-changes_test.js +20 -0
  188. package/tests/codeceptjs/editors/radio_test.js +10 -0
  189. package/tests/codeceptjs/editors/rating_test.js +13 -0
  190. package/tests/codeceptjs/editors/select_test.js +22 -0
  191. package/tests/codeceptjs/editors/stepper_test.js +27 -0
  192. package/tests/codeceptjs/editors/string_test.js +118 -0
  193. package/tests/codeceptjs/editors/table-confirm-delete_test.js +67 -0
  194. package/tests/codeceptjs/editors/tabs_test.js +14 -0
  195. package/tests/codeceptjs/editors/uuid_test.js +21 -0
  196. package/tests/codeceptjs/editors/validation_test.js +14 -0
  197. package/tests/codeceptjs/meta-schema_test.js +17 -0
  198. package/tests/codeceptjs/schemaloader_test.js +13 -0
  199. package/tests/codeceptjs/steps.d.ts +13 -0
  200. package/tests/codeceptjs/steps_file.js +12 -0
  201. package/tests/codeceptjs/themes_test.js +519 -0
  202. package/tests/docker-compose.yml +34 -0
  203. package/tests/fixtures/basic_person.json +26 -0
  204. package/tests/fixtures/nested_object.json +26 -0
  205. package/tests/fixtures/person.json +55 -0
  206. package/tests/fixtures/recursive.json +8 -0
  207. package/tests/fixtures/some_types.json +32 -0
  208. package/tests/fixtures/string.json +3 -0
  209. package/tests/fixtures/validation.json +1140 -0
  210. package/tests/pages/_demo.html +475 -0
  211. package/tests/pages/advanced.html +137 -0
  212. package/tests/pages/anyof.html +80 -0
  213. package/tests/pages/array-anyof.html +142 -0
  214. package/tests/pages/array-checkboxes.html +41 -0
  215. package/tests/pages/array-choices.html +45 -0
  216. package/tests/pages/array-integers.html +37 -0
  217. package/tests/pages/array-move-events.html +61 -0
  218. package/tests/pages/array-multiselects.html +42 -0
  219. package/tests/pages/array-nested-arrays.html +40 -0
  220. package/tests/pages/array-numbers.html +37 -0
  221. package/tests/pages/array-objects.html +42 -0
  222. package/tests/pages/array-ratings.html +40 -0
  223. package/tests/pages/array-selectize.html +51 -0
  224. package/tests/pages/array-selects.html +36 -0
  225. package/tests/pages/array-strings.html +36 -0
  226. package/tests/pages/array.html +42 -0
  227. package/tests/pages/assets/pages.css +130 -0
  228. package/tests/pages/button-callbacks.html +77 -0
  229. package/tests/pages/checkbox-labels.html +114 -0
  230. package/tests/pages/colorpicker-no-3rd-party.html +43 -0
  231. package/tests/pages/colorpicker-use-vanilla-picker.html +50 -0
  232. package/tests/pages/core.html +118 -0
  233. package/tests/pages/datetime.html +76 -0
  234. package/tests/pages/form-name.html +108 -0
  235. package/tests/pages/grid-strict.html +311 -0
  236. package/tests/pages/grid.html +284 -0
  237. package/tests/pages/if-then-else-allOf.html +117 -0
  238. package/tests/pages/inheritance.html +76 -0
  239. package/tests/pages/integer.html +68 -0
  240. package/tests/pages/issues/_template.html +50 -0
  241. package/tests/pages/issues/issue-gh-812.html +110 -0
  242. package/tests/pages/issues/issue-gh-823-meta-schema.html +35 -0
  243. package/tests/pages/issues/issue-gh-848.html +81 -0
  244. package/tests/pages/meta_schema.json +705 -0
  245. package/tests/pages/number.html +89 -0
  246. package/tests/pages/object-no-additional-properties.html +65 -0
  247. package/tests/pages/object-no-duplicated-id.html +68 -0
  248. package/tests/pages/object-required-properties.html +236 -0
  249. package/tests/pages/object-with-dependencies-array.html +46 -0
  250. package/tests/pages/object-with-dependencies.html +60 -0
  251. package/tests/pages/object.html +79 -0
  252. package/tests/pages/oneof.html +103 -0
  253. package/tests/pages/option-no_default_values.html +58 -0
  254. package/tests/pages/programmatic-changes.html +120 -0
  255. package/tests/pages/read-only.html +105 -0
  256. package/tests/pages/select.html +41 -0
  257. package/tests/pages/stepper.html +59 -0
  258. package/tests/pages/string-ace-editor.html +52 -0
  259. package/tests/pages/string-cleave.html +46 -0
  260. package/tests/pages/string-custom-attributes.html +62 -0
  261. package/tests/pages/string-formats.html +52 -0
  262. package/tests/pages/string-formats2.html +57 -0
  263. package/tests/pages/string-jodit-editor.html +49 -0
  264. package/tests/pages/string-sceditor.html +62 -0
  265. package/tests/pages/table-move-events.html +56 -0
  266. package/tests/pages/table.html +46 -0
  267. package/tests/pages/tabs.html +131 -0
  268. package/tests/pages/themes.html +527 -0
  269. package/tests/pages/translate-property.html +247 -0
  270. package/tests/pages/urn.html +93 -0
  271. package/tests/pages/uuid.html +72 -0
  272. package/tests/pages/validation.html +99 -0
  273. package/tests/unit/.eslintrc +8 -0
  274. package/tests/unit/core.spec.js +309 -0
  275. package/tests/unit/defaults.spec.js +40 -0
  276. package/tests/unit/editor.spec.js +160 -0
  277. package/tests/unit/editors/array.spec.js +86 -0
  278. package/tests/unit/editors/object.spec.js +79 -0
  279. package/tests/unit/editors/table.spec.js +91 -0
  280. package/tests/unit/readme.md +35 -0
  281. package/tests/unit/schemaloader.spec.js +498 -0
  282. package/tests/unit/validator.spec.js +94 -0
  283. package/tests/unit/validators/ip-validator.spec.js +62 -0
@@ -0,0 +1,13 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('rating')
4
+
5
+ Scenario('should be disabled if "readonly" is specified', async (I) => {
6
+ I.amOnPage('read-only.html')
7
+
8
+ I.seeDisabledAttribute('[id="root[rating]5"]')
9
+ I.seeDisabledAttribute('[id="root[rating]4"]')
10
+ I.seeDisabledAttribute('[id="root[rating]3"]')
11
+ I.seeDisabledAttribute('[id="root[rating]2"]')
12
+ I.seeDisabledAttribute('[id="root[rating]1"]')
13
+ })
@@ -0,0 +1,22 @@
1
+ /* global Feature Scenario */
2
+
3
+ var assert = require('assert')
4
+
5
+ Feature('select')
6
+
7
+ Scenario('should return correct booleans values when selected', async (I) => {
8
+ I.amOnPage('select.html')
9
+ I.click('.get-value')
10
+ assert.equal(await I.grabValueFrom('.value'), '{"boolean":true}')
11
+ I.selectOption('[name="root[boolean]"]', 'false')
12
+ I.click('.get-value')
13
+ assert.equal(await I.grabValueFrom('.value'), '{"boolean":false}')
14
+ I.selectOption('[name="root[boolean]"]', 'true')
15
+ I.click('.get-value')
16
+ assert.equal(await I.grabValueFrom('.value'), '{"boolean":true}')
17
+ })
18
+
19
+ Scenario('should be disabled if "readonly" is specified', async (I) => {
20
+ I.amOnPage('read-only.html')
21
+ I.seeDisabledAttribute('[name="root[select]"]')
22
+ })
@@ -0,0 +1,27 @@
1
+ /* global Feature Scenario */
2
+
3
+ var assert = require('assert')
4
+
5
+ Feature('stepper')
6
+
7
+ Scenario('should validate value @stepper', async (I) => {
8
+ I.amOnPage('stepper.html')
9
+ I.click('.get-value')
10
+ I.see('Property must be set.', '[data-schemapath="root.stepper"] div')
11
+ assert.equal(await I.grabValueFrom('.value'), '{}')
12
+ })
13
+
14
+ Scenario('should be constrained to maximun and minimun values when stepped @stepper', async (I) => {
15
+ I.amOnPage('stepper.html')
16
+ I.click('.stepper-up')
17
+ I.click('.stepper-up')
18
+ I.click('.stepper-up')
19
+ I.click('.get-value')
20
+ I.click('.get-value')
21
+ assert.equal(await I.grabValueFrom('.value'), '{"stepper":6}')
22
+ I.click('.stepper-down')
23
+ I.click('.stepper-down')
24
+ I.click('.stepper-down')
25
+ I.click('.get-value')
26
+ assert.equal(await I.grabValueFrom('.value'), '{"stepper":5}')
27
+ })
@@ -0,0 +1,118 @@
1
+ /* global Feature Scenario */
2
+
3
+ var assert = require('assert')
4
+
5
+ Feature('string')
6
+
7
+ Scenario('should have correct initial value', async (I) => {
8
+ I.amOnPage('string-ace-editor.html')
9
+ I.click('.get-value')
10
+ assert.equal(await I.grabValueFrom('.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
+ assert.equal(await I.grabValueFrom('.debug'), JSON.stringify([{ editor: '__YELLOW__' }]))
25
+ })
26
+
27
+ Scenario('should have correct initial value', async (I) => {
28
+ I.amOnPage('string-sceditor.html')
29
+ I.click('.get-value')
30
+ assert.equal(await I.grabValueFrom('.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')
37
+
38
+ // enters first iframe, writes text on the body and then exits
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
+ assert.equal(await I.grabValueFrom('.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')
55
+
56
+ // enters first iframe, writes text on the body and then exits
57
+ I.switchTo(0)
58
+ I.click('body')
59
+ I.pressKeys('__YELLOW__')
60
+ I.see('__YELLOW__')
61
+ I.switchTo()
62
+
63
+ // enters first iframe and read text
64
+ I.switchTo(0)
65
+ I.see('__YELLOW__')
66
+ I.switchTo()
67
+
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()
75
+
76
+ // enters second iframe and read text
77
+ I.switchTo(1)
78
+ I.see('__BLUE__')
79
+ I.switchTo()
80
+
81
+ I.click('.get-value')
82
+ assert.equal(await I.grabValueFrom('.debug'), JSON.stringify([{ editor: '<p>__YELLOW__<br></p>' }, { editor: '<p>__BLUE__<br></p>' }]))
83
+
84
+ I.click('.json-editor-btn-movedown')
85
+ I.click('.get-value')
86
+ assert.equal(await I.grabValueFrom('.debug'), JSON.stringify([{ editor: '<p>__BLUE__<br></p>' }, { editor: '<p>__YELLOW__<br></p>' }]))
87
+
88
+ // the last 2 tests will fail because Sceditors iframes loose their content when the iframe is reloaded.
89
+
90
+ // enters first iframe and read text
91
+ I.switchTo(0)
92
+ I.see('__BLUE__')
93
+ I.switchTo()
94
+
95
+ // enters second iframe and read text
96
+ I.switchTo(1)
97
+ I.see('__YELLOW__')
98
+ I.switchTo()
99
+ })
100
+
101
+ Scenario('should be readonly if specified and not disabled', 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.equal(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
+ assert.equal(await I.grabValueFrom('.debug'), JSON.stringify({ cleave_test: '1234.567.890-1234' }))
118
+ })
@@ -0,0 +1,67 @@
1
+ /* global Feature Scenario */
2
+
3
+ var assert = require('assert')
4
+
5
+ Feature('table')
6
+
7
+ Scenario('should have correct initial value', async (I) => {
8
+ I.amOnPage('table.html')
9
+ I.click('.get-value')
10
+ assert.equal(await I.grabValueFrom('.debug'), '[]')
11
+ })
12
+
13
+ Scenario('should ask for confirmation on node delete', async (I) => {
14
+ I.amOnPage('table.html')
15
+ I.click('Add Node')
16
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
17
+ I.amCancellingPopups()
18
+ I.click('[data-schemapath="root.0"] .json-editor-btn-delete')
19
+ I.seeInPopup('Are you sure you want to remove this node?')
20
+ I.cancelPopup()
21
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
22
+ I.amAcceptingPopups()
23
+ I.click('[data-schemapath="root.0"] .json-editor-btn-delete')
24
+ I.seeInPopup('Are you sure you want to remove this node?')
25
+ I.acceptPopup()
26
+ I.dontSeeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
27
+ })
28
+
29
+ Scenario('should ask for confirmation on node delete last', async (I) => {
30
+ I.amOnPage('table.html')
31
+ I.click('Add Node')
32
+ I.click('Add Node')
33
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
34
+ I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
35
+ I.amCancellingPopups()
36
+ I.click('Delete Last Node')
37
+ I.seeInPopup('Are you sure you want to remove this node?')
38
+ I.cancelPopup()
39
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
40
+ I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
41
+ I.amAcceptingPopups()
42
+ I.click('Delete Last Node')
43
+ I.seeInPopup('Are you sure you want to remove this node?')
44
+ I.acceptPopup()
45
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
46
+ I.dontSeeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
47
+ })
48
+
49
+ Scenario('should ask for confirmation on node delete all', async (I) => {
50
+ I.amOnPage('table.html')
51
+ I.click('Add Node')
52
+ I.click('Add Node')
53
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
54
+ I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
55
+ I.amCancellingPopups()
56
+ I.click('Delete All')
57
+ I.seeInPopup('Are you sure you want to remove this node?')
58
+ I.cancelPopup()
59
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
60
+ I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
61
+ I.amAcceptingPopups()
62
+ I.click('Delete All')
63
+ I.seeInPopup('Are you sure you want to remove this node?')
64
+ I.acceptPopup()
65
+ I.dontSeeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
66
+ I.dontSeeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
67
+ })
@@ -0,0 +1,14 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('Tabs')
4
+
5
+ Scenario('test top-tabs', (I) => {
6
+ I.amOnPage('tabs.html')
7
+ I.waitForElement('[data-schemapath="root"] .json-editor-btn-add')
8
+ I.click('[data-schemapath="root"] .json-editor-btn-add')
9
+ I.waitForText('1 -', 5)
10
+ I.waitForText('validation failed', 5)
11
+ I.fillField('root[1][name]', 'Somebody')
12
+ I.pressKey('Tab')
13
+ I.waitForText('validation passed', 5)
14
+ })
@@ -0,0 +1,21 @@
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.equal((/^[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 item')
16
+ I.click('Add item')
17
+ const value0 = await I.grabValueFrom('[name="root[uuidArray][0][uuid]"]')
18
+ assert.equal((/^[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[uuidArray][1][uuid]"]')
20
+ assert.equal((/^[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
+ })
@@ -0,0 +1,14 @@
1
+ /* global Feature Scenario */
2
+
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
4
+
5
+ Feature('Validations')
6
+
7
+ Scenario('test validations in validation.html', (I) => {
8
+ I.amOnPage('validation.html')
9
+ var numberOfTestItemsExpected = 152
10
+ I.waitForElement('#output div:nth-child(' + numberOfTestItemsExpected + ')', 10)
11
+ I.seeNumberOfElements('#output div', numberOfTestItemsExpected)
12
+ I.see('success')
13
+ I.dontSee('fail')
14
+ })
@@ -0,0 +1,17 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('core')
4
+
5
+ // https://github.com/json-editor/json-editor/issues/823
6
+ Scenario('work with json-schema meta-schema', async (I) => {
7
+ I.amOnPage('issues/issue-gh-823-meta-schema.html')
8
+ I.waitForElement('[data-schemapath="root"] h3', 10)
9
+ I.click('Object Properties')
10
+ I.click('options')
11
+ I.see('$ref')
12
+ I.see('options')
13
+ // pause();
14
+ I.click('Object Properties')
15
+ I.click('Object Properties')
16
+ I.see('options')
17
+ })
@@ -0,0 +1,13 @@
1
+ var assert = require('assert');
2
+
3
+ Feature('schemaloader');
4
+
5
+ Scenario('resolving nested external URNs', async (I) => {
6
+ I.amOnPage('urn.html');
7
+ I.waitForElement('[data-schemapath="root"] h3', 10);
8
+ I.seeElementInDOM('[data-schemapath="root.fname"]')
9
+ I.seeElementInDOM('[data-schemapath="root.lname"]')
10
+
11
+ I.click('.get-value')
12
+ assert.equal(await I.grabValueFrom('.value'), '{"fname":"John","lname":"Doe"}');
13
+ });
@@ -0,0 +1,13 @@
1
+ /// <reference types='codeceptjs' />
2
+ type steps_file = typeof import('./steps_file.js');
3
+ type customHelpers = import('../../config/codeceptjs_helpers.js');
4
+
5
+ declare namespace CodeceptJS {
6
+ interface SupportObject { I: CodeceptJS.I }
7
+ interface CallbackOrder { [0]: CodeceptJS.I }
8
+ interface Methods extends CodeceptJS.WebDriver, customHelpers {}
9
+ interface I extends ReturnType<steps_file> {}
10
+ namespace Translation {
11
+ interface Actions {}
12
+ }
13
+ }
@@ -0,0 +1,12 @@
1
+ /* global actor */
2
+
3
+ 'use strict'
4
+ // in this file you can append custom step methods to 'I' object
5
+
6
+ module.exports = function () {
7
+ return actor({
8
+
9
+ // Define custom steps here, use 'this' to access default methods of I.
10
+ // It is recommended to place a general 'login' function here.
11
+ })
12
+ }