expressa 2.0.20 → 2.0.22

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 (230) hide show
  1. package/.circleci/config.yml +21 -21
  2. package/.eslintrc.json +29 -29
  3. package/.vscode/launch.json +19 -0
  4. package/LICENSE +21 -21
  5. package/README.md +137 -137
  6. package/auth/index.js +76 -76
  7. package/auth/jwt.js +31 -31
  8. package/controllers/collections.js +260 -260
  9. package/controllers/install.js +105 -105
  10. package/controllers/status.js +43 -43
  11. package/controllers/users.js +52 -52
  12. package/cypress/fixtures/example.json +4 -4
  13. package/cypress/integration/0_install_spec.js +8 -8
  14. package/cypress/integration/custom_collections.js +30 -30
  15. package/cypress/integration/home.js +9 -9
  16. package/cypress/integration/settings.js +34 -34
  17. package/cypress/integration/users.js +61 -61
  18. package/cypress/plugins/index.js +17 -17
  19. package/cypress/support/commands.js +69 -69
  20. package/cypress/support/index.js +20 -20
  21. package/cypress/support/util.js +10 -10
  22. package/cypress.config.js +18 -18
  23. package/cypress.json +4 -4
  24. package/db/cached.js +44 -40
  25. package/db/file.js +131 -112
  26. package/db/memory.js +92 -79
  27. package/db/mongo.js +93 -86
  28. package/db/postgres.js +100 -93
  29. package/doc/authentication.md +38 -38
  30. package/doc/automatic-fields.md +12 -12
  31. package/doc/blogexample.md +16 -16
  32. package/doc/custom-endpoints.md +20 -20
  33. package/doc/database.md +23 -23
  34. package/doc/development.md +33 -33
  35. package/doc/listeners.md +103 -103
  36. package/doc/modules.md +8 -8
  37. package/doc/permissions.md +14 -14
  38. package/doc/relationships.md +65 -65
  39. package/doc/testing.md +47 -47
  40. package/doc/uploading-files.md +53 -53
  41. package/index.js +297 -297
  42. package/listeners.js +65 -65
  43. package/listeners_collection_permissions.js +29 -29
  44. package/listeners_users.js +96 -96
  45. package/listeners_validation.js +43 -43
  46. package/middleware/logging.js +30 -30
  47. package/middleware/permissions.js +41 -41
  48. package/modules/access_keys/access_keys.js +32 -32
  49. package/modules/admin/.babelrc +19 -19
  50. package/modules/admin/.editorconfig +14 -14
  51. package/modules/admin/.eslintignore +5 -5
  52. package/modules/admin/.eslintrc.js +197 -197
  53. package/modules/admin/.postcssrc.js +10 -10
  54. package/modules/admin/.travis.yml +5 -5
  55. package/modules/admin/LICENSE +21 -21
  56. package/modules/admin/README.md +88 -88
  57. package/modules/admin/build/build.js +46 -46
  58. package/modules/admin/build/check-versions.js +64 -64
  59. package/modules/admin/build/utils.js +109 -109
  60. package/modules/admin/build/vue-loader.conf.js +5 -5
  61. package/modules/admin/build/webpack.base.conf.js +112 -112
  62. package/modules/admin/build/webpack.dev.conf.js +95 -95
  63. package/modules/admin/build/webpack.prod.conf.js +112 -112
  64. package/modules/admin/config/dev.env.js +8 -8
  65. package/modules/admin/config/index.js +86 -86
  66. package/modules/admin/config/prod.env.js +5 -5
  67. package/modules/admin/dist/css/136.1055b646.css +69 -0
  68. package/modules/admin/dist/css/136.1055b646.css.gz +0 -0
  69. package/modules/admin/dist/css/{430.8c9b0482.css → 165.e83d8cfe.css} +4 -4
  70. package/modules/admin/dist/css/165.e83d8cfe.css.gz +0 -0
  71. package/modules/admin/dist/css/220.e946bda7.css.gz +0 -0
  72. package/modules/admin/dist/css/{197.7a90435e.css → 236.e66ce8d8.css} +4 -4
  73. package/modules/admin/dist/css/236.e66ce8d8.css.gz +0 -0
  74. package/modules/admin/dist/css/338.1fd9d57c.css.gz +0 -0
  75. package/modules/admin/dist/css/{566.7a90435e.css → 566.e66ce8d8.css} +4 -4
  76. package/modules/admin/dist/css/566.e66ce8d8.css.gz +0 -0
  77. package/modules/admin/dist/css/76.46fe6799.css +66 -0
  78. package/modules/admin/dist/css/76.46fe6799.css.gz +0 -0
  79. package/modules/admin/dist/css/807.f450521e.css +1 -0
  80. package/modules/admin/dist/css/807.f450521e.css.gz +0 -0
  81. package/modules/admin/dist/css/{750.4086915d.css.gz → 913.4086915d.css.gz} +0 -0
  82. package/modules/admin/dist/css/{app.eba5f5e2.css → app.1c3232a3.css} +25 -25
  83. package/modules/admin/dist/css/app.1c3232a3.css.gz +0 -0
  84. package/modules/admin/dist/index.html +1 -1
  85. package/modules/admin/dist/static/js/115.108d0dd5.js +1 -0
  86. package/modules/admin/dist/static/js/115.108d0dd5.js.gz +0 -0
  87. package/modules/admin/dist/static/js/136.1f9f4cb0.js +1 -0
  88. package/modules/admin/dist/static/js/136.1f9f4cb0.js.gz +0 -0
  89. package/modules/admin/dist/static/js/165.b3d51941.js +1 -0
  90. package/modules/admin/dist/static/js/165.b3d51941.js.gz +0 -0
  91. package/modules/admin/dist/static/js/220.02b2cd49.js +1 -0
  92. package/modules/admin/dist/static/js/220.02b2cd49.js.gz +0 -0
  93. package/modules/admin/dist/static/js/236.98c79868.js +1 -0
  94. package/modules/admin/dist/static/js/236.98c79868.js.gz +0 -0
  95. package/modules/admin/dist/static/js/338.4ba49501.js +1 -0
  96. package/modules/admin/dist/static/js/338.4ba49501.js.gz +0 -0
  97. package/modules/admin/dist/static/js/381.a05421de.js +1 -0
  98. package/modules/admin/dist/static/js/381.a05421de.js.gz +0 -0
  99. package/modules/admin/dist/static/js/412.0914ff23.js +1 -0
  100. package/modules/admin/dist/static/js/412.0914ff23.js.gz +0 -0
  101. package/modules/admin/dist/static/js/533.507df4cb.js +1 -0
  102. package/modules/admin/dist/static/js/533.507df4cb.js.gz +0 -0
  103. package/modules/admin/dist/static/js/556.d7586b89.js +1 -0
  104. package/modules/admin/dist/static/js/556.d7586b89.js.gz +0 -0
  105. package/modules/admin/dist/static/js/76.811d0e96.js +1 -0
  106. package/modules/admin/dist/static/js/76.811d0e96.js.gz +0 -0
  107. package/modules/admin/dist/static/js/807.8b7455a7.js +1 -0
  108. package/modules/admin/dist/static/js/807.8b7455a7.js.gz +0 -0
  109. package/modules/admin/dist/static/js/913.8b376386.js +1 -0
  110. package/modules/admin/dist/static/js/913.8b376386.js.gz +0 -0
  111. package/modules/admin/dist/static/js/app.834abee4.js +2 -0
  112. package/modules/admin/dist/static/js/{app.ea86ae11.js.LICENSE.txt → app.834abee4.js.LICENSE.txt} +3 -3
  113. package/modules/admin/dist/static/js/app.834abee4.js.LICENSE.txt.gz +0 -0
  114. package/modules/admin/dist/static/js/app.834abee4.js.gz +0 -0
  115. package/modules/admin/index.html +16 -16
  116. package/modules/admin/package.json +102 -101
  117. package/modules/admin/src/App.vue +11 -11
  118. package/modules/admin/src/api/login.js +26 -26
  119. package/modules/admin/src/api/table.js +9 -9
  120. package/modules/admin/src/components/Breadcrumb/index.vue +79 -79
  121. package/modules/admin/src/components/Hamburger/index.vue +62 -62
  122. package/modules/admin/src/components/JSONEditor.vue +206 -180
  123. package/modules/admin/src/components/SvgIcon/index.vue +43 -43
  124. package/modules/admin/src/icons/index.js +9 -9
  125. package/modules/admin/src/icons/svgo.yml +22 -22
  126. package/modules/admin/src/main.js +42 -42
  127. package/modules/admin/src/permission.js +49 -49
  128. package/modules/admin/src/router/index.js +200 -200
  129. package/modules/admin/src/store/getters.js +11 -11
  130. package/modules/admin/src/store/index.js +17 -17
  131. package/modules/admin/src/store/modules/app.js +43 -43
  132. package/modules/admin/src/store/modules/user.js +104 -104
  133. package/modules/admin/src/styles/element-ui.scss +29 -29
  134. package/modules/admin/src/styles/index.scss +78 -78
  135. package/modules/admin/src/styles/mixin.scss +27 -27
  136. package/modules/admin/src/styles/sidebar.scss +133 -133
  137. package/modules/admin/src/styles/transition.scss +46 -46
  138. package/modules/admin/src/styles/variables.scss +4 -4
  139. package/modules/admin/src/utils/auth.js +15 -15
  140. package/modules/admin/src/utils/index.js +74 -74
  141. package/modules/admin/src/utils/request.js +47 -48
  142. package/modules/admin/src/utils/validate.js +31 -31
  143. package/modules/admin/src/views/404.vue +235 -235
  144. package/modules/admin/src/views/Dev.vue +33 -33
  145. package/modules/admin/src/views/EditDocument.vue +121 -121
  146. package/modules/admin/src/views/Endpoints.vue +279 -279
  147. package/modules/admin/src/views/Home.vue +84 -84
  148. package/modules/admin/src/views/Install.vue +79 -79
  149. package/modules/admin/src/views/ListDocuments.vue +72 -72
  150. package/modules/admin/src/views/ListDocuments2.vue +467 -467
  151. package/modules/admin/src/views/ManageListeners.vue +67 -67
  152. package/modules/admin/src/views/ManageMiddleware.vue +43 -43
  153. package/modules/admin/src/views/ManagePermissions.vue +75 -75
  154. package/modules/admin/src/views/ViewRequest.vue +77 -77
  155. package/modules/admin/src/views/form/index.vue +91 -91
  156. package/modules/admin/src/views/layout/Layout.vue +69 -69
  157. package/modules/admin/src/views/layout/components/AppMain.vue +41 -41
  158. package/modules/admin/src/views/layout/components/Navbar.vue +97 -97
  159. package/modules/admin/src/views/layout/components/Sidebar/Item.vue +29 -29
  160. package/modules/admin/src/views/layout/components/Sidebar/Link.vue +39 -39
  161. package/modules/admin/src/views/layout/components/Sidebar/SidebarItem.vue +103 -103
  162. package/modules/admin/src/views/layout/components/Sidebar/index.vue +62 -62
  163. package/modules/admin/src/views/layout/components/index.js +3 -3
  164. package/modules/admin/src/views/layout/mixin/ResizeHandler.js +41 -41
  165. package/modules/admin/src/views/login/index.vue +195 -195
  166. package/modules/admin/src/views/tree/index.vue +77 -77
  167. package/modules/collections/collections.js +39 -39
  168. package/modules/core/core.js +197 -197
  169. package/modules/logging/logging.js +88 -88
  170. package/modules/permissions/permissions.js +106 -106
  171. package/package.json +59 -59
  172. package/scripts/expressa +12 -12
  173. package/scripts/run_cypress_tests.sh +35 -35
  174. package/scripts/run_db_tests.sh +8 -8
  175. package/test/0-install.js +96 -96
  176. package/test/collections.js +431 -431
  177. package/test/collections.querying.js +288 -288
  178. package/test/db.js +258 -258
  179. package/test/db.strings.js +73 -73
  180. package/test/db.updating.js +186 -144
  181. package/test/logging.js +29 -29
  182. package/test/test.js +93 -93
  183. package/test/testserver.js +30 -17
  184. package/test/testutils.js +136 -136
  185. package/test/users.js +425 -425
  186. package/util.js +522 -522
  187. package/modules/admin/dist/css/197.7a90435e.css.gz +0 -0
  188. package/modules/admin/dist/css/430.8c9b0482.css.gz +0 -0
  189. package/modules/admin/dist/css/451.c6646d20.css +0 -1
  190. package/modules/admin/dist/css/451.c6646d20.css.gz +0 -0
  191. package/modules/admin/dist/css/566.7a90435e.css.gz +0 -0
  192. package/modules/admin/dist/css/569.f7d5c7d5.css +0 -37
  193. package/modules/admin/dist/css/569.f7d5c7d5.css.gz +0 -0
  194. package/modules/admin/dist/css/572.74d8e965.css +0 -34
  195. package/modules/admin/dist/css/572.74d8e965.css.gz +0 -0
  196. package/modules/admin/dist/css/651.e946bda7.css.gz +0 -0
  197. package/modules/admin/dist/css/950.1fd9d57c.css.gz +0 -0
  198. package/modules/admin/dist/css/app.eba5f5e2.css.gz +0 -0
  199. package/modules/admin/dist/static/js/197.e511d91e.js +0 -1
  200. package/modules/admin/dist/static/js/197.e511d91e.js.gz +0 -0
  201. package/modules/admin/dist/static/js/430.b3941f30.js +0 -1
  202. package/modules/admin/dist/static/js/430.b3941f30.js.gz +0 -0
  203. package/modules/admin/dist/static/js/451.645974a8.js +0 -1
  204. package/modules/admin/dist/static/js/451.645974a8.js.gz +0 -0
  205. package/modules/admin/dist/static/js/460.962d5bc0.js +0 -1
  206. package/modules/admin/dist/static/js/460.962d5bc0.js.gz +0 -0
  207. package/modules/admin/dist/static/js/550.f27feb23.js +0 -1
  208. package/modules/admin/dist/static/js/550.f27feb23.js.gz +0 -0
  209. package/modules/admin/dist/static/js/556.1e08866a.js +0 -1
  210. package/modules/admin/dist/static/js/556.1e08866a.js.gz +0 -0
  211. package/modules/admin/dist/static/js/569.0fecfbee.js +0 -1
  212. package/modules/admin/dist/static/js/569.0fecfbee.js.gz +0 -0
  213. package/modules/admin/dist/static/js/572.13392e1d.js +0 -1
  214. package/modules/admin/dist/static/js/572.13392e1d.js.gz +0 -0
  215. package/modules/admin/dist/static/js/603.7b34a650.js +0 -1
  216. package/modules/admin/dist/static/js/603.7b34a650.js.gz +0 -0
  217. package/modules/admin/dist/static/js/651.564b24b6.js +0 -1
  218. package/modules/admin/dist/static/js/651.564b24b6.js.gz +0 -0
  219. package/modules/admin/dist/static/js/653.02ec1098.js +0 -1
  220. package/modules/admin/dist/static/js/653.02ec1098.js.gz +0 -0
  221. package/modules/admin/dist/static/js/750.50c950da.js +0 -1
  222. package/modules/admin/dist/static/js/750.50c950da.js.gz +0 -0
  223. package/modules/admin/dist/static/js/950.d4ff0a18.js +0 -1
  224. package/modules/admin/dist/static/js/950.d4ff0a18.js.gz +0 -0
  225. package/modules/admin/dist/static/js/app.ea86ae11.js +0 -2
  226. package/modules/admin/dist/static/js/app.ea86ae11.js.LICENSE.txt.gz +0 -0
  227. package/modules/admin/dist/static/js/app.ea86ae11.js.gz +0 -0
  228. /package/modules/admin/dist/css/{651.e946bda7.css → 220.e946bda7.css} +0 -0
  229. /package/modules/admin/dist/css/{950.1fd9d57c.css → 338.1fd9d57c.css} +0 -0
  230. /package/modules/admin/dist/css/{750.4086915d.css → 913.4086915d.css} +0 -0
