@saltcorn/server 0.9.4-beta.5 → 0.9.4-beta.7

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
@@ -1348,5 +1348,9 @@
1348
1348
  "Pagegroup": "Pagegroup",
1349
1349
  "Pagegroup %s has no members": "Pagegroup %s has no members",
1350
1350
  "Remove border": "Remove border",
1351
- "No lines between tables": "No lines between tables"
1351
+ "No lines between tables": "No lines between tables",
1352
+ "Use this to restrict your field to a list of options (separated by commas). For instance, enter <kbd class=\"fst-normal\">Red, Green, Blue</kbd> here if the permissible values are Red, Green and Blue. Leave blank if the string can hold any value.": "Use this to restrict your field to a list of options (separated by commas). For instance, enter <kbd class=\"fst-normal\">Red, Green, Blue</kbd> here if the permissible values are Red, Green and Blue. Leave blank if the string can hold any value.",
1353
+ "Page description": "Page description",
1354
+ "Some view patterns accept interpolations. Ex: <code>{{ name }}</code> or <code>{{ row ? `Edit ${row.name}` : `New person` }}</code>": "Some view patterns accept interpolations. Ex: <code>{{ name }}</code> or <code>{{ row ? `Edit ${row.name}` : `New person` }}</code>",
1355
+ "For search engines. Some view patterns accept interpolations.": "For search engines. Some view patterns accept interpolations."
1352
1356
  }
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@saltcorn/server",
3
- "version": "0.9.4-beta.5",
3
+ "version": "0.9.4-beta.7",
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.5",
11
- "@saltcorn/builder": "0.9.4-beta.5",
12
- "@saltcorn/data": "0.9.4-beta.5",
13
- "@saltcorn/admin-models": "0.9.4-beta.5",
14
- "@saltcorn/filemanager": "0.9.4-beta.5",
15
- "@saltcorn/markup": "0.9.4-beta.5",
16
- "@saltcorn/sbadmin2": "0.9.4-beta.5",
10
+ "@saltcorn/base-plugin": "0.9.4-beta.7",
11
+ "@saltcorn/builder": "0.9.4-beta.7",
12
+ "@saltcorn/data": "0.9.4-beta.7",
13
+ "@saltcorn/admin-models": "0.9.4-beta.7",
14
+ "@saltcorn/filemanager": "0.9.4-beta.7",
15
+ "@saltcorn/markup": "0.9.4-beta.7",
16
+ "@saltcorn/sbadmin2": "0.9.4-beta.7",
17
17
  "@socket.io/cluster-adapter": "^0.2.1",
18
18
  "@socket.io/sticky": "^1.0.1",
19
19
  "adm-zip": "0.5.10",
@@ -54,16 +54,34 @@ div.builder-embed-view {
54
54
  rgba(0, 0, 0, 0) 100%
55
55
  );
56
56
  }
57
+
58
+ .builder-left-enlarged div.toolbox-card.componets-and-library-accordion {
59
+ width: 13.35rem;
60
+ padding-right: 1rem;
61
+ margin-bottom: 1rem;
62
+ }
63
+
57
64
  div.toolbox-card {
58
65
  width: 9.2rem;
59
66
  padding-right: 1rem;
60
67
  margin-bottom: 1rem;
61
68
  }
