@saltcorn/server 0.7.4-beta.3 → 0.8.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app.js +43 -22
- package/auth/admin.js +173 -74
- package/auth/routes.js +67 -28
- package/locales/en.json +54 -2
- package/locales/es.json +134 -134
- package/locales/ru.json +32 -5
- package/markup/admin.js +40 -38
- package/markup/forms.js +4 -3
- package/package.json +8 -7
- package/public/diagram_utils.js +530 -0
- package/public/gridedit.js +4 -1
- package/public/jquery-menu-editor.min.js +112 -112
- package/public/saltcorn-common.js +114 -26
- package/public/saltcorn.css +27 -10
- package/public/saltcorn.js +223 -76
- package/restart_watcher.js +1 -0
- package/routes/actions.js +20 -6
- package/routes/admin.js +243 -82
- package/routes/api.js +19 -2
- package/routes/common_lists.js +137 -134
- package/routes/diagram.js +362 -35
- package/routes/fields.js +4 -1
- package/routes/files.js +137 -101
- package/routes/homepage.js +2 -2
- package/routes/infoarch.js +2 -2
- package/routes/list.js +4 -4
- package/routes/page.js +16 -3
- package/routes/pageedit.js +22 -14
- package/routes/scapi.js +1 -1
- package/routes/search.js +1 -1
- package/routes/tables.js +4 -5
- package/routes/tag_entries.js +31 -10
- package/routes/tags.js +36 -32
- package/routes/tenant.js +98 -36
- package/routes/utils.js +72 -20
- package/routes/view.js +0 -1
- package/routes/viewedit.js +55 -22
- package/serve.js +5 -0
- package/tests/admin.test.js +2 -0
- package/tests/auth.test.js +20 -0
- package/tests/files.test.js +11 -20
- package/tests/tenant.test.js +4 -2
package/routes/common_lists.js
CHANGED
|
@@ -8,7 +8,9 @@ const {
|
|
|
8
8
|
settingsDropdown,
|
|
9
9
|
post_dropdown_item,
|
|
10
10
|
} = require("@saltcorn/markup");
|
|
11
|
-
|
|
11
|
+
const {
|
|
12
|
+
get_base_url,
|
|
13
|
+
} = require("./utils.js");
|
|
12
14
|
const { h4, p, div, a, input, text } = require("@saltcorn/markup/tags");
|
|
13
15
|
|
|
14
16
|
/**
|
|
@@ -46,52 +48,52 @@ const tablesList = async (tables, req, { tagId, domId, showList } = {}) => {
|
|
|
46
48
|
const getRole = (rid) => roles.find((r) => r.id === rid).role;
|
|
47
49
|
return tables.length > 0
|
|
48
50
|
? mkTable(
|
|
49
|
-
|
|
50
|
-
{
|
|
51
|
-
label: req.__("Name"),
|
|
52
|
-
key: (r) => link(`/table/${r.id || r.name}`, text(r.name)),
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
label: "",
|
|
56
|
-
key: (r) => tableBadges(r, req),
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
label: req.__("Access Read/Write"),
|
|
60
|
-
key: (t) =>
|
|
61
|
-
t.external
|
|
62
|
-
? `${getRole(t.min_role_read)} (read only)`
|
|
63
|
-
: `${getRole(t.min_role_read)}/${getRole(t.min_role_write)}`,
|
|
64
|
-
},
|
|
65
|
-
!tagId
|
|
66
|
-
? {
|
|
67
|
-
label: req.__("Delete"),
|
|
68
|
-
key: (r) =>
|
|
69
|
-
r.name === "users" || r.external
|
|
70
|
-
? ""
|
|
71
|
-
: post_delete_btn(`/table/delete/${r.id}`, req, r.name),
|
|
72
|
-
}
|
|
73
|
-
: {
|
|
74
|
-
label: req.__("Remove From Tag"),
|
|
75
|
-
key: (r) =>
|
|
76
|
-
post_delete_btn(
|
|
77
|
-
`/tag-entries/remove/tables/${r.id}/${tagId}`,
|
|
78
|
-
req,
|
|
79
|
-
`${r.name} from this tag`
|
|
80
|
-
),
|
|
81
|
-
},
|
|
82
|
-
],
|
|
83
|
-
tables,
|
|
51
|
+
[
|
|
84
52
|
{
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
53
|
+
label: req.__("Name"),
|
|
54
|
+
key: (r) => link(`/table/${r.id || r.name}`, text(r.name)),
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
label: "",
|
|
58
|
+
key: (r) => tableBadges(r, req),
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
label: req.__("Access Read/Write"),
|
|
62
|
+
key: (t) =>
|
|
63
|
+
t.external
|
|
64
|
+
? `${getRole(t.min_role_read)} (read only)`
|
|
65
|
+
: `${getRole(t.min_role_read)}/${getRole(t.min_role_write)}`,
|
|
66
|
+
},
|
|
67
|
+
!tagId
|
|
68
|
+
? {
|
|
69
|
+
label: req.__("Delete"),
|
|
70
|
+
key: (r) =>
|
|
71
|
+
r.name === "users" || r.external
|
|
72
|
+
? ""
|
|
73
|
+
: post_delete_btn(`/table/delete/${r.id}`, req, r.name),
|
|
74
|
+
}
|
|
75
|
+
: {
|
|
76
|
+
label: req.__("Remove From Tag"),
|
|
77
|
+
key: (r) =>
|
|
78
|
+
post_delete_btn(
|
|
79
|
+
`/tag-entries/remove/tables/${r.id}/${tagId}`,
|
|
80
|
+
req,
|
|
81
|
+
`${r.name} from this tag`
|
|
82
|
+
),
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
tables,
|
|
86
|
+
{
|
|
87
|
+
hover: true,
|
|
88
|
+
tableClass: listClass(tagId, showList),
|
|
89
|
+
tableId: domId,
|
|
90
|
+
}
|
|
91
|
+
)
|
|
90
92
|
: div(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
{ class: listClass(tagId, showList), id: domId },
|
|
94
|
+
h4(req.__("No tables defined")),
|
|
95
|
+
p(req.__("Tables hold collections of similar data"))
|
|
96
|
+
);
|
|
95
97
|
};
|
|
96
98
|
|
|
97
99
|
/**
|
|
@@ -173,78 +175,78 @@ const viewsList = async (views, req, { tagId, domId, showList } = {}) => {
|
|
|
173
175
|
|
|
174
176
|
return views.length > 0
|
|
175
177
|
? mkTable(
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
178
|
+
[
|
|
179
|
+
{
|
|
180
|
+
label: req.__("Name"),
|
|
181
|
+
key: (r) => link(`/view/${encodeURIComponent(r.name)}`, r.name),
|
|
182
|
+
sortlink: !tagId
|
|
183
|
+
? `javascript:set_state_field('_sortby', 'name')`
|
|
184
|
+
: undefined,
|
|
185
|
+
},
|
|
186
|
+
// description - currently I dont want to show description in view list
|
|
187
|
+
// because description can be long
|
|
188
|
+
/*
|
|
189
|
+
{
|
|
190
|
+
label: req.__("Description"),
|
|
191
|
+
key: "description",
|
|
192
|
+
// this is sorting by column
|
|
193
|
+
sortlink: `javascript:set_state_field('_sortby', 'description')`,
|
|
194
|
+
},
|
|
195
|
+
*/
|
|
196
|
+
// template
|
|
197
|
+
{
|
|
198
|
+
label: req.__("Pattern"),
|
|
199
|
+
key: "viewtemplate",
|
|
200
|
+
sortlink: !tagId
|
|
201
|
+
? `javascript:set_state_field('_sortby', 'viewtemplate')`
|
|
202
|
+
: undefined,
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
label: req.__("Table"),
|
|
206
|
+
key: (r) => link(`/table/${r.table}`, r.table),
|
|
207
|
+
sortlink: !tagId
|
|
208
|
+
? `javascript:set_state_field('_sortby', 'table')`
|
|
209
|
+
: undefined,
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
label: req.__("Role to access"),
|
|
213
|
+
key: (row) => editViewRoleForm(row, roles, req),
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
label: "",
|
|
217
|
+
key: (r) =>
|
|
218
|
+
link(
|
|
219
|
+
`/viewedit/config/${encodeURIComponent(r.name)}`,
|
|
220
|
+
req.__("Configure")
|
|
221
|
+
),
|
|
222
|
+
},
|
|
223
|
+
!tagId
|
|
224
|
+
? {
|
|
214
225
|
label: "",
|
|
226
|
+
key: (r) => view_dropdown(r, req),
|
|
227
|
+
}
|
|
228
|
+
: {
|
|
229
|
+
label: req.__("Remove From Tag"),
|
|
215
230
|
key: (r) =>
|
|
216
|
-
|
|
217
|
-
`/
|
|
218
|
-
req
|
|
231
|
+
post_delete_btn(
|
|
232
|
+
`/tag-entries/remove/views/${r.id}/${tagId}`,
|
|
233
|
+
req,
|
|
234
|
+
`${r.name} from this tag`
|
|
219
235
|
),
|
|
220
236
|
},
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
post_delete_btn(
|
|
230
|
-
`/tag-entries/remove/views/${r.id}/${tagId}`,
|
|
231
|
-
req,
|
|
232
|
-
`${r.name} from this tag`
|
|
233
|
-
),
|
|
234
|
-
},
|
|
235
|
-
],
|
|
236
|
-
views,
|
|
237
|
-
{
|
|
238
|
-
hover: true,
|
|
239
|
-
tableClass: listClass(tagId, showList),
|
|
240
|
-
tableId: domId,
|
|
241
|
-
}
|
|
242
|
-
)
|
|
237
|
+
],
|
|
238
|
+
views,
|
|
239
|
+
{
|
|
240
|
+
hover: true,
|
|
241
|
+
tableClass: listClass(tagId, showList),
|
|
242
|
+
tableId: domId,
|
|
243
|
+
}
|
|
244
|
+
)
|
|
243
245
|
: div(
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
246
|
+
{ class: listClass(tagId, showList), id: domId },
|
|
247
|
+
h4(req.__("No views defined")),
|
|
248
|
+
p(req.__("Views define how table rows are displayed to the user"))
|
|
249
|
+
);
|
|
248
250
|
};
|
|
249
251
|
|
|
250
252
|
/**
|
|
@@ -332,18 +334,18 @@ const getPageList = (rows, roles, req, { tagId, domId, showList } = {}) => {
|
|
|
332
334
|
},
|
|
333
335
|
!tagId
|
|
334
336
|
? {
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
337
|
+
label: "",
|
|
338
|
+
key: (r) => page_dropdown(r, req),
|
|
339
|
+
}
|
|
338
340
|
: {
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
341
|
+
label: req.__("Remove From Tag"),
|
|
342
|
+
key: (r) =>
|
|
343
|
+
post_delete_btn(
|
|
344
|
+
`/tag-entries/remove/pages/${r.id}/${tagId}`,
|
|
345
|
+
req,
|
|
346
|
+
`${r.name} from this tag`
|
|
347
|
+
),
|
|
348
|
+
},
|
|
347
349
|
,
|
|
348
350
|
],
|
|
349
351
|
rows,
|
|
@@ -356,6 +358,7 @@ const getPageList = (rows, roles, req, { tagId, domId, showList } = {}) => {
|
|
|
356
358
|
};
|
|
357
359
|
|
|
358
360
|
const getTriggerList = (triggers, req, { tagId, domId, showList } = {}) => {
|
|
361
|
+
const base_url = get_base_url(req);
|
|
359
362
|
return mkTable(
|
|
360
363
|
[
|
|
361
364
|
{ label: req.__("Name"), key: "name" },
|
|
@@ -388,18 +391,18 @@ const getTriggerList = (triggers, req, { tagId, domId, showList } = {}) => {
|
|
|
388
391
|
},
|
|
389
392
|
!tagId
|
|
390
393
|
? {
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
+
label: req.__("Delete"),
|
|
395
|
+
key: (r) => post_delete_btn(`/actions/delete/${r.id}`, req),
|
|
396
|
+
}
|
|
394
397
|
: {
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
398
|
+
label: req.__("Remove From Tag"),
|
|
399
|
+
key: (r) =>
|
|
400
|
+
post_delete_btn(
|
|
401
|
+
`/tag-entries/remove/trigger/${r.id}/${tagId}`,
|
|
402
|
+
req,
|
|
403
|
+
`${r.name} from this tag`
|
|
404
|
+
),
|
|
405
|
+
},
|
|
403
406
|
],
|
|
404
407
|
triggers,
|
|
405
408
|
{
|