@saltcorn/server 0.7.2-beta.4 → 0.7.2-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.
@@ -5,7 +5,7 @@
5
5
  * @subcategory routes
6
6
  */
7
7
  const Router = require("express-promise-router");
8
- const { isAdmin, error_catcher, get_base_url } = require("./utils.js");
8
+ const { isAdmin, error_catcher } = require("./utils.js");
9
9
  const { getState } = require("@saltcorn/data/db/state");
10
10
  const Trigger = require("@saltcorn/data/models/trigger");
11
11
 
@@ -21,19 +21,19 @@ module.exports = router;
21
21
  const {
22
22
  mkTable,
23
23
  renderForm,
24
- link,
25
- post_btn,
26
- settingsDropdown,
27
- post_dropdown_item,
24
+ //link,
25
+ //post_btn,
26
+ //settingsDropdown,
27
+ //post_dropdown_item,
28
28
  post_delete_btn,
29
29
  localeDateTime,
30
30
  } = require("@saltcorn/markup");
31
31
  const Form = require("@saltcorn/data/models/form");
32
32
  const {
33
33
  div,
34
- code,
34
+ //code,
35
35
  a,
36
- span,
36
+ //span,
37
37
  tr,
38
38
  table,
39
39
  tbody,
@@ -74,7 +74,7 @@ const logSettingsForm = async (req) => {
74
74
  name: w + "_channel",
75
75
  label: w + " channel",
76
76
  sublabel:
77
- "Channels to create events for. Separate by comma; leave blank for all",
77
+ req.__("Channels to create events for. Separate by comma; leave blank for all"),
78
78
  type: "String",
79
79
  showIf: { [w]: true },
80
80
  });
