pinokiod 3.22.0 → 3.24.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.
@@ -316,13 +316,14 @@ body.dark .app-info-card > * {
316
316
  color: var(--dark-color);
317
317
  }
318
318
  .app-info-container {
319
- padding: 10px 0;
319
+ padding: 7px 0;
320
320
  min-width: 0;
321
321
  text-overflow: ellipsis;
322
322
  }
323
323
  .app-info-title {
324
324
  width: 100%;
325
325
  font-weight: bold;
326
+ font-size: 16px;
326
327
  /*
327
328
  padding: 15px 0;
328
329
  */
@@ -339,8 +340,10 @@ body.dark .app-info-card > * {
339
340
  overflow: hidden;
340
341
  }
341
342
  .app-info-description {
343
+ margin-top: 5px;
342
344
  word-wrap: break-word;
343
345
  width: 100%;
346
+ opacity: 0.7;
344
347
  }
345
348
  .footer {
346
349
  /*
@@ -485,13 +488,42 @@ body.dark .grid-btns .btn2 {
485
488
  padding: 2px;
486
489
  border-radius: 4px;
487
490
  }
491
+ body.dark aside .btn {
492
+ background: rgba(255,255,255,0.05);
493
+ }
494
+ .fa-circle {
495
+ color: yellowgreen;
496
+ margin-right: 10px;
497
+ }
498
+ .dynamic .submenu .tab i {
499
+ display: flex;
500
+ justify-content: center;
501
+ align-items: center;
502
+ font-size: 15px;
503
+ width: 20px;
504
+ height: 20px;
505
+ padding: 0;
506
+ }
507
+ /*
508
+ body.dark .dynamic .submenu {
509
+ border-left: 5px solid white;
510
+ }
511
+ */
512
+ .dynamic .submenu {
513
+ margin-left: 0px;
514
+ /*
515
+ border-left: 5px solid black;
516
+ */
517
+ }
488
518
  .menu-item-image {
489
- width: 18px !important;
490
- height: 18px !important;
519
+ width: 20px !important;
520
+ height: 20px !important;
491
521
  margin-right: 6px;
492
522
  background: white;
523
+ /*
493
524
  padding: 2px;
494
- border-radius: 20px;
525
+ */
526
+ border-radius: 2px;
495
527
  }
496
528
  .temp-menu {
497
529
  /*
@@ -992,17 +1024,27 @@ body.dark .mode-selector .btn2.selected {
992
1024
  <% } %>
993
1025
  </div>
994
1026
  <% } %>
1027
+ <a id='devtab' data-mode="refresh" target="<%=dev_link%>" href="<%=dev_link%>" class="btn header-item frame-link selected">
1028
+ <div class="tab"><i class="fa-solid fa-code"></i> Dev</div>
1029
+ </a>
995
1030
  <div class="dynamic <%=type==='run' ? '' : 'selected'%>">
996
- <% if (type !== "run") { %>
1031
+ <div class='submenu'>
997
1032
  <% if (plugin_menu) { %>
998
1033
  <%- include('./partials/dynamic', { dynamic: plugin_menu, }) %>
999
- <% } else { %>
1000
- <div class="nested-menu">
1001
- <div class="btn header-item frame-link selected">
1002
- <div class="tab"><i class="fa-solid fa-code"></i> Dev</div>
1003
- <div class="loader"><i class="fa-solid fa-circle-notch fa-spin"></i></div>
1034
+ <% } %>
1035
+ </div>
1036
+ <% if (false) { %>
1037
+ <% if (type !== "run") { %>
1038
+ <% if (plugin_menu) { %>
1039
+ <%- include('./partials/dynamic', { dynamic: plugin_menu, }) %>
1040
+ <% } else { %>
1041
+ <div class="nested-menu">
1042
+ <div class="btn header-item frame-link selected">
1043
+ <div class="tab"><i class="fa-solid fa-code"></i> Dev</div>
1044
+ <div class="loader"><i class="fa-solid fa-circle-notch fa-spin"></i></div>
1045
+ </div>
1004
1046
  </div>
1005
- </div>
1047
+ <% } %>
1006
1048
  <% } %>
1007
1049
  <% } %>
1008
1050
  </div>
@@ -1140,13 +1182,15 @@ body.dark .mode-selector .btn2.selected {
1140
1182
  interacted = true
1141
1183
  })
1142
1184
  <% if (type !== "run" && !config.title) { %>
1185
+ /*
1143
1186
  tippy('#edit-toggle', {
1144
1187
  arrow: true,
1145
1188
  showOnCreate: true,
1146
1189
  theme: "pointer",
1147
- placement: "right-end",
1190
+ placement: "top",
1148
1191
  content: "Click here to edit metadata"
1149
1192
  });
1193
+ */
1150
1194
  <% } %>
1151
1195
  <% if (type === "run" && config.meta_required) { %>
1152
1196
  setTimeout(() => {
@@ -1811,6 +1855,7 @@ body.dark .mode-selector .btn2.selected {
1811
1855
  }
1812
1856
  })
1813
1857
  document.querySelector("aside").addEventListener("click", async (e) => {
1858
+ console.log("ASIDE CLICK")
1814
1859
  let target
1815
1860
 
1816
1861
  // 0. handle dropdowns
@@ -1969,6 +2014,7 @@ body.dark .mode-selector .btn2.selected {
1969
2014
  } else {
1970
2015
  target = e.target.closest(".frame-link")
1971
2016
  }
2017
+ console.log( { target })
1972
2018
 
1973
2019
 
1974
2020
 
@@ -2063,6 +2109,7 @@ body.dark .mode-selector .btn2.selected {
2063
2109
  document.querySelectorAll(".frame-link").forEach((el) => {
2064
2110
  el.classList.remove("selected")
2065
2111
  })
2112
+ console.log("SELECTED")
2066
2113
  target.classList.add("selected")
2067
2114
 
2068
2115
  renderSelection(e)
@@ -2114,8 +2161,8 @@ body.dark .mode-selector .btn2.selected {
2114
2161
  })
2115
2162
  if (dynamic && dynamic.length > 0) {
2116
2163
  console.log({ dynamic })
2117
- if (document.querySelector(".dynamic")) {
2118
- document.querySelector(".dynamic").innerHTML = dynamic
2164
+ if (document.querySelector(".dynamic .submenu")) {
2165
+ document.querySelector(".dynamic .submenu").innerHTML = dynamic
2119
2166
  }
2120
2167
  rendered = true
2121
2168
  } else {
@@ -2123,17 +2170,17 @@ body.dark .mode-selector .btn2.selected {
2123
2170
  }
2124
2171
  console.log({ rendered, dynamic_loaded })
2125
2172
  if (rendered) {
2126
- if (dynamic_loaded) {
2127
- // already loaded, don't touch the UI
2128
- } else {
2129
- // first time being loaded
2130
- dynamic_loaded = true
2131
- if (document.querySelector(".dynamic .reveal")) {
2132
- console.log("click")
2133
-
2134
- // document.querySelector(".dynamic .reveal").click()
2135
- }
2136
- }
2173
+ // if (dynamic_loaded) {
2174
+ // // already loaded, don't touch the UI
2175
+ // } else {
2176
+ // // first time being loaded
2177
+ // dynamic_loaded = true
2178
+ // if (document.querySelector(".dynamic .reveal")) {
2179
+ // console.log("click")
2180
+ //
2181
+ //// document.querySelector(".dynamic .reveal").click()
2182
+ // }
2183
+ // }
2137
2184
  } else {
2138
2185
  console.log("Not yet rendered. Try again")
2139
2186
  setTimeout(() => {
@@ -2293,10 +2340,19 @@ body.dark .mode-selector .btn2.selected {
2293
2340
  fetch("/state/<%=type%>/<%=name%>").then((res) => {
2294
2341
  return res.json()
2295
2342
  }).then((res) => {
2343
+ console.log("STATE", res)
2344
+ let selection
2296
2345
  if (res.selected) {
2297
- let selection = document.querySelector(`[href='${res.selected}']`)
2298
- selection.click()
2346
+ selection = document.querySelector(`[href='${res.selected}']`)
2347
+ } else {
2348
+ selection = document.querySelector("#devtab")
2299
2349
  }
2350
+ console.log("CLICK", selection)
2351
+ selection.click()
2352
+ // setTimeout(() => {
2353
+ // alert("click")
2354
+ // document.querySelector(".selected").click()
2355
+ // }, 500)
2300
2356
  })
2301
2357
  <% if (type !== 'run') { %>
2302
2358
  fetch("<%=repos%>").then((res) => {
@@ -0,0 +1,225 @@
1
+ <html>
2
+ <head>
3
+ <title>Pinokio</title>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
6
+ <link href="/xterm.min.css" rel="stylesheet" />
7
+ <link href="/css/fontawesome.min.css" rel="stylesheet">
8
+ <link href="/css/solid.min.css" rel="stylesheet">
9
+ <link href="/css/regular.min.css" rel="stylesheet">
10
+ <link href="/css/brands.min.css" rel="stylesheet">
11
+ <link href="/markdown.css" rel="stylesheet"/>
12
+ <link href="/noty.css" rel="stylesheet"/>
13
+ <link href="/style.css" rel="stylesheet"/>
14
+ <% if (agent === "electron") { %>
15
+ <link href="/electron.css" rel="stylesheet"/>
16
+ <% } %>
17
+ <style>
18
+ main {
19
+ max-width: 1000px;
20
+ width: 100%;
21
+ box-sizing: border-box;
22
+ display: flex;
23
+ flex-wrap: wrap;
24
+ padding: 20px;
25
+ /*
26
+ justify-content: center;
27
+ */
28
+ }
29
+ .tab-content {
30
+ display: flex;
31
+ flex-wrap: wrap;
32
+ gap: 5px;
33
+ padding: 10px 20px;
34
+ }
35
+ .submenu.tab {
36
+ margin: 10px 0;
37
+ }
38
+ /*
39
+ .tab:hover {
40
+ border: 2px solid royalblue;
41
+ }
42
+ */
43
+ .tab {
44
+ min-width: 250px;
45
+ text-decoration: none;
46
+ display: flex;
47
+ /*
48
+ flex-direction: column;
49
+ */
50
+ font-size: 14px;
51
+ font-weight: bold;
52
+ color: black;
53
+ overflow: hidden;
54
+ margin: 10px;
55
+ box-sizing: border-box;
56
+ border-radius: 4px;
57
+ align-items: center;
58
+ padding: 10px 15px;
59
+ /*
60
+ width: 120px;
61
+ */
62
+
63
+ /*
64
+ margin-bottom: 10px;
65
+ */
66
+ background: rgba(0,0,0,0.05);
67
+ }
68
+ body.dark .tab {
69
+ color: white;
70
+ background: rgba(255,255,255,0.03);
71
+ }
72
+ .tab h2 {
73
+ padding: 5px 2px 10px;
74
+ /*
75
+ text-align: center;
76
+ */
77
+ margin: 0;
78
+ font-size: 14px;
79
+ }
80
+ .tab .col {
81
+ flex-grow: 1;
82
+ margin-left: 10px;
83
+ }
84
+ .tab i.img {
85
+ height: 50px;
86
+ width: 50px;
87
+ background: white;
88
+ color: black;
89
+ display: flex;
90
+ justify-content: center;
91
+ font-size: 20px;
92
+ align-items: center;
93
+ border-radius: 3px;
94
+ }
95
+ .tab img {
96
+ height: 50px;
97
+ width: 50px;
98
+ border-radius: 3px;
99
+ background: white;
100
+ }
101
+ /*
102
+ body.dark .tab i {
103
+ background: rgba(0,0,0,0.1);
104
+ color: white;
105
+ }
106
+ .tab i {
107
+ width: 120px;
108
+ height: 120px;
109
+ font-size: 30px;
110
+ box-sizing: border-box;
111
+ text-align:center;
112
+ background: white;
113
+ color: black;
114
+ display: flex;
115
+ justify-content: center;
116
+ align-items: center;
117
+ }
118
+ */
119
+ .menu-container {
120
+ border: 3px solid rgba(0,0,0,0.04);
121
+ background: white;
122
+ }
123
+ body.dark .menu-container {
124
+ background: rgba(255,255,255,0.03);
125
+ }
126
+ .menu-container {
127
+ width: 100%;
128
+ box-sizing: border-box;
129
+ margin: 20px;
130
+ }
131
+ body.dark .tab-header {
132
+ background: rgba(0,0,0,0.3);
133
+ }
134
+ .tab-header {
135
+ background: rgba(0,0,0,0.04);
136
+ padding: 15px;
137
+ font-weight: bold;
138
+ }
139
+ .container {
140
+ margin: 0;
141
+ padding: 0 !important;
142
+ }
143
+ .btns {
144
+ display: flex;
145
+ }
146
+ body.dark .btn {
147
+ background: rgba(255,255,255,0.08);
148
+ }
149
+ .btn {
150
+ padding: 7px 10px;
151
+ background: rgba(0,0,0,0.8);
152
+ border-radius: 0;
153
+ }
154
+ .btn.run-btn {
155
+ flex-grow: 1;
156
+ text-align: center;
157
+ margin-right: 2px;
158
+ /*
159
+ background: royalblue !important;
160
+ */
161
+ }
162
+ </style>
163
+ <script src="/hotkeys.min.js"></script>
164
+ <script src="/sweetalert2.js"></script>
165
+ <script src="/common.js"></script>
166
+ <script src="/opener.js"></script>
167
+ <script src="/nav.js"></script>
168
+ </head>
169
+ <body class='<%=theme%>' data-agent="<%=agent%>">
170
+ <main>
171
+ <% dynamic.forEach((item, index) => { %>
172
+ <% if (item.menu) { %>
173
+ <div class='menu-container'>
174
+ <div class='tab-header'><i class='<%=item.icon%>'></i> <%=item.text%></div>
175
+ <div class='tab-content'>
176
+ <% item.menu.forEach((i) => { %>
177
+ <div class='tab'>
178
+ <% if (i.image) { %>
179
+ <img src="<%=i.image%>">
180
+ <% } else if (i.icon) { %>
181
+ <i class="img <%=i.icon%>"></i>
182
+ <% } %>
183
+ <div class='col'>
184
+ <h2><%=i.title%></h1>
185
+ <div class='btns'>
186
+ <a class='run-btn btn' href="<%=i.href%>"><i class="fa-solid fa-play"></i> Run</a>
187
+ <a class='btn' target="_blank" href="<%=i.link%>"><i class="fa-solid fa-question"></i></a>
188
+ </div>
189
+ </div>
190
+ </div>
191
+ <% }) %>
192
+ </div>
193
+ </div>
194
+ <% } else { %>
195
+ <div class='tab'>
196
+ <img src="<%=item.image%>">
197
+ <div class='col'>
198
+ <h2><%=item.title%></h1>
199
+ <div class='btns'>
200
+ <a class='run-btn btn' href="<%=item.href%>"><i class="fa-solid fa-play"></i> Run</a>
201
+ <a class='btn' target="_blank" href="<%=item.link%>"><i class="fa-solid fa-question"></i></a>
202
+ </div>
203
+ </div>
204
+ </div>
205
+ <% } %>
206
+ <% }) %>
207
+ <% if (retry) { %>
208
+ <div class='requirements'>
209
+ <div class='content'>
210
+ <div class='loading'>
211
+ <i class="fa-solid fa-circle-notch fa-spin"></i>
212
+ </div>
213
+ </div>
214
+ </div>
215
+ <% } %>
216
+ </main>
217
+ <script>
218
+ <% if (retry) { %>
219
+ setTimeout(() => {
220
+ location.href = location.href
221
+ }, 2000)
222
+ <% } %>
223
+ </script>
224
+ </body>
225
+ </html>
@@ -220,6 +220,15 @@ footer .btn.go-home {
220
220
  .env-description {
221
221
  margin-bottom: 10px;
222
222
  }
223
+ .warning {
224
+ padding: 10px;
225
+ margin: 10px 0 20px;
226
+ border-left: 5px solid rgba(0,0,0,0.1);
227
+ }
228
+ .warning a {
229
+ text-decoration: none;
230
+ color: royalblue;
231
+ }
223
232
  </style>
224
233
  <script>
225
234
  document.addEventListener("DOMContentLoaded", async () => {
@@ -281,6 +290,9 @@ document.addEventListener("DOMContentLoaded", async () => {
281
290
  </div>
282
291
  </div>
283
292
  <% } %>
293
+ <div class='warning'>
294
+ This will execute the 3rd party script downloaded from <a href="<%=gitRemote%>" target="_blank"><%=gitRemote%>.</a>
295
+ </div>
284
296
  <footer>
285
297
  <a href="/" class='btn go-home'><i class='fa-solid fa-home'></i> home</a>
286
298
  <div class='flexible'></div>
@@ -365,21 +365,13 @@ body.dark aside .current.selected {
365
365
  </div>
366
366
  <% } %>
367
367
  </header>
368
- <% if (ishome) { %>
369
- <form class='search'>
370
- <div class='app-btns'>
371
- <a class='btn create-new' href="/init"><i class="fa-solid fa-plus"></i> Build</a>
372
- <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-magnifying-glass"></i> Discover</a>
373
- </div>
374
- <% if (display.includes("form")) { %>
375
- <input type='search' class="flexible" placeholder='Filter local apps'>
376
- <% } else { %>
377
- <% } %>
378
- </form>
379
- <% } %>
380
368
  <main>
381
369
  <div id='terminal' class='hidden'></div>
382
370
  <aside>
371
+ <div class='btn-tab'>
372
+ <a href="/init" class='btn'><i class="fa-solid fa-plus"></i> Create</a>
373
+ <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-globe"></i> Discover</a>
374
+ </div>
383
375
  <a href="/" class='tab selected'><i class='fas fa-laptop-code'></i> Local</a>
384
376
  <a href="/network" class='tab'><i class="fa-solid fa-wifi"></i> Network</a>
385
377
  <% if (list.length > 0) { %>
@@ -391,6 +383,23 @@ body.dark aside .current.selected {
391
383
  <div class='tab'><i class="fa-solid fa-code"></i> Dev</div>
392
384
  </aside>
393
385
  <div class='container'>
386
+ <% if (ishome) { %>
387
+ <form class='search'>
388
+ <div class='app-btns'>
389
+ <!--
390
+ <a class='btn create-new' href="/init"><i class="fa-solid fa-plus"></i> Build</a>
391
+ <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-globe"></i> Discover</a>
392
+ -->
393
+ <!--
394
+ <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-magnifying-glass"></i> Discover</a>
395
+ -->
396
+ </div>
397
+ <% if (display.includes("form")) { %>
398
+ <input type='search' class="flexible" placeholder='Search apps'>
399
+ <% } else { %>
400
+ <% } %>
401
+ </form>
402
+ <% } %>
394
403
  <% if (ishome) { %>
395
404
  <% if (running.length > 0) { %>
396
405
  <div class='running-apps'>
@@ -497,7 +506,10 @@ body.dark aside .current.selected {
497
506
  <% } %>
498
507
  </div>
499
508
  <div class='col'>
500
- <div class='title'><%=item.name%></div>
509
+ <div class='title'>
510
+ <i class="fa-solid fa-circle"></i>
511
+ <span><%=item.name%></span>
512
+ </div>
501
513
  <div class='uri'><%=item.filepath%></div>
502
514
  <div class='description'><%=item.description%></div>
503
515
  <div class='menu-btns'>
@@ -1244,13 +1244,19 @@ body.dark .ace-editor {
1244
1244
  -->
1245
1245
  <div class="tab-container">
1246
1246
  <div class="tab-nav">
1247
+ <!--
1248
+ <button type="button" class="tab-button active" data-tab="launcher">
1249
+ <i class="fa-solid fa-robot" style="margin-right: 5px;"></i>
1250
+ Quick Launcher
1251
+ </button>
1252
+ -->
1247
1253
  <button type="button" class="tab-button active" data-tab="launcher">
1248
1254
  <i class="fa-solid fa-cloud-arrow-down" style="margin-right: 5px;"></i>
1249
- Git
1255
+ Git Project Launcher
1250
1256
  </button>
1251
1257
  <button type="button" class="tab-button" data-tab="cli">
1252
1258
  <i class="fa-solid fa-terminal" style="margin-right: 5px;"></i>
1253
- CLI
1259
+ CLI App Launcher
1254
1260
  </button>
1255
1261
  <button type="button" class="tab-button" data-tab="project">
1256
1262
  <i class="fa-regular fa-star" style="margin-right: 5px;"></i>
@@ -430,16 +430,13 @@ body.dark .net {
430
430
  </div>
431
431
  </h1>
432
432
  </header>
433
- <form class='search'>
434
- <div class='app-btns'>
435
- <a class='btn create-new' href="/init"><i class="fa-solid fa-plus"></i> Build</a>
436
- <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-magnifying-glass"></i> Discover</a>
437
- </div>
438
- <input type='search' class="flexible" placeholder='Filter network apps'>
439
- </form>
440
433
  <main>
441
434
  <div id='terminal' class='hidden'></div>
442
435
  <aside>
436
+ <div class='btn-tab'>
437
+ <a href="/init" class='btn'><i class="fa-solid fa-plus"></i> Create</a>
438
+ <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-globe"></i> Discover</a>
439
+ </div>
443
440
  <a href="/" class='tab'><i class='fas fa-laptop-code'></i> Local</a>
444
441
  <a href="/network" class='tab'><i class="fa-solid fa-wifi"></i> Network</a>
445
442
  <% if (list.length > 0) { %>
@@ -455,6 +452,15 @@ body.dark .net {
455
452
  <div class='tab'><i class="fa-solid fa-code"></i> Dev</div>
456
453
  </aside>
457
454
  <div class='container'>
455
+ <form class='search'>
456
+ <!--
457
+ <div class='app-btns'>
458
+ <a class='btn create-new' href="/init"><i class="fa-solid fa-plus"></i> Build</a>
459
+ <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-magnifying-glass"></i> Discover</a>
460
+ </div>
461
+ -->
462
+ <input type='search' class="flexible" placeholder='Search apps'>
463
+ </form>
458
464
  <div class='running-apps'>
459
465
  <% if (current_host === host) { %>
460
466
  <div class='section-header'>
@@ -278,7 +278,7 @@ body.dark .config {
278
278
  background: rgba(0,0,0,0.9);
279
279
  */
280
280
  color: black;
281
- padding: 10px 100px 0;
281
+ padding: 50px 50px 0;
282
282
  text-align: left;
283
283
  }
284
284
  .config-header {
@@ -565,6 +565,7 @@ input[type=search] {
565
565
  </div>
566
566
  </h1>
567
567
  </header>
568
+ <!--
568
569
  <form class='search'>
569
570
  <div class='app-btns'>
570
571
  <a class='btn create-new' href="/init"><i class="fa-solid fa-plus"></i> Build</a>
@@ -572,8 +573,13 @@ input[type=search] {
572
573
  </div>
573
574
  <input type='search' class="flexible" placeholder='Filter network apps'>
574
575
  </form>
576
+ -->
575
577
  <main>
576
578
  <aside>
579
+ <div class='btn-tab'>
580
+ <a href="/init" class='btn'><i class="fa-solid fa-plus"></i> Create</a>
581
+ <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-globe"></i> Discover</a>
582
+ </div>
577
583
  <a href="/" class='tab'><i class='fas fa-laptop-code'></i> Local</a>
578
584
  <a href="/network" class='tab selected'><i class="fa-solid fa-wifi"></i> Network</a>
579
585
  <% if (list.length > 0) { %>
@@ -36,6 +36,9 @@
36
36
  </a>
37
37
  <% } else { %>
38
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}` : ''%>>
39
+ <% if (item.running) { %>
40
+ <i class="fa-solid fa-circle"></i>
41
+ <% } %>
39
42
  <div class='tab'><%-item.btn%></div>
40
43
  <% if (item.running) { %>
41
44
  <% if (item.online) { %>
@@ -51,6 +51,9 @@
51
51
  </a>
52
52
  <% } else { %>
53
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}` : ''%>>
54
+ <% if (item.running) { %>
55
+ <i class="fa-solid fa-circle"></i>
56
+ <% } %>
54
57
  <div class='tab'><%-item.btn%></div>
55
58
  <% if (item.running) { %>
56
59
  <!--
@@ -0,0 +1,22 @@
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}` : ''%>>
3
+ <% if (item.running) { %>
4
+ <i class="fa-solid fa-circle"></i>
5
+ <% } %>
6
+ <div class='tab'><%-item.btn%></div>
7
+ <% if (item.running) { %>
8
+ <% if (item.online) { %>
9
+ <div class='loader shutdown online'>
10
+ </div>
11
+ <% } else { %>
12
+ <div class='loader shutdown'>
13
+ <button class='btn'>
14
+ <i class="fa-solid fa-square"></i> Stop
15
+ </button>
16
+ </div>
17
+ <% } %>
18
+ <% } else { %>
19
+ <i class="fa-solid fa-angle-right"></i>
20
+ <% } %>
21
+ </a>
22
+ <% }) %>
@@ -417,7 +417,7 @@ body.dark .keys pre {
417
417
  <div>Keys are array values stored for unique host names, stored at <code>~/pinokio/key.json</code>, and can be set through <code>pre</code> attributes in pinokio scripts. Here's an example:</div>
418
418
  <pre>{
419
419
  "openai.com": [
420
- "sk-proj-2najBvCGFx18belpjf13T3BlbkFJIAR5KXK031n41WzAsPEn"
420
+ "12345678-FAKEaccesstoken1234567890abcdef"
421
421
  ],
422
422
  "x.com": [
423
423
  "12345678-FAKEaccesstoken1234567890abcdef",