@@ -1,180 +1,206 @@
1
- <template>
2
- <div>
3
- <div class="jsoneditor-vue" />
4
- </div>
5
- </template>
6
-
7
- <script>
8
- const { JSONEditor } = require('@json-editor/json-editor/dist/jsoneditor')
9
- import 'json-schema-editor'
10
- export default {
11
- props: {
12
- value: {
13
- type: Object,
14
- default: () => {}
15
- },
16
- schema: {
17
- type: Object,
18
- default: () => {}
19
- }
20
- },
21
- data() {
22
- return {
23
- editor: null,
24
- error: false,
25
- json: this.value,
26
- internalChange: false
27
- }
28
- },
29
- watch: {
30
- /* value: {
31
- handler: 'update'
32
- } */
33
- },
34
- mounted() {
35
- this.update()
36
- },
37
- methods: {
38
- update() {
39
- var options = {
40
- schema: this.schema,
41
- startval: this.value,
42
- theme: 'bootstrap4',
43
- iconlib: 'materialicons',
44
- required_by_default: true,
45
- }
46
- if (this.editor) {
47
- this.editor.destroy()
48
- }
49
- this.editor = new JSONEditor(this.$el.querySelector('.jsoneditor-vue'), options)
50
- let first = true
51
- this.editor.on('change', () => {
52
- if (first) {
53
- first = false
54
- return
55
- }
56
- this.$emit('input', this.editor.getValue())
57
- })
58
-
59
- const makeEditJsonTextAreaExpandable = () => {
60
- const textarea = document.querySelector('.je-modal .je-edit-json--textarea')
61
- textarea.classList.remove('je-edit-json--textarea') // INFO: Had to remove this class to remove height and width property
62
- textarea.classList.add('expandable-textarea')
63
- }
64
-
65
- makeEditJsonTextAreaExpandable()
66
- },
67
- onSave() {
68
- this.$emit('json-save', this.json)
69
- }
70
- }
71
- }
72
-
73
- if (JSONEditor) {
74
- JSONEditor.defaults.resolvers.unshift(function(schema) {
75
- if (schema.type === 'object' && schema.format === 'schema') {
76
- return 'schema'
77
- }
78
-
79
- // If no valid editor is returned, the next resolver function will be used
80
- })
81
-
82
- JSONEditor.defaults.editors.schema = class schema extends JSONEditor.AbstractEditor {
83
- setValue(value, initial) {
84
- this.value = value
85
- this.schemaeditor.setValue(value)
86
- this.onChange()
87
- }
88
-
89
- getValue() {
90
- if (typeof this.schemaeditor !== 'undefined') { return this.schemaeditor.getValue() } else { return {} }
91
- }
92
-
93
- register() {
94
- super.register()
95
- if (!this.input) return
96
- this.input.setAttribute('name', this.formname)
97
- }
98
- unregister() {
99
- super.unregister()
100
- if (!this.input) return
101
- this.input.removeAttribute('name')
102
- }
103
- getNumColumns() {
104
- return 12
105
- }
106
- build() {
107
- var self = this
108
- if (!this.options.compact) {
109
- this.label = this.header = this.theme.getFormInputLabel(this.getTitle())
110
- }
111
- if (this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description)
112
- if (this.options.compact) this.container.className += ' compact'
113
-
114
- this.input = document.createElement('div')
115
- this.control = this.theme.getFormControl(this.label, this.input, this.description)
116
-
117
- if (this.schema.readOnly || this.schema.readonly) {
118
- this.always_disabled = true
119
- this.input.disabled = true
120
- }
121
-
122
- this.container.appendChild(this.control)
123
-
124
- this.schemaeditor = new window.JSONSchemaEditor(this.input, {
125
- startval: {}
126
- })
127
- this.schemaeditor.on('change', function() {
128
- self.onChange(true)
129
- })
130
- }
131
- enable() {
132
- if (!this.always_disabled) {
133
- this.input.disabled = false
134
- }
135
-
136
- super.enable()
137
- }
138
- disable() {
139
- this.input.disabled = true
140
- super.disable()
141
- }
142
- destroy() {
143
- if (this.label && this.label.parentNode) this.label.parentNode.removeChild(this.label)
144
- if (this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description)
145
- if (this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input)
146
- super.destroy()
147
- }
148
- }
149
- }
150
-
151
- </script>
152
-
153
- <style>
154
- .expandable-textarea {
155
- display: block;
156
- min-height: 250px;
157
- min-width: 250px;
158
- resize: both !important;
159
- }
160
- .jsoneditor-vue img {
161
- border: 1px solid #ddd;
162
- border-radius: 4px;
163
- padding: 5px;
164
- width: 150px;
165
- }
166
- .jsoneditor-vue img:hover {
167
- box-shadow: 0 0 2px 1px rgba(0, 140, 186, 0.5);
168
- }
169
- .jsoneditor-vue button.btn {
170
- font-size: 14px !important;
171
- padding: 3px;
172
- }
173
- .jsoneditor-vue .form-control-label, label {
174
- font-weight: bold;
175
- }
176
- .jsoneditor-vue input[type="checkbox"] {
177
- margin-right: 5px;
178
- margin-top: 3px;
179
- }
180
- </style>
1
+ <template>
2
+ <div>
3
+ <div class="jsoneditor-vue" />
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ const { JSONEditor } = require('@json-editor/json-editor/dist/jsoneditor')
9
+ import 'json-schema-editor'
10
+ export default {
11
+ props: {
12
+ value: {
13
+ type: Object,
14
+ default: () => {}
15
+ },
16
+ schema: {
17
+ type: Object,
18
+ default: () => {}
19
+ }
20
+ },
21
+ data() {
22
+ return {
23
+ editor: null,
24
+ error: false,
25
+ json: this.value,
26
+ internalChange: false
27
+ }
28
+ },
29
+ watch: {
30
+ /* value: {
31
+ handler: 'update'
32
+ } */
33
+ },
34
+ mounted() {
35
+ this.update()
36
+ },
37
+ methods: {
38
+ update() {
39
+ var options = {
40
+ schema: this.schema,
41
+ startval: this.value,
42
+ theme: 'bootstrap4',
43
+ iconlib: 'materialicons',
44
+ required_by_default: true,
45
+ }
46
+ if (this.editor) {
47
+ this.editor.destroy()
48
+ }
49
+ this.editor = new JSONEditor(this.$el.querySelector('.jsoneditor-vue'), options)
50
+ let first = true
51
+ this.editor.on('change', () => {
52
+ if (first) {
53
+ first = false
54
+ return
55
+ }
56
+ this.$emit('input', this.editor.getValue())
57
+ })
58
+ },
59
+ onSave() {
60
+ this.$emit('json-save', this.json)
61
+ }
62
+ }
63
+ }
64
+
65
+ if (JSONEditor) {
66
+ JSONEditor.defaults.resolvers.unshift(function(schema) {
67
+ if (schema.type === 'object' && schema.format === 'schema') {
68
+ return 'schema'
69
+ }
70
+
71
+ // If no valid editor is returned, the next resolver function will be used
72
+ })
73
+
74
+ JSONEditor.defaults.editors.schema = class schema extends JSONEditor.AbstractEditor {
75
+ setValue(value, initial) {
76
+ this.value = value
77
+ this.schemaeditor.setValue(value)
78
+ this.onChange()
79
+ }
80
+
81
+ getValue() {
82
+ if (typeof this.schemaeditor !== 'undefined') { return this.schemaeditor.getValue() } else { return {} }
83
+ }
84
+
85
+ register() {
86
+ super.register()
87
+ if (!this.input) return
88
+ this.input.setAttribute('name', this.formname)
89
+ }
90
+ unregister() {
91
+ super.unregister()
92
+ if (!this.input) return
93
+ this.input.removeAttribute('name')
94
+ }
95
+ getNumColumns() {
96
+ return 12
97
+ }
98
+ build() {
99
+ var self = this
100
+ if (!this.options.compact) {
101
+ this.label = this.header = this.theme.getFormInputLabel(this.getTitle())
102
+ }
103
+ if (this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description)
104
+ if (this.options.compact) this.container.className += ' compact'
105
+
106
+ this.input = document.createElement('div')
107
+ this.control = this.theme.getFormControl(this.label, this.input, this.description)
108
+
109
+ if (this.schema.readOnly || this.schema.readonly) {
110
+ this.always_disabled = true
111
+ this.input.disabled = true
112
+ }
113
+
114
+ this.container.appendChild(this.control)
115
+
116
+ this.schemaeditor = new window.JSONSchemaEditor(this.input, {
117
+ startval: {}
118
+ })
119
+ this.schemaeditor.on('change', function() {
120
+ self.onChange(true)
121
+ })
122
+ }
123
+ enable() {
124
+ if (!this.always_disabled) {
125
+ this.input.disabled = false
126
+ }
127
+
128
+ super.enable()
129
+ }
130
+ disable() {
131
+ this.input.disabled = true
132
+ super.disable()
133
+ }
134
+ destroy() {
135
+ if (this.label && this.label.parentNode) this.label.parentNode.removeChild(this.label)
136
+ if (this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description)
137
+ if (this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input)
138
+ super.destroy()
139
+ }
140
+ }
141
+ }
142
+
143
+ </script>
144
+
145
+ <style>
146
+ /* Override JSONEditor's textarea styles to make it expandable */
147
+ /* Use high specificity to override inline styles */
148
+ .jsoneditor-vue .je-modal textarea.form-control.je-edit-json--textarea[id] {
149
+ resize: both !important;
150
+ min-height: 250px !important;
151
+ min-width: 250px !important;
152
+ /* Add padding to create a larger hit area for the resize handle */
153
+ padding-right: 20px !important;
154
+ padding-bottom: 20px !important;
155
+ }
156
+
157
+ /* Make the resize handle easier to grab with larger hit area and clear visibility */
158
+ .jsoneditor-vue .je-modal textarea.form-control.je-edit-json--textarea[id]::-webkit-resizer {
159
+ width: 20px !important;
160
+ height: 20px !important;
161
+ /* Position it in the corner of the larger hit area */
162
+ margin-right: -20px !important;
163
+ margin-bottom: -20px !important;
164
+ /* Use border to create visible resize handle */
165
+ border-right: 2px solid #999 !important;
166
+ border-bottom: 2px solid #999 !important;
167
+ background: transparent !important;
168
+ }
169
+
170
+ /* Alternative approach - add a visible corner indicator using ::after pseudo-element */
171
+ .jsoneditor-vue .je-modal textarea.form-control.je-edit-json--textarea[id] {
172
+ position: relative !important;
173
+ }
174
+
175
+ .jsoneditor-vue .je-modal textarea.form-control.je-edit-json--textarea[id]::after {
176
+ content: "⋰⋰⋰" !important;
177
+ position: absolute !important;
178
+ bottom: 2px !important;
179
+ right: 2px !important;
180
+ font-size: 8px !important;
181
+ line-height: 6px !important;
182
+ color: #999 !important;
183
+ pointer-events: none !important;
184
+ transform: rotate(45deg) !important;
185
+ }
186
+ .jsoneditor-vue img {
187
+ border: 1px solid #ddd;
188
+ border-radius: 4px;
189
+ padding: 5px;
190
+ width: 150px;
191
+ }
192
+ .jsoneditor-vue img:hover {
193
+ box-shadow: 0 0 2px 1px rgba(0, 140, 186, 0.5);
194
+ }
195
+ .jsoneditor-vue button.btn {
196
+ font-size: 14px !important;
197
+ padding: 3px;
198
+ }
199
+ .jsoneditor-vue .form-control-label, label {
200
+ font-weight: bold;
201
+ }
202
+ .jsoneditor-vue input[type="checkbox"] {
203
+ margin-right: 5px;
204
+ margin-top: 3px;
205
+ }
206
+ </style>
@@ -1,43 +1,43 @@
1
- <template>
2
- <svg :class="svgClass" aria-hidden="true">
3
- <use :xlink:href="iconName" />
4
- </svg>
5
- </template>
6
-
7
- <script>
8
- export default {
9
- name: 'SvgIcon',
10
- props: {
11
- iconClass: {
12
- type: String,
13
- required: true
14
- },
15
- className: {
16
- type: String,
17
- default: ''
18
- }
19
- },
20
- computed: {
21
- iconName() {
22
- return `#icon-${this.iconClass}`
23
- },
24
- svgClass() {
25
- if (this.className) {
26
- return 'svg-icon ' + this.className
27
- } else {
28
- return 'svg-icon'
29
- }
30
- }
31
- }
32
- }
33
- </script>
34
-
35
- <style scoped>
36
- .svg-icon {
37
- width: 1em;
38
- height: 1em;
39
- vertical-align: -0.15em;
40
- fill: currentColor;
41
- overflow: hidden;
42
- }
43
- </style>
1
+ <template>
2
+ <svg :class="svgClass" aria-hidden="true">
3
+ <use :xlink:href="iconName" />
4
+ </svg>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'SvgIcon',
10
+ props: {
11
+ iconClass: {
12
+ type: String,
13
+ required: true
14
+ },
15
+ className: {
16
+ type: String,
17
+ default: ''
18
+ }
19
+ },
20
+ computed: {
21
+ iconName() {
22
+ return `#icon-${this.iconClass}`
23
+ },
24
+ svgClass() {
25
+ if (this.className) {
26
+ return 'svg-icon ' + this.className
27
+ } else {
28
+ return 'svg-icon'
29
+ }
30
+ }
31
+ }
32
+ }
33
+ </script>
34
+
35
+ <style scoped>
36
+ .svg-icon {
37
+ width: 1em;
38
+ height: 1em;
39
+ vertical-align: -0.15em;
40
+ fill: currentColor;
41
+ overflow: hidden;
42
+ }
43
+ </style>
@@ -1,9 +1,9 @@
1
- import Vue from 'vue'
2
- import SvgIcon from '@/components/SvgIcon' // svg组件
3
-
4
- // register globally
5
- Vue.component('svg-icon', SvgIcon)
6
-
7
- const requireAll = requireContext => requireContext.keys().map(requireContext)
8
- const req = require.context('./svg', false, /\.svg$/)
9
- requireAll(req)
1
+ import Vue from 'vue'
2
+ import SvgIcon from '@/components/SvgIcon' // svg组件
3
+
4
+ // eslint-disable-next-line vue/component-definition-name-casing
5
+ Vue.component('svg-icon', SvgIcon)
6
+
7
+ const requireAll = requireContext => requireContext.keys().map(requireContext)
8
+ const req = require.context('./svg', false, /\.svg$/)
9
+ requireAll(req)
@@ -1,22 +1,22 @@
1
- # replace default config
2
-
3
- # multipass: true
4
- # full: true
5
-
6
- plugins:
7
-
8
- # - name
9
- #
10
- # or:
11
- # - name: false
12
- # - name: true
13
- #
14
- # or:
15
- # - name:
16
- # param1: 1
17
- # param2: 2
18
-
19
- - removeAttrs:
20
- attrs:
21
- - 'fill'
22
- - 'fill-rule'
1
+ # replace default config
2
+
3
+ # multipass: true
4
+ # full: true
5
+
6
+ plugins:
7
+
8
+ # - name
9
+ #
10
+ # or:
11
+ # - name: false
12
+ # - name: true
13
+ #
14
+ # or:
15
+ # - name:
16
+ # param1: 1
17
+ # param2: 2
18
+
19
+ - removeAttrs:
20
+ attrs:
21
+ - 'fill'
22
+ - 'fill-rule'
@@ -1,42 +1,42 @@
1
- import Vue from 'vue'
2
-
3
- import 'normalize.css/normalize.css' // A modern alternative to CSS resets
4
-
5
- import ElementUI from 'element-ui'
6
- import 'element-ui/lib/theme-chalk/index.css'
7
- import 'element-ui/lib/theme-chalk/icon.css'
8
- import locale from 'element-ui/lib/locale/lang/en' // lang i18n
9
-
10
- import '@/styles/index.scss' // global css
11
-
12
- import App from './App'
13
- import router from './router'
14
- import store from './store'
15
-
16
- import 'bootstrap'
17
- import 'bootstrap/dist/css/bootstrap.min.css'
18
- import 'bootstrap/dist/css/bootstrap-grid.min.css'
19
- import 'vue-material-design-icons/styles.css'
20
-
21
- import '@/icons' // icon
22
- import '@/permission' // permission control
23
-
24
- import { VuePlugin } from 'vuera'
25
-
26
- import Unicon from 'vue-unicons/dist/vue-unicons-vue2.umd'
27
- import { uniDatabase, uniHome, uniUsersAlt, uniShieldCheck, uniBookOpen, uniDiary, uniFlask, uniCog, uniPlus, uniLink } from 'vue-unicons/dist/icons'
28
-
29
- Unicon.add([uniDatabase, uniHome, uniUsersAlt, uniShieldCheck, uniBookOpen, uniDiary, uniFlask, uniCog, uniPlus, uniLink])
30
- Vue.use(Unicon)
31
-
32
- Vue.use(ElementUI, { locale })
33
- Vue.use(VuePlugin)
34
-
35
- Vue.config.productionTip = false
36
-
37
- new Vue({
38
- el: '#app',
39
- router,
40
- store,
41
- render: h => h(App)
42
- })
1
+ import Vue from 'vue'
2
+
3
+ import 'normalize.css/normalize.css' // A modern alternative to CSS resets
4
+
5
+ import ElementUI from 'element-ui'
6
+ import 'element-ui/lib/theme-chalk/index.css'
7
+ import 'element-ui/lib/theme-chalk/icon.css'
8
+ import locale from 'element-ui/lib/locale/lang/en' // lang i18n
9
+
10
+ import '@/styles/index.scss' // global css
11
+
12
+ import App from './App'
13
+ import router from './router'
14
+ import store from './store'
15
+
16
+ import 'bootstrap'
17
+ import 'bootstrap/dist/css/bootstrap.min.css'
18
+ import 'bootstrap/dist/css/bootstrap-grid.min.css'
19
+ import 'vue-material-design-icons/styles.css'
20
+
21
+ import '@/icons' // icon
22
+ import '@/permission' // permission control
23
+
24
+ import { VuePlugin } from 'vuera'
25
+
26
+ import Unicon from 'vue-unicons/dist/vue-unicons-vue2.umd'
27
+ import { uniDatabase, uniHome, uniUsersAlt, uniShieldCheck, uniBookOpen, uniDiary, uniFlask, uniCog, uniPlus, uniLink } from 'vue-unicons/dist/icons'
28
+
29
+ Unicon.add([uniDatabase, uniHome, uniUsersAlt, uniShieldCheck, uniBookOpen, uniDiary, uniFlask, uniCog, uniPlus, uniLink])
30
+ Vue.use(Unicon)
31
+
32
+ Vue.use(ElementUI, { locale })
33
+ Vue.use(VuePlugin)
34
+
35
+ Vue.config.productionTip = false
36
+
37
+ new Vue({
38
+ el: '#app',
39
+ router,
40
+ store,
41
+ render: h => h(App)
42
+ })