pinokiod 3.86.0 → 3.87.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.
Files changed (67) hide show
  1. package/Dockerfile +61 -0
  2. package/docker-entrypoint.sh +75 -0
  3. package/kernel/api/hf/index.js +1 -1
  4. package/kernel/api/index.js +1 -1
  5. package/kernel/api/shell/index.js +6 -0
  6. package/kernel/api/terminal/index.js +166 -0
  7. package/kernel/bin/conda.js +3 -2
  8. package/kernel/bin/index.js +53 -2
  9. package/kernel/bin/setup.js +32 -0
  10. package/kernel/bin/vs.js +11 -2
  11. package/kernel/index.js +42 -2
  12. package/kernel/info.js +36 -0
  13. package/kernel/peer.js +42 -15
  14. package/kernel/router/index.js +23 -15
  15. package/kernel/router/localhost_static_router.js +0 -3
  16. package/kernel/router/pinokio_domain_router.js +333 -0
  17. package/kernel/shells.js +21 -1
  18. package/kernel/util.js +2 -2
  19. package/package.json +2 -1
  20. package/script/install-mode.js +33 -0
  21. package/script/pinokio.json +7 -0
  22. package/server/index.js +513 -173
  23. package/server/public/Socket.js +48 -0
  24. package/server/public/common.js +1441 -276
  25. package/server/public/fseditor.js +71 -12
  26. package/server/public/install.js +1 -1
  27. package/server/public/layout.js +740 -0
  28. package/server/public/modalinput.js +0 -1
  29. package/server/public/style.css +97 -105
  30. package/server/public/tab-idle-notifier.js +629 -0
  31. package/server/public/terminal_input_tracker.js +63 -0
  32. package/server/public/urldropdown.css +319 -53
  33. package/server/public/urldropdown.js +615 -159
  34. package/server/public/window_storage.js +97 -28
  35. package/server/socket.js +40 -9
  36. package/server/views/500.ejs +2 -2
  37. package/server/views/app.ejs +3136 -1367
  38. package/server/views/bookmarklet.ejs +1 -1
  39. package/server/views/bootstrap.ejs +1 -1
  40. package/server/views/columns.ejs +2 -13
  41. package/server/views/connect.ejs +3 -4
  42. package/server/views/container.ejs +1 -2
  43. package/server/views/d.ejs +223 -53
  44. package/server/views/editor.ejs +1 -1
  45. package/server/views/file_explorer.ejs +1 -1
  46. package/server/views/index.ejs +12 -11
  47. package/server/views/index2.ejs +4 -4
  48. package/server/views/init/index.ejs +4 -5
  49. package/server/views/install.ejs +1 -1
  50. package/server/views/layout.ejs +105 -0
  51. package/server/views/net.ejs +39 -7
  52. package/server/views/network.ejs +20 -6
  53. package/server/views/network2.ejs +1 -1
  54. package/server/views/old_network.ejs +2 -2
  55. package/server/views/partials/dynamic.ejs +3 -5
  56. package/server/views/partials/menu.ejs +3 -5
  57. package/server/views/partials/running.ejs +1 -1
  58. package/server/views/pro.ejs +1 -1
  59. package/server/views/prototype/index.ejs +1 -1
  60. package/server/views/review.ejs +11 -23
  61. package/server/views/rows.ejs +2 -13
  62. package/server/views/screenshots.ejs +293 -138
  63. package/server/views/settings.ejs +3 -4
  64. package/server/views/setup.ejs +1 -2
  65. package/server/views/shell.ejs +277 -26
  66. package/server/views/terminal.ejs +322 -49
  67. package/server/views/tools.ejs +448 -4
@@ -271,7 +271,7 @@ body.dark .open-menu, body.dark .browse {
271
271
  <a class='btn2' href="<%=portal%>" target="_blank"><div><i class="fa-solid fa-question"></i></div><div>Help</div></a>
272
272
  <button class='btn2' id='genlog'><div><i class="fa-solid fa-laptop-code"></i></div><div>Logs</div></button>
273
273
  <a id='downloadlogs' download class='hidden btn2' href="/pinokio/logs.zip"><div><i class="fa-solid fa-download"></i></div><div>Download logs</div></a>
274
- <a class='btn2' href="/?mode=settings"><div><i class="fa-solid fa-gear"></i></div><div>Settings</div></a>
274
+ <a class='btn2' href="/home?mode=settings"><div><i class="fa-solid fa-gear"></i></div><div>Settings</div></a>
275
275
  <button id='new-window' title='open a new window' class='btn2' data-agent="<%=agent%>"><div><i class="fa-solid fa-plus"></i></div><div>Window</div></button>
276
276
  </div>
277
277
  <% } %>
