pinokiod 3.85.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 (88) 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 +8 -1
  5. package/kernel/api/shell/index.js +6 -0
  6. package/kernel/api/terminal/index.js +166 -0
  7. package/kernel/bin/caddy.js +10 -4
  8. package/kernel/bin/conda.js +3 -2
  9. package/kernel/bin/index.js +53 -2
  10. package/kernel/bin/setup.js +32 -0
  11. package/kernel/bin/vs.js +11 -2
  12. package/kernel/index.js +42 -2
  13. package/kernel/info.js +36 -0
  14. package/kernel/peer.js +42 -18
  15. package/kernel/prototype.js +1 -0
  16. package/kernel/router/index.js +23 -15
  17. package/kernel/router/localhost_static_router.js +0 -3
  18. package/kernel/router/pinokio_domain_router.js +333 -0
  19. package/kernel/shell.js +43 -2
  20. package/kernel/shells.js +21 -1
  21. package/kernel/util.js +4 -2
  22. package/package.json +2 -1
  23. package/pipe/views/login.ejs +1 -1
  24. package/script/install-mode.js +33 -0
  25. package/script/pinokio.json +7 -0
  26. package/server/index.js +636 -246
  27. package/server/public/Socket.js +48 -0
  28. package/server/public/common.js +1956 -257
  29. package/server/public/fseditor.js +71 -12
  30. package/server/public/install.js +1 -1
  31. package/server/public/layout.js +740 -0
  32. package/server/public/modalinput.js +0 -1
  33. package/server/public/opener.js +12 -11
  34. package/server/public/serve/style.css +1 -1
  35. package/server/public/style.css +122 -129
  36. package/server/public/tab-idle-notifier.js +629 -0
  37. package/server/public/terminal_input_tracker.js +63 -0
  38. package/server/public/urldropdown.css +780 -45
  39. package/server/public/urldropdown.js +806 -156
  40. package/server/public/window_storage.js +97 -28
  41. package/server/socket.js +40 -9
  42. package/server/views/404.ejs +1 -1
  43. package/server/views/500.ejs +3 -3
  44. package/server/views/app.ejs +3146 -1381
  45. package/server/views/bookmarklet.ejs +197 -0
  46. package/server/views/bootstrap.ejs +1 -1
  47. package/server/views/columns.ejs +2 -13
  48. package/server/views/connect/x.ejs +4 -4
  49. package/server/views/connect.ejs +13 -14
  50. package/server/views/container.ejs +3 -4
  51. package/server/views/d.ejs +225 -55
  52. package/server/views/download.ejs +1 -1
  53. package/server/views/editor.ejs +2 -2
  54. package/server/views/env_editor.ejs +3 -3
  55. package/server/views/explore.ejs +2 -2
  56. package/server/views/file_explorer.ejs +3 -3
  57. package/server/views/git.ejs +7 -7
  58. package/server/views/github.ejs +3 -3
  59. package/server/views/help.ejs +2 -2
  60. package/server/views/index.ejs +17 -16
  61. package/server/views/index2.ejs +7 -7
  62. package/server/views/init/index.ejs +15 -79
  63. package/server/views/install.ejs +4 -4
  64. package/server/views/keys.ejs +2 -2
  65. package/server/views/layout.ejs +105 -0
  66. package/server/views/mini.ejs +2 -2
  67. package/server/views/net.ejs +45 -13
  68. package/server/views/network.ejs +41 -27
  69. package/server/views/network2.ejs +11 -11
  70. package/server/views/old_network.ejs +10 -10
  71. package/server/views/partials/dynamic.ejs +3 -5
  72. package/server/views/partials/menu.ejs +3 -5
  73. package/server/views/partials/running.ejs +1 -1
  74. package/server/views/pro.ejs +369 -0
  75. package/server/views/prototype/index.ejs +3 -3
  76. package/server/views/required_env_editor.ejs +2 -2
  77. package/server/views/review.ejs +15 -27
  78. package/server/views/rows.ejs +2 -13
  79. package/server/views/screenshots.ejs +298 -142
  80. package/server/views/settings.ejs +6 -7
  81. package/server/views/setup.ejs +3 -4
  82. package/server/views/setup_home.ejs +2 -2
  83. package/server/views/share_editor.ejs +4 -4
  84. package/server/views/shell.ejs +280 -29
  85. package/server/views/start.ejs +2 -2
  86. package/server/views/task.ejs +2 -2
  87. package/server/views/terminal.ejs +326 -52
  88. package/server/views/tools.ejs +461 -17
@@ -108,12 +108,12 @@ header .runner {
108
108
  margin-top: 5px;
109
109
  }
