expressa 2.0.14 → 2.0.16

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 (206) hide show
  1. package/.circleci/config.yml +21 -21
  2. package/.eslintrc.json +29 -29
  3. package/LICENSE +21 -21
  4. package/README.md +137 -137
  5. package/auth/index.js +76 -76
  6. package/auth/jwt.js +31 -31
  7. package/controllers/collections.js +258 -258
  8. package/controllers/install.js +105 -105
  9. package/controllers/status.js +43 -43
  10. package/controllers/users.js +52 -52
  11. package/cypress/fixtures/example.json +4 -4
  12. package/cypress/integration/0_install_spec.js +8 -8
  13. package/cypress/integration/custom_collections.js +28 -28
  14. package/cypress/integration/home.js +9 -9
  15. package/cypress/integration/settings.js +34 -34
  16. package/cypress/integration/users.js +61 -61
  17. package/cypress/plugins/index.js +17 -17
  18. package/cypress/support/commands.js +54 -54
  19. package/cypress/support/index.js +20 -20
  20. package/cypress/support/util.js +10 -10
  21. package/cypress.json +4 -4
  22. package/db/cached.js +40 -40
  23. package/db/file.js +112 -112
  24. package/db/memory.js +79 -79
  25. package/db/mongo.js +86 -86
  26. package/db/postgres.js +93 -93
  27. package/doc/authentication.md +38 -38
  28. package/doc/automatic-fields.md +12 -12
  29. package/doc/blogexample.md +16 -16
  30. package/doc/custom-endpoints.md +20 -20
  31. package/doc/database.md +23 -23
  32. package/doc/development.md +33 -33
  33. package/doc/listeners.md +103 -103
  34. package/doc/modules.md +8 -8
  35. package/doc/permissions.md +14 -14
  36. package/doc/relationships.md +65 -65
  37. package/doc/testing.md +47 -47
  38. package/doc/uploading-files.md +53 -53
  39. package/index.js +297 -297
  40. package/listeners.js +65 -65
  41. package/listeners_collection_permissions.js +29 -29
  42. package/listeners_users.js +96 -96
  43. package/listeners_validation.js +43 -43
  44. package/middleware/logging.js +30 -30
  45. package/middleware/permissions.js +41 -47
  46. package/modules/access_keys/access_keys.js +32 -32
  47. package/modules/admin/.babelrc +12 -12
  48. package/modules/admin/.editorconfig +14 -14
  49. package/modules/admin/.eslintignore +5 -5
  50. package/modules/admin/.eslintrc.js +197 -197
  51. package/modules/admin/.postcssrc.js +10 -10
  52. package/modules/admin/.travis.yml +5 -5
  53. package/modules/admin/LICENSE +21 -21
  54. package/modules/admin/README.md +88 -88
  55. package/modules/admin/build/build.js +45 -45
  56. package/modules/admin/build/check-versions.js +64 -64
  57. package/modules/admin/build/utils.js +108 -108
  58. package/modules/admin/build/vue-loader.conf.js +5 -5
  59. package/modules/admin/build/webpack.base.conf.js +108 -108
  60. package/modules/admin/build/webpack.dev.conf.js +95 -95
  61. package/modules/admin/build/webpack.prod.conf.js +171 -171
  62. package/modules/admin/config/dev.env.js +8 -8
  63. package/modules/admin/config/index.js +86 -86
  64. package/modules/admin/config/prod.env.js +5 -5
  65. package/modules/admin/index.html +16 -16
  66. package/modules/admin/package.json +98 -98
  67. package/modules/admin/src/App.vue +11 -11
  68. package/modules/admin/src/api/login.js +26 -26
  69. package/modules/admin/src/api/table.js +9 -9
  70. package/modules/admin/src/components/Breadcrumb/index.vue +79 -79
  71. package/modules/admin/src/components/Hamburger/index.vue +62 -62
  72. package/modules/admin/src/components/JSONEditor.vue +180 -180
  73. package/modules/admin/src/components/SvgIcon/index.vue +43 -43
  74. package/modules/admin/src/icons/index.js +9 -9
  75. package/modules/admin/src/icons/svgo.yml +22 -22
  76. package/modules/admin/src/permission.js +49 -49
  77. package/modules/admin/src/router/index.js +200 -200
  78. package/modules/admin/src/store/getters.js +11 -11
  79. package/modules/admin/src/store/index.js +17 -17
  80. package/modules/admin/src/store/modules/app.js +43 -43
  81. package/modules/admin/src/store/modules/user.js +104 -104
  82. package/modules/admin/src/styles/element-ui.scss +29 -29
  83. package/modules/admin/src/styles/index.scss +78 -78
  84. package/modules/admin/src/styles/mixin.scss +27 -27
  85. package/modules/admin/src/styles/sidebar.scss +133 -133
  86. package/modules/admin/src/styles/transition.scss +46 -46
  87. package/modules/admin/src/styles/variables.scss +4 -4
  88. package/modules/admin/src/utils/auth.js +15 -15
  89. package/modules/admin/src/utils/index.js +74 -74
  90. package/modules/admin/src/utils/request.js +48 -48
  91. package/modules/admin/src/utils/validate.js +31 -31
  92. package/modules/admin/src/views/404.vue +235 -235
  93. package/modules/admin/src/views/Dev.vue +33 -33
  94. package/modules/admin/src/views/EditDocument.vue +116 -116
  95. package/modules/admin/src/views/Endpoints.vue +279 -279
  96. package/modules/admin/src/views/Home.vue +84 -84
  97. package/modules/admin/src/views/Install.vue +79 -79
  98. package/modules/admin/src/views/ListDocuments.vue +72 -72
  99. package/modules/admin/src/views/ListDocuments2.vue +462 -462
  100. package/modules/admin/src/views/ManageListeners.vue +67 -67
  101. package/modules/admin/src/views/ManageMiddleware.vue +43 -43
  102. package/modules/admin/src/views/ManagePermissions.vue +75 -75
  103. package/modules/admin/src/views/ViewRequest.vue +77 -77
  104. package/modules/admin/src/views/form/index.vue +91 -91
  105. package/modules/admin/src/views/layout/Layout.vue +69 -69
  106. package/modules/admin/src/views/layout/components/AppMain.vue +41 -41
  107. package/modules/admin/src/views/layout/components/Navbar.vue +97 -97
  108. package/modules/admin/src/views/layout/components/Sidebar/Item.vue +29 -29
  109. package/modules/admin/src/views/layout/components/Sidebar/Link.vue +39 -39
  110. package/modules/admin/src/views/layout/components/Sidebar/SidebarItem.vue +103 -103
  111. package/modules/admin/src/views/layout/components/Sidebar/index.vue +62 -62
  112. package/modules/admin/src/views/layout/components/index.js +3 -3
  113. package/modules/admin/src/views/layout/mixin/ResizeHandler.js +41 -41
  114. package/modules/admin/src/views/login/index.vue +195 -195
  115. package/modules/admin/src/views/tree/index.vue +77 -77
  116. package/modules/collections/collections.js +39 -39
  117. package/modules/core/core.js +197 -197
  118. package/modules/logging/logging.js +88 -88
  119. package/modules/permissions/permissions.js +106 -106
  120. package/package.json +59 -59
  121. package/scripts/expressa +12 -12
  122. package/scripts/run_cypress_tests.sh +5 -5
  123. package/scripts/run_db_tests.sh +8 -8
  124. package/test/0-install.js +96 -96
  125. package/test/collections.js +431 -423
  126. package/test/collections.querying.js +289 -269
  127. package/test/db.js +258 -250
  128. package/test/db.strings.js +73 -73
  129. package/test/db.updating.js +144 -144
  130. package/test/logging.js +29 -29
  131. package/test/test.js +94 -94
  132. package/test/testserver.js +17 -17
  133. package/test/testutils.js +136 -136
  134. package/test/users.js +425 -425
  135. package/util.js +522 -504
  136. package/modules/admin/dist/favicon.ico +0 -0
  137. package/modules/admin/dist/index.html +0 -1
  138. package/modules/admin/dist/index.html.gz +0 -0
  139. package/modules/admin/dist/static/css/app.9dd57eea.css +0 -1
  140. package/modules/admin/dist/static/css/app.9dd57eea.css.gz +0 -0
  141. package/modules/admin/dist/static/css/chunk-5061.ce0e4bdb.css +0 -1
  142. package/modules/admin/dist/static/css/chunk-5061.ce0e4bdb.css.gz +0 -0
  143. package/modules/admin/dist/static/css/chunk-5b97.7f9cb53e.css +0 -1
  144. package/modules/admin/dist/static/css/chunk-5b97.7f9cb53e.css.gz +0 -0
  145. package/modules/admin/dist/static/css/chunk-621e.b826be8d.css +0 -1
  146. package/modules/admin/dist/static/css/chunk-621e.b826be8d.css.gz +0 -0
  147. package/modules/admin/dist/static/css/chunk-656b.9c828b00.css +0 -1
  148. package/modules/admin/dist/static/css/chunk-656b.9c828b00.css.gz +0 -0
  149. package/modules/admin/dist/static/css/chunk-7291.13514e45.css +0 -0
  150. package/modules/admin/dist/static/css/chunk-7291.13514e45.css.gz +0 -0
  151. package/modules/admin/dist/static/css/chunk-7f29.9c828b00.css +0 -1
  152. package/modules/admin/dist/static/css/chunk-7f29.9c828b00.css.gz +0 -0
  153. package/modules/admin/dist/static/css/chunk-9a95.c647a2ef.css +0 -1
  154. package/modules/admin/dist/static/css/chunk-9a95.c647a2ef.css.gz +0 -0
  155. package/modules/admin/dist/static/css/chunk-b423.5f239333.css +0 -0
  156. package/modules/admin/dist/static/css/chunk-b423.5f239333.css.gz +0 -0
  157. package/modules/admin/dist/static/css/chunk-bd5f.aefa49d7.css +0 -1
  158. package/modules/admin/dist/static/css/chunk-bd5f.aefa49d7.css.gz +0 -0
  159. package/modules/admin/dist/static/css/chunk-e374.025d58bb.css +0 -1
  160. package/modules/admin/dist/static/css/chunk-e374.025d58bb.css.gz +0 -0
  161. package/modules/admin/dist/static/css/chunk-elementUI.3d004d9f.css +0 -1
  162. package/modules/admin/dist/static/css/chunk-elementUI.3d004d9f.css.gz +0 -0
  163. package/modules/admin/dist/static/css/chunk-f075.3a895a1e.css +0 -1
  164. package/modules/admin/dist/static/css/chunk-f075.3a895a1e.css.gz +0 -0
  165. package/modules/admin/dist/static/css/chunk-libs.327ad89e.css +0 -14
  166. package/modules/admin/dist/static/css/chunk-libs.327ad89e.css.gz +0 -0
  167. package/modules/admin/dist/static/fonts/element-icons.6f0a763.ttf +0 -0
  168. package/modules/admin/dist/static/img/404.a57b6f3.png +0 -0
  169. package/modules/admin/dist/static/js/app.e9461593.js +0 -1
  170. package/modules/admin/dist/static/js/app.e9461593.js.gz +0 -0
  171. package/modules/admin/dist/static/js/chunk-09d8.561880e0.js +0 -2
  172. package/modules/admin/dist/static/js/chunk-09d8.561880e0.js.LICENSE.txt +0 -13
  173. package/modules/admin/dist/static/js/chunk-09d8.561880e0.js.LICENSE.txt.gz +0 -0
  174. package/modules/admin/dist/static/js/chunk-09d8.561880e0.js.gz +0 -0
  175. package/modules/admin/dist/static/js/chunk-5061.83e6ccfa.js +0 -1
  176. package/modules/admin/dist/static/js/chunk-5061.83e6ccfa.js.gz +0 -0
  177. package/modules/admin/dist/static/js/chunk-5b97.ac360086.js +0 -1
  178. package/modules/admin/dist/static/js/chunk-5b97.ac360086.js.gz +0 -0
  179. package/modules/admin/dist/static/js/chunk-5e17.a2b69611.js +0 -1
  180. package/modules/admin/dist/static/js/chunk-5e17.a2b69611.js.gz +0 -0
  181. package/modules/admin/dist/static/js/chunk-621e.ccf42393.js +0 -1
  182. package/modules/admin/dist/static/js/chunk-621e.ccf42393.js.gz +0 -0
  183. package/modules/admin/dist/static/js/chunk-656b.9d5b03c0.js +0 -1
  184. package/modules/admin/dist/static/js/chunk-656b.9d5b03c0.js.gz +0 -0
  185. package/modules/admin/dist/static/js/chunk-7291.590524e9.js +0 -1
  186. package/modules/admin/dist/static/js/chunk-7291.590524e9.js.gz +0 -0
  187. package/modules/admin/dist/static/js/chunk-7f29.6ffc142e.js +0 -1
  188. package/modules/admin/dist/static/js/chunk-7f29.6ffc142e.js.gz +0 -0
  189. package/modules/admin/dist/static/js/chunk-9a95.bdd76583.js +0 -1
  190. package/modules/admin/dist/static/js/chunk-9a95.bdd76583.js.gz +0 -0
  191. package/modules/admin/dist/static/js/chunk-b423.387c504c.js +0 -1
  192. package/modules/admin/dist/static/js/chunk-b423.387c504c.js.gz +0 -0
  193. package/modules/admin/dist/static/js/chunk-bd5f.e9509f10.js +0 -1
  194. package/modules/admin/dist/static/js/chunk-bd5f.e9509f10.js.gz +0 -0
  195. package/modules/admin/dist/static/js/chunk-e374.7c87a0dd.js +0 -1
  196. package/modules/admin/dist/static/js/chunk-e374.7c87a0dd.js.gz +0 -0
  197. package/modules/admin/dist/static/js/chunk-e7c3.e5df8ceb.js +0 -1
  198. package/modules/admin/dist/static/js/chunk-e7c3.e5df8ceb.js.gz +0 -0
  199. package/modules/admin/dist/static/js/chunk-elementUI.b0c99c08.js +0 -1
  200. package/modules/admin/dist/static/js/chunk-elementUI.b0c99c08.js.gz +0 -0
  201. package/modules/admin/dist/static/js/chunk-f075.315ceec1.js +0 -1
  202. package/modules/admin/dist/static/js/chunk-f075.315ceec1.js.gz +0 -0
  203. package/modules/admin/dist/static/js/chunk-libs.06c38828.js +0 -2
  204. package/modules/admin/dist/static/js/chunk-libs.06c38828.js.LICENSE.txt +0 -126
  205. package/modules/admin/dist/static/js/chunk-libs.06c38828.js.LICENSE.txt.gz +0 -0
  206. package/modules/admin/dist/static/js/chunk-libs.06c38828.js.gz +0 -0
