boomack 0.14.10 → 0.15.0-preview6

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.
Files changed (100) hide show
  1. package/README.md +1 -1
  2. package/client/public/css/main.css +7 -0
  3. package/client/views/login.ejs +1 -1
  4. package/client/views/parts/client-resources.ejs +2 -2
  5. package/client/views/parts/document-layout.ejs +1 -0
  6. package/client/views/parts/grid-layout.ejs +1 -0
  7. package/client/views/parts/home-head.ejs +1 -1
  8. package/client/views/parts/panel-customization.ejs +40 -1
  9. package/client/views/parts/panel-head.ejs +1 -1
  10. package/client/views/parts/slot.ejs +1 -0
  11. package/package.json +49 -47
  12. package/server-build/index.js +467 -481
  13. package/server-build/middleware/basic-auth.js +16 -14
  14. package/server-build/middleware/data-parser.js +151 -149
  15. package/server-build/middleware/standard-auth.js +63 -61
  16. package/server-build/middleware/token-auth.js +51 -50
  17. package/server-build/model/action.js +30 -28
  18. package/server-build/model/action.test.js +31 -27
  19. package/server-build/model/display-request.js +170 -158
  20. package/server-build/model/display-request.test.js +237 -238
  21. package/server-build/model/layout.js +324 -283
  22. package/server-build/model/layout.test.js +341 -330
  23. package/server-build/pipeline/format.js +144 -139
  24. package/server-build/pipeline/format.test.js +362 -365
  25. package/server-build/pipeline/load.js +280 -277
  26. package/server-build/pipeline/load.test.js +319 -318
  27. package/server-build/pipeline/render.js +159 -156
  28. package/server-build/pipeline/render.test.js +114 -115
  29. package/server-build/pipeline/store.js +186 -183
  30. package/server-build/pipeline/store.test.js +183 -181
  31. package/server-build/pipeline/transform.js +75 -72
  32. package/server-build/pipeline/transform.test.js +79 -81
  33. package/server-build/pipeline.js +617 -610
  34. package/server-build/pipeline.test.js +415 -417
  35. package/server-build/plugins/client-resources/tablesort.js +109 -109
  36. package/server-build/plugins/csv.js +158 -156
  37. package/server-build/plugins/generic.js +27 -26
  38. package/server-build/plugins/highlight.js +63 -61
  39. package/server-build/plugins/highlight.types.js +123 -124
  40. package/server-build/plugins/http.js +138 -135
  41. package/server-build/plugins/markdown.js +106 -100
  42. package/server-build/plugins/media.js +100 -99
  43. package/server-build/plugins/shell.js +220 -223
  44. package/server-build/plugins/shell.test.js +293 -294
  45. package/server-build/plugins/tcp.js +142 -141
  46. package/server-build/plugins/text.js +71 -70
  47. package/server-build/plugins/udp.js +83 -82
  48. package/server-build/routes/actions.js +116 -117
  49. package/server-build/routes/display-requests.js +329 -330
  50. package/server-build/routes/eval-requests.js +143 -147
  51. package/server-build/routes/export.js +575 -574
  52. package/server-build/routes/media-types.js +101 -102
  53. package/server-build/routes/panels.js +215 -211
  54. package/server-build/routes/presets.js +88 -89
  55. package/server-build/routes/resources.js +66 -61
  56. package/server-build/routes/web-client.js +725 -668
  57. package/server-build/service/actions.js +162 -153
  58. package/server-build/service/actions.test.js +46 -47
  59. package/server-build/service/char-encoding.js +72 -67
  60. package/server-build/service/char-encoding.test.js +56 -57
  61. package/server-build/service/cli-args.js +89 -85
  62. package/server-build/service/cli-args.test.js +7 -8
  63. package/server-build/service/client-resources.js +28 -29
  64. package/server-build/service/config-check.js +97 -98
  65. package/server-build/service/config.js +465 -448
  66. package/server-build/service/config.test.js +247 -246
  67. package/server-build/service/display-task-helper.js +59 -53
  68. package/server-build/service/highlight.js +65 -62
  69. package/server-build/service/html.js +61 -53
  70. package/server-build/service/html.test.js +66 -67
  71. package/server-build/service/logging.js +72 -74
  72. package/server-build/service/media-types.js +112 -103
  73. package/server-build/service/media-types.test.js +43 -44
  74. package/server-build/service/micro-markdown.js +70 -67
  75. package/server-build/service/micro-markdown.test.js +26 -27
  76. package/server-build/service/mime-type.js +72 -69
  77. package/server-build/service/mime-type.test.js +65 -66
  78. package/server-build/service/panels.js +598 -580
  79. package/server-build/service/panels.test.js +737 -763
  80. package/server-build/service/payload-encoding.js +29 -29
  81. package/server-build/service/persistence.js +146 -147
  82. package/server-build/service/plugins.js +339 -254
  83. package/server-build/service/plugins.test.js +135 -109
  84. package/server-build/service/presets.js +130 -122
  85. package/server-build/service/presets.test.js +128 -129
  86. package/server-build/service/rbac.js +129 -125
  87. package/server-build/service/render.js +64 -57
  88. package/server-build/service/render.test.js +168 -169
  89. package/server-build/service/resources.js +434 -399
  90. package/server-build/service/resources.test.js +385 -376
  91. package/server-build/service/response-messages.js +88 -89
  92. package/server-build/service/themes.js +122 -115
  93. package/server-build/service/transform.js +76 -69
  94. package/server-build/service/transform.test.js +167 -168
  95. package/server-build/service/web-ui-paths.js +58 -51
  96. package/server-build/service/web-user.js +29 -27
  97. package/server-build/typedefs.js +552 -528
  98. package/server-build/utils.js +554 -472
  99. package/server-build/utils.test.js +398 -400
  100. package/server-build/cli.js +0 -3
