pinokiod 3.19.12 → 3.19.13

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pinokiod",
3
- "version": "3.19.12",
3
+ "version": "3.19.13",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/server/index.js CHANGED
@@ -1501,7 +1501,7 @@ class Server {
1501
1501
 
1502
1502
  if (meta) {
1503
1503
  items = running.concat(notRunning)
1504
- res.render("index", {
1504
+ res.render("index2", {
1505
1505
  current_urls,
1506
1506
  portal: this.portal,
1507
1507
  install: this.install,
@@ -514,7 +514,6 @@ body.dark .open-menu, body.dark .browse {
514
514
  </div>
515
515
  </main>
516
516
  <script>
517
- return
518
517
  let paths = location.pathname.split("/").filter(x=>x)
519
518
  var term
520
519
  const n = new N()
@@ -0,0 +1,517 @@
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="/filepond.min.css" rel="stylesheet" />
14
+ <link href="/filepond-plugin-image-preview.min.css" rel="stylesheet" />
15
+ <link href="/filepond-plugin-image-edit.min.css" rel="stylesheet" />
16
+ <link href="/style.css" rel="stylesheet"/>
17
+ <% if (agent === "electron") { %>
18
+ <link href="/electron.css" rel="stylesheet"/>
19
+ <% } %>
20
+ <style>
21
+ .line2 {
22
+ display: flex;
23
+ align-items: center;
24
+ cursor: pointer;
25
+ background: rgba(0,0,100,0.04);
26
+ }
27
+ .line2 a {
28
+ text-decoration: none;
29
+ color: black;
30
+ }
31
+ .status {
32
+ padding: 10px;
33
+ margin: 10px;
34
+ border-radius: 10px;
35
+ }
36
+ .status.offline {
37
+ background: silver;
38
+ }
39
+ .status.online {
40
+ background: yellowgreen;
41
+ }
42
+ .switch {
43
+ padding: 10px;
44
+ margin: 10px 0;
45
+ }
46
+ .switch[data-online=true] {
47
+ color: yellowgreen;
48
+ }
49
+ .button {
50
+ padding: 10px;
51
+ }
52
+ .on, .off {
53
+ display: flex;
54
+ align-items: center;
55
+ }
56
+ header .runner {
57
+ padding: 10px 0 0;
58
+ }
59
+ .proxy {
60
+ padding: 0 10px;
61
+ text-align: right;
62
+ }
63
+ .proxy a {
64
+ text-decoration: none;
65
+ display: inline-block;
66
+ padding: 5px 10px;
67
+ border-radius: 2px;
68
+ background: black;
69
+ color: white;
70
+ }
71
+ .browser-options-btns {
72
+ display: flex;
73
+ padding-top: 5px;
74
+ }
75
+ .browser-options-row {
76
+ /*
77
+ border-top: 1px solid rgba(0,0,0,0.1);
78
+ border-bottom: 1px solid rgba(0,0,0,0.1);
79
+ */
80
+ display: flex;
81
+ padding: 10px;
82
+ align-items: flex-start;
83
+ }
84
+ .browser-options-row h3 {
85
+ margin: 0;
86
+ font-size: 14px;
87
+ margin-bottom: 3px;
88
+ }
89
+ .browser-options-row .btn.disabled {
90
+ opacity: 0.7;
91
+ }
92
+ .browser-options-row .btn {
93
+ font-weight: bold;
94
+ width: 100px;
95
+ text-align: center;
96
+ display: block;
97
+ margin-right: 10px;
98
+ flex-shrink: 0;
99
+ padding: 5px;
100
+ }
101
+ .badge {
102
+ font-size: 12px;
103
+ padding: 5px 10px;
104
+ background: rgba(0,0,100,0.1);
105
+ border-radius: 5px;
106
+ display: inline-block;
107
+ margin-top: 5px;
108
+ }
109
+ a.badge {
110
+ color: royalblue;
111
+ text-decoration: none;
112
+ cursor: pointer;
113
+ }
114
+ .badge a {
115
+ color: royalblue;
116
+ text-decoration: none;
117
+ }
118
+ body.dark .btn {
119
+ color: white;
120
+ }
121
+ body.dark .badge {
122
+ background: rgba(255,255,255,0.1);
123
+ }
124
+ /*
125
+ body.dark .browser-options-row {
126
+ border-top: 1px solid rgba(255,255,255,0.05);
127
+ border-bottom: 1px solid rgba(255,255,255,0.05);
128
+ }
129
+ */
130
+ body.dark .context-menu-wrapper {
131
+ background: rgba(0,0,0,0.9);
132
+ color: white;
133
+ }
134
+ .context-menu-wrapper {
135
+ background: rgba(0,0,0,0.06) !important;
136
+ }
137
+ .context-menu {
138
+ /*
139
+ max-height: 10000px;
140
+ overflow: hidden;
141
+ transition: max-height 1s ease-in-out;
142
+ */
143
+ display: flex;
144
+ margin: 0 5px 0 0;
145
+ }
146
+ .context-menu .btn:hover {
147
+ color: cornflowerblue !important;
148
+ }
149
+ .context-menu .btn {
150
+ background: none !important;
151
+ border: none !important;
152
+ display: block;
153
+ width: 80px;
154
+ padding: 6px 10px !important;
155
+ text-align: left;
156
+ color: black;
157
+ }
158
+ body.dark .context-menu .btn {
159
+ color: white;
160
+ }
161
+ .context-menu.collapsed {
162
+ /*
163
+ max-height: 0;
164
+ */
165
+ display: none;
166
+ }
167
+ body.dark .open-menu, body.dark .browse {
168
+ border: none !important;
169
+ background: black !important;
170
+ color: white !important;
171
+ }
172
+ .open-menu:hover, .browse:hover, body.dark .open-menu:hover, body.dark .browse:hover {
173
+ color: royalblue !important;
174
+ }
175
+ .open-menu, .browse {
176
+ width: 80px;
177
+ border-radius: 0 !important;
178
+ background: rgba(0,0,0,0.04) !important;
179
+ color: black !important;
180
+ /*
181
+ border: 1px solid rgba(0, 0, 0, 0.3);
182
+ */
183
+ }
184
+ .open-menu.selected {
185
+ border: none !important;
186
+ /*
187
+ background: none !important;
188
+ */
189
+ }
190
+ .open-menu.selected span {
191
+ display: none;
192
+ }
193
+ @media only screen and (max-width: 480px) {
194
+ .btn2 {
195
+ padding: 5px;
196
+ font-size: 11px;
197
+ }
198
+ .nav-btns {
199
+ flex-grow: 1;
200
+ justify-content: center;
201
+ padding: 0;
202
+ }
203
+ }
204
+ </style>
205
+ <script src="/hotkeys.min.js"></script>
206
+ <script src="/sweetalert2.js"></script>
207
+ <script src="/noty.js"></script>
208
+ <script src="/notyq.js"></script>
209
+ <script src="/xterm.js"></script>
210
+ <script src="/xterm-addon-fit.js"></script>
211
+ <script src="/xterm-addon-web-links.js"></script>
212
+ <script src="/xterm-theme.js"></script>
213
+ <script src="/Socket.js"></script>
214
+ <script src="/install.js"></script>
215
+ <script src="/common.js"></script>
216
+ <script src="/opener.js"></script>
217
+ <script src="/nav.js"></script>
218
+ <script src="/fuse.js"></script>
219
+ <script src="/report.js"></script>
220
+ <script src="/filepond-plugin-file-validate-type.min.js"></script>
221
+ <script src="/filepond-plugin-image-exif-orientation.min.js"></script>
222
+ <script src="/filepond-plugin-image-preview.min.js"></script>
223
+ <script src="/filepond-plugin-image-edit.min.js"></script>
224
+ <script src="/filepond-plugin-image-crop.min.js"></script>
225
+ <script src="/filepond-plugin-image-resize.min.js"></script>
226
+ <script src="/filepond-plugin-image-transform.min.js"></script>
227
+ <script src="/filepond.min.js"></script>
228
+ <script src="/fscreator.js"></script>
229
+ <script src="/fseditor.js"></script>
230
+ </head>
231
+ <body class='<%=theme%>' data-agent="<%=agent%>">
232
+ <% if (error) { %>
233
+ <nav class='error-message'>
234
+ <div><%=error%></div>
235
+ <div class='flexible'></div>
236
+ <a class='btn' target="_blank" href="<%=install%>">Download</a>
237
+ </nav>
238
+ <% } %>
239
+ <!--
240
+ <header class='grabbable'>
241
+ -->
242
+ <header class='navheader grabbable'>
243
+ <h1>
244
+ <% if (ishome) { %>
245
+ <a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
246
+ <button class='btn2' id='back'><div><i class="fa-solid fa-chevron-left"></i></div><div>Prev</div></button>
247
+ <button class='btn2' id='forward'><div><i class="fa-solid fa-chevron-right"></i></div><div>Next</div></button>
248
+ <button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div><div>Refresh</div></button>
249
+ <div class='url-bar'>
250
+ <% if (current_urls.https) { %>
251
+ <a class='https-url' target="_blank" href="<%=current_urls.https%>"><i class="fa-solid fa-square-arrow-up-right"></i> <%=current_urls.https%></a>
252
+ <% } %>
253
+ <% if (current_urls.http) { %>
254
+ <a class='http-url' target="_blank" href="<%=current_urls.http%>"><i class="fa-solid fa-square-arrow-up-right"></i> <%=current_urls.http%></a>
255
+ <% } %>
256
+ </div>
257
+ <a href="/network" class='btn2'><div><i class="fa-solid fa-wifi"></i></div><div>Network</div></a>
258
+ <a href="/connect" class='btn2'><div><i class="fa-solid fa-circle-user"></i></div><div>Connect</div></a>
259
+ <!--
260
+ <button id='newfolder' class='btn2'><div><i class="fa-solid fa-folder-plus"></i></div><div>New Folder</div></button>
261
+ -->
262
+ <% } %>
263
+ <% paths.forEach((path) => { %>
264
+ <% if (path.action) { %>
265
+ <a class='path nav-button' id="<%=path.id%>" onclick="<%=path.action%>"><%-path.name%></a>
266
+ <% } else if (path.path) { %>
267
+ <a class='path' href="<%=path.path%>"><%-path.name%></a>
268
+ <% } %>
269
+ <% }) %>
270
+ <% if (ishome) { %>
271
+ <div class='nav-btns'>
272
+ <a class='btn2' href="<%=portal%>" target="_blank"><div><i class="fa-solid fa-question"></i></div><div>Help</div></a>
273
+ <button class='btn2' id='genlog'><div><i class="fa-solid fa-laptop-code"></i></div><div>Logs</div></button>
274
+ <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>
275
+ <a class='btn2' href="/?mode=settings"><div><i class="fa-solid fa-gear"></i></div><div>Settings</div></a>
276
+ <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>
277
+ </div>
278
+ <% } %>
279
+ </h1>
280
+ <% if (!ishome) { %>
281
+ <div class='runner'>
282
+ <button class='btn' id='open-fs' data-filepath="<%=filepath%>"><i class="fa-solid fa-eye"></i> View Folder</button>
283
+ </div>
284
+ <% } %>
285
+ <% if (display.includes("dependencies") && config) { %>
286
+ <div class='dependencies'>
287
+ <h2>Prerequisites</h2>
288
+ <div class='item'>Download and install the following dependencies first</div>
289
+ <div class='requirements'>
290
+ <% config.dependencies.forEach((dep) => { %>
291
+ <% if (dep.downloaded) { %>
292
+ <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>
293
+ <% } else { %>
294
+ <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>
295
+ <% } %>
296
+ <% }) %>
297
+ </div>
298
+ </div>
299
+ <% } %>
300
+ </header>
301
+ <main>
302
+ <div id='terminal' class='hidden'></div>
303
+ <div class='container'>
304
+ <% if (ishome) { %>
305
+ <form class='search'>
306
+ <div class='app-btns'>
307
+ <a class='btn create-new' id='create-new-folder'><i class="fa-solid fa-plus"></i> New</a>
308
+ <!--
309
+ <a class='btn create-new' href="/create"><i class="fa-solid fa-folder-plus"></i> Create</a>
310
+ -->
311
+ <a class='btn' id='explore' href="/?mode=explore"><i class="fa-solid fa-magnifying-glass"></i> Discover</a>
312
+ </div>
313
+ <% if (display.includes("form")) { %>
314
+ <input type='search' class="flexible" placeholder='Filter downloaded apps'>
315
+ <% } else { %>
316
+ <% } %>
317
+ </form>
318
+ <% if (running.length > 0) { %>
319
+ <div class='running-apps'>
320
+ <!--
321
+ <div class='header-label'>Running</div>
322
+ -->
323
+ <% running.forEach((item) => { %>
324
+ <a href="<%=item.browser_url%>" data-description="<%=item.description%>" data-index="<%=item.index%>" data-name="<%=item.name%>" data-title="<%=item.name%>" data-uri="<%=item.uri%>" data-icon="<%=item.icon%>" data-path="<%=item.path%>" data-iconpath="<%=item.iconpath ? item.iconpath : ''%>" class='line align-top'>
325
+ <h3>
326
+ <div class='item-icon'>
327
+ <% if (item.icon) { %>
328
+ <img src="<%=item.icon%>">
329
+ <% } else { %>
330
+ <% if (theme === 'dark') { %>
331
+ <img src="/pinokio-white.png">
332
+ <% } else { %>
333
+ <img src="/pinokio-black.png">
334
+ <% } %>
335
+ <% } %>
336
+ </div>
337
+ <div class='col'>
338
+ <div class='uri'><%=item.filepath%></div>
339
+ <div class='title'><%=item.name%></div>
340
+ <div class='description'><%=item.description%></div>
341
+ <div class='menu-btns'>
342
+ <button class='btn browse' data-src="<%=item.browser_url%>/dev">
343
+ <i class='fa-solid fa-code'></i> Dev
344
+ </button>
345
+ <button class='btn open-menu'>
346
+ <i class="fa-solid fa-bars"></i><span> Menu</span>
347
+ </button>
348
+ <div class='context-menu collapsed'>
349
+ <div class='context-menu-wrapper'>
350
+ <button class='btn' data-filepath="<%=item.filepath%>">
351
+ <i class="fa-solid fa-folder-open"></i> Open</button>
352
+ </button>
353
+ <button class='btn copy-menu' data-src="<%=item.browser_url%>/dev">
354
+ <i class='fa-solid fa-copy'></i> Copy
355
+ </button>
356
+ <button class='btn move-menu' data-src="<%=item.browser_url%>/dev" data-disable="To move the folder, the app should not be running.">
357
+ <i class="fa-solid fa-right-to-bracket"></i> Move
358
+ </button>
359
+ <button class='btn edit-menu' data-src="<%=item.browser_url%>/dev">
360
+ <i class='fa-solid fa-pen-to-square'></i> Edit
361
+ </button>
362
+ <button class='btn del' data-src="<%=item.url%>" data-disable="To delete the folder, the app should not be running.">
363
+ <i class="fa-solid fa-trash-can"></i> Delete
364
+ </button>
365
+ </div>
366
+ </div>
367
+ <% if (item.running_scripts) { %>
368
+ <% item.running_scripts.forEach((s) => { %>
369
+ <% if (s.id) { %>
370
+ <button class='btn shutdown' data-id="<%=s.id%>">
371
+ <i class="fa-solid fa-stop"></i> Stop <%=s.name%>&nbsp;
372
+ <i class='fa-solid fa-spin fa-circle-notch'></i>
373
+ </button>
374
+ <% } else { %>
375
+ <button class='btn shutdown' data-src="<%=s.path%>">
376
+ <i class="fa-solid fa-stop"></i> Stop <%=s.name%>&nbsp;
377
+ <i class='fa-solid fa-spin fa-circle-notch'></i>
378
+ </button>
379
+ <% } %>
380
+ <% }) %>
381
+ <% } %>
382
+ </div>
383
+ <% if (item.shortcuts && item.shortcuts.length > 0) { %>
384
+ <div class='btns'>
385
+ <% item.shortcuts.forEach((btn) => { %>
386
+ <% if (btn.btn) { %>
387
+ <button data-action="<%=btn.action ? JSON.stringify(btn.action) : ''%>" class='btn menu-btn'><%-btn.btn%></button>
388
+ <% } %>
389
+ <% }) %>
390
+ </div>
391
+ <% } %>
392
+ </div>
393
+ <!--
394
+ <div class='spinner'>
395
+ <i class="fa-solid fa-chevron-right"></i>
396
+ </div>
397
+ -->
398
+ </h3>
399
+ </a>
400
+ <% }) %>
401
+ </div>
402
+ <% } %>
403
+ <% if (notRunning.length > 0) { %>
404
+ <div class='not-running-apps'>
405
+ <!--
406
+ <div class='header-label'>Not Running</div>
407
+ -->
408
+ <% notRunning.forEach((item) => { %>
409
+ <a href="<%=item.browser_url%>" data-description="<%=item.description%>" data-index="<%=item.index%>" data-name="<%=item.name%>" data-title="<%=item.name%>" data-uri="<%=item.uri%>" data-icon="<%=item.icon%>" data-path="<%=item.path%>" data-iconpath="<%=item.iconpath ? item.iconpath : ''%>" class='line align-top'>
410
+ <h3>
411
+ <div class='item-icon'>
412
+ <% if (item.icon) { %>
413
+ <img src="<%=item.icon%>">
414
+ <% } else { %>
415
+ <% if (theme === 'dark') { %>
416
+ <img src="/pinokio-white.png">
417
+ <% } else { %>
418
+ <img src="/pinokio-black.png">
419
+ <% } %>
420
+ <% } %>
421
+ </div>
422
+ <div class='col'>
423
+ <div class='uri'><%=item.filepath%></div>
424
+ <div class='title'><%=item.name%></div>
425
+ <div class='description'><%=item.description%></div>
426
+ <div class='menu-btns'>
427
+ <button class='btn browse' data-src="<%=item.browser_url%>/dev">
428
+ <i class='fa-solid fa-code'></i> Dev
429
+ </button>
430
+ <button class='btn open-menu'>
431
+ <i class="fa-solid fa-bars"></i><span> Menu</span>
432
+ </button>
433
+ <div class='context-menu collapsed'>
434
+ <div class='context-menu-wrapper'>
435
+ <button class='btn' data-filepath="<%=item.filepath%>">
436
+ <i class="fa-solid fa-folder-open"></i> Open</button>
437
+ </button>
438
+ <button class='btn copy-menu' data-src="<%=item.browser_url%>/dev">
439
+ <i class='fa-solid fa-copy'></i> Copy
440
+ </button>
441
+ <button class='btn move-menu' data-src="<%=item.browser_url%>/dev">
442
+ <i class="fa-solid fa-right-to-bracket"></i> Move
443
+ </button>
444
+ <button class='btn edit-menu' data-src="<%=item.browser_url%>/dev">
445
+ <i class='fa-solid fa-pen-to-square'></i> Edit
446
+ </button>
447
+ <button class='btn del' data-src="<%=item.url%>">
448
+ <i class="fa-solid fa-trash-can"></i> Delete
449
+ </button>
450
+ </div>
451
+ </div>
452
+ </div>
453
+ <div class='fiexible'></div>
454
+ <% if (item.shortcuts && item.shortcuts.length > 0) { %>
455
+ <div class='btns'>
456
+ <% item.shortcuts.forEach((btn) => { %>
457
+ <% if (btn.btn) { %>
458
+ <button data-action="<%=btn.action ? JSON.stringify(btn.action) : ''%>" class='btn menu-btn'><%-btn.btn%></button>
459
+ <% } %>
460
+ <% }) %>
461
+ </div>
462
+ <% } %>
463
+ </div>
464
+ <!--
465
+ <div class='spinner'>
466
+ <i class="fa-solid fa-chevron-right"></i>
467
+ </div>
468
+ -->
469
+ </h3>
470
+ </a>
471
+ <% }) %>
472
+ </div>
473
+ <% } %>
474
+ <% if (running.length === 0 && notRunning.length === 0) { %>
475
+ <div class='placeholder'>
476
+ <h1>Welcome.</h1>
477
+ <br>
478
+ <div>Get started by installing some Pinokio scripts.</div>
479
+ <a href="/?mode=explore" class='btn'><i class="fa-solid fa-globe"></i> Visit Discover Page</a>
480
+ </div>
481
+ <% } %>
482
+ <% } else { %>
483
+ <% items.forEach((item, index) => { %>
484
+ <a data-description="<%=item.description%>" data-index="<%=index%>" data-name="<%=item.name%>" data-uri="<%=item.uri%>" class='line thick' href="<%=item.url%>">
485
+ <h3>
486
+ <% if (item.icon) { %>
487
+ <i class="<%=item.icon%>"></i>
488
+ <% } else { %>
489
+ <i class="fa-regular fa-folder"></i>
490
+ <% } %>
491
+ <%=item.name%>
492
+ </h3>
493
+ <div class='description'><%=item.description%></div>
494
+ </a>
495
+ <% }) %>
496
+ <% } %>
497
+ <% if (readme) { %>
498
+ <div class='readme markdown-body'>
499
+ <div class='content'><%-readme%></div>
500
+ </div>
501
+ <% } %>
502
+ <% if (display.includes("onboarding")) { %>
503
+ <!--
504
+ <div class='container'>
505
+ <div class='content'>
506
+ <h2>Quickstart</h2>
507
+ <div>Install llama</div>
508
+ <br>
509
+ <button class='btn' id='llama'>Install</button>
510
+ </div>
511
+ </div>
512
+ -->
513
+ <% } %>
514
+ </div>
515
+ </main>
516
+ </body>
517
+ </html>