@@ -1,180 +1,180 @@
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
+ 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,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
+ // 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,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,49 +1,49 @@
1
- import router from './router'
2
- import store from './store'
3
- import NProgress from 'nprogress'
4
- import 'nprogress/nprogress.css'
5
- import { Message } from 'element-ui'
6
- import { getToken } from '@/utils/auth'
7
- import request from '@/utils/request'
8
-
9
- const whiteList = ['/login', '/install']
10
- router.beforeEach((to, from, next) => {
11
- NProgress.start()
12
- if (getToken()) {
13
- if (to.path === '/login') {
14
- next({ path: '/' })
15
- NProgress.done() // if current page is dashboard will not trigger afterEach hook, so manually handle it
16
- } else {
17
- if (store.getters.roles.length === 0) {
18
- store.dispatch('GetInfo').then(res => {
19
- next()
20
- }).catch((err) => {
21
- store.dispatch('FedLogOut').then(() => {
22
- Message.error(err || 'Verification failed, please login again')
23
- next({ path: '/' })
24
- })
25
- })
26
- } else {
27
- next()
28
- }
29
- }
30
- } else {
31
- request({ url: `/status` }).then((res) => {
32
- if (!res.data.installed && to.path !== '/install') {
33
- next(`/install`)
34
- NProgress.done()
35
- } else {
36
- if (whiteList.indexOf(to.path) !== -1) {
37
- next()
38
- } else {
39
- next(`/login?redirect=${to.path}`)
40
- NProgress.done()
41
- }
42
- }
43
- })
44
- }
45
- })
46
-
47
- router.afterEach(() => {
48
- NProgress.done()
49
- })
1
+ import router from './router'
2
+ import store from './store'
3
+ import NProgress from 'nprogress'
4
+ import 'nprogress/nprogress.css'
5
+ import { Message } from 'element-ui'
6
+ import { getToken } from '@/utils/auth'
7
+ import request from '@/utils/request'
8
+
9
+ const whiteList = ['/login', '/install']
10
+ router.beforeEach((to, from, next) => {
11
+ NProgress.start()
12
+ if (getToken()) {
13
+ if (to.path === '/login') {
14
+ next({ path: '/' })
15
+ NProgress.done() // if current page is dashboard will not trigger afterEach hook, so manually handle it
16
+ } else {
17
+ if (store.getters.roles.length === 0) {
18
+ store.dispatch('GetInfo').then(res => {
19
+ next()
20
+ }).catch((err) => {
21
+ store.dispatch('FedLogOut').then(() => {
22
+ Message.error(err || 'Verification failed, please login again')
23
+ next({ path: '/' })
24
+ })
25
+ })
26
+ } else {
27
+ next()
28
+ }
29
+ }
30
+ } else {
31
+ request({ url: `/status` }).then((res) => {
32
+ if (!res.data.installed && to.path !== '/install') {
33
+ next(`/install`)
34
+ NProgress.done()
35
+ } else {
36
+ if (whiteList.indexOf(to.path) !== -1) {
37
+ next()
38
+ } else {
39
+ next(`/login?redirect=${to.path}`)
40
+ NProgress.done()
41
+ }
42
+ }
43
+ })
44
+ }
45
+ })
46
+
47
+ router.afterEach(() => {
48
+ NProgress.done()
49
+ })