62
- div.wrap-builder-elem {
69
+
70
+ .builder-left-enlarged div.wrap-builder-elem {
71
+ width: 33%;
72
+ height: 4rem;
73
+ position: relative;
74
+ }
75
+ .builder-left-shrunk div.wrap-builder-elem {
63
76
  width: 50%;
64
77
  height: 4rem;
65
78
  position: relative;
66
79
  }
80
+
81
+ .builder-left-enlarged div.toolbox-card div.wrap-builder-elem:nth-child(2) {
82
+ border-right: 1px solid #bcbcbc;
83
+ }
84
+
67
85
  div.toolbox-card div.wrap-builder-elem:nth-child(1) {
68
86
  border-right: 1px solid #bcbcbc;
69
87
  }
package/routes/list.js CHANGED
@@ -161,6 +161,11 @@ const typeToGridType = (t, field) => {
161
161
  jsgField.formatterParams = {
162
162
  inputFormat: "iso",
163
163
  };
164
+
165
+ if (field.attributes?.day_only) {
166
+ jsgField.editorParams = { dayOnly: true };
167
+ jsgField.formatter = "__isoDateFormatter";
168
+ }
164
169
  } else if (t.name === "Color") {
165
170
  jsgField.editor = "__colorEditor";
166
171
  jsgField.formatter = "__colorFormatter";
package/routes/view.js CHANGED
@@ -74,8 +74,9 @@ router.get(
74
74
  let title =
75
75
  isModal && view.attributes?.popup_title
76
76
  ? view.attributes?.popup_title
77
- : scan_for_page_title(contents0, view.name);
78
- if (isModal && (title || "").includes("{{")) {
77
+ : view.attributes?.page_title ||
78
+ scan_for_page_title(contents0, view.name); //legacy
79
+ if ((title || "").includes("{{")) {
79
80
  title = await view.interpolate_title_string(title, query);
80
81
  }
81
82
  if (isModal && view.attributes?.popup_width)
@@ -89,6 +90,13 @@ router.get(
89
90
  res.set("SaltcornModalSaveIndicator", `true`);
90
91
  if (isModal && view.attributes?.popup_link_out)
91
92
  res.set("SaltcornModalLinkOut", `true`);
93
+ if (view.attributes?.page_description) {
94
+ let description = view.attributes?.page_description;
95
+ if ((description || "").includes("{{")) {
96
+ description = await view.interpolate_title_string(description, query);
97
+ }
98
+ title = { title, description };
99
+ }
92
100
  const tock = new Date();
93
101
  const ms = tock.getTime() - tic.getTime();
94
102
  if (!isTest())
@@ -182,6 +182,26 @@ const viewForm = async (req, tableOptions, roles, pages, values) => {
182
182
  required: true,
183
183
  options: roles.map((r) => ({ value: r.id, label: r.role })),
184
184
  }),
185
+ new Field({
186
+ name: "page_title",
187
+ label: req.__("Page title"),
188
+ type: "String",
189
+ parent_field: "attributes",
190
+ tab: "View settings",
191
+ sublabel: req.__(
192
+ "Some view patterns accept interpolations. Ex: <code>{{ name }}</code> or <code>{{ row ? `Edit ${row.name}` : `New person` }}</code>"
193
+ ),
194
+ }),
195
+ new Field({
196
+ name: "page_description",
197
+ label: req.__("Page description"),
198
+ type: "String",
199
+ parent_field: "attributes",
200
+ tab: "View settings",
201
+ sublabel: req.__(
202
+ "For search engines. Some view patterns accept interpolations."
203
+ ),
204
+ }),
185
205
  new Field({
186
206
  name: "default_render_page",
187
207
  label: req.__("Show on page"),
@@ -360,27 +360,6 @@ describe("viewedit new Show", () => {
360
360
  .send("columns=" + encodeURIComponent(JSON.stringify(columns)))
361
361
  .send("layout=" + encodeURIComponent(JSON.stringify(layout)))
362
362
  .set("Cookie", loginCookie)
363
- .expect(toInclude("Set page title"));
364
- });
365
- it("save new view page title", async () => {
366
- const loginCookie = await getAdminLoginCookie();
367
- const table = Table.findOne({ name: "books" });
368
-
369
- const ctx = encodeURIComponent(
370
- JSON.stringify({
371
- table_id: table.id,
372
- viewname: "mybook",
373
- layout,
374
- columns,
375
- })
376
- );
377
-
378
- const app = await getApp({ disableCsrf: true });
379
- await request(app)
380
- .post("/viewedit/config/mybook")
381
- .send("contextEnc=" + ctx)
382
- .send("stepName=Set+page+title")
383
- .set("Cookie", loginCookie)
384
363
  .expect(toRedirect("/viewedit"));
385
364
  });
386
365
  it("should show new view", async () => {