package/README.md CHANGED
@@ -8,7 +8,7 @@ Inspired by ideas from Daniel Kiertscher
8
8
 
9
9
  ## Requirements
10
10
 
11
- * NodeJS ≥ 16
11
+ * NodeJS ≥ 18
12
12
 
13
13
  ## Getting Started
14
14
 
@@ -236,6 +236,10 @@ header.home-header {
236
236
  box-shadow: none;
237
237
  }
238
238
 
239
+ .slot.click-through {
240
+ pointer-events: none;
241
+ }
242
+
239
243
  .slot.maximized {
240
244
  grid-column: 1 / -1 !important;
241
245
  grid-row: 1 / -1 !important;
@@ -292,6 +296,9 @@ header.home-header {
292
296
  }
293
297
  }
294
298
 
299
+ .slot-toolbar {
300
+ pointer-events: all;
301
+ }
295
302
  .slot-toolbar.ui.top {
296
303
  z-index: 2;
297
304
  }
@@ -31,7 +31,7 @@
31
31
  </button>
32
32
  </div>
33
33
  </form>
34
- <script type="application/javascript">
34
+ <script>
35
35
  document.forms.loginForm.redirect.value = document.location.href;
36
36
  document.forms.loginForm.username.focus();
37
37
  </script>
@@ -1,6 +1,6 @@
1
1
  <%
2
2
  if (!offline) {
3
- %> <script type="application/javascript">
3
+ %> <script>
4
4
  <%
5
5
  _.forEach(clientResGroups, function (rg, id) {
6
6
  %> window.boomack.registerClientResourceGroup("<%= id %>", <%- JSON.stringify(rg) %>);
@@ -20,7 +20,7 @@
20
20
  %> <link rel="stylesheet" type="text/css" href="<%- basePath + 'plugins/styles/' + groupId + '/' + i %>" />
21
21
  <% }
22
22
  for (let i = 0; i < group.scriptsCount; i++) {
23
- %> <script type="application/javascript" src="<%- basePath + 'plugins/scripts/' + groupId + '/' + i %>"></script>
23
+ %> <script src="<%- basePath + 'plugins/scripts/' + groupId + '/' + i %>"></script>
24
24
  <% }
25
25
  });
26
26
  }
@@ -18,6 +18,7 @@ expects context:
18
18
  %>">
19
19
  <%