110
110
  a.badge {
111
- color: royalblue;
111
+ color: rgba(127, 91, 243, 0.9);
112
112
  text-decoration: none;
113
113
  cursor: pointer;
114
114
  }
115
115
  .badge a {
116
- color: royalblue;
116
+ color: rgba(127, 91, 243, 0.9);
117
117
  text-decoration: none;
118
118
  }
119
119
  body.dark .btn {
@@ -228,7 +228,7 @@ body.dark .open-menu, body.dark .browse {
228
228
  color: white !important;
229
229
  }
230
230
  .open-menu:hover, .browse:hover, body.dark .open-menu:hover, body.dark .browse:hover {
231
- color: royalblue !important;
231
+ color: rgba(127, 91, 243, 0.9) !important;
232
232
  }
233
233
  .open-menu, .browse {
234
234
  width: 80px;
@@ -333,7 +333,7 @@ body.dark aside .tab {
333
333
  color: white;
334
334
  }
335
335
  body.dark aside .tab:hover, aside .tab:hover {
336
- color: royalblue !important;
336
+ color: rgba(127, 91, 243, 0.9) !important;
337
337
  opacity: 1;
338
338
  }
339
339
  aside .tab {
@@ -368,7 +368,7 @@ aside .selected {
368
368
  padding: 0;
369
369
  }
370
370
  body.dark .net:hover, .net:hover {
371
- color: royalblue;
371
+ color: rgba(127, 91, 243, 0.9);
372
372
  }
373
373
  body.dark .net {
374
374
  /*
@@ -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,15 +803,14 @@ document.addEventListener('DOMContentLoaded', function() {
770
803
  </h3>
771
804
  <% }) %>
772
805
  </div>
773
- -->
774
806
  </div>
775
807
  <% } %>
776
808
  </div>
777
809
  </div>
778
810
  <aside>
779
811
  <div class='btn-tab'>
780
- <a href="/init" class='btn'><i class="fa-solid fa-plus"></i><div class='caption'>Create</div></a>
781
- <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-globe"></i><div class='caption'>Discover</div></a>
812
+ <button type='button' class='btn' id='create-launcher-button'><i class="fa-solid fa-plus"></i><div class='caption'>Create</div></button>
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>
@@ -35,7 +35,7 @@ ol {
35
35
  padding-inline-start: 15px;
36
36
  }
37
37
  a.explain {
38
- color: royalblue;
38
+ color: rgba(127, 91, 243, 0.9);
39
39
  text-decoration: underline;
40
40
  cursor: pointer;
41
41
  }
@@ -126,12 +126,12 @@ header .runner {
126
126
  margin-top: 5px;
127
127
  }
128
128
  a.badge {
129
- color: royalblue;
129
+ color: rgba(127, 91, 243, 0.9);
130
130
  text-decoration: none;
131
131
  cursor: pointer;
132
132
  }
133
133
  .badge a {
134
- color: royalblue;
134
+ color: rgba(127, 91, 243, 0.9);
135
135
  text-decoration: none;
136
136
  }
137
137
  /*
@@ -147,7 +147,7 @@ body.dark .browser-options-row {
147
147
  border-bottom: 1px solid rgba(255,255,255,0.05);
148
148
  }
149
149
  .description a {
150
- color: royalblue;
150
+ color: rgba(127, 91, 243, 0.9);
151
151
  text-decoration: none;
152
152
  }
153
153
  a.ln[href^=https] {
@@ -215,11 +215,11 @@ a.ln:hover {
215
215
  box-sizing: border-box;
216
216
  }
217
217
  .container-row.current .header-label-sub {
218
- color: royalblue;
218
+ color: rgba(127, 91, 243, 0.9);
219
219
  }
220
220
  /*
221
221
  .container-row.current .header-label-sub {
222
- color: royalblue;
222
+ color: rgba(127, 91, 243, 0.9);
223
223
  }
224
224
  */
225
225
  .desc {
@@ -241,7 +241,7 @@ a.ln:hover {
241
241
  padding-top: 5px;
242
242
  padding-bottom: 0 !important;
243
243
  text-decoration: none;
244
- color: royalblue;
244
+ color: rgba(127, 91, 243, 0.9);
245
245
  cursor: pointer;
246
246
  }
247
247
  .container-row table {
@@ -250,7 +250,7 @@ a.ln:hover {
250
250
  }
251
251
  table a {
252
252
  text-decoration: none;
253
- color: royalblue;
253
+ color: rgba(127, 91, 243, 0.9);
254
254
  }
255
255
  td:first-child, th:first-child {
256
256
  max-width: 100px;
@@ -295,7 +295,7 @@ body.dark .config {
295
295
  align-items: stretch;
296
296
  }
297
297
  body.dark .config .btn {
298
- background: royalblue;
298
+ background: rgba(127, 91, 243, 0.9);
299
299
  }
300
300
  .config .btn {
301
301
  font-size: 16px;
@@ -303,7 +303,7 @@ body.dark .config .btn {
303
303
  width: 100px;
304
304
  /*
305
305
  */
306
- background: royalblue;
306
+ background: rgba(127, 91, 243, 0.9);
307
307
  flex-shrink: 0;
308
308
  }
309
309
  .config-row {
@@ -380,7 +380,7 @@ input:checked + .slider {
380
380
  background-color: #2196F3;
381
381
  background: black;
382
382
  */
383
- background-color: royalblue;
383
+ background-color: rgba(127, 91, 243, 0.9);
384
384
  }
385
385
 
386
386
  input:focus + .slider {
@@ -468,7 +468,7 @@ body.dark aside .tab {
468
468
  color: white;
469
469
  }
470
470
  body.dark aside .tab:hover, aside .tab:hover {
471
- color: royalblue !important;
471
+ color: rgba(127, 91, 243, 0.9) !important;
472
472
  opacity: 1;
473
473
  }
474
474
  aside .tab {
@@ -515,8 +515,8 @@ aside .current.selected {
515
515
  border-left: 10px solid transparent;
516
516
  }
517
517
  body.dark .net:hover, .net:hover {
518
- color: royalblue;
519
- border-left: 4px solid royalblue;
518
+ color: rgba(127, 91, 243, 0.9);
519
+ border-left: 4px solid rgba(127, 91, 243, 0.9);
520
520
  }
521
521
  body.dark .net {
522
522
  border-left: 3px solid white;
@@ -630,12 +630,12 @@ header .runner {
630
630
  margin-top: 5px;
631
631
  }
632
632
  a.badge {
633
- color: royalblue;
633
+ color: rgba(127, 91, 243, 0.9);
634
634
  text-decoration: none;
635
635
  cursor: pointer;
636
636
  }
637
637
  .badge a {
638
- color: royalblue;
638
+ color: rgba(127, 91, 243, 0.9);
639
639
  text-decoration: none;
640
640
  }
641
641
  body.dark .btn {
@@ -766,7 +766,7 @@ body.dark .open-menu, body.dark .browse {
766
766
  color: white !important;
767
767
  }
768
768
  .open-menu:hover, .browse:hover, body.dark .open-menu:hover, body.dark .browse:hover {
769
- color: royalblue !important;
769
+ color: rgba(127, 91, 243, 0.9) !important;
770
770
  }
771
771
  .open-menu, .browse {
772
772
  width: 80px;
@@ -866,7 +866,7 @@ body.dark aside .tab {
866
866
  color: white;
867
867
  }
868
868
  body.dark aside .tab:hover, aside .tab:hover {
869
- color: royalblue !important;
869
+ color: rgba(127, 91, 243, 0.9) !important;
870
870
  opacity: 1;
871
871
  }
872
872
  aside .tab {
@@ -906,8 +906,8 @@ aside .selected {
906
906
  padding: 0;
907
907
  }
908
908
  body.dark .net:hover, .net:hover {
909
- color: royalblue;
910
- border-left: 4px solid royalblue;
909
+ color: rgba(127, 91, 243, 0.9);
910
+ border-left: 4px solid rgba(127, 91, 243, 0.9);
911
911
  }
912
912
  body.dark .net {
913
913
  border-left: 3px solid white;
@@ -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
- <a href="/init" class='btn'><i class="fa-solid fa-plus"></i><div class='caption'>Create</div></a>
1191
- <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-globe"></i><div class='caption'>Discover</div></a>
1191
+ <button type='button' class='btn' id='create-launcher-button'><i class="fa-solid fa-plus"></i><div class='caption'>Create</div></button>
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)
@@ -31,7 +31,7 @@ ol {
31
31
  padding-inline-start: 15px;
32
32
  }
33
33
  a.explain {
34
- color: royalblue;
34
+ color: rgba(127, 91, 243, 0.9);
35
35
  text-decoration: underline;
36
36
  cursor: pointer;
37
37
  }
@@ -122,12 +122,12 @@ header .runner {
122
122
  margin-top: 5px;
123
123
  }
124
124
  a.badge {
125
- color: royalblue;
125
+ color: rgba(127, 91, 243, 0.9);
126
126
  text-decoration: none;
127
127
  cursor: pointer;
128
128
  }
129
129
  .badge a {
130
- color: royalblue;
130
+ color: rgba(127, 91, 243, 0.9);
131
131
  text-decoration: none;
132
132
  }
133
133
  body.dark .btn {
@@ -142,7 +142,7 @@ body.dark .browser-options-row {
142
142
  border-bottom: 1px solid rgba(255,255,255,0.05);
143
143
  }
144
144
  .description a {
145
- color: royalblue;
145
+ color: rgba(127, 91, 243, 0.9);
146
146
  text-decoration: none;
147
147
  }
148
148
  a.ln[href^=https] {
@@ -210,11 +210,11 @@ a.ln:hover {
210
210
  box-sizing: border-box;
211
211
  }
212
212
  .container-row.current .header-label-sub {
213
- color: royalblue;
213
+ color: rgba(127, 91, 243, 0.9);
214
214
  }
215
215
  /*
216
216
  .container-row.current .header-label-sub {
217
- color: royalblue;
217
+ color: rgba(127, 91, 243, 0.9);
218
218
  }
219
219
  */
220
220
  .desc {
@@ -229,7 +229,7 @@ a.ln:hover {
229
229
  .link-label {
230
230
  margin-right: 10px;
231
231
  text-decoration: underline;
232
- color: royalblue;
232
+ color: rgba(127, 91, 243, 0.9);
233
233
  cursor: pointer;
234
234
  }
235
235
  .container-row table {
@@ -238,7 +238,7 @@ a.ln:hover {
238
238
  }
239
239
  table a {
240
240
  text-decoration: none;
241
- color: royalblue;
241
+ color: rgba(127, 91, 243, 0.9);
242
242
  }
243
243
  td:first-child, th:first-child {
244
244
  max-width: 100px;
@@ -289,7 +289,7 @@ body.dark .config {
289
289
  font-size: 16px;
290
290
  font-weight: bold;
291
291
  width: 100px;
292
- background: royalblue;
292
+ background: rgba(127, 91, 243, 0.9);
293
293
  flex-shrink: 0;
294
294
  }
295
295
  .config-row {
@@ -351,7 +351,7 @@ input:checked + .slider {
351
351
  /*
352
352
  background-color: #2196F3;
353
353
  */
354
- background-color: royalblue;
354
+ background-color: rgba(127, 91, 243, 0.9);
355
355
  }
356
356
 
357
357
  input:focus + .slider {
@@ -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>
@@ -114,12 +114,12 @@ header .runner {
114
114
  margin-top: 5px;
115
115
  }
116
116
  a.badge {
117
- color: royalblue;
117
+ color: rgba(127, 91, 243, 0.9);
118
118
  text-decoration: none;
119
119
  cursor: pointer;
120
120
  }
121
121
  .badge a {
122
- color: royalblue;
122
+ color: rgba(127, 91, 243, 0.9);
123
123
  text-decoration: none;
124
124
  }
125
125
  body.dark .btn {
@@ -134,7 +134,7 @@ body.dark .browser-options-row {
134
134
  border-bottom: 1px solid rgba(255,255,255,0.05);
135
135
  }
136
136
  .description a {
137
- color: royalblue;
137
+ color: rgba(127, 91, 243, 0.9);
138
138
  text-decoration: none;
139
139
  }
140
140
  a.ln[href^=https] {
@@ -202,7 +202,7 @@ a.ln:hover {
202
202
  box-sizing: border-box;
203
203
  }
204
204
  .container-row.current .header-label-sub {
205
- color: royalblue;
205
+ color: rgba(127, 91, 243, 0.9);
206
206
  }
207
207
  /*
208
208
  .container-row.current .header-label-sub {
@@ -221,7 +221,7 @@ a.ln:hover {
221
221
  .link-label {
222
222
  margin-right: 10px;
223
223
  text-decoration: underline;
224
- color: royalblue;
224
+ color: rgba(127, 91, 243, 0.9);
225
225
  cursor: pointer;
226
226
  }
227
227
  .container-row table {
@@ -230,7 +230,7 @@ a.ln:hover {
230
230
  }
231
231
  table a {
232
232
  text-decoration: none;
233
- color: royalblue;
233
+ color: rgba(127, 91, 243, 0.9);
234
234
  }
235
235
  td:first-child, th:first-child {
236
236
  max-width: 100px;
@@ -281,7 +281,7 @@ body.dark .config {
281
281
  font-size: 16px;
282
282
  font-weight: bold;
283
283
  width: 100px;
284
- background: royalblue;
284
+ background: rgba(127, 91, 243, 0.9);
285
285
  flex-shrink: 0;
286
286
  }
287
287
  .config-row {
@@ -338,7 +338,7 @@ input:checked + .slider {
338
338
  /*
339
339
  background-color: #2196F3;
340
340
  */
341
- background-color: royalblue;
341
+ background-color: rgba(127, 91, 243, 0.9);
342
342
  }
343
343
 
344
344
  input:focus + .slider {
@@ -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
  <% } %>