@@ -290,7 +290,7 @@ body.dark .open-menu, body.dark .browse {
290
290
  <% if (dep.downloaded) { %>
291
291
  <div class='item'><i class="fa-solid fa-check"></i> <a class='downloaded' href="<%=dep.downloaded%>" target="_blank"><%=dep.uri%></a><div class='flexible'></div></div>
292
292
  <% } else { %>
293
- <div class='item'><a class='btn' href="/?mode=download&uri=<%=dep.uri%>" target="_blank"><i class="fa-solid fa-download"></i> Download</a> <%=dep.uri%><div class='flexible'></div></div>
293
+ <div class='item'><a class='btn' href="/home?mode=download&uri=<%=dep.uri%>" target="_blank"><i class="fa-solid fa-download"></i> Download</a> <%=dep.uri%><div class='flexible'></div></div>
294
294
  <% } %>
295
295
  <% }) %>
296
296
  </div>
@@ -307,7 +307,7 @@ body.dark .open-menu, body.dark .browse {
307
307
  <!--
308
308
  <a class='btn create-new' href="/create"><i class="fa-solid fa-folder-plus"></i> Create</a>
309
309
  -->
310
- <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-magnifying-glass"></i> Discover</a>
310
+ <a class='btn' id='explore' href="/home?mode=explore"><i class="fa-solid fa-magnifying-glass"></i> Discover</a>
311
311
  </div>
312
312
  <% if (display.includes("form")) { %>
313
313
  <input type='search' class="flexible" placeholder='Filter downloaded apps'>
@@ -475,7 +475,7 @@ body.dark .open-menu, body.dark .browse {
475
475
  <h1>Welcome.</h1>
476
476
  <br>
477
477
  <div>Get started by installing some Pinokio scripts.</div>
478
- <a href="/?mode=explore" class='btn'><i class="fa-solid fa-globe"></i> Visit Discover Page</a>
478
+ <a href="/home?mode=explore" class='btn'><i class="fa-solid fa-globe"></i> Visit Discover Page</a>
479
479
  </div>
480
480
  <% } %>
481
481
  <% } else { %>
@@ -1522,7 +1522,6 @@ body.dark .ace-editor {
1522
1522
  <header class='navheader grabbable'>
1523
1523
  <h1>
1524
1524
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
1525
- <button id='collapse' class='btn2' data-tippy-content="toggle fullscreen view"><i class="fa-solid fa-bars"></i></button>
1526
1525
  <button class='btn2' id='back' data-tippy-content="back"><div><i class="fa-solid fa-chevron-left"></i></div></button>
1527
1526
  <button class='btn2' id='forward' data-tippy-content="forward"><div><i class="fa-solid fa-chevron-right"></i></div></button>
1528
1527
  <button class='btn2' id='refresh-page' data-tippy-content="refresh"><div><i class="fa-solid fa-rotate-right"></i></div></button>
@@ -1965,7 +1964,7 @@ body.dark .ace-editor {
1965
1964
  <aside>
1966
1965
  <div class='btn-tab'>
1967
1966
  <button type='button' class='btn' id='create-launcher-button'><i class="fa-solid fa-plus"></i><div class='caption'>Create</div></button>
1968
- <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-globe"></i><div class='caption'>Discover</div></a>
1967
+ <a class='btn' id='explore' href="/home?mode=explore"><i class="fa-solid fa-globe"></i><div class='caption'>Discover</div></a>
1969
1968
  </div>
1970
1969
  <a href="/" class='tab'><i class='fas fa-laptop-code'></i><div class='caption'>This machine</div></a>
1971
1970
  <a href="/network" class='tab'><i class="fa-solid fa-wifi"></i><div class='caption'>Local network</div></a>
@@ -1981,7 +1980,7 @@ body.dark .ace-editor {
1981
1980
  <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>
1982
1981
  <a class='tab' href="/screenshots"><i class="fa-solid fa-camera"></i><div class='caption'>Screenshots</div></a>
1983
1982
  <a class='tab' href="/tools"><i class="fa-solid fa-toolbox"></i><div class='caption'>Installed Tools</div></a>
1984
- <a class='tab' href="/?mode=settings"><i class="fa-solid fa-gear"></i><div class='caption'>Settings</div></a>
1983
+ <a class='tab' href="/home?mode=settings"><i class="fa-solid fa-gear"></i><div class='caption'>Settings</div></a>
1985
1984
  </aside>
1986
1985
  </main>
1987
1986
  <div id='terminal-container' class='hidden'>
@@ -2118,7 +2117,7 @@ function initializeAceEditors() {
2118
2117
  editor.setTheme('ace/theme/textmate');
2119
2118
  editor.session.setMode('ace/mode/sh');
2120
2119
  editor.setOptions({
2121
- fontSize: '14px',
2120
+ fontSize: '12px',
2122
2121
  showLineNumbers: true,
2123
2122
  showGutter: true,
2124
2123
  wrap: true,
@@ -2669,7 +2668,7 @@ const createTerm = async (_theme) => {
2669
2668
  <% } %>
2670
2669
  let config = {
2671
2670
  scrollback: 9999999,
2672
- fontSize: 14,
2671
+ fontSize: 12,
2673
2672
  theme,
2674
2673
  }
2675
2674
  let res = await fetch("/xterm_config").then((res) => {
@@ -160,7 +160,7 @@ const createTerm = async (_theme) => {
160
160
  <% } %>
161
161
  let config = {
162
162
  scrollback: 9999999,
163
- fontSize: 14,
163
+ fontSize: 12,
164
164
  theme,
165
165
  }
166
166
  let res = await fetch("/xterm_config").then((res) => {
@@ -0,0 +1,105 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
6
+ <title>Pinokio</title>
7
+ <style>
8
+ :root {
9
+ --layout-gutter-size: 6px;
10
+ --layout-background: #ffffff;
11
+ --layout-gutter-bg: rgba(0, 0, 0, 0.08);
12
+ --layout-gutter-bg-hover: rgba(0, 0, 0, 0.2);
13
+ --layout-shadow: rgba(0, 0, 0, 0.06);
14
+ color-scheme: light dark;
15
+ }
16
+
17
+ html, body {
18
+ height: 100%;
19
+ width: 100%;
20
+ margin: 0;
21
+ padding: 0;
22
+ overflow: hidden;
23
+ background: var(--layout-background);
24
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
25
+ }
26
+
27
+ body.dark {
28
+ --layout-background: #1b1c1d;
29
+ --layout-gutter-bg: rgba(255, 255, 255, 0.1);
30
+ --layout-gutter-bg-hover: rgba(255, 255, 255, 0.35);
31
+ --layout-shadow: rgba(0, 0, 0, 0.35);
32
+ color: #f3f3f3;
33
+ }
34
+
35
+ #layout-root {
36
+ position: relative;
37
+ width: 100%;
38
+ height: 100%;
39
+ background: var(--layout-background);
40
+ overflow: hidden;
41
+ }
42
+
43
+ .layout-leaf {
44
+ position: absolute;
45
+ box-sizing: border-box;
46
+ box-shadow: inset 0 0 0 1px var(--layout-shadow);
47
+ overflow: hidden;
48
+ }
49
+
50
+ .layout-leaf iframe {
51
+ width: 100%;
52
+ height: 100%;
53
+ border: none;
54
+ background: transparent;
55
+ display: block;
56
+ }
57
+
58
+ .layout-gutter {
59
+ position: absolute;
60
+ background: var(--layout-gutter-bg);
61
+ z-index: 10;
62
+ transition: background 0.15s ease;
63
+ }
64
+
65
+ .layout-gutter:hover {
66
+ background: var(--layout-gutter-bg-hover);
67
+ }
68
+
69
+ .layout-gutter-columns {
70
+ cursor: col-resize;
71
+ }
72
+
73
+ .layout-gutter-rows {
74
+ cursor: row-resize;
75
+ }
76
+
77
+ body.layout-resizing {
78
+ user-select: none;
79
+ }
80
+
81
+ body.layout-resize-columns {
82
+ cursor: col-resize;
83
+ }
84
+
85
+ body.layout-resize-rows {
86
+ cursor: row-resize;
87
+ }
88
+
89
+ body.layout-resizing iframe {
90
+ pointer-events: none;
91
+ }
92
+ </style>
93
+ </head>
94
+ <body class="<%= theme %>" data-agent="<%= agent %>">
95
+ <div id="layout-root"></div>
96
+ <script id="pinokio-layout-config" type="application/json">
97
+ <%- JSON.stringify({
98
+ initialPath: initialPath,
99
+ defaultPath: defaultPath,
100
+ sessionId: sessionId || null
101
+ }) %>
102
+ </script>
103
+ <script src="/layout.js"></script>
104
+ </body>
105
+ </html>
@@ -537,7 +537,6 @@ document.addEventListener('DOMContentLoaded', function() {
537
537
  <header class='navheader grabbable'>
538
538
  <h1>
539
539
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
540
- <button id='collapse' class='btn2' data-tippy-content="toggle fullscreen view"><i class="fa-solid fa-bars"></i></button>
541
540
  <button class='btn2' id='back' data-tippy-content="back"><div><i class="fa-solid fa-chevron-left"></i></div></button>
542
541
  <button class='btn2' id='forward' data-tippy-content="forward"><div><i class="fa-solid fa-chevron-right"></i></div></button>
543
542
  <button class='btn2' id='refresh-page' data-tippy-content="refresh"><div><i class="fa-solid fa-rotate-right"></i></div></button>
@@ -545,7 +544,7 @@ document.addEventListener('DOMContentLoaded', function() {
545
544
  <button class='btn2 mobile-link-button' id='mobile-link-button' data-tippy-content="enter url"><i class="fa-solid fa-link"></i></button>
546
545
  <form class='urlbar'>
547
546
  <div class='url-input-container'>
548
- <input type='url' placeholder='enter a local url'>
547
+ <input type='url' placeholder='enter any local url to open in pinokio'>
549
548
  <div class='url-dropdown' id='url-dropdown'></div>
550
549
  </div>
551
550
  </form>
@@ -580,7 +579,7 @@ document.addEventListener('DOMContentLoaded', function() {
580
579
  <!--
581
580
  <div class='app-btns'>
582
581
  <a class='btn create-new' href="/init"><i class="fa-solid fa-plus"></i> Build</a>
583
- <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-magnifying-glass"></i> Discover</a>
582
+ <a class='btn' id='explore' href="/home?mode=explore"><i class="fa-solid fa-magnifying-glass"></i> Discover</a>
584
583
  </div>
585
584
  -->
586
585
  <input type='search' class="flexible" placeholder='Search apps'>
@@ -644,6 +643,41 @@ document.addEventListener('DOMContentLoaded', function() {
644
643
  </h3>
645
644
  </div>
646
645
  <% }) %>
646
+ <% static_routes.forEach((route, index) => { %>
647
+ <div class='line align-top' data-index="<%=processes.length+index%>" data-name="<%=route.name%>" data-title="<%=route.name%>" data-description="<%=route.internal_router.join(' ')%>">
648
+ <h3>
649
+ <div class='item-icon'>
650
+ <div class='placeholder-icon'>
651
+ <i class="fa-solid fa-database"></i>
652
+ </div>
653
+ </div>
654
+ <div class='col'>
655
+ <div class='title'><i class="fa-solid fa-circle"></i><span><%=route.name%></span></div>
656
+ <div class='grid-3'>
657
+ <div class='section'>
658
+ <% route.internal_router.forEach((domain) => { %>
659
+ <% if (domain.endsWith(".localhost")) { %>
660
+ <a class='net' target="_blank" href="https://<%=domain%>">https://<%=domain%></a>
661
+ <% } else { %>
662
+ <a class='net' target="_blank" href="http://<%=domain%>">http://<%=domain%></a>
663
+ <% } %>
664
+ <% }) %>
665
+ </div>
666
+ <div class='section'>
667
+ <% if (route.external_ip) { %>
668
+ <a class='net' target="_blank" href="http://<%=route.external_ip%>">http://<%=route.external_ip%></a>
669
+ <% } %>
670
+ </div>
671
+ <div class='section'>
672
+ <% route.external_router.forEach((domain) => { %>
673
+ <a class='net' target="_blank" href="https://<%=domain%>">https://<%=domain%></a>
674
+ <% }) %>
675
+ </div>
676
+ </div>
677
+ </div>
678
+ </h3>
679
+ </div>
680
+ <% }) %>
647
681
  <% } else { %>
648
682
  <div class='section-container'>
649
683
  <div class='section-col'>
@@ -733,7 +767,6 @@ document.addEventListener('DOMContentLoaded', function() {
733
767
  </h3>
734
768
  <% }) %>
735
769
  </div>
736
- <!--
737
770
  <div class='section-col'>
738
771
  <div class='section-header'>
739
772
  <h3>
@@ -770,7 +803,6 @@ document.addEventListener('DOMContentLoaded', function() {
770
803
  </h3>
771
804
  <% }) %>
772
805
  </div>
773
- -->
774
806
  </div>
775
807
  <% } %>
776
808
  </div>
@@ -778,7 +810,7 @@ document.addEventListener('DOMContentLoaded', function() {
778
810
  <aside>
779
811
  <div class='btn-tab'>
780
812
  <button type='button' class='btn' id='create-launcher-button'><i class="fa-solid fa-plus"></i><div class='caption'>Create</div></button>
781
- <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-globe"></i><div class='caption'>Discover</div></a>
813
+ <a class='btn' id='explore' href="/home?mode=explore"><i class="fa-solid fa-globe"></i><div class='caption'>Discover</div></a>
782
814
  </div>
783
815
  <a href="/" class='tab'><i class='fas fa-laptop-code'></i><div class='caption'>This machine</div></a>
784
816
  <a href="/network" class='tab'><i class="fa-solid fa-wifi"></i><div class='caption'>Local network</div></a>
@@ -798,7 +830,7 @@ document.addEventListener('DOMContentLoaded', function() {
798
830
  <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>
799
831
  <a class='tab' href="/screenshots"><i class="fa-solid fa-camera"></i><div class='caption'>Screenshots</div></a>
800
832
  <a class='tab' href="/tools"><i class="fa-solid fa-toolbox"></i><div class='caption'>Installed Tools</div></a>
801
- <a class='tab' href="/?mode=settings"><i class="fa-solid fa-gear"></i><div class='caption'>Settings</div></a>
833
+ <a class='tab' href="/home?mode=settings"><i class="fa-solid fa-gear"></i><div class='caption'>Settings</div></a>
802
834
  </aside>
803
835
  </main>
804
836
  <script>
@@ -1050,7 +1050,6 @@ document.addEventListener('DOMContentLoaded', function() {
1050
1050
  <header class='navheader grabbable'>
1051
1051
  <h1>
1052
1052
  <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
1053
- <button id='collapse' class='btn2' data-tippy-content="toggle fullscreen view"><i class="fa-solid fa-bars"></i></button>
1054
1053
  <button class='btn2' id='back' data-tippy-content="back"><div><i class="fa-solid fa-chevron-left"></i></div></button>
1055
1054
  <button class='btn2' id='forward' data-tippy-content="forward"><div><i class="fa-solid fa-chevron-right"></i></div></button>
1056
1055
  <button class='btn2' id='refresh-page' data-tippy-content="refresh"><div><i class="fa-solid fa-rotate-right"></i></div></button>
@@ -1058,7 +1057,7 @@ document.addEventListener('DOMContentLoaded', function() {
1058
1057
  <button class='btn2 mobile-link-button' id='mobile-link-button' data-tippy-content="enter url"><i class="fa-solid fa-link"></i></button>
1059
1058
  <form class='urlbar'>
1060
1059
  <div class='url-input-container'>
1061
- <input type='url' placeholder='enter a local url'>
1060
+ <input type='url' placeholder='enter any local url to open in pinokio'>
1062
1061
  <div class='url-dropdown' id='url-dropdown'></div>
1063
1062
  </div>
1064
1063
  </form>
@@ -1147,6 +1146,7 @@ document.addEventListener('DOMContentLoaded', function() {
1147
1146
  <i class="fa-solid fa-circle-notch fa-spin"></i>
1148
1147
  </div>
1149
1148
  <% } %>
1149
+ <!--
1150
1150
  <% static_routes.forEach((route, index) => { %>
1151
1151
  <div class='line align-top' data-index="<%=processes.length+index%>" data-name="<%=route.name%>" data-title="<%=route.name%>" data-description="<%=route.internal_router.join(' ')%>">
1152
1152
  <h3>
@@ -1182,13 +1182,14 @@ document.addEventListener('DOMContentLoaded', function() {
1182
1182
  </h3>
1183
1183
  </div>
1184
1184
  <% }) %>
1185
+ -->
1185
1186
  </div>
1186
1187
  </div>
1187
1188
  </div>
1188
1189
  <aside>
1189
1190
  <div class='btn-tab'>
1190
1191
  <button type='button' class='btn' id='create-launcher-button'><i class="fa-solid fa-plus"></i><div class='caption'>Create</div></button>
1191
- <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-globe"></i><div class='caption'>Discover</div></a>
1192
+ <a class='btn' id='explore' href="/home?mode=explore"><i class="fa-solid fa-globe"></i><div class='caption'>Discover</div></a>
1192
1193
  </div>
1193
1194
  <a href="/" class='tab'><i class='fas fa-laptop-code'></i><div class='caption'>This machine</div></a>
1194
1195
  <a href="/network" class='tab selected'><i class="fa-solid fa-wifi"></i><div class='caption'>Local network</div></a>
@@ -1204,7 +1205,7 @@ document.addEventListener('DOMContentLoaded', function() {
1204
1205
  <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>
1205
1206
  <a class='tab' href="/screenshots"><i class="fa-solid fa-camera"></i><div class='caption'>Screenshots</div></a>
1206
1207
  <a class='tab' href="/tools"><i class="fa-solid fa-toolbox"></i><div class='caption'>Installed Tools</div></a>
1207
- <a class='tab' href="/?mode=settings"><i class="fa-solid fa-gear"></i><div class='caption'>Settings</div></a>
1208
+ <a class='tab' href="/home?mode=settings"><i class="fa-solid fa-gear"></i><div class='caption'>Settings</div></a>
1208
1209
  </aside>
1209
1210
  </main>
1210
1211
  <script>
@@ -1234,9 +1235,16 @@ document.querySelector("#reset-label").addEventListener("click", async (e) => {
1234
1235
  let res = await fetch("/check_peer").then((res) => {
1235
1236
  return res.json()
1236
1237
  })
1238
+ console.log("RES", res)
1237
1239
  if (res.success) {
1238
1240
  document.querySelector(".loading").classList.add("hidden")
1239
- location.href = "/"
1241
+ if (res.peer_name) {
1242
+ console.log("> 1")
1243
+ location.href = "/net/" + res.peer_name
1244
+ } else {
1245
+ console.log("> 2")
1246
+ location.href = location.href
1247
+ }
1240
1248
  }
1241
1249
  } catch (e) {
1242
1250
  console.log(e)
@@ -1393,7 +1401,13 @@ document.querySelector("main").addEventListener("click", async (e) => {
1393
1401
  })
1394
1402
  if (res.success) {
1395
1403
  document.querySelector(".loading").classList.add("hidden")
1396
- location.href = location.href
1404
+ if (res.peer_name) {
1405
+ console.log("> 1")
1406
+ location.href = "/net/" + res.peer_name
1407
+ } else {
1408
+ console.log("> 2")
1409
+ location.href = location.href
1410
+ }
1397
1411
  }
1398
1412
  } catch (e) {
1399
1413
  console.log(e)
@@ -427,7 +427,7 @@ table h3 {
427
427
  <a class='btn2' href="<%=portal%>" target="_blank"><div><i class="fa-solid fa-question"></i></div><div>Help</div></a>
428
428
  <button class='btn2' id='genlog'><div><i class="fa-solid fa-laptop-code"></i></div><div>Logs</div></button>
429
429
  <a id='downloadlogs' download class='hidden btn2' href="/pinokio/logs.zip"><div><i class="fa-solid fa-download"></i></div><div>Download logs</div></a>
430
- <a class='btn2' href="/?mode=settings"><div><i class="fa-solid fa-gear"></i></div><div>Settings</div></a>
430
+ <a class='btn2' href="/home?mode=settings"><div><i class="fa-solid fa-gear"></i></div><div>Settings</div></a>
431
431
  <button id='new-window' title='open a new window' class='btn2' data-agent="<%=agent%>"><div><i class="fa-solid fa-plus"></i></div><div>Window</div></button>
432
432
  </div>
433
433
  </h1>
@@ -409,11 +409,11 @@ input:checked + .slider:before {
409
409
  <a href="/connect" class='btn2'><div><i class="fa-solid fa-circle-user"></i></div><div>Connect</div></a>
410
410
  <div class='flexible'></div>
411
411
  <div class='nav-btns'>
412
- <a class='btn2' id='explore' href="/?mode=explore"><div><i class="fa-solid fa-magnifying-glass"></i></div><div>Discover</div></a>
412
+ <a class='btn2' id='explore' href="/home?mode=explore"><div><i class="fa-solid fa-magnifying-glass"></i></div><div>Discover</div></a>
413
413
  <a class='btn2' href="<%=portal%>" target="_blank"><div><i class="fa-solid fa-question"></i></div><div>Help</div></a>
414
414
  <button class='btn2' id='genlog'><div><i class="fa-solid fa-laptop-code"></i></div><div>Logs</div></button>
415
415
  <a id='downloadlogs' download class='hidden btn2' href="/pinokio/logs.zip"><div><i class="fa-solid fa-download"></i></div><div>Download logs</div></a>
416
- <a class='btn2' href="/?mode=settings"><div><i class="fa-solid fa-gear"></i></div><div>Settings</div></a>
416
+ <a class='btn2' href="/home?mode=settings"><div><i class="fa-solid fa-gear"></i></div><div>Settings</div></a>
417
417
  <button id='new-window' title='open a new window' class='btn2' data-agent="<%=agent%>"><div><i class="fa-solid fa-plus"></i></div><div>Window</div></button>
418
418
  </div>
419
419
  </h1>
@@ -28,14 +28,14 @@
28
28
  <div class='tab'><%-item.btn%></div>
29
29
  </div>
30
30
  <% } else if (item.target === "_blank") { %>
31
- <a <%=item.default ? 'data-default' : ''%> data-confirm="<%=item.confirm%>" data-index="<%=index+4%>" target="<%=item.target%>" data-mode="<%=item.mode%>" href="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>'>
31
+ <a <%=item.default ? 'data-default' : ''%> data-confirm="<%=item.confirm%>" data-index="<%=index+4%>" target="<%=item.target%>" data-mode="<%=item.mode%>" href="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>'<%= item.target_full ? ` data-target-full="${item.target_full}"` : '' %>>
32
32
  <div class='tab'><%-item.btn%></div>
33
33
  <div class='loader'>
34
34
  <i class="fa-solid fa-up-right-from-square"></i>
35
35
  </div>
36
36
  </a>
37
37
  <% } else { %>
38
- <a <%=item.default ? 'data-default' : ''%> data-confirm="<%=item.confirm%>" data-index="<%=index+4%>" target="<%=item.target%>" data-mode="<%=item.mode%>" href="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>' <%=item.shell_id ? `data-shell=${item.shell_id}` : ""%> <%=item.script_id ? `data-script=${item.script_id}` : ''%>>
38
+ <a <%=item.default ? 'data-default' : ''%> data-confirm="<%=item.confirm%>" data-index="<%=index+4%>" target="<%=item.target%>" data-mode="<%=item.mode%>" href="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>'<%= item.target_full ? ` data-target-full="${item.target_full}"` : '' %> <%=item.shell_id ? `data-shell=${item.shell_id}` : ""%> <%=item.script_id ? `data-script=${item.script_id}` : ''%>>
39
39
  <% if (item.running) { %>
40
40
  <i class="fa-solid fa-circle"></i>
41
41
  <% } %>
@@ -46,9 +46,7 @@
46
46
  </div>
47
47
  <% } else { %>
48
48
  <div class='loader shutdown'>
49
- <button class='btn'>
50
- <i class="fa-solid fa-square"></i> Stop
51
- </button>
49
+ <i class="fa-solid fa-xmark"></i>
52
50
  </div>
53
51
  <% } %>
54
52
  <% } else { %>
@@ -40,7 +40,7 @@
40
40
  <% } %>
41
41
  </div>
42
42
  <% } else if (item.target === "_blank") { %>
43
- <a <%=item.default ? 'data-default' : ''%> data-confirm="<%=item.confirm%>" data-index="<%=index%>" target="<%=item.target%>" data-mode="<%=item.mode%>" href="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>'>
43
+ <a <%=item.default ? 'data-default' : ''%> data-confirm="<%=item.confirm%>" data-index="<%=index%>" target="<%=item.target%>" data-mode="<%=item.mode%>" href="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>'<%= item.target_full ? ` data-target-full="${item.target_full}"` : '' %>>
44
44
  <div class='tab'><%-item.btn%></div>
45
45
  <% if (item.arrow) { %>
46
46
  <i class="fa-solid fa-angle-right"></i>
@@ -50,7 +50,7 @@
50
50
  </div>
51
51
  </a>
52
52
  <% } else { %>
53
- <a <%=item.default ? 'data-default' : ''%> data-confirm="<%=item.confirm%>" data-index="<%=index%>" target="<%=item.target%>" data-mode="<%=item.mode%>" href="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>' <%=item.shell_id ? `data-shell=${item.shell_id}` : ""%> <%=item.script_id ? `data-script=${item.script_id}` : ''%>>
53
+ <a <%=item.default ? 'data-default' : ''%> data-confirm="<%=item.confirm%>" data-index="<%=index%>" target="<%=item.target%>" data-mode="<%=item.mode%>" href="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>'<%= item.target_full ? ` data-target-full="${item.target_full}"` : '' %> <%=item.shell_id ? `data-shell=${item.shell_id}` : ""%> <%=item.script_id ? `data-script=${item.script_id}` : ''%>>
54
54
  <% if (item.running) { %>
55
55
  <i class="fa-solid fa-circle"></i>
56
56
  <% } %>
@@ -65,9 +65,7 @@
65
65
  <i class='fa-solid fa-spin fa-circle-notch'></i>
66
66
  <i class="fa-solid fa-chevron-right"></i>
67
67
  -->
68
- <button class='btn'>
69
- <i class="fa-solid fa-square"></i> Stop
70
- </button>
68
+ <i class="fa-solid fa-xmark"></i>
71
69
  </div>
72
70
  <% } %>
73
71
  <% if (item.arrow) { %>
@@ -1,5 +1,5 @@
1
1
  <% dynamic.forEach((item, index) => { %>
2
- <a <%=item.default ? 'data-default' : ''%> data-confirm="<%=item.confirm%>" data-index="<%=index+4%>" target="<%=item.target%>" data-mode="<%=item.mode%>" href="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>' <%=item.shell_id ? `data-shell=${item.shell_id}` : ""%> <%=item.script_id ? `data-script=${item.script_id}` : ''%>>
2
+ <a <%=item.default ? 'data-default' : ''%> data-confirm="<%=item.confirm%>" data-index="<%=index+4%>" target="<%=item.target%>" data-mode="<%=item.mode%>" href="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>'<%= item.target_full ? ` data-target-full="${item.target_full}"` : '' %> <%=item.shell_id ? `data-shell=${item.shell_id}` : ""%> <%=item.script_id ? `data-script=${item.script_id}` : ''%>>
3
3
  <% if (item.running) { %>
4
4
  <i class="fa-solid fa-circle"></i>
5
5
  <% } %>
@@ -219,7 +219,7 @@ const createTerm = async (_theme) => {
219
219
  <% } %>
220
220
  let config = {
221
221
  scrollback: 9999999,
222
- fontSize: 14,
222
+ fontSize: 12,
223
223
  theme,
224
224
  }
225
225
  let res = await fetch("/xterm_config").then((res) => {
@@ -1589,7 +1589,7 @@ async function displayResults(config) {
1589
1589
 
1590
1590
  let term_config = {
1591
1591
  scrollback: 9999999,
1592
- fontSize: 14,
1592
+ fontSize: 12,
1593
1593
  theme,
1594
1594
  }
1595
1595
  let res = await fetch("/xterm_config").then((res) => {
@@ -109,12 +109,6 @@ body.dark aside {
109
109
  background: var(--dark-bg);
110
110
  border-right: 1px solid rgba(255,255,255,0.04);
111
111
  }
112
- /*
113
- aside #collapse {
114
- text-align: center;
115
- padding: 5px;
116
- }
117
- */
118
112
  aside {
119
113
  /*
120
114
  display: flex;
@@ -817,11 +811,13 @@ body .app-icon {
817
811
  display: none;
818
812
  margin-right: 10px;
819
813
  }
820
- body.minimized .app-icon {
821
- display: block;
822
- }
823
- body.minimized aside {
824
- display: none;
814
+ @media only screen and (max-width: 768px) {
815
+ .app-icon {
816
+ display: block;
817
+ }
818
+ aside {
819
+ display: none;
820
+ }
825
821
  }
826
822
  .top-menu {
827
823
  padding: 10px;
@@ -839,22 +835,13 @@ body.dark .top-menu .btn2.selected {
839
835
  background: black;
840
836
  color: white;
841
837
  }
842
- body.dark.minimized #collapse {
843
- color: white;
844
- }
845
- body.minimized #collapse {
846
- border: none !important;
847
- color: black;
848
- }
849
- #collapse {
850
- border-bottom: 5px solid rgba(127, 91, 243, 0.9);
851
- color: rgba(127, 91, 243, 0.9);
852
- border-radius: 0;
853
- }
854
838
  #browserview-container {
855
839
  flex-grow: 1;
856
840
  position: relative;
857
841
  }
842
+ #hidden-placeholder {
843
+ visibility: hidden;
844
+ }
858
845
 
859
846
  @media only screen and (max-width: 1000px) {
860
847
  .url-bar {
@@ -956,6 +943,7 @@ body.minimized #collapse {
956
943
  <button class='btn2' id='forward' data-tippy-content="forward"><div><i class="fa-solid fa-chevron-right"></i></div></button>
957
944
  <button class='btn2' id='refresh-page' data-tippy-content="refresh"><div><i class="fa-solid fa-rotate-right"></i></div></button>
958
945
  <button class='btn2' id='screenshot' data-tippy-content="take a screenshot"><i class="fa-solid fa-camera"></i></button>
946
+ <button class='btn2' id='hidden-placeholder'><i class="fa-solid fa-bars"></i></button>
959
947
  <div class='mode-selector'>
960
948
  <a class="btn2 <%=type === 'review' ? 'selected' : ''%>" href="<%=review_tab%>"><div><i class="fa-regular fa-message"></i></div><div>Community</div></a>
961
949
  <a class="btn2 <%=type === 'browse' ? 'selected' : ''%>" href="<%=dev_tab%>"><div><i class="fa-solid fa-code"></i></div><div>Dev</div></a>
@@ -82,9 +82,9 @@ body[data-agent='electron'] {
82
82
  </head>
83
83
  <body class='<%=theme%>' data-agent="<%=agent%>">
84
84
  <div id='dragger'></div>
85
- <iframe id='row0' data-src="<%=src%>"></iframe>
85
+ <iframe id='row0' data-src="<%= originSrc || '/' %>"></iframe>
86
86
  <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>
87
- <iframe id='row1' data-src="<%=src%>"></iframe>
87
+ <iframe id='row1' data-src="<%= targetSrc || originSrc || '/' %>"></iframe>
88
88
 
89
89
  <script>
90
90
  if (window !== window.top) {
@@ -384,17 +384,6 @@ body[data-agent='electron'] {
384
384
  }
385
385
  })
386
386
  })();
387
- if (document.querySelector("#collapse") && window.windowStorage) {
388
- document.querySelector("#collapse").addEventListener("click", (e) => {
389
- document.body.classList.toggle("minimized")
390
- let frame_key = window.frameElement?.name || "";
391
- if (document.body.classList.contains("minimized")) {
392
- windowStorage.setItem(frame_key + ":window_mode", "minimized")
393
- } else {
394
- windowStorage.setItem(frame_key + ":window_mode", "full")
395
- }
396
- })
397
- }
398
387
  </script>
399
388
  </body>
400
389
  </html>