20
20
  _.forEach(_.sortBy(panel.layout.slots, 'index'), function (slot) {
21
+ if (slot.hidden) return;
21
22
  %>
22
23
  <%- include('slot.ejs', {
23
24
  _,
@@ -20,6 +20,7 @@ expects context:
20
20
  %>height:<%= 100.0/panel.layout.grid.zoom %>%;<%
21
21
  %>"><%
22
22
  _.forEach(_.sortBy(panel.layout.slots, 'index'), function (slot) {
23
+ if (slot.hidden) return;
23
24
  %>
24
25
  <%- include('slot.ejs', {
25
26
  _,
@@ -1,7 +1,7 @@
1
1
  <link rel="stylesheet" type="text/css" href="<%- basePath %>css/panel-list.css">
2
2
  <% if (!offline) { %> <script src="<%- basePath %>socket.io/socket.io.js"></script><% } %>
3
3
  <script src="<%- basePath %>js/home.js"></script>
4
- <script type="application/javascript">
4
+ <script>
5
5
  window.boomack = window.boomack || {};
6
6
  window.boomack.pathPrefix = "<%- basePath %>";
7
7
  window.boomack.offline = <%- offline %>;
@@ -7,6 +7,45 @@ if (panel.layout.style) {
7
7
  %> <style type="text/css"><%- replaceThemePropsInStr(panel.layout.style) %></style>
8
8
  <% }
9
9
  if (panel.layout.script) {
10
- %> <script type="application/javascript"><%- panel.layout.script %></script>
10
+ %> <script><%- panel.layout.script %></script>
11
+ <% }
12
+ const esModules = [];
13
+ const importMap = {}
14
+ // PlugIn ES modules
15
+ for (const esModuleName in modules) {
16
+ const esModule = {
17
+ ...modules[esModuleName],
18
+ name: esModuleName,
19
+ href: uiPaths.plugInESModule(esModuleName),
20
+ };
21
+ esModules.push(esModule);
22
+ importMap[esModuleName] = esModule.href;
23
+ }
24
+ // Panel ES modules
25
+ for (const esModuleName in panel.layout.modules) {
26
+ const esModule = {
27
+ ...panel.layout.modules[esModuleName],
28
+ name: esModuleName,
29
+ };
30
+ if (esModule.source) {
31
+ esModule.href = uiPaths.panelEsModule(panel.id, esModuleName);
32
+ }
33
+ esModules.push(esModule);
34
+ importMap[esModuleName] = esModule.href;
35
+ }
36
+ if (esModules.length > 0) {
37
+ %> <script type="importmap">
38
+ <%- JSON.stringify({ imports: importMap }, null, ' ') %>
39
+ </script>
40
+ <% }
41
+ for (const esModule of esModules) {
42
+ if (esModule.preload) {
43
+ %> <link rel="modulepreload" href="<%- esModule.href %>">
44
+ <% }
45
+ }
46
+ if (panel.layout.mainModule) {
47
+ %> <script type="module">
48
+ <%- panel.layout.mainModule %>
49
+ </script>
11
50
  <% }
12
51
  %>
@@ -1,7 +1,7 @@
1
1
  <% if (!offline) { %> <script src="<%- basePath %>socket.io/socket.io.js"></script><% } %>
2
2
  <script src="<%- basePath %>js/ResizeSensor.js"></script>
3
3
  <script src="<%- basePath %>js/client.js"></script>
4
- <script type="application/javascript">
4
+ <script>
5
5
  window.boomack = window.boomack || {};
6
6
  window.boomack.pathPrefix = "<%- basePath %>";
7
7
  window.boomack.panelId = <%- panelId ? '"' + panelId + '"' : 'null' %>;
@@ -50,6 +50,7 @@ function replaceThemePropsInStr(s) {
50
50
  %><%= contentScale ? ' content-scale ' + contentScale : '' %><%
51
51
  %><%= contentAlign ? ' content-align ' + contentAlign : '' %><%
52
52
  %><%= slot.zoom !== 1.0 && !contentScale ? ' zoom' : '' %><%
53
+ %><%= slot.clickThrough ? ' click-through' : '' %><%
53
54
  %>"
54
55
  style="<%
55
56
  if (!singled && panel.layout.type === 'grid') {
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "boomack",
3
- "version": "0.14.10",
3
+ "version": "0.15.0-preview6",
4
4
  "description": "web app for displaying hyper-media items in concert with e.g. an IDE",
5
5
  "author": "Tobias Kiertscher <dev@mastersign.de>",
6
6
  "license": "MIT",
7
+ "type": "module",
7
8
  "bin": {
8
- "boomack": "./server-build/cli.js"
9
+ "boomack": "server-build/cli.mjs"
9
10
  },
10
11
  "files": [
11
12
  "LICENSE.md",
@@ -16,7 +17,7 @@
16
17
  "scripts": {
17
18
  "build": "tsc",
18
19
  "watch": "tsc --watch",
19
- "start": "node server-build/index.js",
20
+ "start": "node server-build/cli.mjs",
20
21
  "test": "mocha server-build/**/*.test.js",
21
22
  "test-watch": "mocha -R min --watch server-build/**/*.test.js",
22
23
  "docs": "cd docs && jsdoc -c jsdoc.json ../server-build/",
@@ -27,61 +28,62 @@
27
28
  "url": "https://git.mastersign.de/tk-software/boomack.git"
28
29
  },
29
30
  "engines": {
30
- "node": ">= 16.0.0"
31
+ "node": ">= 18.0.0"
31
32
  },
32
33
  "dependencies": {
33
- "archiver": "^5.3.0",
34
- "async": "^3.2.0",
35
- "chalk": "^4.1.0",
36
- "chardet": "^1.4.0",
37
- "commonmark": "^0.30.0",
38
- "cookie-parser": "^1.4.5",
39
- "cors": "^2.8.5",
40
- "csv-parse": "^4.15.1",
41
- "ejs": "^3.1.8",
42
- "express": "^4.18.0",
43
- "express-basic-auth": "^1.2.0",
44
- "got": "^11.8.5",
45
- "iconv-lite": "^0.6.0",
46
- "ip-address": "^8.1.0",
47
- "lodash": "^4.17.21",
48
- "markdown-it": "^14.1.0",
49
- "markdown-it-container": "^4.0.0",
50
- "markdown-it-emoji": "^3.0.0",
51
- "markdown-it-ins": "^4.0.0",
52
- "markdown-it-mark": "^4.0.0",
53
- "markdown-it-sub": "^2.0.0",
54
- "markdown-it-sup": "^2.0.0",
55
- "moment": "^2.29.1",
56
- "ncp": "^2.0.0",
57
- "nocache": "^3.0.4",
58
- "on-finished": "^2.4.1",
59
- "open": "^8.4.0",
60
- "prismjs": "^1.28.0",
61
- "raw-body": "^2.5.1",
62
- "rimraf": "^3.0.2",
63
- "secure-random-string": "^1.1.3",
64
- "socket.io": "^4.5.1",
65
- "uuid": "^8.3.2",
66
- "winston": "^3.8.1",
67
- "yaml": "^1.10.0",
68
- "yargs": "^15.4.1"
34
+ "archiver": "7.0.1",
35
+ "async": "3.2.6",
36
+ "chalk": "5.6.2",
37
+ "chardet": "2.1.0",
38
+ "commonmark": "0.31.2",
39
+ "cookie-parser": "1.4.7",
40
+ "cors": "2.8.5",
41
+ "csv-parse": "6.1.0",
42
+ "ejs": "3.1.10",
43
+ "express": "5.1.0",
44
+ "express-basic-auth": "1.2.1",
45
+ "got": "13.0.0",
46
+ "iconv-lite": "0.7.0",
47
+ "ip-address": "10.0.1",
48
+ "lodash": "4.17.21",
49
+ "markdown-it": "14.1.0",
50
+ "markdown-it-container": "4.0.0",
51
+ "markdown-it-emoji": "3.0.0",
52
+ "markdown-it-ins": "4.0.0",
53
+ "markdown-it-mark": "4.0.0",
54
+ "markdown-it-sub": "2.0.0",
55
+ "markdown-it-sup": "2.0.0",
56
+ "moment": "2.30.1",
57
+ "ncp": "2.0.0",
58
+ "nocache": "4.0.0",
59
+ "on-finished": "2.4.1",
60
+ "open": "10.2.0",
61
+ "prismjs": "1.30.0",
62
+ "raw-body": "3.0.1",
63
+ "rimraf": "5.0.10",
64
+ "secure-random-string": "1.1.4",
65
+ "socket.io": "4.8.1",
66
+ "uuid": "13.0.0",
67
+ "winston": "3.18.3",
68
+ "yaml": "2.8.1",
69
+ "yargs": "17.7.2"
69
70
  },
70
71
  "devDependencies": {
71
72
  "@types/express": "^4.17.13",
72
73
  "@types/jsbn": "^1.2.30",
73
74
  "@types/lodash": "^4.17.5",
74
75
  "@types/markdown-it": "^14.1.1",
76
+ "@types/node": "^18.0.0",
75
77
  "@types/rimraf": "^3.0.0",
76
- "chai": "^4.3.0",
78
+ "chai": "^6.2.0",
77
79
  "css-element-queries": "1.2.3",
78
- "jquery": "^3.5.1",
79
- "jsdoc": "^3.6.6",
80
- "mocha": "^9.2.1",
81
- "nock": "^11.9.1",
82
- "typescript": "^4.1.5"
80
+ "jquery": "^3.7.1",
81
+ "jsdoc": "^4.0.4",
82
+ "mocha": "^11.7.3",
83
+ "nock": "^14.0.10",
84
+ "typescript": "^5.9.3"
83
85
  },
84
86
  "jshintConfig": {
85
- "esversion": "ES2017"
87
+ "esversion": "ES2020"
86
88
  }
87
89
  }