pinokiod 3.16.3 → 3.17.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/bin/index.js +0 -3
- package/kernel/bin/py.js +0 -1
- package/kernel/peer.js +1 -0
- package/kernel/procs.js +5 -0
- package/package.json +1 -1
- package/server/index.js +0 -1
- package/server/public/https.png +0 -0
- package/server/public/peernet.png +0 -0
- package/server/public/peers.png +0 -0
- package/server/public/style.css +14 -0
- package/server/views/app.ejs +1 -1
- package/server/views/connect/x.ejs +1 -1
- package/server/views/connect.ejs +1 -1
- package/server/views/download.ejs +1 -1
- package/server/views/explore.ejs +1 -1
- package/server/views/file_explorer.ejs +1 -1
- package/server/views/github.ejs +1 -1
- package/server/views/help.ejs +1 -1
- package/server/views/index.ejs +1 -1
- package/server/views/network.ejs +130 -109
- package/server/views/old_network.ejs +874 -0
- package/server/views/settings.ejs +1 -1
package/kernel/bin/index.js
CHANGED
|
@@ -957,7 +957,6 @@ class Bin {
|
|
|
957
957
|
let dependencies
|
|
958
958
|
if (r.name === "conda") {
|
|
959
959
|
dependencies = config.bin.conda_requirements
|
|
960
|
-
console.log("check dependencies", dependencies)
|
|
961
960
|
requirements[i].dependencies = dependencies
|
|
962
961
|
}
|
|
963
962
|
let installed = await this.check_installed(r, dependencies)
|
|
@@ -980,8 +979,6 @@ class Bin {
|
|
|
980
979
|
this.install_required = install_required
|
|
981
980
|
this.requirements_pending = requirements_pending
|
|
982
981
|
|
|
983
|
-
console.log("check_bin finished 2")
|
|
984
|
-
|
|
985
982
|
requirements = requirements.filter((r) => {
|
|
986
983
|
return r.relevant
|
|
987
984
|
})
|
package/kernel/bin/py.js
CHANGED
package/kernel/peer.js
CHANGED
package/kernel/procs.js
CHANGED
package/package.json
CHANGED
package/server/index.js
CHANGED
|
@@ -3416,7 +3416,6 @@ class Server {
|
|
|
3416
3416
|
bin: this.kernel.bin.preset("network"),
|
|
3417
3417
|
})
|
|
3418
3418
|
|
|
3419
|
-
console.log({ requirements_pending, install_required })
|
|
3420
3419
|
if (!requirements_pending && install_required) {
|
|
3421
3420
|
console.log("redirect to /setup/network")
|
|
3422
3421
|
res.redirect("/setup/network?callback=/network")
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/server/public/style.css
CHANGED
|
@@ -267,6 +267,20 @@ footer .toggle-expand {
|
|
|
267
267
|
footer pre {
|
|
268
268
|
background: none !important;
|
|
269
269
|
}
|
|
270
|
+
.swal2-popup.full-popup img {
|
|
271
|
+
width: 100%;
|
|
272
|
+
}
|
|
273
|
+
.swal2-popup.full-popup {
|
|
274
|
+
max-width: 1024px;
|
|
275
|
+
width: 100%;
|
|
276
|
+
}
|
|
277
|
+
.full-modal {
|
|
278
|
+
font-size: 14px;
|
|
279
|
+
text-align: left;
|
|
280
|
+
}
|
|
281
|
+
.swal2-title.full-title {
|
|
282
|
+
text-align: left;
|
|
283
|
+
}
|
|
270
284
|
.swal2-popup.min-popup a {
|
|
271
285
|
outline: none;
|
|
272
286
|
}
|
package/server/views/app.ejs
CHANGED
|
@@ -743,7 +743,7 @@ body.dark .appcanvas {
|
|
|
743
743
|
<body class='<%=theme%>' data-platform="<%=platform%>" data-agent="<%=agent%>">
|
|
744
744
|
<header class='navheader grabbable'>
|
|
745
745
|
<h1>
|
|
746
|
-
<a class='home' href="/"><
|
|
746
|
+
<a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
|
|
747
747
|
<button class='btn2' id='back'><div><i class="fa-solid fa-chevron-left"></i></div><div>Prev</div></button>
|
|
748
748
|
<button class='btn2' id='forward'><div><i class="fa-solid fa-chevron-right"></i></div><div>Next</div></button>
|
|
749
749
|
<button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div><div>Refresh</div></button>
|
|
@@ -191,7 +191,7 @@ pre {
|
|
|
191
191
|
<body class='<%=theme%>' data-agent="<%=agent%>">
|
|
192
192
|
<header class='navheader grabbable'>
|
|
193
193
|
<h1>
|
|
194
|
-
<a class='home' href="/"><
|
|
194
|
+
<a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
|
|
195
195
|
<button class='btn2' id='back'><div><i class="fa-solid fa-chevron-left"></i></div><div>Prev</div></button>
|
|
196
196
|
<button class='btn2' id='forward'><div><i class="fa-solid fa-chevron-right"></i></div><div>Next</div></button>
|
|
197
197
|
<button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div><div>Refresh</div></button>
|
package/server/views/connect.ejs
CHANGED
|
@@ -226,7 +226,7 @@ body.dark .config {
|
|
|
226
226
|
<body class='<%=theme%>' data-agent="<%=agent%>">
|
|
227
227
|
<header class='navheader grabbable'>
|
|
228
228
|
<h1>
|
|
229
|
-
<a class='home' href="/"><
|
|
229
|
+
<a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
|
|
230
230
|
<button class='btn2' id='back'><div><i class="fa-solid fa-chevron-left"></i></div><div>Prev</div></button>
|
|
231
231
|
<button class='btn2' id='forward'><div><i class="fa-solid fa-chevron-right"></i></div><div>Next</div></button>
|
|
232
232
|
<button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div><div>Refresh</div></button>
|
|
@@ -111,7 +111,7 @@ body.frozen {
|
|
|
111
111
|
<% } %>
|
|
112
112
|
<header class='grabbable'>
|
|
113
113
|
<h1>
|
|
114
|
-
<a class='home' href="/"><
|
|
114
|
+
<a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
|
|
115
115
|
<button class='btn2' id='back'><div><i class="fa-solid fa-chevron-left"></i></div><div>Prev</div></button>
|
|
116
116
|
<button class='btn2' id='forward'><div><i class="fa-solid fa-chevron-right"></i></div><div>Next</div></button>
|
|
117
117
|
<button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div><div>Refresh</div></button>
|
package/server/views/explore.ejs
CHANGED
|
@@ -120,7 +120,7 @@ body main iframe {
|
|
|
120
120
|
<body class='<%=theme%>' data-agent="<%=agent%>">
|
|
121
121
|
<header class='navheader grabbable'>
|
|
122
122
|
<h1>
|
|
123
|
-
<a class='home' href="/"><
|
|
123
|
+
<a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
|
|
124
124
|
<button class='btn2' id='back'><div><i class="fa-solid fa-chevron-left"></i></div><div>Prev</div></button>
|
|
125
125
|
<button class='btn2' id='forward'><div><i class="fa-solid fa-chevron-right"></i></div><div>Next</div></button>
|
|
126
126
|
<button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div><div>Refresh</div></button>
|
|
@@ -162,7 +162,7 @@ body.dark .browser-options-row {
|
|
|
162
162
|
<header class='navheader grabbable'>
|
|
163
163
|
<h1>
|
|
164
164
|
<% if (ishome) { %>
|
|
165
|
-
<a class='home' href="/"><
|
|
165
|
+
<a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
|
|
166
166
|
<button class='btn2' id='back'><i class="fa-solid fa-chevron-left"></i></button>
|
|
167
167
|
<button class='btn2' id='forward'><i class="fa-solid fa-chevron-right"></i></button>
|
|
168
168
|
<button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div><div>Refresh</div></button>
|
package/server/views/github.ejs
CHANGED
|
@@ -205,7 +205,7 @@ hr {
|
|
|
205
205
|
<body class='<%=theme%>' data-agent="<%=agent%>">
|
|
206
206
|
<header class='navheader grabbable'>
|
|
207
207
|
<h1>
|
|
208
|
-
<a class='home' href="/"><
|
|
208
|
+
<a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
|
|
209
209
|
<button class='btn2' id='back'><div><i class="fa-solid fa-chevron-left"></i></div><div>Prev</div></button>
|
|
210
210
|
<button class='btn2' id='forward'><div><i class="fa-solid fa-chevron-right"></i></div><div>Next</div></button>
|
|
211
211
|
<button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div><div>Refresh</div></button>
|
package/server/views/help.ejs
CHANGED
|
@@ -253,7 +253,7 @@ body.dark .item .tile .badge {
|
|
|
253
253
|
<body class='<%=theme%>' data-agent="<%=agent%>">
|
|
254
254
|
<header class='navheader grabbable'>
|
|
255
255
|
<h1>
|
|
256
|
-
<a class='home' href="/"><
|
|
256
|
+
<a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
|
|
257
257
|
<button class='btn2' id='back'><div><i class="fa-solid fa-chevron-left"></i></div><div>Prev</div></button>
|
|
258
258
|
<button class='btn2' id='forward'><div><i class="fa-solid fa-chevron-right"></i></div><div>Next</div></button>
|
|
259
259
|
<button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div><div>Refresh</div></button>
|
package/server/views/index.ejs
CHANGED
|
@@ -243,7 +243,7 @@ body.dark .open-menu, body.dark .browse {
|
|
|
243
243
|
<header class='navheader grabbable'>
|
|
244
244
|
<h1>
|
|
245
245
|
<% if (ishome) { %>
|
|
246
|
-
<a class='home' href="/"><
|
|
246
|
+
<a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
|
|
247
247
|
<button class='btn2' id='back'><div><i class="fa-solid fa-chevron-left"></i></div><div>Prev</div></button>
|
|
248
248
|
<button class='btn2' id='forward'><div><i class="fa-solid fa-chevron-right"></i></div><div>Next</div></button>
|
|
249
249
|
<button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div><div>Refresh</div></button>
|
package/server/views/network.ejs
CHANGED
|
@@ -27,6 +27,14 @@
|
|
|
27
27
|
text-decoration: none;
|
|
28
28
|
color: black;
|
|
29
29
|
}
|
|
30
|
+
ol {
|
|
31
|
+
padding-inline-start: 15px;
|
|
32
|
+
}
|
|
33
|
+
a.explain {
|
|
34
|
+
color: royalblue;
|
|
35
|
+
text-decoration: underline;
|
|
36
|
+
cursor: pointer;
|
|
37
|
+
}
|
|
30
38
|
.status {
|
|
31
39
|
padding: 10px;
|
|
32
40
|
margin: 10px;
|
|
@@ -245,7 +253,7 @@ td:first-child, th:first-child {
|
|
|
245
253
|
vertical-align: top;
|
|
246
254
|
border-bottom: 1px solid rgba(0,0,0,0.05);
|
|
247
255
|
text-align: left;
|
|
248
|
-
padding: 20px
|
|
256
|
+
padding: 20px 5px;
|
|
249
257
|
font-weight: normal;
|
|
250
258
|
font-size: 12px;
|
|
251
259
|
margin-bottom: 10px;
|
|
@@ -256,7 +264,7 @@ td:first-child, th:first-child {
|
|
|
256
264
|
.container-row td {
|
|
257
265
|
vertical-align: top;
|
|
258
266
|
font-size: 14px;
|
|
259
|
-
padding: 5px
|
|
267
|
+
padding: 5px;
|
|
260
268
|
word-wrap: break-word;
|
|
261
269
|
}
|
|
262
270
|
|
|
@@ -379,6 +387,9 @@ input:checked + .slider:before {
|
|
|
379
387
|
flex-grow: 1;
|
|
380
388
|
padding: 10px;
|
|
381
389
|
}
|
|
390
|
+
table h3 {
|
|
391
|
+
margin: 0;
|
|
392
|
+
}
|
|
382
393
|
|
|
383
394
|
|
|
384
395
|
@media only screen and (max-width: 480px) {
|
|
@@ -401,7 +412,7 @@ input:checked + .slider:before {
|
|
|
401
412
|
<body class='<%=theme%>' data-agent="<%=agent%>">
|
|
402
413
|
<header class='navheader grabbable'>
|
|
403
414
|
<h1>
|
|
404
|
-
<a class='home' href="/"><
|
|
415
|
+
<a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
|
|
405
416
|
<button class='btn2' id='back'><div><i class="fa-solid fa-chevron-left"></i></div><div>Prev</div></button>
|
|
406
417
|
<button class='btn2' id='forward'><div><i class="fa-solid fa-chevron-right"></i></div><div>Next</div></button>
|
|
407
418
|
<button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div><div>Refresh</div></button>
|
|
@@ -423,7 +434,11 @@ input:checked + .slider:before {
|
|
|
423
434
|
<div class='config'>
|
|
424
435
|
<div class='config-header'>
|
|
425
436
|
<div class='header-label'><i class='fa-solid fa-wifi'></i> Network</div>
|
|
426
|
-
<div class='desc'>Instant HTTPS for every app on your local network.</div>
|
|
437
|
+
<div class='desc'>Instant HTTPS and Peer network for every app on your local network.</div>
|
|
438
|
+
<ol>
|
|
439
|
+
<li><strong>Instant HTTPS</strong> <a class='explain' data-type='https'>Learn more</a></li>
|
|
440
|
+
<li><strong>Local Peer-to-Peer Network</strong> <a class='explain' data-type='peer'>Learn more</a></li>
|
|
441
|
+
</ol>
|
|
427
442
|
</div>
|
|
428
443
|
<div class='config-body'>
|
|
429
444
|
<div class='config-row'>
|
|
@@ -465,121 +480,73 @@ input:checked + .slider:before {
|
|
|
465
480
|
</div>
|
|
466
481
|
<% } else { %>
|
|
467
482
|
<div class='header-label-sub'>
|
|
468
|
-
<h1><i class="fa-solid fa-wifi"></i> <%=name
|
|
483
|
+
<h1><i class="fa-solid fa-wifi"></i> <%=name%> (peer)</h1>
|
|
469
484
|
<div class='s'><i class="fa-brands fa-<%=brands[platform]%>"></i> <%=platform%> <%=host%></div>
|
|
470
485
|
</div>
|
|
471
486
|
<% } %>
|
|
472
487
|
<table>
|
|
473
|
-
|
|
474
|
-
<
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
<
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
<a class='ln' target="_blank" href="http://<%=item.external_ip%>">http://<%=item.external_ip%></a>
|
|
490
|
-
</div>
|
|
491
|
-
<% } %>
|
|
492
|
-
</td>
|
|
493
|
-
<td>
|
|
494
|
-
<% item.internal_router.forEach((domain) => { %>
|
|
488
|
+
<% if (current_host === host) { %>
|
|
489
|
+
<tr>
|
|
490
|
+
<th><h2>App</h2><div>All servers on this machine</div></th>
|
|
491
|
+
<th><h2>Local</h2><div>endpoints accessible from this machine</div></th>
|
|
492
|
+
<th><h2>Network</h2><div>endpoints accessible from any machine on the local network</div></th>
|
|
493
|
+
<th><h2>Peer</h2><div>endpoints accessible from any pinokio peer on the local network <a class='explain' data-type='peer'>How to start a peer</a></div></th>
|
|
494
|
+
</tr>
|
|
495
|
+
<% processes.forEach((item) => { %>
|
|
496
|
+
<tr>
|
|
497
|
+
<td class='title'><%=item.name%></td>
|
|
498
|
+
<td>
|
|
499
|
+
<% item.internal_router.forEach((domain) => { %>
|
|
500
|
+
<div>
|
|
501
|
+
<a class='ln' target="_blank" href="https://<%=domain%>">https://<%=domain%></a>
|
|
502
|
+
</div>
|
|
503
|
+
<% }) %>
|
|
495
504
|
<div>
|
|
496
|
-
<a class='ln' target="_blank" href="
|
|
505
|
+
<a class='ln' target="_blank" href="http://localhost:<%=item.port%>">http://localhost:<%=item.port%></a>
|
|
497
506
|
</div>
|
|
498
|
-
|
|
499
|
-
<
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
507
|
+
</td>
|
|
508
|
+
<td>
|
|
509
|
+
<% if (item.external_ip) { %>
|
|
510
|
+
<div>
|
|
511
|
+
<a class='ln' target="_blank" href="http://<%=item.external_ip%>">http://<%=item.external_ip%></a>
|
|
512
|
+
</div>
|
|
513
|
+
<% } %>
|
|
514
|
+
</td>
|
|
515
|
+
<td>
|
|
516
|
+
<% item.external_router.forEach((domain) => { %>
|
|
517
|
+
<div>
|
|
518
|
+
<a class='ln' target="_blank" href="https://<%=domain%>">https://<%=domain%></a>
|
|
519
|
+
</div>
|
|
520
|
+
<% }) %>
|
|
521
|
+
</td>
|
|
522
|
+
</tr>
|
|
523
|
+
<% }) %>
|
|
524
|
+
<% } else { %>
|
|
525
|
+
<tr>
|
|
526
|
+
<th><h2>App</h2><div>All servers on this machine</div></th>
|
|
527
|
+
<th><h2>Endpoints</h2><div>accessible through peer network</div></th>
|
|
503
528
|
</tr>
|
|
504
|
-
|
|
529
|
+
<% processes.forEach((item) => { %>
|
|
530
|
+
<tr>
|
|
531
|
+
<td class='title'><%=item.name%></td>
|
|
532
|
+
<td>
|
|
533
|
+
<% if (item.external_ip) { %>
|
|
534
|
+
<div>
|
|
535
|
+
<a class='ln' target="_blank" href="http://<%=item.external_ip%>">http://<%=item.external_ip%></a>
|
|
536
|
+
</div>
|
|
537
|
+
<% } %>
|
|
538
|
+
<% item.external_router.forEach((domain) => { %>
|
|
539
|
+
<div>
|
|
540
|
+
<a class='ln' target="_blank" href="https://<%=domain%>">https://<%=domain%></a>
|
|
541
|
+
</div>
|
|
542
|
+
<% }) %>
|
|
543
|
+
</td>
|
|
544
|
+
</tr>
|
|
545
|
+
<% }) %>
|
|
546
|
+
<% } %>
|
|
505
547
|
</table>
|
|
506
548
|
</div>
|
|
507
549
|
<% }) %>
|
|
508
|
-
<div class='container-row hidden'>
|
|
509
|
-
<div class='header-label-sub'><i class="fa-solid fa-microchip"></i> System Programs</div>
|
|
510
|
-
<div class='line align-top'>
|
|
511
|
-
<h3>
|
|
512
|
-
<img class='icon' src="<%=icon%>">
|
|
513
|
-
<div class='col'>
|
|
514
|
-
<div class='title'>Pinokio</div>
|
|
515
|
-
<% if (proxy) { %>
|
|
516
|
-
<div class='description'><a href="<%=proxy.proxy%>" target="_blank"><%=proxy.proxy%></a> → <a href="<%=localhost%>" target="_blank"><%=localhost%></a></div>
|
|
517
|
-
<a class='wifi-qr badge' data-qr="<%=qr%>" data-url="<%=proxy.proxy%>"><i class="fa-solid fa-qrcode"></i> Scan QR Code</a>
|
|
518
|
-
<% } else { %>
|
|
519
|
-
<div class='description'>Share Pinokio <a href="<%=localhost%>" target="_blank"><%=localhost%></a> with other devices on the same network</div>
|
|
520
|
-
<% } %>
|
|
521
|
-
<div class='btn-container'>
|
|
522
|
-
<% if (proxy) { %>
|
|
523
|
-
<div id='wifi-stop' data-proxy="<%=proxy.proxy%>" class='btn'><div><i class="fa-solid fa-stop"></i> Stop</div></div>
|
|
524
|
-
<% } else { %>
|
|
525
|
-
<div id='wifi' class='btn'><div><i class="fa-solid fa-play"></i> Start</div></div>
|
|
526
|
-
<div id='wifi-starting' class='btn disabled hidden'><div><i class="fa-solid fa-circle-notch fa-spin"></i> Starting</div></div>
|
|
527
|
-
<% } %>
|
|
528
|
-
</div>
|
|
529
|
-
</div>
|
|
530
|
-
</h3>
|
|
531
|
-
</div>
|
|
532
|
-
<% items.forEach((item) => { %>
|
|
533
|
-
<div class='line align-top'>
|
|
534
|
-
<h3>
|
|
535
|
-
<img class='icon' src="<%=item.icon%>">
|
|
536
|
-
<div class='col'>
|
|
537
|
-
<div class='title'><%=item.name%></div>
|
|
538
|
-
<% if (item.proxy) { %>
|
|
539
|
-
<div class='description'><a href="<%=item.proxy%>" target="_blank"><%=item.proxy%></a> → <a href="<%=item.target%>" target="_blank"><%=item.target%></a></div>
|
|
540
|
-
<a class='wifi-qr badge' data-qr="<%=item.qr%>" data-url="<%=item.proxy%>"><i class="fa-solid fa-qrcode"></i> Scan QR Code</a>
|
|
541
|
-
<% } else { %>
|
|
542
|
-
<div class='description'>Share <%=item.target%> with other devices on the same network</div>
|
|
543
|
-
<% } %>
|
|
544
|
-
<div class='btn-container'>
|
|
545
|
-
<% if (item.running) { %>
|
|
546
|
-
<div data-port="<%=item.port%>" data-name="<%=item.name%>" data-target="<%=item.target%>" class='stop btn'><i class="fa-solid fa-stop"></i> Stop</div>
|
|
547
|
-
<% } else { %>
|
|
548
|
-
<div data-port="<%=item.port%>" data-name="<%=item.name%>" data-target="<%=item.target%>" class='start btn'><i class="fa-solid fa-play"></i> Start at port <%=item.port%></div>
|
|
549
|
-
<% } %>
|
|
550
|
-
</div>
|
|
551
|
-
</div>
|
|
552
|
-
</h3>
|
|
553
|
-
</div>
|
|
554
|
-
<% }) %>
|
|
555
|
-
</div>
|
|
556
|
-
<!--
|
|
557
|
-
<div class='container-row'>
|
|
558
|
-
<div class='header-label-sub'><i class="fa-solid fa-dice-d6"></i> Pinokio</div>
|
|
559
|
-
<% apps.forEach((item) => { %>
|
|
560
|
-
<a class='line align-top' href="<%=item.link%>">
|
|
561
|
-
<h3>
|
|
562
|
-
<% if (item.icon) { %>
|
|
563
|
-
<img class='icon' src="<%=item.icon%>">
|
|
564
|
-
<% } else { %>
|
|
565
|
-
<% if (theme === 'dark') { %>
|
|
566
|
-
<img class='icon' src="/pinokio-white.png">
|
|
567
|
-
<% } else { %>
|
|
568
|
-
<img class='icon' src="/pinokio-black.png">
|
|
569
|
-
<% } %>
|
|
570
|
-
<% } %>
|
|
571
|
-
<div class='col'>
|
|
572
|
-
<div class='title'><%=item.name%></div>
|
|
573
|
-
<div class='description'><%=item.description%></div>
|
|
574
|
-
</div>
|
|
575
|
-
<div class='spinner'>
|
|
576
|
-
<i class="fa-solid fa-chevron-right"></i>
|
|
577
|
-
</div>
|
|
578
|
-
</h3>
|
|
579
|
-
</a>
|
|
580
|
-
<% }) %>
|
|
581
|
-
</div>
|
|
582
|
-
-->
|
|
583
550
|
</div>
|
|
584
551
|
<% } %>
|
|
585
552
|
</main>
|
|
@@ -663,6 +630,60 @@ document.querySelector("#active").addEventListener("change", (e)=> {
|
|
|
663
630
|
document.querySelector("main").addEventListener("click", async (e) => {
|
|
664
631
|
let target
|
|
665
632
|
|
|
633
|
+
if (e.target.classList.contains("explain")) {
|
|
634
|
+
target = e.target
|
|
635
|
+
} else {
|
|
636
|
+
target = e.target.closest(".explain")
|
|
637
|
+
}
|
|
638
|
+
if (target) {
|
|
639
|
+
e.preventDefault()
|
|
640
|
+
e.stopPropagation()
|
|
641
|
+
let type = target.getAttribute("data-type")
|
|
642
|
+
if (type === "https") {
|
|
643
|
+
await Swal.fire({
|
|
644
|
+
title: "Instant HTTPS",
|
|
645
|
+
customClass: {
|
|
646
|
+
popup: "full-popup",
|
|
647
|
+
title: "full-title"
|
|
648
|
+
},
|
|
649
|
+
showConfirmButton: false,
|
|
650
|
+
html: `<div class='full-modal'>
|
|
651
|
+
<div>Pinokio automatically turns ALL your local applications into HTTPS.</div>
|
|
652
|
+
<br>
|
|
653
|
+
<div>Instant HTTPS automagically works for ALL your local apps and APIs system-wide (not just those installed on pinokio)</div>
|
|
654
|
+
<br>
|
|
655
|
+
<div>This means, even the apps that have nothing to do with Pinokio (such as Ollama, LMStudio, or really anything) become HTTPS-ified.</div>
|
|
656
|
+
<br>
|
|
657
|
+
<div>Exposing localhost apps over HTTPS unlocks powerful new possibilities. It enables a completely new application architecture where public websites can securely leverage your local APIs as backend services.</div>
|
|
658
|
+
<br>
|
|
659
|
+
<img src="/https.png"/>
|
|
660
|
+
<br>
|
|
661
|
+
</div>`
|
|
662
|
+
})
|
|
663
|
+
} else if (type === "peer") {
|
|
664
|
+
await Swal.fire({
|
|
665
|
+
title: "Peer to Peer Local Network",
|
|
666
|
+
customClass: {
|
|
667
|
+
popup: "full-popup",
|
|
668
|
+
title: "full-title"
|
|
669
|
+
},
|
|
670
|
+
showConfirmButton: false,
|
|
671
|
+
html: `<div class='full-modal'>
|
|
672
|
+
<div>Peers can access each other over HTTPS. It's like a whole internet, but among your local machines.</div>
|
|
673
|
+
<br>
|
|
674
|
+
<img src="/peernet.png"/>
|
|
675
|
+
<div>To start a peer, install Pinokio on any other machine on the same network.</div>
|
|
676
|
+
<br>
|
|
677
|
+
<div>Peers automatically discover each other and display accessible apps and endpoints from other machines:</div>
|
|
678
|
+
<br>
|
|
679
|
+
<img src="/peers.png"/>
|
|
680
|
+
<br>
|
|
681
|
+
</div>`
|
|
682
|
+
})
|
|
683
|
+
}
|
|
684
|
+
return
|
|
685
|
+
}
|
|
686
|
+
|
|
666
687
|
if (e.target.classList.contains("save")) {
|
|
667
688
|
target = e.target
|
|
668
689
|
} else {
|