@saltcorn/server 1.0.0-rc.2 → 1.0.0-rc.5
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/help/index.js +2 -1
- package/load_plugins.js +1 -0
- package/package.json +9 -9
- package/public/saltcorn.js +15 -0
- package/routes/api.js +2 -1
- package/routes/files.js +6 -2
- package/routes/sync.js +4 -7
package/help/index.js
CHANGED
|
@@ -13,7 +13,8 @@ const { getState } = require("@saltcorn/data/db/state");
|
|
|
13
13
|
const { oneOf } = require("@saltcorn/types/generators");
|
|
14
14
|
const get_md_file = async (topic) => {
|
|
15
15
|
try {
|
|
16
|
-
const fp =
|
|
16
|
+
const fp = File.normalise_in_base(__dirname, `${topic}.tmd`);
|
|
17
|
+
if (!fp) return false;
|
|
17
18
|
const fileBuf = await fs.readFile(fp);
|
|
18
19
|
return fileBuf.toString();
|
|
19
20
|
} catch (e) {
|
package/load_plugins.js
CHANGED
|
@@ -231,6 +231,7 @@ const loadAndSaveNewPlugin = async (
|
|
|
231
231
|
const loadMsgs = [];
|
|
232
232
|
const loader = new PluginInstaller(plugin, {
|
|
233
233
|
scVersion: packagejson.version,
|
|
234
|
+
envVars: { PUPPETEER_SKIP_DOWNLOAD: "1" },
|
|
234
235
|
});
|
|
235
236
|
const { version, plugin_module, location, loadedWithReload, msgs } =
|
|
236
237
|
await loader.install(force);
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saltcorn/server",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.5",
|
|
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": "1.0.0-rc.
|
|
11
|
-
"@saltcorn/builder": "1.0.0-rc.
|
|
12
|
-
"@saltcorn/data": "1.0.0-rc.
|
|
13
|
-
"@saltcorn/admin-models": "1.0.0-rc.
|
|
14
|
-
"@saltcorn/filemanager": "1.0.0-rc.
|
|
15
|
-
"@saltcorn/markup": "1.0.0-rc.
|
|
16
|
-
"@saltcorn/plugins-loader": "1.0.0-rc.
|
|
17
|
-
"@saltcorn/sbadmin2": "1.0.0-rc.
|
|
10
|
+
"@saltcorn/base-plugin": "1.0.0-rc.5",
|
|
11
|
+
"@saltcorn/builder": "1.0.0-rc.5",
|
|
12
|
+
"@saltcorn/data": "1.0.0-rc.5",
|
|
13
|
+
"@saltcorn/admin-models": "1.0.0-rc.5",
|
|
14
|
+
"@saltcorn/filemanager": "1.0.0-rc.5",
|
|
15
|
+
"@saltcorn/markup": "1.0.0-rc.5",
|
|
16
|
+
"@saltcorn/plugins-loader": "1.0.0-rc.5",
|
|
17
|
+
"@saltcorn/sbadmin2": "1.0.0-rc.5",
|
|
18
18
|
"@socket.io/cluster-adapter": "^0.2.1",
|
|
19
19
|
"@socket.io/sticky": "^1.0.1",
|
|
20
20
|
"adm-zip": "0.5.10",
|
package/public/saltcorn.js
CHANGED
|
@@ -432,6 +432,20 @@ function saveAndContinue(e, k, event) {
|
|
|
432
432
|
)
|
|
433
433
|
return;
|
|
434
434
|
var form = $(e).closest("form");
|
|
435
|
+
let focusedEl = null;
|
|
436
|
+
if (!event || !event.srcElement) {
|
|
437
|
+
const el = form.find("select[sc-received-focus]")[0];
|
|
438
|
+
if (el) {
|
|
439
|
+
el.removeAttribute("sc-received-focus");
|
|
440
|
+
if (el.getAttribute("previous-val") === el.value) return;
|
|
441
|
+
}
|
|
442
|
+
} else if (
|
|
443
|
+
event.srcElement.tagName === "SELECT" &&
|
|
444
|
+
event.srcElement.getAttribute("previous-val") !== undefined
|
|
445
|
+
) {
|
|
446
|
+
focusedEl = event.srcElement;
|
|
447
|
+
}
|
|
448
|
+
|
|
435
449
|
const valres = form[0].reportValidity();
|
|
436
450
|
if (!valres) return;
|
|
437
451
|
submitWithEmptyAction(form[0]);
|
|
@@ -454,6 +468,7 @@ function saveAndContinue(e, k, event) {
|
|
|
454
468
|
reloadEmbeddedEditOwnViews(form, res.id);
|
|
455
469
|
}
|
|
456
470
|
common_done(res, form.attr("data-viewname"));
|
|
471
|
+
if (focusedEl) focusedEl.setAttribute("previous-val", focusedEl.value);
|
|
457
472
|
},
|
|
458
473
|
error: function (request) {
|
|
459
474
|
var ct = request.getResponseHeader("content-type") || "";
|
package/routes/api.js
CHANGED
|
@@ -294,11 +294,12 @@ router.get(
|
|
|
294
294
|
} else {
|
|
295
295
|
const tbl_fields = table.getFields();
|
|
296
296
|
readState(req_query, tbl_fields, req);
|
|
297
|
-
const qstate =
|
|
297
|
+
const qstate = stateFieldsToWhere({
|
|
298
298
|
fields: tbl_fields,
|
|
299
299
|
approximate: !!approximate,
|
|
300
300
|
state: req_query,
|
|
301
301
|
table,
|
|
302
|
+
prefix: "a.",
|
|
302
303
|
});
|
|
303
304
|
const joinFields = {};
|
|
304
305
|
const derefs = Array.isArray(dereference)
|
package/routes/files.js
CHANGED
|
@@ -94,11 +94,15 @@ router.get(
|
|
|
94
94
|
const { dir, no_subdirs } = req.query;
|
|
95
95
|
const noSubdirs = no_subdirs === "true";
|
|
96
96
|
const safeDir = File.normalise(dir || "/");
|
|
97
|
-
const absFolder =
|
|
97
|
+
const absFolder = File.normalise_in_base(
|
|
98
98
|
db.connectObj.file_store,
|
|
99
99
|
db.getTenantSchema(),
|
|
100
|
-
|
|
100
|
+
dir || "/"
|
|
101
101
|
);
|
|
102
|
+
if (absFolder === null) {
|
|
103
|
+
res.json({ error: "Invalid path" });
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
102
106
|
const dirOnDisk = await File.from_file_on_disk(
|
|
103
107
|
path.basename(absFolder),
|
|
104
108
|
path.dirname(absFolder)
|
package/routes/sync.js
CHANGED
|
@@ -335,16 +335,13 @@ router.post(
|
|
|
335
335
|
"/clean_sync_dir",
|
|
336
336
|
error_catcher(async (req, res) => {
|
|
337
337
|
const { dir_name } = req.body;
|
|
338
|
-
const safe_dir_name = File.normalise(dir_name);
|
|
339
338
|
try {
|
|
340
339
|
const rootFolder = await File.rootFolder();
|
|
341
|
-
const syncDir =
|
|
342
|
-
rootFolder.location,
|
|
343
|
-
|
|
344
|
-
"sync",
|
|
345
|
-
safe_dir_name
|
|
340
|
+
const syncDir = File.normalise_in_base(
|
|
341
|
+
path.join(rootFolder.location, "mobile_app", "sync"),
|
|
342
|
+
dir_name
|
|
346
343
|
);
|
|
347
|
-
await fs.rm(syncDir, { recursive: true, force: true });
|
|
344
|
+
if (syncDir) await fs.rm(syncDir, { recursive: true, force: true });
|
|
348
345
|
res.status(200).send("");
|
|
349
346
|
} catch (error) {
|
|
350
347
|
getState().log(2, `POST /sync/clean_sync_dir: '${error.message}'`);
|