@@ -168,25 +168,25 @@ router.get(
168
168
  /**
169
169
  * @returns {Form}
170
170
  */
171
- const customEventForm = () =>
172
- new Form({
173
- action: "/eventlog/custom/new",
174
- submitButtonClass: "btn-outline-primary",
175
- onChange: "remove_outline(this)",
176
- fields: [
177
- {
178
- name: "name",
179
- label: "Name",
180
- type: "String",
181
- },
182
- {
183
- name: "hasChannel",
184
- label: "Has channels?",
185
- type: "Bool",
186
- },
187
- ],
188
- });
189
-
171
+ const customEventForm = async (req) => {
172
+ return new Form({
173
+ action: "/eventlog/custom/new",
174
+ submitButtonClass: "btn-outline-primary",
175
+ onChange: "remove_outline(this)",
176
+ fields: [
177
+ {
178
+ name: "name",
179
+ label: req.__("Event Name"),
180
+ type: "String",
181
+ },
182
+ {
183
+ name: "hasChannel",
184
+ label: req.__("Has channels?"),
185
+ type: "Bool",
186
+ },
187
+ ],
188
+ });
189
+ };
190
190
  /**
191
191
  * @name get/custom/new
192
192
  * @function
@@ -197,7 +197,7 @@ router.get(
197
197
  "/custom/new",
198
198
  isAdmin,
199
199
  error_catcher(async (req, res) => {
200
- const form = customEventForm();
200
+ const form = await customEventForm(req);
201
201
  send_events_page({
202
202
  res,
203
203
  req,
@@ -222,7 +222,7 @@ router.post(
222
222
  "/custom/new",
223
223
  isAdmin,
224
224
  error_catcher(async (req, res) => {
225
- const form = customEventForm();
225
+ const form = await customEventForm(req);
226
226
  form.validate(req.body);
227
227
  if (form.hasErrors) {
228
228
  send_events_page({
@@ -323,7 +323,7 @@ router.get(
323
323
  { orderBy: "occur_at", orderDesc: true, limit: rows_per_page, offset }
324
324
  );
325
325
  if (evlog.length === rows_per_page || current_page > 1) {
326
- const nrows = await EventLog.count();
326
+ const nrows = await EventLog.count({});
327
327
  if (nrows > rows_per_page || current_page > 1) {
328
328
  page_opts.pagination = {
329
329
  current_page,
package/routes/fields.js CHANGED
@@ -296,6 +296,12 @@ const fieldFlow = (req) =>
296
296
  input_type: "select",
297
297
  options: roles.map((r) => ({ value: r.id, label: r.role })),
298
298
  },
299
+ {
300
+ name: "also_delete_file",
301
+ type: "Bool",
302
+ label: req.__("Cascade delete to file"),
303
+ sublabel: req.__("Deleting a row will also delete the file referenced by this field")
304
+ },
299
305
  ],
300
306
  });
301
307
  } else {
package/routes/files.js CHANGED
@@ -1,4 +1,5 @@
1
1
  /**
2
+ * Files Route
2
3
  * @category server
3
4
  * @module routes/files
4
5
  * @subcategory routes
@@ -15,28 +16,12 @@ const {
15
16
  mkTable,
16
17
  renderForm,
17
18
  link,
18
- post_btn,
19
+ //post_btn,
19
20
  post_delete_btn,
20
21
  } = require("@saltcorn/markup");
21
22
  const { isAdmin, error_catcher, setTenant } = require("./utils.js");
22
- const {
23
- span,
24
- h5,
25
- h1,
26
- h4,
27
- nbsp,
28
- p,
29
- a,
30
- div,
31
- form,
32
- input,
33
- select,
34
- button,
35
- option,
36
- text,
37
- label,
38
- } = require("@saltcorn/markup/tags");
39
- const { csrfField } = require("./utils");
23
+ const { h1, div, text } = require("@saltcorn/markup/tags");
24
+ // const { csrfField } = require("./utils");
40
25
  const { editRoleForm, fileUploadForm } = require("../markup/forms.js");
41
26
  const { strictParseInt } = require("@saltcorn/data/plugin-helper");
42
27
  const {
@@ -44,7 +29,7 @@ const {
44
29
  config_fields_form,
45
30
  save_config_from_form,
46
31
  } = require("../markup/admin");
47
- const fsp = require("fs").promises;
32
+ // const fsp = require("fs").promises;
48
33
  const fs = require("fs");
49
34
 
50
35
  /**
@@ -58,6 +43,7 @@ const router = new Router();
58
43
  module.exports = router;
59
44
 
60
45
  /**
46
+ * Edit file Role form
61
47
  * @param {*} file
62
48
  * @param {*} roles
63
49
  * @param {*} req
@@ -81,6 +67,7 @@ router.get(
81
67
  "/",
82
68
  isAdmin,
83
69
  error_catcher(async (req, res) => {
70
+ // todo limit select from file by 10 or 20
84
71
  const rows = await File.find({}, { orderBy: "filename" });
85
72
  const roles = await User.get_roles();
86
73
  send_files_page({
@@ -1,4 +1,6 @@
1
1
  /**
2
+ * Default Home Page (Wellcome page)
3
+ * Opens for new site without any data
2
4
  * @category server
3
5
  * @module routes/homepage
4
6
  * @subcategory routes
@@ -10,11 +12,11 @@ const View = require("@saltcorn/data/models/view");
10
12
  const User = require("@saltcorn/data/models/user");
11
13
  const File = require("@saltcorn/data/models/file");
12
14
  const Page = require("@saltcorn/data/models/page");
13
- const { link, renderForm, mkTable, post_btn } = require("@saltcorn/markup");
14
- const { ul, li, div, small, a, h5, p, i } = require("@saltcorn/markup/tags");
15
+ const { link, mkTable } = require("@saltcorn/markup");
16
+ const { div, a, p, i } = require("@saltcorn/markup/tags");
15
17
  const Table = require("@saltcorn/data/models/table");
16
18
  const { fetch_available_packs } = require("@saltcorn/admin-models/models/pack");
17
- const { restore_backup } = require("../markup/admin");
19
+ // const { restore_backup } = require("../markup/admin");
18
20
  const { get_latest_npm_version } = require("@saltcorn/data/models/config");
19
21
  const packagejson = require("../package.json");
20
22
  const Trigger = require("@saltcorn/data/models/trigger");
@@ -22,6 +24,7 @@ const { fileUploadForm } = require("../markup/forms");
22
24
  const { get_base_url } = require("./utils.js");
23
25
 
24
26
  /**
27
+ * Tables List
25
28
  * @param {*} tables
26
29
  * @param {object} req
27
30
  * @returns {Table}
@@ -39,6 +42,7 @@ const tableTable = (tables, req) =>
39
42
  );
40
43
 
41
44
  /**
45
+ * Tables Card
42
46
  * @param {*} tables
43
47
  * @param {object} req
44
48
  * @returns {object}
@@ -68,6 +72,7 @@ const tableCard = (tables, req) => ({
68
72
  });
69
73
 
70
74
  /**
75
+ * Views List
71
76
  * @param {*} views
72
77
  * @param {object} req
73
78
  * @returns {Table}
@@ -89,6 +94,7 @@ const viewTable = (views, req) =>
89
94
  );
90
95
 
91
96
  /**
97
+ * Views Card
92
98
  * @param {*} views
93
99
  * @param {object} req
94
100
  * @returns {object}
@@ -120,6 +126,7 @@ const viewCard = (views, req) => ({
120
126
  });
121
127
 
122
128
  /**
129
+ * Pages List
123
130
  * @param {*} pages
124
131
  * @param {object} req
125
132
  * @returns {Table}
@@ -141,6 +148,7 @@ const pageTable = (pages, req) =>
141
148
  );
142
149
 
143
150
  /**
151
+ * Page Card
144
152
  * @param {*} pages
145
153
  * @param {object} req
146
154
  * @returns {object}
@@ -173,13 +181,14 @@ const pageCard = (pages, req) => ({
173
181
  });
174
182
 
175
183
  /**
184
+ * Files Tab
176
185
  * @param {object} req
177
186
  * @returns {Promise<div>}
178
187
  */
179
188
  const filesTab = async (req) => {
180
189
  const files = await File.find({}, { orderBy: "filename", cached: true });
181
190
  return div(
182
- files.length == 0
191
+ files.length === 0
183
192
  ? p(req.__("No files"))
184
193
  : mkTable(
185
194
  [
@@ -197,7 +206,10 @@ const filesTab = async (req) => {
197
206
  };
198
207
 
199
208
  /**
209
+ * Users Tab
200
210
  * @param {object} req
211
+ * @param users
212
+ * @param roleMap
201
213
  * @returns {Promise<div>}
202
214
  */
203
215
  const usersTab = async (req, users, roleMap) => {
@@ -221,7 +233,9 @@ const usersTab = async (req, users, roleMap) => {
221
233
  };
222
234
 
223
235
  /**
236
+ * Actions (Triggers) Tab
224
237
  * @param {object} req
238
+ * @param triggers
225
239
  * @returns {Promise<div>}
226
240
  */
227
241
  const actionsTab = async (req, triggers) => {
@@ -234,7 +248,7 @@ const actionsTab = async (req, triggers) => {
234
248
  { class: "mt-2 pe-2" },
235
249
  i(req.__("Triggers run actions in response to events."))
236
250
  ),
237
- triggers.length == 0
251
+ triggers.length === 0
238
252
  ? p(req.__("No triggers"))
239
253
  : mkTable(
240
254
  [
@@ -260,6 +274,12 @@ const actionsTab = async (req, triggers) => {
260
274
  )
261
275
  );
262
276
  };
277
+ /**
278
+ * Plugins and Packs Tab
279
+ * @param req
280
+ * @param packlist
281
+ * @returns {*}
282
+ */
263
283
  const packTab = (req, packlist) =>
264
284
  div(
265
285
  { class: "pb-3 pt-2 pe-4" },
@@ -286,7 +306,11 @@ const packTab = (req, packlist) =>
286
306
  req.__("Go to pack store »")
287
307
  )
288
308
  );
289
-
309
+ /**
310
+ * Help Card
311
+ * @param req
312
+ * @returns {*}
313
+ */
290
314
  const helpCard = (req) =>
291
315
  div(
292
316
  { class: "pb-3 pt-2 pe-4" },
@@ -321,6 +345,7 @@ const helpCard = (req) =>
321
345
  );
322
346
 
323
347
  /**
348
+ * Wellcome page
324
349
  * @param {object} req
325
350
  * @returns {Promise<object>}
326
351
  */
@@ -393,6 +418,7 @@ const welcome_page = async (req) => {
393
418
  };
394
419
 
395
420
  /**
421
+ * No Views logged in
396
422
  * @param {object} req
397
423
  * @param {object} res
398
424
  * @returns {Promise<void>}
@@ -423,6 +449,7 @@ const no_views_logged_in = async (req, res) => {
423
449
  };
424
450
 
425
451
  /**
452
+ * Get Config respounce
426
453
  * @param {number} role_id
427
454
  * @param {object} res
428
455
  * @param {object} req
@@ -430,6 +457,7 @@ const no_views_logged_in = async (req, res) => {
430
457
  */
431
458
  const get_config_response = async (role_id, res, req) => {
432
459
  const modernCfg = getState().getConfig("home_page_by_role", false);
460
+ // predefined roles
433
461
  const legacy_role = { 10: "public", 8: "user", 4: "staff", 1: "admin" }[
434
462
  role_id
435
463
  ];
@@ -472,7 +500,7 @@ module.exports =
472
500
  const hasUsers = await User.nonEmpty();
473
501
  if (!hasUsers) {
474
502
  res.redirect("/auth/create_first_user");
475
- return;
503
+ // return;
476
504
  } else res.redirect("/auth/login");
477
505
  } else {
478
506
  await no_views_logged_in(req, res);
package/routes/menu.js CHANGED
@@ -1,4 +1,5 @@
1
1
  /**
2
+ * Menu Editor
2
3
  * @category server
3
4
  * @module routes/menu
4
5
  * @subcategory routes
@@ -6,18 +7,18 @@
6
7
 
7
8
  const Router = require("express-promise-router");
8
9
 
9
- const Field = require("@saltcorn/data/models/field");
10
+ //const Field = require("@saltcorn/data/models/field");
10
11
  const Form = require("@saltcorn/data/models/form");
11
- const { isAdmin, setTenant, error_catcher } = require("./utils.js");
12
+ const { isAdmin, error_catcher } = require("./utils.js");
12
13
  const { getState } = require("@saltcorn/data/db/state");
13
- const File = require("@saltcorn/data/models/file");
14
+ //const File = require("@saltcorn/data/models/file");
14
15
  const User = require("@saltcorn/data/models/user");
15
16
  const View = require("@saltcorn/data/models/view");
16
17
  const Page = require("@saltcorn/data/models/page");
17
18
  const { save_menu_items } = require("@saltcorn/data/models/config");
18
19
  const db = require("@saltcorn/data/db");
19
20
 
20
- const { mkTable, renderForm, link, post_btn } = require("@saltcorn/markup");
21
+ const { renderForm } = require("@saltcorn/markup");
21
22
  const { script, domReady, div, ul } = require("@saltcorn/markup/tags");
22
23
  const { send_infoarch_page } = require("../markup/admin.js");
23
24
  const Table = require("@saltcorn/data/models/table");
@@ -33,7 +34,7 @@ const router = new Router();
33
34
  module.exports = router;
34
35
 
35
36
  /**
36
- *
37
+ * Menu Form
37
38
  * @param {object} req
38
39
  * @returns {Promise<Form>}
39
40
  */
@@ -246,9 +247,11 @@ const menuForm = async (req) => {
246
247
  //create -- new
247
248
 
248
249
  /**
250
+ * Menu Editor Script
249
251
  * @param {object[]} menu_items
250
252
  * @returns {string}
251
253
  */
254
+ // todo move to file the content of menuEditorScript
252
255
  const menuEditorScript = (menu_items) => `
253
256
  var iconPickerOptions = {searchText: "Search icon...", labelHeader: "{0}/{1}"};
254
257
  let lastState;
@@ -262,7 +265,7 @@ const menuEditorScript = (menu_items) => `
262
265
  }
263
266
  var sortableListOptions = {
264
267
  placeholderCss: {'background-color': "#cccccc"},
265
- onChange: ajax_save_menu,
268
+ onChange: ajax_save_menu
266
269
  };
267
270
  editor = new MenuEditor('myEditor',
268
271
  {
@@ -285,7 +288,7 @@ const menuEditorScript = (menu_items) => `
285
288
  editor.update();
286
289
  ajax_save_menu(true);
287
290
  location.reload();
288
- });
291
+ });
289
292
  // Calling the add method
290
293
  $('#btnAdd').click(function(){
291
294
  editor.add();
@@ -360,6 +363,7 @@ router.get(
360
363
  })
361
364
  );
362
365
  /**
366
+ * jQME to Menu
363
367
  * @param {object[]} menu_items
364
368
  * @returns {object[]}
365
369
  */
package/routes/tables.js CHANGED
@@ -1437,7 +1437,7 @@ router.post(
1437
1437
  res.redirect(`/table`);
1438
1438
  return;
1439
1439
  }
1440
-
1440
+ //intentionally omit await
1441
1441
  recalculate_for_stored(table);
1442
1442
 
1443
1443
  req.flash("success", req.__("Started recalculating stored fields"));
package/routes/tenant.js CHANGED
@@ -1,4 +1,5 @@
1
1
  /**
2
+ * Tenant(s) Route
2
3
  * @category server
3
4
  * @module routes/tenant
4
5
  * @subcategory routes
@@ -36,22 +37,23 @@ const {
36
37
  code,
37
38
  } = require("@saltcorn/markup/tags");
38
39
  const db = require("@saltcorn/data/db");
39
- const url = require("url");
40
+ //const url = require("url");
40
41
  const { loadAllPlugins, loadAndSaveNewPlugin } = require("../load_plugins");
41
42
  const { isAdmin, error_catcher } = require("./utils.js");
42
43
  const User = require("@saltcorn/data/models/user");
43
44
  const File = require("@saltcorn/data/models/file");
44
45
  const {
45
46
  send_infoarch_page,
46
- send_admin_page,
47
+ //send_admin_page,
47
48
  config_fields_form,
48
49
  save_config_from_form,
49
50
  } = require("../markup/admin.js");
50
51
  const { getConfig } = require("@saltcorn/data/models/config");
51
- const {
52
- create_backup,
53
- restore,
54
- } = require("@saltcorn/admin-models/models/backup");
52
+ // todo add button backup / restore for particular tenant (available in admin tenants screens)
53
+ //const {
54
+ // create_backup,
55
+ // restore,
56
+ //} = require("@saltcorn/admin-models/models/backup");
55
57
 
56
58
  /**
57
59
  * @type {object}
@@ -116,6 +118,7 @@ const is_ip_address = (hostname) => {
116
118
  };
117
119
 
118
120
  /**
121
+ * Create tenant screen runnning
119
122
  * @name get/create
120
123
  * @function
121
124
  * @memberof module:routes/tenant~tenantRouter
@@ -146,6 +149,7 @@ router.get(
146
149
  )
147
150
  );
148
151
  let create_tenant_warning = "";
152
+ // todo add custom create tenant warning message
149
153
  if (getState().getConfig("create_tenant_warning"))
150
154
  create_tenant_warning = div(
151
155
  {
@@ -200,9 +204,8 @@ const getNewURL = (req, subdomain) => {
200
204
  if (hosts.length > 1) ports = `:${hosts[1]}`;
201
205
  }
202
206
  const hostname = req.hostname;
203
- const newurl = `${req.protocol}://${subdomain}.${hostname}${ports}/`;
204
-
205
- return newurl;
207
+ // return newurl
208
+ return `${req.protocol}://${subdomain}.${hostname}${ports}/`;
206
209
  };
207
210
 
208
211
  /**
@@ -307,7 +310,7 @@ router.post(
307
310
  );
308
311
 
309
312
  /**
310
- * List tenants HTTP GET Web UI
313
+ * List tenants ( on /tenant/list)
311
314
  * @name get/list
312
315
  * @function
313
316
  * @memberof module:routes/tenant~tenantRouter
@@ -586,11 +586,11 @@ router.get(
586
586
  view.configuration && Object.keys(view.configuration).length > 0;
587
587
  const wfres = await configFlow.run(
588
588
  {
589
+ ...view.configuration,
589
590
  id: hasConfig ? view.id : undefined,
590
591
  table_id: view.table_id,
591
592
  exttable_name: view.exttable_name,
592
593
  viewname: name,
593
- ...view.configuration,
594
594
  },
595
595
  req
596
596
  );
package/wrapper.js CHANGED
@@ -3,18 +3,28 @@
3
3
  * @module wrapper
4
4
  */
5
5
  const { getState } = require("@saltcorn/data/db/state");
6
- const db = require("@saltcorn/data/db");
7
- const { ul, li, h3, div, small } = require("@saltcorn/markup/tags");
6
+ //const db = require("@saltcorn/data/db");
7
+ const { h3, div, small } = require("@saltcorn/markup/tags");
8
8
  const { renderForm, link } = require("@saltcorn/markup");
9
9
  const renderLayout = require("@saltcorn/markup/layout");
10
-
10
+ /**
11
+ * get flashes
12
+ * @param req
13
+ * @returns {T[]}
14
+ */
11
15
  const getFlashes = (req) =>
12
- ["error", "success", "danger", "warning"]
16
+ ["error", "success", "danger", "warning","information"]
13
17
  .map((type) => {
14
18
  return { type, msg: req.flash(type) };
15
19
  })
16
20
  .filter((a) => a.msg && a.msg.length && a.msg.length > 0);
17
-
21
+ /**
22
+ * Get extra menu
23
+ * @param role
24
+ * @param state
25
+ * @param req
26
+ * @returns {*}
27
+ */
18
28
  const get_extra_menu = (role, state, req) => {
19
29
  let cfg = getState().getConfig("unrolled_menu_items", []);
20
30
  if (!cfg || cfg.length === 0) {
@@ -43,7 +53,11 @@ const get_extra_menu = (role, state, req) => {
43
53
  }));
44
54
  return transform(cfg);
45
55
  };
46
-
56
+ /**
57
+ * Get menu
58
+ * @param req
59
+ * @returns {(false|{section: *, items}|{section: *, items: [{link: string, icon: string, label: *},{link: string, icon: string, label: *},{link: string, icon: string, label: *},{icon: string, subitems: [{link: string, icon: string, label: *},{link: string, icon: string, label: *},{link: string, icon: string, altlinks: string[], label: *},{link: string, altlinks: string[], icon: string, label: *},{link: string, icon: string, label: *},null], label: *}]}|{section: *, isUser: boolean, items: ([{icon: string, subitems: [{label: *},{icon: string, link: string, label: *},{link: string, icon: string, label: *}], label: *, isUser: boolean}]|*[])})[]}
60
+ */
47
61
  const get_menu = (req) => {
48
62
  const isAuth = req.user && req.user.id;
49
63
  const state = getState();
@@ -82,8 +96,13 @@ const get_menu = (req) => {
82
96
  ? [{ link: "/auth/login", label: req.__("Login") }]
83
97
  : []),
84
98
  ];
85
- const schema = db.getTenantSchema();
99
+ // const schema = db.getTenantSchema();
100
+ // Admin role id (todo move to common constants)
86
101
  const isAdmin = role === 1;
102
+ /*
103
+ * Admin Menu items
104
+ *
105
+ */
87
106
  const adminItems = [
88
107
  { link: "/table", icon: "fas fa-table", label: req.__("Tables") },
89
108
  { link: "/viewedit", icon: "far fa-eye", label: req.__("Views") },
@@ -126,7 +145,8 @@ const get_menu = (req) => {
126
145
  },
127
146
  ];
128
147
 
129
- const menu = [
148
+ // return menu
149
+ return [
130
150
  extra_menu.length > 0 && {
131
151
  section: req.__("Menu"),
132
152
  items: extra_menu,
@@ -141,9 +161,16 @@ const get_menu = (req) => {
141
161
  items: authItems,
142
162
  },
143
163
  ].filter((s) => s);
144
- return menu;
145
- };
146
164
 
165
+ };
166
+ /**
167
+ * Get Headers
168
+ * @param req
169
+ * @param version_tag
170
+ * @param description
171
+ * @param extras
172
+ * @returns {*[]}
173
+ */
147
174
  const get_headers = (req, version_tag, description, extras = []) => {
148
175
  const state = getState();
149
176
  const favicon = state.getConfig("favicon_id", null);
@@ -188,6 +215,11 @@ const get_headers = (req, version_tag, description, extras = []) => {
188
215
  ...from_cfg,
189
216
  ];
190
217
  };
218
+ /**
219
+ * Get brand
220
+ * @param state
221
+ * @returns {{name: *, logo: (string|undefined)}}
222
+ */
191
223
  const get_brand = (state) => {
192
224
  const logo_id = state.getConfig("site_logo_id", "");
193
225
  return {
@@ -196,6 +228,12 @@ const get_brand = (state) => {
196
228
  };
197
229
  };
198
230
  module.exports = (version_tag) =>
231
+ /**
232
+ *
233
+ * @param req
234
+ * @param res
235
+ * @param next
236
+ */
199
237
  function (req, res, next) {
200
238
  const role = (req.user || {}).role_id || 10;
201
239
 
@@ -220,7 +258,7 @@ module.exports = (version_tag) =>
220
258
  })
221
259
  );
222
260
  } else {
223
- var links = [];
261
+ let links = [];
224
262
  if (authLinks.login)
225
263
  links.push(
226
264
  link(authLinks.login, req.__("Already have an account? Login"))
@@ -301,7 +339,12 @@ module.exports = (version_tag) =>
301
339
  };
302
340
  next();
303
341
  };
304
-
342
+ /**
343
+ * Default render to HTML
344
+ * @param s
345
+ * @param role
346
+ * @returns {string|string|*}
347
+ */
305
348
  const defaultRenderToHtml = (s, role) =>
306
349
  typeof s === "string"
307
350
  ? s