pinokiod 3.41.0 → 3.42.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/api/browser/index.js +3 -1
- package/kernel/api/cloudflare/index.js +3 -3
- package/kernel/api/index.js +187 -51
- package/kernel/api/loading/index.js +15 -0
- package/kernel/api/process/index.js +7 -0
- package/kernel/api/shell/index.js +0 -2
- package/kernel/bin/browserless.js +22 -0
- package/kernel/bin/caddy.js +36 -4
- package/kernel/bin/index.js +4 -1
- package/kernel/bin/setup.js +38 -5
- package/kernel/connect/backend.js +110 -0
- package/kernel/connect/config.js +171 -0
- package/kernel/connect/index.js +18 -7
- package/kernel/connect/providers/huggingface/index.js +98 -0
- package/kernel/connect/providers/x/index.js +0 -1
- package/kernel/environment.js +91 -19
- package/kernel/git.js +46 -3
- package/kernel/index.js +119 -39
- package/kernel/peer.js +40 -5
- package/kernel/plugin.js +3 -2
- package/kernel/procs.js +27 -20
- package/kernel/prototype.js +30 -16
- package/kernel/router/common.js +1 -1
- package/kernel/router/connector.js +1 -3
- package/kernel/router/index.js +38 -4
- package/kernel/router/localhost_home_router.js +5 -1
- package/kernel/router/localhost_port_router.js +27 -1
- package/kernel/router/localhost_static_router.js +93 -0
- package/kernel/router/localhost_variable_router.js +14 -9
- package/kernel/router/peer_peer_router.js +3 -0
- package/kernel/router/peer_static_router.js +43 -0
- package/kernel/router/peer_variable_router.js +15 -14
- package/kernel/router/processor.js +26 -1
- package/kernel/router/rewriter.js +59 -0
- package/kernel/scripts/git/commit +11 -1
- package/kernel/shell.js +8 -3
- package/kernel/util.js +65 -6
- package/package.json +2 -1
- package/server/index.js +1037 -964
- package/server/public/common.js +382 -1
- package/server/public/fscreator.js +0 -1
- package/server/public/loading.js +17 -0
- package/server/public/notifyinput.js +0 -1
- package/server/public/opener.js +4 -2
- package/server/public/style.css +310 -11
- package/server/socket.js +7 -1
- package/server/views/app.ejs +1747 -351
- package/server/views/columns.ejs +338 -0
- package/server/views/connect/huggingface.ejs +353 -0
- package/server/views/connect/index.ejs +410 -0
- package/server/views/connect/x.ejs +43 -9
- package/server/views/connect.ejs +709 -49
- package/server/views/container.ejs +357 -0
- package/server/views/d.ejs +251 -62
- package/server/views/download.ejs +54 -10
- package/server/views/editor.ejs +11 -0
- package/server/views/explore.ejs +40 -15
- package/server/views/file_explorer.ejs +25 -246
- package/server/views/form.ejs +44 -1
- package/server/views/frame.ejs +39 -1
- package/server/views/github.ejs +48 -11
- package/server/views/help.ejs +48 -7
- package/server/views/index.ejs +119 -58
- package/server/views/index2.ejs +3 -4
- package/server/views/init/index.ejs +651 -197
- package/server/views/install.ejs +1 -1
- package/server/views/mini.ejs +47 -18
- package/server/views/net.ejs +199 -67
- package/server/views/network.ejs +220 -94
- package/server/views/network2.ejs +3 -4
- package/server/views/old_network.ejs +3 -3
- package/server/views/prototype/index.ejs +48 -11
- package/server/views/review.ejs +1005 -0
- package/server/views/rows.ejs +341 -0
- package/server/views/screenshots.ejs +1020 -0
- package/server/views/settings.ejs +160 -23
- package/server/views/setup.ejs +49 -7
- package/server/views/setup_home.ejs +43 -10
- package/server/views/shell.ejs +7 -1
- package/server/views/start.ejs +14 -9
- package/server/views/terminal.ejs +13 -2
- package/server/views/tools.ejs +1015 -0
package/server/views/install.ejs
CHANGED
|
@@ -351,7 +351,7 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
351
351
|
})
|
|
352
352
|
setInterval(async () => {
|
|
353
353
|
try {
|
|
354
|
-
let res = await fetch("/
|
|
354
|
+
let res = await fetch("/bin_ready").then((res) => {
|
|
355
355
|
return res.json()
|
|
356
356
|
})
|
|
357
357
|
if (res.success) {
|
package/server/views/mini.ejs
CHANGED
|
@@ -730,6 +730,8 @@ body.dark .appcanvas {
|
|
|
730
730
|
}
|
|
731
731
|
</style>
|
|
732
732
|
<link href="/app.css" rel="stylesheet"/>
|
|
733
|
+
<script src="/popper.min.js"></script>
|
|
734
|
+
<script src="/tippy-bundle.umd.min.js"></script>
|
|
733
735
|
<script src="/hotkeys.min.js"></script>
|
|
734
736
|
<script src="/sweetalert2.js"></script>
|
|
735
737
|
<script src="/nav.js"></script>
|
|
@@ -754,26 +756,54 @@ body.dark .appcanvas {
|
|
|
754
756
|
<header class='navheader grabbable'>
|
|
755
757
|
<h1>
|
|
756
758
|
<a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
|
|
757
|
-
<button class='btn2' id='back'><div><i class="fa-solid fa-chevron-left"></i></div
|
|
758
|
-
<button class='btn2' id='forward'><div><i class="fa-solid fa-chevron-right"></i></div
|
|
759
|
-
<button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div
|
|
759
|
+
<button class='btn2' id='back' data-tippy-content="back"><div><i class="fa-solid fa-chevron-left"></i></div></button>
|
|
760
|
+
<button class='btn2' id='forward' data-tippy-content="forward"><div><i class="fa-solid fa-chevron-right"></i></div></button>
|
|
761
|
+
<button class='btn2' id='refresh-page' data-tippy-content="refresh"><div><i class="fa-solid fa-rotate-right"></i></div></button>
|
|
762
|
+
<button class='btn2' id='screenshot' data-tippy-content="take a screenshot"><i class="fa-solid fa-camera"></i></button>
|
|
760
763
|
<div class='flexible filler'></div>
|
|
761
|
-
<
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
764
|
+
<a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
|
|
765
|
+
<div><i class="fa-solid fa-table-columns"></i></div>
|
|
766
|
+
</a>
|
|
767
|
+
<a class='btn2' href="/rows" data-tippy-content="split into 2 rows">
|
|
768
|
+
<div><i class="fa-solid fa-table-columns fa-rotate-270"></i></div>
|
|
769
|
+
</a>
|
|
770
|
+
<div class="dropdown btn2">
|
|
771
|
+
<button class='btn2' id='window-management'>
|
|
772
|
+
<div><i class="fa-solid fa-plus"></i></div>
|
|
773
|
+
</button>
|
|
774
|
+
<div class="dropdown-content" id="dropdown-content">
|
|
775
|
+
<button class='btn2' id='clone-win' data-tippy-content="clone this window">
|
|
776
|
+
<div><i class="fa-solid fa-clone"></i><div>clone this window</div></div>
|
|
777
|
+
</button>
|
|
778
|
+
<button id='new-window' data-tippy-content="open a new window" title='open a new window' class='btn2' data-agent="<%=agent%>">
|
|
779
|
+
<div><i class="fa-solid fa-plus"></i><div>new window</div></div>
|
|
780
|
+
</button>
|
|
781
|
+
</div>
|
|
768
782
|
</div>
|
|
769
|
-
|
|
770
|
-
<div class=
|
|
771
|
-
<
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
<
|
|
775
|
-
|
|
783
|
+
<!--
|
|
784
|
+
<div class="dropdown btn2">
|
|
785
|
+
<button class='btn2' id='window-management'>
|
|
786
|
+
<div><i class="fa-regular fa-window-restore"></i></div>
|
|
787
|
+
</button>
|
|
788
|
+
<div class="dropdown-content" id="dropdown-content">
|
|
789
|
+
<button class='btn2' id='clone-win' data-tippy-content="clone this window">
|
|
790
|
+
<div><i class="fa-solid fa-clone"></i><div>clone this window</div></div>
|
|
791
|
+
</button>
|
|
792
|
+
<a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
|
|
793
|
+
<div><i class="fa-solid fa-table-columns"></i><div>split columns</div></div>
|
|
794
|
+
</a>
|
|
795
|
+
<a class='btn2' href="/rows" data-tippy-content="split into 2 rows">
|
|
796
|
+
<div><i class="fa-solid fa-table-columns fa-rotate-270"></i><div>split rows</div></div>
|
|
797
|
+
</a>
|
|
798
|
+
<button id='new-window' data-tippy-content="open a new window" title='open a new window' class='btn2' data-agent="<%=agent%>">
|
|
799
|
+
<div><i class="fa-solid fa-plus"></i><div>new window</div></div>
|
|
800
|
+
</button>
|
|
801
|
+
</div>
|
|
776
802
|
</div>
|
|
803
|
+
-->
|
|
804
|
+
<button class='btn2 hidden' id='close-window' data-tippy-content='close this section'>
|
|
805
|
+
<div><i class="fa-solid fa-xmark"></i></div>
|
|
806
|
+
</button>
|
|
777
807
|
</h1>
|
|
778
808
|
</header>
|
|
779
809
|
<div class='appcanvas'>
|
|
@@ -1453,7 +1483,6 @@ body.dark .appcanvas {
|
|
|
1453
1483
|
|
|
1454
1484
|
})
|
|
1455
1485
|
const refresh = async (silent, options) => {
|
|
1456
|
-
debugger
|
|
1457
1486
|
console.log("REFRESH")
|
|
1458
1487
|
const dynamic = await fetch("<%=dynamic%>").then((res) => {
|
|
1459
1488
|
return res.text()
|
package/server/views/net.ejs
CHANGED
|
@@ -117,6 +117,7 @@ a.badge {
|
|
|
117
117
|
}
|
|
118
118
|
body.dark .btn {
|
|
119
119
|
color: white;
|
|
120
|
+
background: rgba(255,255,255,0.05) !important;
|
|
120
121
|
}
|
|
121
122
|
body.dark .badge {
|
|
122
123
|
background: rgba(255,255,255,0.1);
|
|
@@ -178,7 +179,6 @@ body.dark .section-header {
|
|
|
178
179
|
}
|
|
179
180
|
.section-header h2 {
|
|
180
181
|
font-size: 20px;
|
|
181
|
-
font-weight: lighter;
|
|
182
182
|
}
|
|
183
183
|
.section-header .section {
|
|
184
184
|
padding: 0;
|
|
@@ -252,10 +252,18 @@ body.dark .open-menu, body.dark .browse {
|
|
|
252
252
|
}
|
|
253
253
|
.section {
|
|
254
254
|
display: block;
|
|
255
|
+
width: 100%;
|
|
255
256
|
}
|
|
256
257
|
.section h2 {
|
|
257
258
|
margin: 0;
|
|
258
259
|
}
|
|
260
|
+
.section a {
|
|
261
|
+
display: flex;
|
|
262
|
+
align-items: center;
|
|
263
|
+
}
|
|
264
|
+
.section a span {
|
|
265
|
+
min-width: 0;
|
|
266
|
+
}
|
|
259
267
|
.line.align-top h3 .col .btn {
|
|
260
268
|
box-sizing: border-box;
|
|
261
269
|
margin-top: 5px;
|
|
@@ -266,11 +274,22 @@ body.dark .open-menu, body.dark .browse {
|
|
|
266
274
|
color: rgba(0, 0, 0, 0.7);
|
|
267
275
|
padding: 5px 0;
|
|
268
276
|
}
|
|
277
|
+
.container {
|
|
278
|
+
margin-left: 20px;
|
|
279
|
+
}
|
|
269
280
|
.section-container {
|
|
270
281
|
display: grid;
|
|
271
|
-
grid-template-columns: repeat(
|
|
282
|
+
grid-template-columns: repeat(3, 1fr); /* Three equal columns */
|
|
283
|
+
/*
|
|
284
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
285
|
+
*/
|
|
272
286
|
gap: 1rem; /* Optional spacing between columns */
|
|
273
287
|
}
|
|
288
|
+
.section-container > * {
|
|
289
|
+
min-width: 0;
|
|
290
|
+
overflow: hidden;
|
|
291
|
+
}
|
|
292
|
+
|
|
274
293
|
.grid-2 {
|
|
275
294
|
display: grid;
|
|
276
295
|
grid-template-columns: repeat(2, 1fr); /* Three equal columns */
|
|
@@ -304,7 +323,6 @@ aside {
|
|
|
304
323
|
width: 200px;
|
|
305
324
|
display: block;
|
|
306
325
|
flex-shrink: 0;
|
|
307
|
-
border-right: 1px solid rgba(0,0,0,0.04);
|
|
308
326
|
}
|
|
309
327
|
aside .tab i {
|
|
310
328
|
width: 20px;
|
|
@@ -318,7 +336,9 @@ body.dark aside .tab:hover, aside .tab:hover {
|
|
|
318
336
|
opacity: 1;
|
|
319
337
|
}
|
|
320
338
|
aside .tab {
|
|
321
|
-
display:
|
|
339
|
+
display: flex;
|
|
340
|
+
align-items: center;
|
|
341
|
+
gap: 5px;
|
|
322
342
|
color: black;
|
|
323
343
|
text-decoration: none;
|
|
324
344
|
padding: 10px;
|
|
@@ -373,15 +393,18 @@ body.dark .net {
|
|
|
373
393
|
border-radius: 3px;
|
|
374
394
|
color: white;
|
|
375
395
|
width: 40px;
|
|
376
|
-
|
|
396
|
+
flex-shrink: 0;
|
|
397
|
+
display: flex;
|
|
398
|
+
justify-content: center;
|
|
399
|
+
align-items: center;
|
|
377
400
|
text-align: center;
|
|
378
401
|
margin-right: 5px;
|
|
379
402
|
padding: 2px 8px;
|
|
380
403
|
font-size: 12px;
|
|
381
404
|
}
|
|
382
405
|
body.dark .net .mark {
|
|
383
|
-
background:
|
|
384
|
-
color:
|
|
406
|
+
background: rgba(255,255,255,0.1);
|
|
407
|
+
color: white;
|
|
385
408
|
}
|
|
386
409
|
.placeholder-icon {
|
|
387
410
|
font-size: 40px;
|
|
@@ -404,6 +427,48 @@ body.dark .net .mark {
|
|
|
404
427
|
.installed-apps .title i {
|
|
405
428
|
color: silver !important;
|
|
406
429
|
}
|
|
430
|
+
|
|
431
|
+
@media only screen and (max-width: 800px) {
|
|
432
|
+
body {
|
|
433
|
+
display: flex !important;
|
|
434
|
+
flex-direction: row !important;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
@media only screen and (max-width: 600px) {
|
|
438
|
+
aside {
|
|
439
|
+
width: unset;
|
|
440
|
+
flex-shrink: unset;
|
|
441
|
+
}
|
|
442
|
+
aside {
|
|
443
|
+
padding: 0 10px;
|
|
444
|
+
}
|
|
445
|
+
aside .tab i {
|
|
446
|
+
width: 100%;
|
|
447
|
+
}
|
|
448
|
+
aside .tab .caption {
|
|
449
|
+
display: none;
|
|
450
|
+
}
|
|
451
|
+
aside .tab {
|
|
452
|
+
margin: 0;
|
|
453
|
+
padding: 10px;
|
|
454
|
+
border-left: none;
|
|
455
|
+
}
|
|
456
|
+
aside .btn-tab {
|
|
457
|
+
flex-direction: column;
|
|
458
|
+
padding: 10px 0;
|
|
459
|
+
}
|
|
460
|
+
aside .btn-tab .btn {
|
|
461
|
+
display: flex;
|
|
462
|
+
justify-content: center;
|
|
463
|
+
}
|
|
464
|
+
aside .btn-tab .btn .caption {
|
|
465
|
+
display: none;
|
|
466
|
+
}
|
|
467
|
+
header .flexible {
|
|
468
|
+
min-width: unset;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
407
472
|
@media only screen and (max-width: 480px) {
|
|
408
473
|
.btn2 {
|
|
409
474
|
padding: 5px;
|
|
@@ -416,6 +481,8 @@ body.dark .net .mark {
|
|
|
416
481
|
}
|
|
417
482
|
}
|
|
418
483
|
</style>
|
|
484
|
+
<script src="/popper.min.js"></script>
|
|
485
|
+
<script src="/tippy-bundle.umd.min.js"></script>
|
|
419
486
|
<script src="/hotkeys.min.js"></script>
|
|
420
487
|
<script src="/sweetalert2.js"></script>
|
|
421
488
|
<script src="/noty.js"></script>
|
|
@@ -453,47 +520,37 @@ body.dark .net .mark {
|
|
|
453
520
|
<header class='navheader grabbable'>
|
|
454
521
|
<h1>
|
|
455
522
|
<a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
|
|
456
|
-
<button class='btn2' id='back'><div><i class="fa-solid fa-chevron-left"></i></div
|
|
457
|
-
<button class='btn2' id='forward'><div><i class="fa-solid fa-chevron-right"></i></div
|
|
458
|
-
<button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div
|
|
459
|
-
<
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
</
|
|
467
|
-
<
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
<
|
|
472
|
-
|
|
473
|
-
|
|
523
|
+
<button class='btn2' id='back' data-tippy-content="back"><div><i class="fa-solid fa-chevron-left"></i></div></button>
|
|
524
|
+
<button class='btn2' id='forward' data-tippy-content="forward"><div><i class="fa-solid fa-chevron-right"></i></div></button>
|
|
525
|
+
<button class='btn2' id='refresh-page' data-tippy-content="refresh"><div><i class="fa-solid fa-rotate-right"></i></div></button>
|
|
526
|
+
<button class='btn2' id='screenshot' data-tippy-content="take a screenshot"><i class="fa-solid fa-camera"></i></button>
|
|
527
|
+
<div class='flexible'></div>
|
|
528
|
+
<a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
|
|
529
|
+
<div><i class="fa-solid fa-table-columns"></i></div>
|
|
530
|
+
</a>
|
|
531
|
+
<a class='btn2' href="/rows" data-tippy-content="split into 2 rows">
|
|
532
|
+
<div><i class="fa-solid fa-table-columns fa-rotate-270"></i></div>
|
|
533
|
+
</a>
|
|
534
|
+
<div class="dropdown btn2">
|
|
535
|
+
<button class='btn2' id='window-management'>
|
|
536
|
+
<div><i class="fa-solid fa-plus"></i></div>
|
|
537
|
+
</button>
|
|
538
|
+
<div class="dropdown-content" id="dropdown-content">
|
|
539
|
+
<button class='btn2' id='clone-win' data-tippy-content="clone this window">
|
|
540
|
+
<div><i class="fa-solid fa-clone"></i><div>clone this window</div></div>
|
|
541
|
+
</button>
|
|
542
|
+
<button id='new-window' data-tippy-content="open a new window" title='open a new window' class='btn2' data-agent="<%=agent%>">
|
|
543
|
+
<div><i class="fa-solid fa-plus"></i><div>new window</div></div>
|
|
544
|
+
</button>
|
|
545
|
+
</div>
|
|
474
546
|
</div>
|
|
547
|
+
<button class='btn2 hidden' id='close-window' data-tippy-content='close this section'>
|
|
548
|
+
<div><i class="fa-solid fa-xmark"></i></div>
|
|
549
|
+
</button>
|
|
475
550
|
</h1>
|
|
476
551
|
</header>
|
|
477
552
|
<main>
|
|
478
553
|
<div id='terminal' class='hidden'></div>
|
|
479
|
-
<aside>
|
|
480
|
-
<div class='btn-tab'>
|
|
481
|
-
<a href="/init" class='btn'><i class="fa-solid fa-plus"></i> Create</a>
|
|
482
|
-
<a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-globe"></i> Discover</a>
|
|
483
|
-
</div>
|
|
484
|
-
<a href="/" class='tab'><i class='fas fa-laptop-code'></i> Local</a>
|
|
485
|
-
<a href="/network" class='tab'><i class="fa-solid fa-wifi"></i> Network</a>
|
|
486
|
-
<% if (list.length > 0) { %>
|
|
487
|
-
<% let brands = { win32: "windows", darwin: "apple", linux: "Linux" } %>
|
|
488
|
-
<% list.forEach(({ host, name, platform, processes }, index) => { %>
|
|
489
|
-
<% if (selected_name === name) { %>
|
|
490
|
-
<a href="/net/<%=name%>" class='submenu tab selected'><i class="fa-brands fa-<%=brands[platform]%>"></i> <%=name%> (<%=current_host === host ? 'this machine' : host%>)</a>
|
|
491
|
-
<% } else { %>
|
|
492
|
-
<a href="/net/<%=name%>" class='submenu tab'><i class="fa-brands fa-<%=brands[platform]%>"></i> <%=name%> (<%=current_host === host ? 'this machine' : host%>)</a>
|
|
493
|
-
<% } %>
|
|
494
|
-
<% }) %>
|
|
495
|
-
<% } %>
|
|
496
|
-
</aside>
|
|
497
554
|
<div class='container'>
|
|
498
555
|
<form class='search'>
|
|
499
556
|
<!--
|
|
@@ -512,11 +569,11 @@ body.dark .net .mark {
|
|
|
512
569
|
<div class='col'>
|
|
513
570
|
<div class='grid-3'>
|
|
514
571
|
<div class='section'>
|
|
515
|
-
<h2><i class='fas fa-laptop-code'></i>
|
|
572
|
+
<h2><i class='fas fa-laptop-code'></i> This machine</h2>
|
|
516
573
|
<div>accessible from this machine</div>
|
|
517
574
|
</div>
|
|
518
575
|
<div class='section'>
|
|
519
|
-
<h2><i class="fa-solid fa-wifi"></i>
|
|
576
|
+
<h2><i class="fa-solid fa-wifi"></i> Local network</h2><div>accessible from any machine on the local network</div>
|
|
520
577
|
</div>
|
|
521
578
|
<div class='section'>
|
|
522
579
|
<h2><i class="fa-solid fa-podcast"></i> Peer</h2><div>accessible from any pinokio peer on the local network <a class='explain' data-type='peer'>How to start a peer</a></div>
|
|
@@ -541,21 +598,27 @@ body.dark .net .mark {
|
|
|
541
598
|
<div class='title'><i class="fa-solid fa-circle"></i><span><%=item.title || item.name%></span></div>
|
|
542
599
|
<div class='grid-3'>
|
|
543
600
|
<div class='section'>
|
|
544
|
-
<% item.internal_router.
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
<% if (item.external_ip) { %>
|
|
551
|
-
<a class='net' target="_blank" href="http://<%=item.external_ip%>"><span class='mark'>HTTP</span> http://<%=item.external_ip%></a>
|
|
601
|
+
<% if (item.internal_router.length > 0) { %>
|
|
602
|
+
<% item.internal_router.forEach((domain) => { %>
|
|
603
|
+
<a class='net' target="_blank" href="https://<%=domain%>"><span class='mark'>HTTPS</span><span><%=domain%></span></a>
|
|
604
|
+
<% }) %>
|
|
605
|
+
<% } else { %>
|
|
606
|
+
<a class='net' target="_blank" href="http://localhost:<%=item.port%>"><span class='mark'>HTTP</span><span>localhost:<%=item.port%></span></a>
|
|
552
607
|
<% } %>
|
|
553
608
|
</div>
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
609
|
+
<% if (item.external_router.length > 0) { %>
|
|
610
|
+
<div class='section'>
|
|
611
|
+
<% item.external_router.forEach((domain) => { %>
|
|
612
|
+
<a class='net' target="_blank" href="https://<%=domain%>"><span class='mark'>HTTPS</span><span><%=domain%></span></a>
|
|
613
|
+
<% }) %>
|
|
614
|
+
</div>
|
|
615
|
+
<% } else { %>
|
|
616
|
+
<div class='section'>
|
|
617
|
+
<% if (item.external_ip) { %>
|
|
618
|
+
<a class='net' target="_blank" href="http://<%=item.external_ip%>"><span class='mark'>HTTP</span><span><%=item.external_ip%></span></a>
|
|
619
|
+
<% } %>
|
|
620
|
+
</div>
|
|
621
|
+
<% } %>
|
|
559
622
|
</div>
|
|
560
623
|
</div>
|
|
561
624
|
</div>
|
|
@@ -569,7 +632,7 @@ body.dark .net .mark {
|
|
|
569
632
|
<div class='col'>
|
|
570
633
|
<div class='grid-1'>
|
|
571
634
|
<div class='section'>
|
|
572
|
-
<h2
|
|
635
|
+
<h2>Online</h2><div>Use these URLs to access the online remote servers.</div>
|
|
573
636
|
</div>
|
|
574
637
|
</div>
|
|
575
638
|
</div>
|
|
@@ -591,12 +654,15 @@ body.dark .net .mark {
|
|
|
591
654
|
<div class='title'><i class="fa-solid fa-circle"></i><span><%=item.title || item.name%></span></div>
|
|
592
655
|
<div class='grid-1'>
|
|
593
656
|
<div class='section'>
|
|
594
|
-
<% if (item.
|
|
595
|
-
|
|
657
|
+
<% if (item.external_router.length > 0) { %>
|
|
658
|
+
<% item.external_router.forEach((domain) => { %>
|
|
659
|
+
<a class='net' target="_blank" href="https://<%=domain%>"><span class='mark'>HTTPS</span><span><%=domain%></span></a>
|
|
660
|
+
<% }) %>
|
|
661
|
+
<% } else { %>
|
|
662
|
+
<% if (item.external_ip) { %>
|
|
663
|
+
<a class='net' target="_blank" href="http://<%=item.external_ip%>"><span class='mark'>HTTP</span><span><%=item.external_ip%></span></a>
|
|
664
|
+
<% } %>
|
|
596
665
|
<% } %>
|
|
597
|
-
<% item.external_router.forEach((domain) => { %>
|
|
598
|
-
<a class='net' target="_blank" href="https://<%=domain%>"><span class='mark'>HTTPS</span> https://<%=domain%></a>
|
|
599
|
-
<% }) %>
|
|
600
666
|
</div>
|
|
601
667
|
</div>
|
|
602
668
|
</div>
|
|
@@ -610,7 +676,7 @@ body.dark .net .mark {
|
|
|
610
676
|
<div class='col'>
|
|
611
677
|
<div class='grid-1'>
|
|
612
678
|
<div class='section'>
|
|
613
|
-
<h2
|
|
679
|
+
<h2>Installed</h2><div>Remotely launch the installed apps.</div>
|
|
614
680
|
</div>
|
|
615
681
|
</div>
|
|
616
682
|
</div>
|
|
@@ -633,8 +699,49 @@ body.dark .net .mark {
|
|
|
633
699
|
<div class='description'><%=item.description%></div>
|
|
634
700
|
<div class='launch-btns grid-1'>
|
|
635
701
|
<div class='section'>
|
|
636
|
-
|
|
637
|
-
|
|
702
|
+
<% if (item.app_href) { %>
|
|
703
|
+
<a target="_blank" href="<%=item.app_href%>" class='net'><span class='mark'>HTTPS</span><span><%=item.app_href.replace("https://", "")%></span></a>
|
|
704
|
+
<% } else if (item.https_href) { %>
|
|
705
|
+
<a target="_blank" href="<%=item.https_href%>" class='net'><span class='mark'>HTTPS</span><span><%=item.https_href.replace("https://", "")%></span></a>
|
|
706
|
+
<% } else { %>
|
|
707
|
+
<a target="_blank" href="<%=item.http_href%>" class='net'><span class='mark'>HTTP</span><span><%=item.http_href.replace("http://", "")%></span></a>
|
|
708
|
+
<% } %>
|
|
709
|
+
</div>
|
|
710
|
+
</div>
|
|
711
|
+
</div>
|
|
712
|
+
</div>
|
|
713
|
+
</h3>
|
|
714
|
+
<% }) %>
|
|
715
|
+
</div>
|
|
716
|
+
<div class='section-col'>
|
|
717
|
+
<div class='section-header'>
|
|
718
|
+
<h3>
|
|
719
|
+
<div class='col'>
|
|
720
|
+
<div class='grid-1'>
|
|
721
|
+
<div class='section'>
|
|
722
|
+
<h2>Serverless</h2><div>Static websites or serverless apps that connect to 3rd party APIs</div>
|
|
723
|
+
</div>
|
|
724
|
+
</div>
|
|
725
|
+
</div>
|
|
726
|
+
</h3>
|
|
727
|
+
</div>
|
|
728
|
+
<% serverless.forEach((item, index) => { %>
|
|
729
|
+
<div class='index line align-top' data-index="<%=processes.length + installed.length + index%>" data-name="<%=item.name%>" data-title="<%=item.name%>" data-description="<%=item.name%>">
|
|
730
|
+
<h3>
|
|
731
|
+
<div class='item-icon'>
|
|
732
|
+
<div class='placeholder-icon'>
|
|
733
|
+
<i class="fa-solid fa-database"></i>
|
|
734
|
+
</div>
|
|
735
|
+
</div>
|
|
736
|
+
<div class='col'>
|
|
737
|
+
<div class='title'><%=item.name%></div>
|
|
738
|
+
<div class='launch-btns grid-1'>
|
|
739
|
+
<div class='section'>
|
|
740
|
+
<% if (item.external_router.length > 0) { %>
|
|
741
|
+
<a target="_blank" href="https://<%=item.external_router[0]%>" class='net'><span class='mark'>HTTPS</span><span><%=item.external_router[0]%></span></a>
|
|
742
|
+
<% } else { %>
|
|
743
|
+
<a target="_blank" href="http://<%=item.external_ip%>" class='net'><span class='mark'>HTTP</span><span><%=item.external_ip%></span></a>
|
|
744
|
+
<% } %>
|
|
638
745
|
</div>
|
|
639
746
|
</div>
|
|
640
747
|
</div>
|
|
@@ -646,6 +753,31 @@ body.dark .net .mark {
|
|
|
646
753
|
<% } %>
|
|
647
754
|
</div>
|
|
648
755
|
</div>
|
|
756
|
+
<aside>
|
|
757
|
+
<div class='btn-tab'>
|
|
758
|
+
<a href="/init" class='btn'><i class="fa-solid fa-plus"></i><div class='caption'>Create</div></a>
|
|
759
|
+
<a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-globe"></i><div class='caption'>Discover</div></a>
|
|
760
|
+
</div>
|
|
761
|
+
<a href="/" class='tab'><i class='fas fa-laptop-code'></i><div class='caption'>This machine</div></a>
|
|
762
|
+
<a href="/network" class='tab'><i class="fa-solid fa-wifi"></i><div class='caption'>Local network</div></a>
|
|
763
|
+
<% if (list.length > 0) { %>
|
|
764
|
+
<% let brands = { win32: "windows", darwin: "apple", linux: "Linux" } %>
|
|
765
|
+
<% list.forEach(({ host, name, platform, processes }, index) => { %>
|
|
766
|
+
<% if (selected_name === name) { %>
|
|
767
|
+
<a href="/net/<%=name%>" class='submenu tab selected'><i class="fa-brands fa-<%=brands[platform]%>"></i><div class='caption'><%=name%> (<%=current_host === host ? 'this machine' : host%>)</div></a>
|
|
768
|
+
<% } else { %>
|
|
769
|
+
<a href="/net/<%=name%>" class='submenu tab'><i class="fa-brands fa-<%=brands[platform]%>"></i><div class='caption'><%=name%> (<%=current_host === host ? 'this machine' : host%>)</div></a>
|
|
770
|
+
<% } %>
|
|
771
|
+
<% }) %>
|
|
772
|
+
<% } %>
|
|
773
|
+
<a href="/connect" class='tab'><i class="fa-solid fa-plug"></i><div class='caption'>Login</div></a>
|
|
774
|
+
<a class='tab' href="<%=portal%>" target="_blank"><i class="fa-solid fa-question"></i><div class='caption'>Help</div></a>
|
|
775
|
+
<a class='tab' id='genlog'><i class="fa-solid fa-laptop-code"></i><div class='caption'>Logs</div></a>
|
|
776
|
+
<a id='downloadlogs' download class='hidden btn2' href="/pinokio/logs.zip"><i class="fa-solid fa-download"></i><div class='caption'>Download logs</div></a>
|
|
777
|
+
<a class='tab' href="/screenshots"><i class="fa-solid fa-camera"></i><div class='caption'>Screenshots</div></a>
|
|
778
|
+
<a class='tab' href="/tools"><i class="fa-solid fa-toolbox"></i><div class='caption'>Installed Tools</div></a>
|
|
779
|
+
<a class='tab' href="/?mode=settings"><i class="fa-solid fa-gear"></i><div class='caption'>Settings</div></a>
|
|
780
|
+
</aside>
|
|
649
781
|
</main>
|
|
650
782
|
<script>
|
|
651
783
|
let list = []
|