@saltcorn/server 1.1.2-beta.3 → 1.1.2-beta.4
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 +1 -0
- package/package.json +9 -9
- package/public/saltcorn-common.js +12 -1
- package/public/saltcorn.css +8 -0
- package/routes/admin.js +7 -5
- package/routes/common_lists.js +4 -4
- package/routes/plugins.js +1 -0
- package/routes/tables.js +3 -2
- package/routes/tag_entries.js +10 -4
package/app.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saltcorn/server",
|
|
3
|
-
"version": "1.1.2-beta.
|
|
3
|
+
"version": "1.1.2-beta.4",
|
|
4
4
|
"description": "Server app for Saltcorn, open-source no-code platform",
|
|
5
5
|
"homepage": "https://saltcorn.com",
|
|
6
6
|
"main": "index.js",
|
|
@@ -8,14 +8,14 @@
|
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"@aws-sdk/client-s3": "^3.735.0",
|
|
10
10
|
"@dr.pogodin/csurf": "^1.14.1",
|
|
11
|
-
"@saltcorn/base-plugin": "1.1.2-beta.
|
|
12
|
-
"@saltcorn/builder": "1.1.2-beta.
|
|
13
|
-
"@saltcorn/data": "1.1.2-beta.
|
|
14
|
-
"@saltcorn/admin-models": "1.1.2-beta.
|
|
15
|
-
"@saltcorn/filemanager": "1.1.2-beta.
|
|
16
|
-
"@saltcorn/markup": "1.1.2-beta.
|
|
17
|
-
"@saltcorn/plugins-loader": "1.1.2-beta.
|
|
18
|
-
"@saltcorn/sbadmin2": "1.1.2-beta.
|
|
11
|
+
"@saltcorn/base-plugin": "1.1.2-beta.4",
|
|
12
|
+
"@saltcorn/builder": "1.1.2-beta.4",
|
|
13
|
+
"@saltcorn/data": "1.1.2-beta.4",
|
|
14
|
+
"@saltcorn/admin-models": "1.1.2-beta.4",
|
|
15
|
+
"@saltcorn/filemanager": "1.1.2-beta.4",
|
|
16
|
+
"@saltcorn/markup": "1.1.2-beta.4",
|
|
17
|
+
"@saltcorn/plugins-loader": "1.1.2-beta.4",
|
|
18
|
+
"@saltcorn/sbadmin2": "1.1.2-beta.4",
|
|
19
19
|
"@socket.io/cluster-adapter": "^0.2.1",
|
|
20
20
|
"@socket.io/sticky": "^1.0.1",
|
|
21
21
|
"adm-zip": "0.5.16",
|
|
@@ -103,15 +103,26 @@ function rep_del(e) {
|
|
|
103
103
|
var myrep = $(e).closest(".form-repeat");
|
|
104
104
|
var ix = myrep.index();
|
|
105
105
|
var parent = myrep.parent();
|
|
106
|
-
myrep.remove();
|
|
107
106
|
parent.children().each(function (childix, element) {
|
|
108
107
|
if (childix > ix) {
|
|
109
108
|
reindex(element, childix, childix - 1);
|
|
110
109
|
}
|
|
111
110
|
});
|
|
111
|
+
myrep.remove();
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
function reindex(element, oldix, newix) {
|
|
115
|
+
$(element)
|
|
116
|
+
.find("input,textarea")
|
|
117
|
+
.each(function () {
|
|
118
|
+
$(this).attr("value", $(this).val());
|
|
119
|
+
});
|
|
120
|
+
$(element)
|
|
121
|
+
.find("select")
|
|
122
|
+
.each(function () {
|
|
123
|
+
$(this).find(":selected").attr("selected", "selected");
|
|
124
|
+
});
|
|
125
|
+
|
|
115
126
|
$(element).html(
|
|
116
127
|
$(element)
|
|
117
128
|
.html()
|
package/public/saltcorn.css
CHANGED
|
@@ -812,3 +812,11 @@ tr span.add-tag {
|
|
|
812
812
|
tr:hover span.add-tag {
|
|
813
813
|
opacity: 1;
|
|
814
814
|
}
|
|
815
|
+
|
|
816
|
+
#saltcorn-file-manager .filelist tr {
|
|
817
|
+
cursor: pointer;
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
#saltcorn-file-manager .filelist tr.selected td {
|
|
821
|
+
background-color: var(--bs-secondary-bg-subtle, var(--tblr-secondary-bg-subtle, gray));;
|
|
822
|
+
}
|
package/routes/admin.js
CHANGED
|
@@ -657,9 +657,11 @@ router.get(
|
|
|
657
657
|
{
|
|
658
658
|
label: req.__("When"),
|
|
659
659
|
key: (r) =>
|
|
660
|
-
`${moment(
|
|
661
|
-
r.created
|
|
662
|
-
|
|
660
|
+
`${moment(r.created).fromNow()}<br><small>${localeDateTime(
|
|
661
|
+
r.created,
|
|
662
|
+
{},
|
|
663
|
+
locale
|
|
664
|
+
)}</small>`,
|
|
663
665
|
},
|
|
664
666
|
{
|
|
665
667
|
label: req.__("Name"),
|
|
@@ -1193,10 +1195,10 @@ router.get(
|
|
|
1193
1195
|
th({ valign: "top" }, req.__("Saltcorn version")),
|
|
1194
1196
|
td(
|
|
1195
1197
|
packagejson.version,
|
|
1196
|
-
isRoot
|
|
1198
|
+
isRoot
|
|
1197
1199
|
? post_btn(
|
|
1198
1200
|
"/admin/upgrade",
|
|
1199
|
-
req.__("Upgrade"),
|
|
1201
|
+
req.__("Upgrade") + " (latest)",
|
|
1200
1202
|
req.csrfToken(),
|
|
1201
1203
|
{
|
|
1202
1204
|
btnClass: "btn-primary btn-sm",
|
package/routes/common_lists.js
CHANGED
|
@@ -290,7 +290,7 @@ const tagsDropdown = (tags, altHeader) =>
|
|
|
290
290
|
)
|
|
291
291
|
);
|
|
292
292
|
|
|
293
|
-
const mkAddBtn = (tags, entityType, id, req, myTagIds) =>
|
|
293
|
+
const mkAddBtn = (tags, entityType, id, req, myTagIds, on_done_redirect_str) =>
|
|
294
294
|
div(
|
|
295
295
|
{ class: "dropdown d-inline ms-1" },
|
|
296
296
|
span(
|
|
@@ -314,7 +314,7 @@ const mkAddBtn = (tags, entityType, id, req, myTagIds) =>
|
|
|
314
314
|
post_dropdown_item(
|
|
315
315
|
`/tag-entries/add-tag-entity/${encodeURIComponent(
|
|
316
316
|
t.name
|
|
317
|
-
)}/${entityType}/${id}`,
|
|
317
|
+
)}/${entityType}/${id}${on_done_redirect_str||""}`,
|
|
318
318
|
t.name,
|
|
319
319
|
req
|
|
320
320
|
)
|
|
@@ -345,7 +345,7 @@ const viewsList = async (
|
|
|
345
345
|
const tagBadges = (view) => {
|
|
346
346
|
const myTags = tag_entries.filter((te) => te.view_id === view.id);
|
|
347
347
|
const myTagIds = new Set(myTags.map((t) => t.tag_id));
|
|
348
|
-
const addBtn = mkAddBtn(tags, "views", view.id, req, myTagIds);
|
|
348
|
+
const addBtn = mkAddBtn(tags, "views", view.id, req, myTagIds, on_done_redirect_str);
|
|
349
349
|
return (
|
|
350
350
|
myTags.map((te) => tagBadge(tagsById[te.tag_id], "views")).join(nbsp) +
|
|
351
351
|
addBtn
|
|
@@ -709,7 +709,7 @@ const getTriggerList = async (
|
|
|
709
709
|
const myTagIds = new Set(myTags.map((t) => t.tag_id));
|
|
710
710
|
return (
|
|
711
711
|
myTags.map((te) => tagBadge(tagsById[te.tag_id], "triggers")).join(nbsp) +
|
|
712
|
-
mkAddBtn(tags, "triggers", trigger.id, req, myTagIds)
|
|
712
|
+
mkAddBtn(tags, "triggers", trigger.id, req, myTagIds, on_done_redirect_str)
|
|
713
713
|
);
|
|
714
714
|
};
|
|
715
715
|
return mkTable(
|
package/routes/plugins.js
CHANGED
package/routes/tables.js
CHANGED
|
@@ -1582,7 +1582,7 @@ const constraintForm = (req, table, fields, type) => {
|
|
|
1582
1582
|
case "Formula":
|
|
1583
1583
|
return new Form({
|
|
1584
1584
|
action: `/table/add-constraint/${table.id}/${type}`,
|
|
1585
|
-
|
|
1585
|
+
onSubmit: "press_store_button(this)",
|
|
1586
1586
|
fields: [
|
|
1587
1587
|
{
|
|
1588
1588
|
name: "formula",
|
|
@@ -1617,6 +1617,7 @@ const constraintForm = (req, table, fields, type) => {
|
|
|
1617
1617
|
blurb: req.__(
|
|
1618
1618
|
"Tick the boxes for the fields that should be jointly unique"
|
|
1619
1619
|
),
|
|
1620
|
+
onSubmit: "press_store_button(this)",
|
|
1620
1621
|
fields: [
|
|
1621
1622
|
...fields.map((f) => ({
|
|
1622
1623
|
name: f.name,
|
|
@@ -1641,7 +1642,7 @@ const constraintForm = (req, table, fields, type) => {
|
|
|
1641
1642
|
blurb: req.__(
|
|
1642
1643
|
"Choose the field to be indexed. This make searching the table faster."
|
|
1643
1644
|
),
|
|
1644
|
-
|
|
1645
|
+
onSubmit: "press_store_button(this)",
|
|
1645
1646
|
fields: [
|
|
1646
1647
|
{
|
|
1647
1648
|
type: "String",
|
package/routes/tag_entries.js
CHANGED
|
@@ -18,6 +18,7 @@ const {
|
|
|
18
18
|
csrfField,
|
|
19
19
|
isAdminOrHasConfigMinRole,
|
|
20
20
|
checkEditPermission,
|
|
21
|
+
is_relative_url,
|
|
21
22
|
} = require("./utils");
|
|
22
23
|
|
|
23
24
|
const Table = require("@saltcorn/data/models/table");
|
|
@@ -192,18 +193,23 @@ router.post(
|
|
|
192
193
|
const auth = checkEditPermission(entitytype, req.user);
|
|
193
194
|
if (!auth) req.flash("error", "Not authorized");
|
|
194
195
|
else await tag.addEntry({ [fieldName]: +entityid });
|
|
196
|
+
let redirectTarget =
|
|
197
|
+
req.query.on_done_redirect &&
|
|
198
|
+
is_relative_url("/" + req.query.on_done_redirect)
|
|
199
|
+
? `/${req.query.on_done_redirect}`
|
|
200
|
+
: null;
|
|
195
201
|
switch (entitytype) {
|
|
196
202
|
case "views":
|
|
197
|
-
res.redirect(`/viewedit`);
|
|
203
|
+
res.redirect(redirectTarget || `/viewedit`);
|
|
198
204
|
break;
|
|
199
205
|
case "pages":
|
|
200
|
-
res.redirect(`/pageedit`);
|
|
206
|
+
res.redirect(redirectTarget || `/pageedit`);
|
|
201
207
|
break;
|
|
202
208
|
case "tables":
|
|
203
|
-
res.redirect(`/table`);
|
|
209
|
+
res.redirect(redirectTarget || `/table`);
|
|
204
210
|
break;
|
|
205
211
|
case "triggers":
|
|
206
|
-
res.redirect(`/actions`);
|
|
212
|
+
res.redirect(redirectTarget || `/actions`);
|
|
207
213
|
break;
|
|
208
214
|
|
|
209
215
|
default:
|