pinokiod 3.49.0 → 3.51.0

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/kernel/index.js CHANGED
@@ -732,6 +732,15 @@ class Kernel {
732
732
  kill() {
733
733
  process.kill(process.pid, "SIGTERM")
734
734
  }
735
+ /// async fileserver() {
736
+ /// await this.exec({
737
+ /// message: `npx -y filexplorer --serveDirectory ${this.homedir}`
738
+ /// }, (e) => {
739
+ /// process.stdout.write(e.raw)
740
+ /// }).then(() => {
741
+ /// console.log("DONE")
742
+ /// })
743
+ /// }
735
744
  async init(options) {
736
745
 
737
746
  let home = this.store.get("home")
@@ -919,6 +928,8 @@ class Kernel {
919
928
  let pwpath = this.bin.path("playwright/node_modules/playwright")
920
929
  this.playwright = (await this.loader.load(pwpath)).resolved
921
930
 
931
+ //await this.fileserver()
932
+
922
933
  // get env
923
934
  if (!this.launch_complete) {
924
935
  let interval = setInterval(async () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pinokiod",
3
- "version": "3.49.0",
3
+ "version": "3.51.0",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/server/index.js CHANGED
@@ -249,6 +249,7 @@ class Server {
249
249
  }
250
250
  let dev_url = browser_url + "/dev"
251
251
  let review_url = browser_url + "/review"
252
+ let files_url = "/asset/api/" + x.name
252
253
 
253
254
  let dns = this.kernel.pinokio_configs[x.name].dns
254
255
  let routes = dns["@"]
@@ -275,6 +276,7 @@ class Server {
275
276
  path: uri,
276
277
  dev_url,
277
278
  review_url,
279
+ files_url,
278
280
  }
279
281
  })
280
282
  }
@@ -610,6 +612,7 @@ class Server {
610
612
  theme: this.theme,
611
613
  agent: this.agent,
612
614
  src: "/_api/" + name,
615
+ asset: "/asset/api/" + name,
613
616
  logs: "/_api/" + name + "/logs",
614
617
  execUrl: "/api/" + name,
615
618
  git_monitor_url: `/gitcommit/HEAD/${name}`,
@@ -2920,7 +2923,7 @@ class Server {
2920
2923
  let https_serve = express.static(this.kernel.homedir, {
2921
2924
  redirect: false,
2922
2925
  })
2923
- this.app.use('/asset', serve, serveIndex(this.kernel.homedir, {'icons': true}))
2926
+ this.app.use('/asset', serve, serveIndex(this.kernel.homedir, {icons: true, hidden: true}))
2924
2927
  this.app.use('/asset', (req, res, next) => {
2925
2928
  if (req.path.match(/\.(png|jpg|jpeg|gif|ico|svg)$/)) {
2926
2929
  res.sendFile(path.resolve(__dirname, 'public', 'pinokio-black.png'));
@@ -801,6 +801,7 @@ body {
801
801
  font-family: Sans-serif;
802
802
  font-size: 14px;
803
803
  color: var(--light-color);
804
+ position: relative;
804
805
  }
805
806
  body.dark {
806
807
  color: var(--dark-color);
@@ -2343,6 +2344,18 @@ body.dark .mode-selector .btn2.selected {
2343
2344
  }
2344
2345
 
2345
2346
 
2347
+ #dragger {
2348
+ -webkit-app-region: drag;
2349
+ cursor: grab;
2350
+ position: absolute;
2351
+ top: 0;
2352
+ left: 0;
2353
+ right: 0;
2354
+ height: 20px;
2355
+ width: 100%;
2356
+ z-index: 1000000000000;
2357
+ display: none;
2358
+ }
2346
2359
 
2347
2360
 
2348
2361
 
@@ -2357,16 +2370,31 @@ body.minimized header .dropdown-content {
2357
2370
  top: unset;
2358
2371
  left: unset;
2359
2372
  }
2373
+
2374
+ body.minimized.dark header h1 #close-window {
2375
+ background: rgb(27, 28, 29);
2376
+ }
2360
2377
  body.minimized header h1 #close-window {
2361
2378
  order: 0;
2379
+ background: white;
2380
+ border-radius: 0;
2381
+ position: sticky;
2382
+ bottom: 0;
2383
+ z-index: 10000000;
2362
2384
  }
2363
2385
  body.minimized header .home {
2364
2386
  display: block;
2387
+ position: sticky;
2388
+ top: 0;
2365
2389
  }
2366
2390
  body.minimized header {
2367
2391
  padding: 10px 0 0;
2368
2392
  overflow: auto;
2369
2393
  flex-shrink: 0;
2394
+ position: fixed;
2395
+ top: 0;
2396
+ left: 0;
2397
+ height: 100%;
2370
2398
  }
2371
2399
  body.minimized header h1 .btn2 {
2372
2400
  padding: 10px;
@@ -2402,6 +2430,7 @@ body.minimized .appcanvas {
2402
2430
  }
2403
2431
  body.minimized main {
2404
2432
  padding-top: 10px;
2433
+ padding-left: 55px;
2405
2434
  }
2406
2435
  body.minimized main .container {
2407
2436
  margin-left: 0;
@@ -2409,6 +2438,9 @@ body.minimized main .container {
2409
2438
  body.minimized .app-icon {
2410
2439
  display: block;
2411
2440
  }
2441
+ body.minimized #dragger {
2442
+ display: block;
2443
+ }
2412
2444
  /*
2413
2445
  body.minimized aside {
2414
2446
  display: none;
@@ -135,6 +135,9 @@ main {
135
135
  main iframe[name^=http] {
136
136
  background: white;
137
137
  }
138
+ main iframe[name^=file-browse] {
139
+ background: white;
140
+ }
138
141
  main iframe {
139
142
  width: 100%;
140
143
  height: 100%;
@@ -1711,6 +1714,7 @@ body.minimized aside {
1711
1714
  <script src="/tippy-bundle.umd.min.js"></script>
1712
1715
  </head>
1713
1716
  <body class='<%=theme%>' data-platform="<%=platform%>" data-agent="<%=agent%>">
1717
+ <div id='dragger'></div>
1714
1718
  <header class='navheader grabbable'>
1715
1719
  <h1>
1716
1720
  <a class='home' href="/">
@@ -1822,7 +1826,7 @@ body.minimized aside {
1822
1826
  </div>
1823
1827
  <div class='menu-container'>
1824
1828
  <div class='m n system' data-type="n">
1825
- <a target="<%=src%>" href="<%=src%>" class='btn header-item frame-link' data-index="0" data-mode="refresh">
1829
+ <a id='file-browse' target="file-browse" href="<%=asset%>" class='btn header-item frame-link' data-index="0">
1826
1830
  <div class='tab'>
1827
1831
  <i class="fa-regular fa-folder-open"></i> Files
1828
1832
  </div>
@@ -13,6 +13,18 @@ body {
13
13
  display: grid;
14
14
  grid-template-columns: var(--col0, 1fr) 6px var(--col1, 1fr);
15
15
  gap: 0px;
16
+ position: relative;
17
+ }
18
+ #dragger {
19
+ -webkit-app-region: drag;
20
+ cursor: grab;
21
+ position: absolute;
22
+ top: 0;
23
+ left: 0;
24
+ right: 0;
25
+ height: 20px;
26
+ width: 100%;
27
+ z-index: 1000000000000;
16
28
  }
17
29
  body iframe {
18
30
  border: none;
@@ -57,6 +69,7 @@ body.resizing {
57
69
  <script src="/window_storage.js"></script>
58
70
  </head>
59
71
  <body class='<%=theme%>'>
72
+ <div id='dragger'></div>
60
73
  <iframe id='col0' data-src="<%=src%>"></iframe>
61
74
  <div id="gutter" class="gutter" tabindex="0" role="separator" aria-orientation="vertical" aria-label="Resize panels" aria-valuemin="120" aria-valuemax="0" aria-valuenow="0"></div>
62
75
  <iframe id='col1' data-src="<%=src%>"></iframe>
@@ -82,7 +95,6 @@ body.resizing {
82
95
  const urlKeyFor = (paneName) => `paneUrl:${paneName}`;
83
96
 
84
97
  function setColumns(leftPx) {
85
- console.log("setColumns", leftPx)
86
98
  document.body.style.gridTemplateColumns = `${leftPx}px ${GUTTER}px 1fr`;
87
99
  }
88
100
 
@@ -109,7 +121,6 @@ body.resizing {
109
121
  }
110
122
 
111
123
  function applyFromRatio(ratio) {
112
- console.log("applyFromRatio", ratio)
113
124
  const total = computeTotal();
114
125
  let leftPx = clamp(Math.round(total * ratio), MIN, total - MIN);
115
126
  setColumns(leftPx);
@@ -171,10 +182,8 @@ body.resizing {
171
182
  let overlay = null;
172
183
 
173
184
  function refreshLayout (splitKey) {
174
- console.log("refreshLayout", splitKey)
175
185
  let val = windowStorage.getItem(splitKey)
176
186
  let id = splitKey.replace("splitRatio:", "")
177
- console.log({ id, val })
178
187
  if (val === "1" || val === "0") {
179
188
  if (val === "1") {
180
189
  id_to_hide = id + ".1"
@@ -187,20 +196,15 @@ body.resizing {
187
196
  document.querySelector("#gutter").remove()
188
197
  }
189
198
  let existing_iframe = document.querySelector("iframe")
190
- console.log("1")
191
199
  if (existing_iframe) {
192
- console.log("2")
193
200
  document.body.className = "single"
194
201
  } else {
195
- console.log("3")
196
202
  if (window.parent) {
197
- console.log("4")
198
203
  // if all child iframes have been removed, remove self
199
204
  window.parent.postMessage({
200
205
  e: "close"
201
206
  }, "*")
202
207
  } else {
203
- console.log("5")
204
208
  // if this is the top window, everything has been removed, so just redirect to home
205
209
  location.href = "/"
206
210
  }
@@ -286,17 +290,13 @@ body.resizing {
286
290
  // Initialize from saved ratio if available and set ARIA
287
291
  try {
288
292
  const saved = parseFloat(windowStorage.getItem(splitKey) || '');
289
- console.log({ saved })
290
293
  if (!Number.isNaN(saved) && saved > 0 && saved < 1) {
291
- console.log("> 1")
292
294
  applyFromRatio(saved);
293
295
  } else {
294
- console.log("> 2")
295
296
  updateAria(left.getBoundingClientRect().width, computeTotal());
296
297
  refreshLayout(splitKey)
297
298
  }
298
299
  } catch (_) {
299
- console.log("> 3")
300
300
  updateAria(left.getBoundingClientRect().width, computeTotal());
301
301
  }
302
302
 
@@ -334,11 +334,8 @@ body.resizing {
334
334
  return
335
335
  }
336
336
 
337
- console.log('Message received from iframe:', sourceFrameId);
338
-
339
337
  // Or use this approach to loop through all iframes
340
338
  const iframes = document.querySelectorAll('iframe');
341
- console.log({ splitKey })
342
339
  for (let iframe of iframes) {
343
340
  if (event.source === iframe.contentWindow) {
344
341
  if (iframe.id === "col0") {
@@ -191,6 +191,7 @@ pre {
191
191
  <script src="/highlight-js.js"></script>
192
192
  </head>
193
193
  <body class='<%=theme%>' data-agent="<%=agent%>">
194
+ <div id='dragger'></div>
194
195
  <header class='navheader grabbable'>
195
196
  <h1>
196
197
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -807,6 +807,7 @@ document.addEventListener('DOMContentLoaded', function() {
807
807
  </script>
808
808
  </head>
809
809
  <body class='<%=theme%>' data-agent="<%=agent%>">
810
+ <div id='dragger'></div>
810
811
  <header class='navheader grabbable'>
811
812
  <h1>
812
813
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -318,6 +318,7 @@ iframe {
318
318
  <script src="/report.js"></script>
319
319
  </head>
320
320
  <body class='<%=theme%>' data-agent="<%=agent%>">
321
+ <div id='dragger'></div>
321
322
  <!--
322
323
  <nav>
323
324
  <a class='logo' href="/">dal</a>
@@ -119,6 +119,7 @@ body.frozen {
119
119
  <% } else { %>
120
120
  <body class='<%=theme%>' data-agent="<%=agent%>">
121
121
  <% } %>
122
+ <div id='dragger'></div>
122
123
  <header class='grabbable'>
123
124
  <h1>
124
125
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -120,6 +120,7 @@ body main iframe {
120
120
  <script src="/nav.js"></script>
121
121
  </head>
122
122
  <body class='<%=theme%>' data-agent="<%=agent%>">
123
+ <div id='dragger'></div>
123
124
  <header class='navheader grabbable'>
124
125
  <h1>
125
126
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -150,6 +150,7 @@ document.addEventListener("DOMContentLoaded", async () => {
150
150
  </script>
151
151
  </head>
152
152
  <body>
153
+ <div id='dragger'></div>
153
154
  <header>
154
155
  <h1>
155
156
  <% paths.forEach((path) => { %>
@@ -46,6 +46,7 @@ main iframe {
46
46
  </style>
47
47
  </head>
48
48
  <body class='columns <%=theme%>' data-agent="<%=agent%>">
49
+ <div id='dragger'></div>
49
50
  <header>
50
51
  <h1>
51
52
  <% paths.forEach((path) => { %>
@@ -232,6 +232,7 @@ ol {
232
232
  <script src="/opener.js"></script>
233
233
  </head>
234
234
  <body class='<%=theme%>' data-agent="<%=agent%>">
235
+ <div id='dragger'></div>
235
236
  <header class='navheader grabbable'>
236
237
  <h1>
237
238
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -253,6 +253,7 @@ body.dark .item .tile .badge {
253
253
  <script src="/report.js"></script>
254
254
  </head>
255
255
  <body class='<%=theme%>' data-agent="<%=agent%>">
256
+ <div id='dragger'></div>
256
257
  <header class='navheader grabbable'>
257
258
  <h1>
258
259
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -401,6 +401,7 @@ body.dark aside .current.selected {
401
401
  <script src="/urldropdown.js"></script>
402
402
  </head>
403
403
  <body class='<%=theme%>' data-agent="<%=agent%>">
404
+ <div id='dragger'></div>
404
405
  <% if (error) { %>
405
406
  <nav class='error-message'>
406
407
  <div><%=error%></div>
@@ -1416,7 +1416,7 @@ body.dark .ace-editor {
1416
1416
  @media only screen and (max-width: 600px) {
1417
1417
  aside {
1418
1418
  width: unset;
1419
- flex-shrink: unset;
1419
+ flex-shrink: 0;
1420
1420
  }
1421
1421
  aside {
1422
1422
  padding: 0 10px;
@@ -1514,6 +1514,7 @@ body.dark .ace-editor {
1514
1514
  <script src="/fseditor.js"></script>
1515
1515
  </head>
1516
1516
  <body class='<%=theme%>' data-platform="<%=platform%>">
1517
+ <div id='dragger'></div>
1517
1518
  <header class='navheader grabbable'>
1518
1519
  <h1>
1519
1520
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -753,6 +753,7 @@ body.dark .appcanvas {
753
753
  <script src="/fseditor.js"></script>
754
754
  </head>
755
755
  <body class='<%=theme%>' data-platform="<%=platform%>" data-agent="<%=agent%>">
756
+ <div id='dragger'></div>
756
757
  <header class='navheader grabbable'>
757
758
  <h1>
758
759
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -523,6 +523,7 @@ document.addEventListener('DOMContentLoaded', function() {
523
523
  <script src="/fseditor.js"></script>
524
524
  </head>
525
525
  <body class='<%=theme%>' data-agent="<%=agent%>">
526
+ <div id='dragger'></div>
526
527
  <% if (error) { %>
527
528
  <nav class='error-message'>
528
529
  <div><%=error%></div>
@@ -1028,6 +1028,7 @@ document.addEventListener('DOMContentLoaded', function() {
1028
1028
  </script>
1029
1029
  </head>
1030
1030
  <body class='<%=theme%>' data-agent="<%=agent%>">
1031
+ <div id='dragger'></div>
1031
1032
  <header class='navheader grabbable'>
1032
1033
  <h1>
1033
1034
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -1000,6 +1000,7 @@ body.dark .appcanvas {
1000
1000
  <script src="/fseditor.js"></script>
1001
1001
  </head>
1002
1002
  <body class='<%=theme%>' data-platform="<%=platform%>">
1003
+ <div id='dragger'></div>
1003
1004
  <header class='navheader grabbable'>
1004
1005
  <h1>
1005
1006
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
@@ -946,6 +946,7 @@ body.minimized #collapse {
946
946
  <script src="/tippy-bundle.umd.min.js"></script>
947
947
  </head>
948
948
  <body class='<%=theme%>' data-platform="<%=platform%>" data-agent="<%=agent%>">
949
+ <div id='dragger'></div>
949
950
  <header class='navheader grabbable'>
950
951
  <h1>
951
952
  <a class='home' href="/">
@@ -13,6 +13,18 @@ body {
13
13
  display: grid;
14
14
  grid-template-rows: var(--row0, 1fr) 6px var(--row1, 1fr);
15
15
  gap: 0px;
16
+ position: relative;
17
+ }
18
+ #dragger {
19
+ -webkit-app-region: drag;
20
+ cursor: grab;
21
+ position: absolute;
22
+ top: 0;
23
+ left: 0;
24
+ right: 0;
25
+ height: 20px;
26
+ width: 100%;
27
+ z-index: 1000000000000;
16
28
  }
17
29
  body iframe {
18
30
  border: none;
@@ -57,6 +69,7 @@ body.resizing {
57
69
  <script src="/window_storage.js"></script>
58
70
  </head>
59
71
  <body class='<%=theme%>'>
72
+ <div id='dragger'></div>
60
73
  <iframe id='row0' data-src="<%=src%>"></iframe>
61
74
  <div id="gutter" class="gutter" tabindex="0" role="separator" aria-orientation="horizontal" aria-label="Resize panels" aria-valuemin="120" aria-valuemax="0" aria-valuenow="0"></div>
62
75
  <iframe id='row1' data-src="<%=src%>"></iframe>
@@ -641,6 +641,7 @@ document.addEventListener('DOMContentLoaded', function() {
641
641
  <script src="/report.js"></script>
642
642
  </head>
643
643
  <body class='<%=theme%>' data-agent="<%=agent%>">
644
+ <div id='dragger'></div>
644
645
  <!--
645
646
  <nav>
646
647
  <a class='logo' href="/">dal</a>
@@ -363,6 +363,7 @@ document.addEventListener('DOMContentLoaded', function() {
363
363
  <script src="/report.js"></script>
364
364
  </head>
365
365
  <body class='<%=theme%>' data-agent="<%=agent%>">
366
+ <div id='dragger'></div>
366
367
  <!--
367
368
  <nav>
368
369
  <a class='logo' href="/">dal</a>
@@ -134,6 +134,7 @@ body {
134
134
  <script src="/report.js"></script>
135
135
  </head>
136
136
  <body class='<%=theme%>' data-agent="<%=agent%>">
137
+ <div id='dragger'></div>
137
138
  <header class='grabbable'>
138
139
  <h1>
139
140
  <a class='path' href="/"><%-logo%></a>
@@ -149,6 +149,7 @@ body.dark .card {
149
149
  <script src="/common.js"></script>
150
150
  </head>
151
151
  <body class='<%=theme%>' data-agent="<%=agent%>">
152
+ <div id='dragger'></div>
152
153
  <header class='grabbable'>
153
154
  <h1>
154
155
  <a class='path' href="/"><%-logo%></a>
@@ -833,6 +833,7 @@ document.addEventListener('DOMContentLoaded', function() {
833
833
  <script src="/report.js"></script>
834
834
  </head>
835
835
  <body class='<%=theme%>' data-agent="<%=agent%>">
836
+ <div id='dragger'></div>
836
837
  <!--
837
838
  <nav>
838
839
  <a class='logo' href="/">dal</a>