@saltcorn/server 0.9.4-beta.11 → 0.9.4-beta.12

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/locales/en.json CHANGED
@@ -1365,5 +1365,6 @@
1365
1365
  "Random allocation": "Random allocation",
1366
1366
  "Serve a random page, ignoring the eligible formula. Within a session, reloads will always deliver the same page. This is a basic requirement for A/B testing.": "Serve a random page, ignoring the eligible formula. Within a session, reloads will always deliver the same page. This is a basic requirement for A/B testing.",
1367
1367
  "Pagegroup %s not found": "Pagegroup %s not found",
1368
- "Create trigger": "Create trigger"
1368
+ "Create trigger": "Create trigger",
1369
+ "Omit the menu from this view": "Omit the menu from this view"
1369
1370
  }
package/markup/admin.js CHANGED
@@ -95,23 +95,27 @@ const add_edit_bar = ({
95
95
  const singleton = view?.viewtemplateObj?.singleton;
96
96
 
97
97
  const bar = div(
98
- { class: "alert alert-light d-print-none admin-edit-bar" },
99
- title,
100
- what && span({ class: "ms-1 me-2 badge bg-primary" }, what),
101
- !singleton &&
102
- a(
103
- { class: "ms-2", href: url },
104
- "Edit ",
105
- i({ class: "fas fa-edit" })
106
- ),
107
- cfgUrl && !singleton
108
- ? a(
109
- { class: "ms-1 me-3", href: cfgUrl },
110
- "Configure ",
111
- i({ class: "fas fa-cog" })
112
- )
113
- : "",
114
- !singleton && viewSpec
98
+ { class: "card p-1 mt-1 mb-3 d-print-none admin-edit-bar" },
99
+ div(
100
+ { class: "card-body p-1" },
101
+ i({ class: "fas fa-user-cog me-1" }),
102
+ what && span({ class: "ms-1 me-2 badge bg-secondary" }, what),
103
+ title,
104
+ !singleton &&
105
+ a(
106
+ { class: "ms-2", href: url },
107
+ "Edit ",
108
+ i({ class: "fas fa-edit" })
109
+ ),
110
+ cfgUrl && !singleton
111
+ ? a(
112
+ { class: "ms-1 me-3", href: cfgUrl },
113
+ "Configure ",
114
+ i({ class: "fas fa-cog" })
115
+ )
116
+ : "",
117
+ !singleton && viewSpec
118
+ )
115
119
  );
116
120
 
117
121
  if (contents.above) {
@@ -232,7 +236,7 @@ const send_infoarch_page = (args) => {
232
236
  { text: "Multitenancy", href: "/tenant/settings" },
233
237
  ]
234
238
  : []),
235
- { text: "Pagegroups", href: "/page_group/settings"},
239
+ { text: "Pagegroups", href: "/page_group/settings" },
236
240
  { text: "Tags", href: "/tag" },
237
241
  { text: "Diagram", href: "/diagram" },
238
242
  ],
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@saltcorn/server",
3
- "version": "0.9.4-beta.11",
3
+ "version": "0.9.4-beta.12",
4
4
  "description": "Server app for Saltcorn, open-source no-code platform",
5
5
  "homepage": "https://saltcorn.com",
6
6
  "main": "index.js",
7
7
  "license": "MIT",
8
8
  "dependencies": {
9
9
  "@aws-sdk/client-s3": "^3.451.0",
10
- "@saltcorn/base-plugin": "0.9.4-beta.11",
11
- "@saltcorn/builder": "0.9.4-beta.11",
12
- "@saltcorn/data": "0.9.4-beta.11",
13
- "@saltcorn/admin-models": "0.9.4-beta.11",
14
- "@saltcorn/filemanager": "0.9.4-beta.11",
15
- "@saltcorn/markup": "0.9.4-beta.11",
16
- "@saltcorn/sbadmin2": "0.9.4-beta.11",
10
+ "@saltcorn/base-plugin": "0.9.4-beta.12",
11
+ "@saltcorn/builder": "0.9.4-beta.12",
12
+ "@saltcorn/data": "0.9.4-beta.12",
13
+ "@saltcorn/admin-models": "0.9.4-beta.12",
14
+ "@saltcorn/filemanager": "0.9.4-beta.12",
15
+ "@saltcorn/markup": "0.9.4-beta.12",
16
+ "@saltcorn/sbadmin2": "0.9.4-beta.12",
17
17
  "@socket.io/cluster-adapter": "^0.2.1",
18
18
  "@socket.io/sticky": "^1.0.1",
19
19
  "adm-zip": "0.5.10",
@@ -55,6 +55,7 @@
55
55
  "pluralize": "^8.0.0",
56
56
  "qrcode": "1.5.1",
57
57
  "resize-with-sharp-or-jimp": "0.1.7",
58
+ "semver": "^7.6.0",
58
59
  "socket.io": "4.6.0",
59
60
  "systeminformation": "^5.21.7",
60
61
  "thirty-two": "1.0.2",
package/routes/admin.js CHANGED
@@ -2427,6 +2427,7 @@ router.post(
2427
2427
  await PageGroup.delete({});
2428
2428
  }
2429
2429
  if (form.values.pages) {
2430
+ await db.deleteWhere("_sc_tag_entries", { not: { page_id: null } });
2430
2431
  await db.deleteWhere("_sc_pages");
2431
2432
  }
2432
2433
  if (form.values.views) {
@@ -24,6 +24,7 @@ const packagejson = require("../package.json");
24
24
  const Trigger = require("@saltcorn/data/models/trigger");
25
25
  const { fileUploadForm } = require("../markup/forms");
26
26
  const { get_base_url, sendHtmlFile, getEligiblePage } = require("./utils.js");
27
+ const semver = require("semver");
27
28
 
28
29
  /**
29
30
  * Tables List
@@ -519,8 +520,8 @@ const no_views_logged_in = async (req, res) => {
519
520
  const latest =
520
521
  isRoot && (await get_latest_npm_version("@saltcorn/cli", 500));
521
522
  const can_update =
522
- packagejson.version !== latest &&
523
523
  latest &&
524
+ semver.gt(latest, packagejson.version) &&
524
525
  !process.env.SALTCORN_DISABLE_UPGRADE;
525
526
  if (latest && can_update && isRoot)
526
527
  req.flash(
@@ -30,7 +30,12 @@ const buildFields = (entryType, formOptions, req) => {
30
30
  div(
31
31
  { class: "col-sm-10" },
32
32
  select(
33
- { name: "ids", class: "form-control form-select", multiple: true },
33
+ {
34
+ name: "ids",
35
+ class: "form-control form-select",
36
+ multiple: true,
37
+ size: 20,
38
+ },
34
39
  list.map((entry) => {
35
40
  return option({ value: entry.id, label: entry.name });
36
41
  })
package/routes/view.js CHANGED
@@ -79,6 +79,7 @@ router.get(
79
79
  if ((title || "").includes("{{")) {
80
80
  title = await view.interpolate_title_string(title, query);
81
81
  }
82
+ title = { title };
82
83
  if (isModal && view.attributes?.popup_width)
83
84
  res.set(
84
85
  "SaltcornModalWidth",
@@ -102,7 +103,10 @@ router.get(
102
103
  if ((description || "").includes("{{")) {
103
104
  description = await view.interpolate_title_string(description, query);
104
105
  }
105
- title = { title, description };
106
+ title.description = description;
107
+ }
108
+ if (view.attributes?.no_menu) {
109
+ title.no_menu = true;
106
110
  }
107
111
  const tock = new Date();
108
112
  const ms = tock.getTime() - tic.getTime();
@@ -217,6 +217,7 @@ const viewForm = async (req, tableOptions, roles, pages, values) => {
217
217
  ),
218
218
  }),
219
219
  new Field({
220
+ // legacy
220
221
  name: "default_render_page",
221
222
  label: req.__("Show on page"),
222
223
  sublabel: req.__(
@@ -243,6 +244,14 @@ const viewForm = async (req, tableOptions, roles, pages, values) => {
243
244
  },
244
245
  showIf: { viewtemplate: hasTable },
245
246
  }),
247
+ new Field({
248
+ name: "no_menu",
249
+ label: req.__("No menu"),
250
+ sublabel: req.__("Omit the menu from this view"),
251
+ tab: "View settings",
252
+ parent_field: "attributes",
253
+ type: "Bool",
254
+ }),
246
255
  new Field({
247
256
  name: "popup_title",
248
257
  label: req.__("Title"),