@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,573 @@
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": "r"``<br>
99
+ ``"format": "ruby"``<br>
100
+ ``"format": "sass"``<br>
101
+ ``"format": "scala"``<br>
102
+ ``"format": "scss"``<br>
103
+ ``"format": "smarty"``<br>
104
+ ``"format": "sql"``<br>
105
+ ``"format": "sqlserver"``<br>
106
+ ``"format": "stylus"``<br>
107
+ ``"format": "svg"``<br>
108
+ ``"format": "twig"``<br>
109
+ ``"format": "vbscript"``<br>
110
+ ``"format": "xml"``<br>
111
+ ``"format": "yaml"
112
+ </details>
113
+
114
+ **Supported Types:** string<br>
115
+ **Global options:** ``JSONEditor.defaults.options.ace``<br>
116
+ **Schema options:** ``options.ace``<br>
117
+ **Options callback** ``JSONEditor.defaults.callbacks.ace``<br>
118
+ **Required options:** none<br>
119
+ **Source:** src/editors/ace.js
120
+
121
+ *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)*
122
+ ````javascript
123
+ var aceScript = document.querySelector('script[src*="ace-builds"]');
124
+ if (aceScript.src && window.ace) {
125
+ window.ace.config.set('basePath', aceScript.src.replace(/(.*\/)[^\/]+$/g, "$1"));
126
+ }
127
+ ````
128
+ <br>
129
+
130
+ ### Autocomplete
131
+ **Description**
132
+ Accessible autocomplete component for vanilla JavaScript.<br>
133
+ For configuration options, see the [Autocomplete homepage](https://autocomplete.trevoreyre.com/#/javascript-component).
134
+
135
+ **Trigger:** ``"format": "autocomplete"``<br>
136
+ **Supported Types:** string<br>
137
+ **Global options:** ``JSONEditor.defaults.options.autocomplete``<br>
138
+ **Schema options:** ``options.autocomplete``<br>
139
+ **Options callback** ``JSONEditor.defaults.callbacks.autocomplete``<br>
140
+ **Required options:** ``search`` (callback)<br>
141
+ **Source:** src/editors/autocomplete.js
142
+ <br>
143
+
144
+ #### Example
145
+
146
+ Javascript
147
+
148
+ ```
149
+ window.JSONEditor.defaults.callbacks = {
150
+ "autocomplete": {
151
+ // This is callback functions for the "autocomplete" editor
152
+ // In the schema you refer to the callback function by key
153
+ // Note: 1st parameter in callback is ALWAYS a reference to the current editor.
154
+ // So you need to add a variable to the callback to hold this (like the
155
+ // "jseditor_editor" variable in the examples below.)
156
+
157
+ // Setup API calls
158
+ "search_za": function search(jseditor_editor, input) {
159
+ var url = '/eiao/api/json-object?filter[or][][data_json][LIKE]=' + encodeURI(input) +'&filter[or][][uuid][LIKE]=' + encodeURI(input);;
160
+
161
+ return new Promise(function (resolve) {
162
+ if (input.length < 2) {
163
+ return resolve([]);
164
+ }
165
+
166
+ fetch(url).then(function (response) {
167
+ return response.json();
168
+ }).then(function (data) {
169
+ resolve(data);
170
+ });
171
+ });
172
+ },
173
+ "renderResult_za": function(jseditor_editor, result, props) {
174
+ return ['<li ' + props + '>',
175
+ '<div class="eiao-object-title">' + result.data_json + '</div>',
176
+ '<div class="eiao-object-snippet">' + result.uuid.substring(0,7) + ' <small>' + result.schema_uuid.substring(0,5) + '<small></div>',
177
+ '</li>'].join('');
178
+ },
179
+ "getResultValue_za": function getResultValue(jseditor_editor, result) {
180
+ return result.uuid;
181
+ }
182
+ }
183
+ };
184
+ ```
185
+
186
+ JSON-schema
187
+
188
+ ```json
189
+ {
190
+ "items": {
191
+ "title": "UUID",
192
+ "type": "string",
193
+ "description": "reference (autocomplete)",
194
+ "format": "autocomplete",
195
+ "options": {
196
+ "autocomplete": {
197
+ "search": "search_za",
198
+ "getResultValue": "getResultValue_za",
199
+ "renderResult": "renderResult_za",
200
+ "autoSelect": true
201
+ }
202
+ }
203
+ },
204
+ "title": "Project references",
205
+ "type": "array"
206
+ }
207
+ ```
208
+
209
+ ### Checkbox
210
+ **Description**
211
+ Checkbox format.
212
+
213
+ **Trigger:** ``"format": "checkbox"`` + enum<br>
214
+ **Supported Types:** string, integer, number, boolean<br>
215
+ **Global options:** N/A<br>
216
+ **Schema options:** N/A<br>
217
+ **Options callback** N/A<br>
218
+ **Required options:** none<br>
219
+ **Source:** src/editors/checkbox.js
220
+ <br>
221
+
222
+ ### Cleave
223
+ **Description**
224
+ Format your &lt;input/&gt; content when you are typing.
225
+ * Credit card number formatting
226
+ * Phone number formatting
227
+ * Date formatting
228
+ * Numeral formatting
229
+ * Custom delimiter, prefix and blocks pattern
230
+
231
+ For configuration options, see the [Cleave homepage](https://nosir.github.io/cleave.js/).
232
+
233
+ **Trigger:** ``options.cleave``<br>
234
+ **Supported Types:** string, number, integer, boolean<br>
235
+ **Global options:** ``JSONEditor.defaults.options.cleave``<br>
236
+ **Schema options:** ``options.cleave``<br>
237
+ **Options callback** ``JSONEditor.defaults.callbacks.cleave``<br>
238
+ **Required options:** none<br>
239
+ **Source:** src/editors/string.js
240
+ <br>
241
+
242
+ ### IMask
243
+ **Description**
244
+ Javascript input mask.
245
+
246
+ For configuration options, see the [IMask homepage](https://imask.js.org/).
247
+
248
+ **Trigger:** ``options.imask<br>
249
+ **Supported Types:** string, number, integer, boolean<br>
250
+ **Global options:** ``JSONEditor.defaults.options.imask``<br>
251
+ **Schema options:** ``options.imask``<br>
252
+ **Options callback** ``JSONEditor.defaults.callbacks.imask``<br>
253
+ **Required options:** none<br>
254
+ **Special options:** ``returnUnmasked`` when true, returns the unmasked value<br>
255
+ **Source:** src/editors/string.js
256
+
257
+ 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:"
258
+
259
+
260
+ Example of an iMask mask config:
261
+ ````javascript
262
+ mask: [
263
+ {
264
+ mask: 'RGB,RGB,RGB',
265
+ blocks: {
266
+ RGB: {
267
+ mask: IMask.MaskedRange,
268
+ from: 0,
269
+ to: 255
270
+ }
271
+ }
272
+ },
273
+ {
274
+ mask: /^#[0-9a-f]{0,6}$/i
275
+ }
276
+ ]
277
+ ````
278
+ The same config "converted" to JSON-Editor format:
279
+
280
+ ````javascript
281
+ "mask": [{
282
+ "mask": "RGB,RGB,RGB",
283
+ "blocks": {
284
+ "RGB": {
285
+ "mask": "IMask.MaskedRange",
286
+ "from": 0,
287
+ "to": 255
288
+ }
289
+ }
290
+ },
291
+ {
292
+ "mask": "regex:/^#[0-9a-f]{0,6}$/i"
293
+ }]
294
+ ````
295
+
296
+
297
+ <br>
298
+
299
+ ### Flatpickr
300
+ **Description**
301
+ Lightweight and powerful datetime picker.<br>
302
+ For configuration options, see the [Flatpickr homepage](https://flatpickr.js.org/).
303
+
304
+ **Trigger:** ``"format": "datetime-local"``, ``"format": "date"`` or ``"format": "time"``<br>
305
+ **Supported Types:** string, integer<br>
306
+ **Global options:** ``JSONEditor.defaults.options.flatpickr<br>
307
+ **Schema options:** ``options.flatpickr<br>
308
+ **Options callback** ``JSONEditor.defaults.callbacks.flatpickr<br>
309
+ **Required options:** none<br>
310
+ **Source:** src/editors/datetime.js
311
+ <br>
312
+
313
+ ### Jodit
314
+ **Description**
315
+ An excellent WYSIWYG editor written in pure TypeScript without the use of additional libraries.<br>
316
+ For configuration options, see the [Jodit homepage](https://xdsoft.net/jodit/).
317
+
318
+ **Trigger:** ``"format": "jodit"``<br>
319
+ **Supported Types:** string<br>
320
+ **Global options:** ``JSONEditor.defaults.options.jodit``<br>
321
+ **Schema options:** ``options.jodit``<br>
322
+ **Options callback** ``JSONEditor.defaults.callbacks.jodit``<br>
323
+ **Required options:** none<br>
324
+ **Source:** src/editors/jodit.js
325
+ <br>
326
+
327
+ ### SCEditor
328
+ **Description**
329
+ A lightweight, open source, WYSIWYG BBCode and (X)HTML editor.<br>
330
+ For configuration options, see the [SCEditor homepage](https://www.sceditor.com/).
331
+
332
+ **Triggers:** ``"format": "xhtml"`` or ``"format": "bbcode"``<br>
333
+ **Supported Types:** string<br>
334
+ **Global options:** ``JSONEditor.defaults.options.sceditor``<br>
335
+ **Schema options:** ``options.sceditor``<br>
336
+ **Options callback** ``JSONEditor.defaults.callbacks.sceditor``<br>
337
+ **Required options:** none<br>
338
+ **Source:** src/editors/sceditor.js
339
+ <br>
340
+
341
+ ### Select2
342
+ **Description**
343
+ Select2 gives you a customizable select box with support for searching, tagging, remote data sets, infinite scrolling, and many other highly used options.<br>
344
+ For configuration options, see the [Select2 homepage](https://select2.org/).
345
+
346
+ **Trigger:** ``"format": "select2"``<br>
347
+ **Supported Types:** string, number, integer, boolean (using enum)<br>
348
+ **Global options:** ``JSONEditor.defaults.options.select2``<br>
349
+ **Schema options:** ``options.select2``<br>
350
+ **Options callback** ``JSONEditor.defaults.callbacks.select2``<br>
351
+ **Required options:** none<br>
352
+ **Source:** src/editors/select2.js and src/editors/array/select2.js
353
+ <br>
354
+
355
+ ### Selectize
356
+ **Description**
357
+ 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>
358
+ For configuration options, see the [Selectize homepage](https://selectize.github.io/selectize.js/).
359
+
360
+ **Trigger:** ``"format": "selectize"``<br>
361
+ **Supported Types:** string, number, integer, boolean (using enum)<br>
362
+ **Global options:** ``JSONEditor.defaults.options.selectize``<br>
363
+ **Schema options:** ``options.selectize``<br>
364
+ **Options callback** ``JSONEditor.defaults.callbacks.selectize``<br>
365
+ **Required options:** none<br>
366
+ **Source:** src/editors/selectize.js and src/editors/array/selectize.js
367
+ <br>
368
+
369
+ ### SimpleMDE
370
+ **Description**
371
+ SimpleMDE is a simple, embeddable, and beautiful JS markdown editor.<br>
372
+ For configuration options, see the [SimpleMDE homepage](https://simplemde.com/).
373
+
374
+ **Trigger:** ``"format": "markdown"``<br>
375
+ **Supported Types:** string<br>
376
+ **Global options:** ``JSONEditor.defaults.options.simplemde``<br>
377
+ **Schema options:** ``options.simplemde``<br>
378
+ **Options callback** ``JSONEditor.defaults.callbacks.simplemde``<br>
379
+ **Required options:** none<br>
380
+ **Special options:** ``autorefresh`` when true, fixes problem with Chrome and editor inside Tabs<br>
381
+ **Source:** src/editors/simplemde.js
382
+ <br>
383
+
384
+ ### Starrating
385
+ **Description**
386
+ Star based rating.
387
+
388
+ **Trigger:** ``"format": "rating"``<br>
389
+ **Supported Types:** string, integer<br>
390
+ **Global options:** ``JSONEditor.defaults.options.rating<br>
391
+ **Schema options:** ``options.rating<br>
392
+ **Options callback** N/A<br>
393
+ **Required options:** none<br>
394
+ **Source:** src/editors/starrating.js
395
+ <br>
396
+
397
+ ### Upload
398
+ **Description**
399
+ Upload files to server.
400
+
401
+ **Trigger:** ``"format": "upload"``<br>
402
+ **Supported Types:** string<br>
403
+ **Global options:** ``JSONEditor.defaults.options.upload<br>
404
+ **Schema options:** ``options.upload<br>
405
+ **Options callback** ``JSONEditor.defaults.callbacks.upload<br>
406
+ **Required options:** ``upload_handler``<br>
407
+ **Source:** src/editors/upload.js
408
+ <br>
409
+
410
+
411
+ | Option | Type | Description | Default value |
412
+ |--|--|--|--|
413
+ | title | string | Title of the Browse button | "Browse"
414
+ | auto_upload | boolean | Trigger file upload button automatically | false
415
+ | allow_reupload | boolean | Allow reupload of file (overrides the readonly state) | false
416
+ | hide_input | boolean | Hide the Browse button and name display (Only works if 'enable_drag_drop' is true) | false
417
+ | enable_drag_drop | boolean | Enable Drag&Drop uploading. | false
418
+ | drop_zone_top | boolean | Position of dropzone. **true**=before button input, **false**=after button input | false
419
+ | drop_zone_text | string | Text displayed in dropzone box | "Drag & Drop file here"
420
+ | alt_drop_zone | string | Alternate DropZone DOM Selector (Can be created inside another property) |
421
+ | mime_type | string/array | If set, restrict upload to mime type(s) |
422
+ | max_upload_size | integer | Maximum file size allowed. 0 = no limit | 0
423
+ | upload_handler | function | Callback function for handling uploads to server |
424
+ <br>
425
+
426
+
427
+ ### UUID
428
+ **Description**
429
+ 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.
430
+
431
+ **Trigger:** ``"format": "uuid"``<br>
432
+ **Supported Types:** string<br>
433
+ **Global options:** N/A<br>
434
+ **Schema options:** N/A<br>
435
+ **Options callback** N/A<br>
436
+ **Required options:** none<br>
437
+ **Source:** src/editors/uuid.js
438
+ <br>
439
+
440
+ ### Picker
441
+ **Description**
442
+ Optional support for color format using vanilla JS color picker with alpha selection.
443
+
444
+ **Trigger:** ``"format": "color"``<br>
445
+ **Supported Types:** string<br>
446
+ **Global options:** JSONEditor.defaults.options.colorpicker<br>
447
+ **Schema options:** options.colorpicker<br>
448
+ **Options callback** JSONEditor.defaults.callbacks.colorpicker<br>
449
+ **Required options:** none<br>
450
+ **Source:** src/editors/colorpicker.js
451
+ <br>
452
+
453
+ ## Non-Active editors (Editors that return no results)
454
+
455
+ ### Button
456
+ **Description**
457
+ 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.
458
+
459
+ **Trigger:** ``"type": "button"``<br>
460
+ **Supported Types:** N/A<br>
461
+ **Global options:** N/A<br>
462
+ **Schema options:** text, action, icon, validated<br>
463
+ **Options callback** window.JSONEditor.defaults.callbacks.button<br>
464
+ **Required options:** action<br>
465
+ **Source:** src/editors/button.js
466
+ <br>
467
+
468
+ ### Info
469
+ **Description**
470
+ The Info editor is a special editor that doesn't return any results. It can be used to insert textual blocks inside the form.
471
+ Only properties available are title and description (bodytext).
472
+
473
+ **Trigger:** ``"type": "info"``<br>
474
+ **Supported Types:** N/A<br>
475
+ **Global options:** N/A<br>
476
+ **Schema options:** N/A<br>
477
+ **Options callback** N/A<br>
478
+ **Required options:** none<br>
479
+ **Source:** src/editors/info.js
480
+ <br>
481
+
482
+
483
+ ## Option callback functions
484
+ The JSON Schema format doesn't support function values, but some 3rd-Party libraries has callback functions as options.
485
+ To enable/use those type of options, you can create global callback functions and then refer to then by name in the schema options.
486
+
487
+ *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.*
488
+
489
+ ### Example option callback for Cleave.js
490
+ <details><summary>Click to expand!</summary>
491
+ This example defines a callback function named "showCreditCardType" and shows how it is used inside the schema options.
492
+
493
+ **JavaScript:**
494
+ ````javascript
495
+ // Add Cleave.js options namespace to Global callback list
496
+ window.JSONEditor.defaults.callbacks.cleave = {
497
+ // 1st parameter in callback is ALWAYS a reference to current editor instance.
498
+ "showCreditCardType": function(jseditor_editor, type) {
499
+ var el = jseditor_editor.element.nextSibling;
500
+ if (el) el.innerHTML = 'Card type: <strong>' + type + '</strong>';
501
+ }
502
+ };
503
+ ````
504
+ **Schema:**
505
+ ````json
506
+ {
507
+ "type": "object",
508
+ "properties": {
509
+ "creditcard": {
510
+ "type": "string",
511
+ "title": "Credit Card",
512
+ "description": " ",
513
+ "options": {
514
+ "inputAttributes": {
515
+ "placeholder": "enter credit card number"
516
+ },
517
+ "cleave": {
518
+ "creditCard": true,
519
+ "onCreditCardTypeChanged": "showCreditCardType"
520
+ }
521
+ }
522
+ }
523
+ }
524
+ }
525
+ ````
526
+ </details>
527
+
528
+ <br>
529
+
530
+
531
+
532
+ # Themes
533
+
534
+ Themes have own options for changing various aspects of the display.
535
+
536
+ ## Bootstrap 4
537
+
538
+ | Option | Default | Description
539
+ | ------------- | ------ | -----
540
+ | `input_size` | `normal` | Changes `input` size, can be `normal`, `small` or `large`
541
+ | `custom_forms` | `false` | Apply Bootstrap custom forms
542
+ | `object_indent` | `true` | Indent nested object elements (use nested `.card` layout)
543
+ | `object_background` | `bg-light` | Bootstrap 4 card background [modifier class](https://getbootstrap.com/docs/4.1/getting-started/introduction/)
544
+ | `object_text` | `''` | Bootstrap 4 card text color modifier class [modifier class](https://getbootstrap.com/docs/4.1/getting-started/introduction/)
545
+ | `table_border` | `false` | Add border to array "table" row and cells
546
+ | `table_zebrastyle` | `false` | Add "zebra style" to array "table" rows
547
+ | `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
548
+
549
+ ## Spectre
550
+
551
+ | Option | Default | Description
552
+ | ------------- | ------ | -----
553
+ | `input_size` | `normal` | Changes `input` size, can be `normal`, `small` or `large`
554
+ | `label_bold` | `true` | Labels in bold
555
+ | `object_indent` | `false` | Indent nested object elements
556
+ | `object_border` | `false` |Add border around object elements
557
+ | `align_bottom` | `false` | Align elements to bottom of flex container
558
+ | `table_border` | `false` | Add border to array "table" row and cells
559
+ | `table_zebrastyle` | `false` | Add "zebra style" to array "table" rows
560
+
561
+ ## Tailwind
562
+
563
+ | Option | Default | Description
564
+ | ------------- | ------ | -----
565
+ | `input_size` | `normal` | Changes `input` size, can be `normal`, `small` or `large`
566
+ | `label_bold` | `false` | Labels in bold
567
+ | `object_panel_default` | `true` | Indicates whether to use rules as default or alternate style
568
+ | `object_indent` | `false` | Indent nested object elements
569
+ | `object_border` | `false` |Add border around object elements
570
+ | `align_bottom` | `false` | Align elements to bottom of flex container
571
+ | `table_border` | `false` | Add border to array "table" row and cells
572
+ | `table_hdiv` | `false` | Add bottom-border to array "table" cells
573
+ | `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