pinokiod 3.40.0 → 3.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/kernel/api/browser/index.js +3 -1
- package/kernel/api/cloudflare/index.js +3 -3
- package/kernel/api/index.js +187 -51
- package/kernel/api/loading/index.js +15 -0
- package/kernel/api/process/index.js +7 -0
- package/kernel/api/shell/index.js +0 -2
- package/kernel/bin/browserless.js +22 -0
- package/kernel/bin/caddy.js +36 -4
- package/kernel/bin/index.js +4 -1
- package/kernel/bin/setup.js +38 -5
- package/kernel/connect/backend.js +110 -0
- package/kernel/connect/config.js +171 -0
- package/kernel/connect/index.js +18 -7
- package/kernel/connect/providers/huggingface/index.js +98 -0
- package/kernel/connect/providers/x/index.js +0 -1
- package/kernel/environment.js +91 -19
- package/kernel/git.js +46 -3
- package/kernel/index.js +119 -39
- package/kernel/peer.js +40 -5
- package/kernel/plugin.js +3 -2
- package/kernel/procs.js +27 -20
- package/kernel/prototype.js +30 -16
- package/kernel/router/common.js +1 -1
- package/kernel/router/connector.js +1 -3
- package/kernel/router/index.js +38 -4
- package/kernel/router/localhost_home_router.js +5 -1
- package/kernel/router/localhost_port_router.js +27 -1
- package/kernel/router/localhost_static_router.js +93 -0
- package/kernel/router/localhost_variable_router.js +14 -9
- package/kernel/router/peer_peer_router.js +3 -0
- package/kernel/router/peer_static_router.js +43 -0
- package/kernel/router/peer_variable_router.js +15 -14
- package/kernel/router/processor.js +26 -1
- package/kernel/router/rewriter.js +59 -0
- package/kernel/scripts/git/commit +11 -1
- package/kernel/shell.js +8 -3
- package/kernel/util.js +65 -6
- package/package.json +2 -1
- package/server/index.js +1048 -970
- package/server/public/common.js +382 -1
- package/server/public/fscreator.js +0 -1
- package/server/public/loading.js +17 -0
- package/server/public/notifyinput.js +0 -1
- package/server/public/opener.js +4 -2
- package/server/public/style.css +310 -11
- package/server/socket.js +7 -1
- package/server/views/app.ejs +1747 -351
- package/server/views/columns.ejs +338 -0
- package/server/views/connect/huggingface.ejs +353 -0
- package/server/views/connect/index.ejs +410 -0
- package/server/views/connect/x.ejs +43 -9
- package/server/views/connect.ejs +709 -49
- package/server/views/container.ejs +357 -0
- package/server/views/d.ejs +251 -62
- package/server/views/download.ejs +54 -10
- package/server/views/editor.ejs +11 -0
- package/server/views/explore.ejs +40 -15
- package/server/views/file_explorer.ejs +25 -246
- package/server/views/form.ejs +44 -1
- package/server/views/frame.ejs +39 -1
- package/server/views/github.ejs +48 -11
- package/server/views/help.ejs +48 -7
- package/server/views/index.ejs +119 -58
- package/server/views/index2.ejs +3 -4
- package/server/views/init/index.ejs +651 -197
- package/server/views/install.ejs +1 -1
- package/server/views/mini.ejs +47 -18
- package/server/views/net.ejs +199 -67
- package/server/views/network.ejs +229 -93
- package/server/views/network2.ejs +3 -4
- package/server/views/old_network.ejs +3 -3
- package/server/views/prototype/index.ejs +48 -11
- package/server/views/review.ejs +1005 -0
- package/server/views/rows.ejs +341 -0
- package/server/views/screenshots.ejs +1020 -0
- package/server/views/settings.ejs +160 -23
- package/server/views/setup.ejs +49 -7
- package/server/views/setup_home.ejs +43 -10
- package/server/views/shell.ejs +7 -1
- package/server/views/start.ejs +14 -9
- package/server/views/terminal.ejs +13 -2
- package/server/views/tools.ejs +1015 -0
|
@@ -49,6 +49,9 @@
|
|
|
49
49
|
display: flex;
|
|
50
50
|
align-items: center;
|
|
51
51
|
}
|
|
52
|
+
header {
|
|
53
|
+
padding: 10px;
|
|
54
|
+
}
|
|
52
55
|
header .runner {
|
|
53
56
|
padding: 10px 0 0;
|
|
54
57
|
}
|
|
@@ -124,6 +127,11 @@ body.dark .browser-options-row {
|
|
|
124
127
|
border-bottom: 1px solid rgba(255,255,255,0.05);
|
|
125
128
|
}
|
|
126
129
|
*/
|
|
130
|
+
@media only screen and (max-width: 800px) {
|
|
131
|
+
header h1 {
|
|
132
|
+
height: unset;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
127
135
|
@media only screen and (max-width: 480px) {
|
|
128
136
|
.btn2 {
|
|
129
137
|
padding: 5px;
|
|
@@ -136,6 +144,8 @@ body.dark .browser-options-row {
|
|
|
136
144
|
}
|
|
137
145
|
}
|
|
138
146
|
</style>
|
|
147
|
+
<script src="/popper.min.js"></script>
|
|
148
|
+
<script src="/tippy-bundle.umd.min.js"></script>
|
|
139
149
|
<script src="/hotkeys.min.js"></script>
|
|
140
150
|
<script src="/sweetalert2.js"></script>
|
|
141
151
|
<script src="/noty.js"></script>
|
|
@@ -161,12 +171,6 @@ body.dark .browser-options-row {
|
|
|
161
171
|
-->
|
|
162
172
|
<header class='navheader grabbable'>
|
|
163
173
|
<h1>
|
|
164
|
-
<% if (ishome) { %>
|
|
165
|
-
<a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
|
|
166
|
-
<button class='btn2' id='back'><i class="fa-solid fa-chevron-left"></i></button>
|
|
167
|
-
<button class='btn2' id='forward'><i class="fa-solid fa-chevron-right"></i></button>
|
|
168
|
-
<button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div><div>Refresh</div></button>
|
|
169
|
-
<% } %>
|
|
170
174
|
<% paths.forEach((path) => { %>
|
|
171
175
|
<% if (path.action) { %>
|
|
172
176
|
<a class='path nav-button' id="<%=path.id%>" onclick="<%=path.action%>"><%-path.name%></a>
|
|
@@ -179,24 +183,10 @@ body.dark .browser-options-row {
|
|
|
179
183
|
<input type='search' class="flexible" placeholder='Filter downloaded apps'>
|
|
180
184
|
</form>
|
|
181
185
|
<% } %>
|
|
182
|
-
<% if (ishome) { %>
|
|
183
|
-
<div class='nav-btns'>
|
|
184
|
-
<a class='btn2' href="<%=portal%>" target="_blank"><div><i class="fa-solid fa-question"></i></div><div>Help</div></a>
|
|
185
|
-
<% if (agent === "electron") { %>
|
|
186
|
-
<a class='btn2' data-filepath="<%=filepath%>"><div><i class="fa-regular fa-folder-open"></i></div><div>Files</div></a>
|
|
187
|
-
<% } %>
|
|
188
|
-
<button class='btn2' id='genlog'><div><i class="fa-solid fa-laptop-code"></i></div><div>Logs</div></button>
|
|
189
|
-
<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>
|
|
190
|
-
<a class='btn2' href="/?mode=settings"><div><i class="fa-solid fa-gear"></i></div><div>Settings</div></a>
|
|
191
|
-
<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>
|
|
192
|
-
</div>
|
|
193
|
-
<% } %>
|
|
194
186
|
</h1>
|
|
195
|
-
|
|
196
|
-
<
|
|
197
|
-
|
|
198
|
-
</div>
|
|
199
|
-
<% } %>
|
|
187
|
+
<div class='runner'>
|
|
188
|
+
<button class='btn' id='open-fs' data-filepath="<%=filepath%>"><i class="fa-solid fa-square-arrow-up-right"></i> Open in File Explorer</button>
|
|
189
|
+
</div>
|
|
200
190
|
<% if (display.includes("dependencies")) { %>
|
|
201
191
|
<div class='dependencies'>
|
|
202
192
|
<h2>Prerequisites</h2>
|
|
@@ -216,235 +206,24 @@ body.dark .browser-options-row {
|
|
|
216
206
|
<main>
|
|
217
207
|
<div id='terminal' class='hidden'></div>
|
|
218
208
|
<div class='container'>
|
|
219
|
-
<%
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
<a href="/" target="_blank" class='btn' features="browser"><div><i class="fa-solid fa-square-up-right"></i> Open</div></a>
|
|
227
|
-
<% } else { %>
|
|
228
|
-
<a href="/" target="_blank" class='btn'><div><i class="fa-solid fa-square-up-right"></i> Open</div></a>
|
|
229
|
-
<% } %>
|
|
230
|
-
<div class='flexible'>
|
|
231
|
-
<h3><i class="fa-solid fa-bolt"></i> Instant Launch</h3>
|
|
232
|
-
<div>(Experimental) Directly open pinokio apps from your favorite browser address bar at localhost. If an app you're trying to use is already running, it will instantly load. If it's not, the app will first launch and then load the website.</div>
|
|
233
|
-
</div>
|
|
234
|
-
</div>
|
|
209
|
+
<% items.forEach((item, index) => { %>
|
|
210
|
+
<a data-description="<%=item.description%>" data-index="<%=index%>" data-name="<%=item.name%>" data-uri="<%=item.uri%>" class='line thick' href="<%=item.url%>">
|
|
211
|
+
<h3>
|
|
212
|
+
<% if (item.icon) { %>
|
|
213
|
+
<i class="<%=item.icon%>"></i>
|
|
214
|
+
<% } else { %>
|
|
215
|
+
<i class="fa-regular fa-folder"></i>
|
|
235
216
|
<% } %>
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
</div>
|
|
242
|
-
<!--
|
|
243
|
-
<div class='browser-options-row'>
|
|
244
|
-
<a href="/proxy" class='flexible'>
|
|
245
|
-
<h3><i class="fa-solid fa-wifi"></i> Local Share</h3>
|
|
246
|
-
<div>Access Pinokio, Ollama, and other 3rd party apps from any device on the same network. By default it's off.</div>
|
|
247
|
-
</a>
|
|
248
|
-
<% if (false) { %>
|
|
249
|
-
<% if (proxy) { %>
|
|
250
|
-
<a id='wifi-stop' data-proxy="<%=proxy.proxy%>" class='btn'><div><i class="fa-solid fa-stop"></i> Stop</div></a>
|
|
251
|
-
<div class='flexible'>
|
|
252
|
-
<h3><i class="fa-solid fa-wifi"></i> Local Share</h3>
|
|
253
|
-
<div>Access Pinokio from any device on the same network. By default it's off.</div>
|
|
254
|
-
<span class='badge'><i class="fa-solid fa-circle-notch fa-spin"></i> Running at <a href="<%=proxy.proxy%>" target="_blank" features="browser"><%=proxy.proxy%></a></span>
|
|
255
|
-
<a id='wifi-qr' class='badge'><i class="fa-solid fa-qrcode"></i> Scan QR Code</a>
|
|
256
|
-
</div>
|
|
257
|
-
<% } else { %>
|
|
258
|
-
<a id='wifi' class='btn'><div><i class="fa-solid fa-play"></i> Start</div></a>
|
|
259
|
-
<a id='wifi-starting' class='btn disabled hidden'><div><i class="fa-solid fa-circle-notch fa-spin"></i> Starting</div></a>
|
|
260
|
-
<div class='flexible'>
|
|
261
|
-
<h3><i class="fa-solid fa-wifi"></i> Local Share</h3>
|
|
262
|
-
<div>Access Pinokio from any device on the same network. By default it's off.</div>
|
|
263
|
-
</div>
|
|
264
|
-
<% } %>
|
|
265
|
-
<% } %>
|
|
266
|
-
</div>
|
|
267
|
-
-->
|
|
268
|
-
<div class='browser-options-row hidden'>
|
|
269
|
-
<% if (cloudflare_pub) { %>
|
|
270
|
-
<a id='cloudflare-stop' class='btn'><div><i class="fa-solid fa-stop"></i> Stop</div></a>
|
|
271
|
-
<div class='flexible'>
|
|
272
|
-
<h3>Public Share</h3>
|
|
273
|
-
<div>Open up your Pinokio server to the open internet (anyone with the URL can access)</div>
|
|
274
|
-
<span class='badge'><i class="fa-solid fa-circle-notch fa-spin"></i> Running at <a href="<%=cloudflare_pub%>" target="_blank" features="browser"><%=cloudflare_pub%></a></span>
|
|
275
|
-
<a id='cloudflare-qr' class='badge'><i class="fa-solid fa-qrcode"></i> Scan QR Code</a>
|
|
276
|
-
</div>
|
|
277
|
-
<% } else { %>
|
|
278
|
-
<a id='cloudflare' class='btn'><div><i class="fa-solid fa-play"></i> Start</div></a>
|
|
279
|
-
<a id='cloudflare-starting' class='btn disabled hidden'><div><i class="fa-solid fa-circle-notch fa-spin"></i> Starting</div></a>
|
|
280
|
-
<div class='flexible'>
|
|
281
|
-
<h3>Public Share</h3>
|
|
282
|
-
<div>Open up your Pinokio server to the open internet (anyone with the URL can access)</div>
|
|
283
|
-
</div>
|
|
284
|
-
<% } %>
|
|
285
|
-
</div>
|
|
286
|
-
</div>
|
|
287
|
-
<% } %>
|
|
288
|
-
<!--
|
|
289
|
-
<div class='type-tabs'>
|
|
290
|
-
<% if (mode === "task") { %>
|
|
291
|
-
<a class='type-tab' href="/"><img src='/pinokio-<%=theme=='dark' ? 'white' : 'black'%>.png'> Apps</a>
|
|
292
|
-
<a class='type-tab selected' href="/?mode=task"> <img src='/<%=theme=='dark' ? 'term-dark.png' : 'term-white.png'%>'> Tasks</a>
|
|
293
|
-
<% } else { %>
|
|
294
|
-
<a class='type-tab selected' href="/"><img src='/pinokio-<%=theme=='dark' ? 'white' : 'black'%>.png'> Apps</a>
|
|
295
|
-
<a class='type-tab' href="/?mode=task"> <img src='/<%=theme=='dark' ? 'term-dark.png' : 'term-white.png'%>'> Tasks</a>
|
|
296
|
-
<% } %>
|
|
297
|
-
</div>
|
|
298
|
-
-->
|
|
299
|
-
<% if (running.length > 0) { %>
|
|
300
|
-
<div class='running-apps'>
|
|
301
|
-
<div class='header-label'>Running</div>
|
|
302
|
-
<% running.forEach((item) => { %>
|
|
303
|
-
<a href="<%=item.browser_url%>" data-description="<%=item.description%>" data-index="<%=item.index%>" data-name="<%=item.name%>" data-uri="<%=item.uri%>" class='line align-top'>
|
|
304
|
-
<h3>
|
|
305
|
-
<% if (item.icon) { %>
|
|
306
|
-
<img src="<%=item.icon%>">
|
|
307
|
-
<% } else { %>
|
|
308
|
-
<% if (theme === 'dark') { %>
|
|
309
|
-
<img src="/pinokio-white.png">
|
|
310
|
-
<% } else { %>
|
|
311
|
-
<img src="/pinokio-black.png">
|
|
312
|
-
<% } %>
|
|
313
|
-
<!--
|
|
314
|
-
<div class='avatar'>
|
|
315
|
-
<i class="fa-regular fa-circle-dot"></i>
|
|
316
|
-
</div>
|
|
317
|
-
-->
|
|
318
|
-
<% } %>
|
|
319
|
-
<div class='col'>
|
|
320
|
-
<div class='uri'><i class="fa-regular fa-folder"></i><%=item.url%></div>
|
|
321
|
-
<div class='title'><%=item.name%></div>
|
|
322
|
-
<div class='description'><%=item.description%></div>
|
|
323
|
-
<div>
|
|
324
|
-
<button class='btn browse' data-src="<%=item.browser_url%>/dev">
|
|
325
|
-
<i class='fa-regular fa-folder-open'></i>
|
|
326
|
-
</button>
|
|
327
|
-
<button class='btn del' data-src="<%=item.url%>">
|
|
328
|
-
<i class="fa-solid fa-trash-can"></i>
|
|
329
|
-
</button>
|
|
330
|
-
<% if (item.running_scripts) { %>
|
|
331
|
-
<% item.running_scripts.forEach((s) => { %>
|
|
332
|
-
<button class='btn shutdown' data-src="<%=s.path%>">
|
|
333
|
-
<i class="fa-solid fa-stop"></i> Stop <%=s.name%>
|
|
334
|
-
<i class='fa-solid fa-spin fa-circle-notch'></i>
|
|
335
|
-
</button>
|
|
336
|
-
<% }) %>
|
|
337
|
-
<% } %>
|
|
338
|
-
</div>
|
|
339
|
-
<% if (item.shortcuts && item.shortcuts.length > 0) { %>
|
|
340
|
-
<div class='btns'>
|
|
341
|
-
<% item.shortcuts.forEach((btn) => { %>
|
|
342
|
-
<% if (btn.btn) { %>
|
|
343
|
-
<button data-action="<%=btn.action ? JSON.stringify(btn.action) : ''%>" class='btn menu-btn'><%-btn.btn%></button>
|
|
344
|
-
<% } %>
|
|
345
|
-
<% }) %>
|
|
346
|
-
</div>
|
|
347
|
-
<% } %>
|
|
348
|
-
</div>
|
|
349
|
-
<div class='spinner'>
|
|
350
|
-
<i class="fa-solid fa-chevron-right"></i>
|
|
351
|
-
<!--
|
|
352
|
-
<i class="fa-solid fa-circle-notch fa-spin"></i>
|
|
353
|
-
-->
|
|
354
|
-
</div>
|
|
355
|
-
</h3>
|
|
356
|
-
</a>
|
|
357
|
-
<% }) %>
|
|
358
|
-
</div>
|
|
359
|
-
<% } %>
|
|
360
|
-
<% if (notRunning.length > 0) { %>
|
|
361
|
-
<div class='not-running-apps'>
|
|
362
|
-
<div class='header-label'>Not Running</div>
|
|
363
|
-
<% notRunning.forEach((item) => { %>
|
|
364
|
-
<a href="<%=item.browser_url%>" data-description="<%=item.description%>" data-index="<%=item.index%>" data-name="<%=item.name%>" data-uri="<%=item.uri%>" class='line align-top'>
|
|
365
|
-
<h3>
|
|
366
|
-
<% if (item.icon) { %>
|
|
367
|
-
<img src="<%=item.icon%>">
|
|
368
|
-
<% } else { %>
|
|
369
|
-
<!--
|
|
370
|
-
<div class='avatar'>
|
|
371
|
-
<i class="fa-regular fa-circle-dot"></i>
|
|
372
|
-
</div>
|
|
373
|
-
-->
|
|
374
|
-
<% if (theme === 'dark') { %>
|
|
375
|
-
<img src="/pinokio-white.png">
|
|
376
|
-
<% } else { %>
|
|
377
|
-
<img src="/pinokio-black.png">
|
|
378
|
-
<% } %>
|
|
379
|
-
<% } %>
|
|
380
|
-
<div class='col'>
|
|
381
|
-
<div class='uri'><i class="fa-regular fa-folder"></i><%=item.url%></div>
|
|
382
|
-
<div class='title'><%=item.name%></div>
|
|
383
|
-
<div class='description'><%=item.description%></div>
|
|
384
|
-
<button class='btn browse' data-src="<%=item.browser_url%>/dev">
|
|
385
|
-
<i class='fa-regular fa-folder-open'></i>
|
|
386
|
-
</button>
|
|
387
|
-
<button class='btn del' data-src="<%=item.url%>">
|
|
388
|
-
<i class="fa-solid fa-trash-can"></i>
|
|
389
|
-
</button>
|
|
390
|
-
<% if (item.shortcuts && item.shortcuts.length > 0) { %>
|
|
391
|
-
<div class='btns'>
|
|
392
|
-
<% item.shortcuts.forEach((btn) => { %>
|
|
393
|
-
<% if (btn.btn) { %>
|
|
394
|
-
<button data-action="<%=btn.action ? JSON.stringify(btn.action) : ''%>" class='btn menu-btn'><%-btn.btn%></button>
|
|
395
|
-
<% } %>
|
|
396
|
-
<% }) %>
|
|
397
|
-
</div>
|
|
398
|
-
<% } %>
|
|
399
|
-
</div>
|
|
400
|
-
<div class='spinner'>
|
|
401
|
-
<i class="fa-solid fa-chevron-right"></i>
|
|
402
|
-
</div>
|
|
403
|
-
</h3>
|
|
404
|
-
</a>
|
|
405
|
-
<% }) %>
|
|
406
|
-
</div>
|
|
407
|
-
<% } %>
|
|
408
|
-
<% if (running.length === 0 && notRunning.length === 0) { %>
|
|
409
|
-
<div class='placeholder'>
|
|
410
|
-
<h1>Welcome.</h1>
|
|
411
|
-
<br>
|
|
412
|
-
<div>Get started by installing some Pinokio scripts.</div>
|
|
413
|
-
<a href="/?mode=explore" class='btn'><i class="fa-solid fa-globe"></i> Visit Discover Page</a>
|
|
414
|
-
</div>
|
|
415
|
-
<% } %>
|
|
416
|
-
<% } else { %>
|
|
417
|
-
<% items.forEach((item, index) => { %>
|
|
418
|
-
<a data-description="<%=item.description%>" data-index="<%=index%>" data-name="<%=item.name%>" data-uri="<%=item.uri%>" class='line thick' href="<%=item.url%>">
|
|
419
|
-
<h3>
|
|
420
|
-
<% if (item.icon) { %>
|
|
421
|
-
<i class="<%=item.icon%>"></i>
|
|
422
|
-
<% } else { %>
|
|
423
|
-
<i class="fa-regular fa-folder"></i>
|
|
424
|
-
<% } %>
|
|
425
|
-
<%=item.name%>
|
|
426
|
-
</h3>
|
|
427
|
-
<div class='description'><%=item.description%></div>
|
|
428
|
-
</a>
|
|
429
|
-
<% }) %>
|
|
430
|
-
<% } %>
|
|
217
|
+
<%=item.name%>
|
|
218
|
+
</h3>
|
|
219
|
+
<div class='description'><%=item.description%></div>
|
|
220
|
+
</a>
|
|
221
|
+
<% }) %>
|
|
431
222
|
<% if (readme) { %>
|
|
432
223
|
<div class='readme markdown-body'>
|
|
433
224
|
<div class='content'><%-readme%></div>
|
|
434
225
|
</div>
|
|
435
226
|
<% } %>
|
|
436
|
-
<% if (display.includes("onboarding")) { %>
|
|
437
|
-
<!--
|
|
438
|
-
<div class='container'>
|
|
439
|
-
<div class='content'>
|
|
440
|
-
<h2>Quickstart</h2>
|
|
441
|
-
<div>Install llama</div>
|
|
442
|
-
<br>
|
|
443
|
-
<button class='btn' id='llama'>Install</button>
|
|
444
|
-
</div>
|
|
445
|
-
</div>
|
|
446
|
-
-->
|
|
447
|
-
<% } %>
|
|
448
227
|
</div>
|
|
449
228
|
</main>
|
|
450
229
|
<script>
|
package/server/views/form.ejs
CHANGED
|
@@ -159,8 +159,51 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
159
159
|
<a class='path' href="<%=path.path%>"><%-path.name%></a>
|
|
160
160
|
<% } %>
|
|
161
161
|
<% }) %>
|
|
162
|
+
<button class='btn2' id='screenshot' data-tippy-content="take a screenshot"><i class="fa-solid fa-camera"></i></button>
|
|
162
163
|
<div class='flexible'></div>
|
|
163
|
-
<
|
|
164
|
+
<a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
|
|
165
|
+
<div><i class="fa-solid fa-table-columns"></i></div>
|
|
166
|
+
</a>
|
|
167
|
+
<a class='btn2' href="/rows" data-tippy-content="split into 2 rows">
|
|
168
|
+
<div><i class="fa-solid fa-table-columns fa-rotate-270"></i></div>
|
|
169
|
+
</a>
|
|
170
|
+
<div class="dropdown btn2">
|
|
171
|
+
<button class='btn2' id='window-management'>
|
|
172
|
+
<div><i class="fa-solid fa-plus"></i></div>
|
|
173
|
+
</button>
|
|
174
|
+
<div class="dropdown-content" id="dropdown-content">
|
|
175
|
+
<button class='btn2' id='clone-win' data-tippy-content="clone this window">
|
|
176
|
+
<div><i class="fa-solid fa-clone"></i><div>clone this window</div></div>
|
|
177
|
+
</button>
|
|
178
|
+
<button id='new-window' data-tippy-content="open a new window" title='open a new window' class='btn2' data-agent="<%=agent%>">
|
|
179
|
+
<div><i class="fa-solid fa-plus"></i><div>new window</div></div>
|
|
180
|
+
</button>
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
<!--
|
|
184
|
+
<div class="dropdown btn2">
|
|
185
|
+
<button class='btn2' id='window-management'>
|
|
186
|
+
<div><i class="fa-regular fa-window-restore"></i></div>
|
|
187
|
+
</button>
|
|
188
|
+
<div class="dropdown-content" id="dropdown-content">
|
|
189
|
+
<button class='btn2' id='clone-win' data-tippy-content="clone this window">
|
|
190
|
+
<div><i class="fa-solid fa-clone"></i><div>clone this window</div></div>
|
|
191
|
+
</button>
|
|
192
|
+
<a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
|
|
193
|
+
<div><i class="fa-solid fa-table-columns"></i><div>split columns</div></div>
|
|
194
|
+
</a>
|
|
195
|
+
<a class='btn2' href="/rows" data-tippy-content="split into 2 rows">
|
|
196
|
+
<div><i class="fa-solid fa-table-columns fa-rotate-270"></i><div>split rows</div></div>
|
|
197
|
+
</a>
|
|
198
|
+
<button id='new-window' data-tippy-content="open a new window" title='open a new window' class='btn2' data-agent="<%=agent%>">
|
|
199
|
+
<div><i class="fa-solid fa-plus"></i><div>new window</div></div>
|
|
200
|
+
</button>
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
-->
|
|
204
|
+
<button class='btn2 hidden' id='close-window' data-tippy-content='close this section'>
|
|
205
|
+
<div><i class="fa-solid fa-xmark"></i></div>
|
|
206
|
+
</button>
|
|
164
207
|
</h1>
|
|
165
208
|
<a class='gitremote' data-filepath="<%=filepath%>"><%=filepath%></a>
|
|
166
209
|
<div class='runner'>
|
package/server/views/frame.ejs
CHANGED
|
@@ -55,8 +55,46 @@ main iframe {
|
|
|
55
55
|
<a class='path' href="<%=path.path%>"><%-path.name%></a>
|
|
56
56
|
<% } %>
|
|
57
57
|
<% }) %>
|
|
58
|
+
<button class='btn2' id='screenshot' data-tippy-content="take a screenshot"><i class="fa-solid fa-camera"></i></button>
|
|
58
59
|
<div class='flexible'></div>
|
|
59
|
-
<
|
|
60
|
+
<a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
|
|
61
|
+
<div><i class="fa-solid fa-table-columns"></i></div>
|
|
62
|
+
</a>
|
|
63
|
+
<a class='btn2' href="/rows" data-tippy-content="split into 2 rows">
|
|
64
|
+
<div><i class="fa-solid fa-table-columns fa-rotate-270"></i></div>
|
|
65
|
+
</a>
|
|
66
|
+
<div class="dropdown-content" id="dropdown-content">
|
|
67
|
+
<button class='btn2' id='clone-win' data-tippy-content="clone this window">
|
|
68
|
+
<div><i class="fa-solid fa-clone"></i><div>clone this window</div></div>
|
|
69
|
+
</button>
|
|
70
|
+
<button id='new-window' data-tippy-content="open a new window" title='open a new window' class='btn2' data-agent="<%=agent%>">
|
|
71
|
+
<div><i class="fa-solid fa-plus"></i><div>new window</div></div>
|
|
72
|
+
</button>
|
|
73
|
+
</div>
|
|
74
|
+
<!--
|
|
75
|
+
<div class="dropdown btn2">
|
|
76
|
+
<button class='btn2' id='window-management'>
|
|
77
|
+
<div><i class="fa-regular fa-window-restore"></i></div>
|
|
78
|
+
</button>
|
|
79
|
+
<div class="dropdown-content" id="dropdown-content">
|
|
80
|
+
<button class='btn2' id='clone-win' data-tippy-content="clone this window">
|
|
81
|
+
<div><i class="fa-solid fa-clone"></i><div>clone this window</div></div>
|
|
82
|
+
</button>
|
|
83
|
+
<a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
|
|
84
|
+
<div><i class="fa-solid fa-table-columns"></i><div>split columns</div></div>
|
|
85
|
+
</a>
|
|
86
|
+
<a class='btn2' href="/rows" data-tippy-content="split into 2 rows">
|
|
87
|
+
<div><i class="fa-solid fa-table-columns fa-rotate-270"></i><div>split rows</div></div>
|
|
88
|
+
</a>
|
|
89
|
+
<button id='new-window' data-tippy-content="open a new window" title='open a new window' class='btn2' data-agent="<%=agent%>">
|
|
90
|
+
<div><i class="fa-solid fa-plus"></i><div>new window</div></div>
|
|
91
|
+
</button>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
-->
|
|
95
|
+
<button class='btn2 hidden' id='close-window' data-tippy-content='close this section'>
|
|
96
|
+
<div><i class="fa-solid fa-xmark"></i></div>
|
|
97
|
+
</button>
|
|
60
98
|
</h1>
|
|
61
99
|
<% if (paths.length > 3) { %>
|
|
62
100
|
<a class='gitremote' data-filepath="<%=filepath%>"><%=filepath%></a>
|
package/server/views/github.ejs
CHANGED
|
@@ -224,6 +224,8 @@ ol {
|
|
|
224
224
|
padding-inline-start: 20px;
|
|
225
225
|
}
|
|
226
226
|
</style>
|
|
227
|
+
<script src="/popper.min.js"></script>
|
|
228
|
+
<script src="/tippy-bundle.umd.min.js"></script>
|
|
227
229
|
<script src="/hotkeys.min.js"></script>
|
|
228
230
|
<script src="/sweetalert2.js"></script>
|
|
229
231
|
<script src="/common.js"></script>
|
|
@@ -233,19 +235,54 @@ ol {
|
|
|
233
235
|
<header class='navheader grabbable'>
|
|
234
236
|
<h1>
|
|
235
237
|
<a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
|
|
236
|
-
<button class='btn2' id='back'><div><i class="fa-solid fa-chevron-left"></i></div
|
|
237
|
-
<button class='btn2' id='forward'><div><i class="fa-solid fa-chevron-right"></i></div
|
|
238
|
-
<button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div
|
|
239
|
-
<
|
|
238
|
+
<button class='btn2' id='back' data-tippy-content="back"><div><i class="fa-solid fa-chevron-left"></i></div></button>
|
|
239
|
+
<button class='btn2' id='forward' data-tippy-content="forward"><div><i class="fa-solid fa-chevron-right"></i></div></button>
|
|
240
|
+
<button class='btn2' id='refresh-page' data-tippy-content="refresh"><div><i class="fa-solid fa-rotate-right"></i></div></button>
|
|
241
|
+
<button class='btn2' id='screenshot' data-tippy-content="take a screenshot"><i class="fa-solid fa-camera"></i></button>
|
|
240
242
|
<div class='flexible'></div>
|
|
241
|
-
<
|
|
242
|
-
<
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
<
|
|
246
|
-
|
|
243
|
+
<a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
|
|
244
|
+
<div><i class="fa-solid fa-table-columns"></i></div>
|
|
245
|
+
</a>
|
|
246
|
+
<a class='btn2' href="/rows" data-tippy-content="split into 2 rows">
|
|
247
|
+
<div><i class="fa-solid fa-table-columns fa-rotate-270"></i></div>
|
|
248
|
+
</a>
|
|
249
|
+
<div class="dropdown btn2">
|
|
250
|
+
<button class='btn2' id='window-management'>
|
|
251
|
+
<div><i class="fa-solid fa-plus"></i></div>
|
|
252
|
+
</button>
|
|
253
|
+
<div class="dropdown-content" id="dropdown-content">
|
|
254
|
+
<button class='btn2' id='clone-win' data-tippy-content="clone this window">
|
|
255
|
+
<div><i class="fa-solid fa-clone"></i><div>clone this window</div></div>
|
|
256
|
+
</button>
|
|
257
|
+
<button id='new-window' data-tippy-content="open a new window" title='open a new window' class='btn2' data-agent="<%=agent%>">
|
|
258
|
+
<div><i class="fa-solid fa-plus"></i><div>new window</div></div>
|
|
259
|
+
</button>
|
|
260
|
+
</div>
|
|
247
261
|
</div>
|
|
248
|
-
|
|
262
|
+
<!--
|
|
263
|
+
<div class="dropdown btn2">
|
|
264
|
+
<button class='btn2' id='window-management'>
|
|
265
|
+
<div><i class="fa-regular fa-window-restore"></i></div>
|
|
266
|
+
</button>
|
|
267
|
+
<div class="dropdown-content" id="dropdown-content">
|
|
268
|
+
<button class='btn2' id='clone-win' data-tippy-content="clone this window">
|
|
269
|
+
<div><i class="fa-solid fa-clone"></i><div>clone this window</div></div>
|
|
270
|
+
</button>
|
|
271
|
+
<a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
|
|
272
|
+
<div><i class="fa-solid fa-table-columns"></i><div>split columns</div></div>
|
|
273
|
+
</a>
|
|
274
|
+
<a class='btn2' href="/rows" data-tippy-content="split into 2 rows">
|
|
275
|
+
<div><i class="fa-solid fa-table-columns fa-rotate-270"></i><div>split rows</div></div>
|
|
276
|
+
</a>
|
|
277
|
+
<button id='new-window' data-tippy-content="open a new window" title='open a new window' class='btn2' data-agent="<%=agent%>">
|
|
278
|
+
<div><i class="fa-solid fa-plus"></i><div>new window</div></div>
|
|
279
|
+
</button>
|
|
280
|
+
</div>
|
|
281
|
+
</div>
|
|
282
|
+
-->
|
|
283
|
+
<button class='btn2 hidden' id='close-window' data-tippy-content='close this section'>
|
|
284
|
+
<div><i class="fa-solid fa-xmark"></i></div>
|
|
285
|
+
</button>
|
|
249
286
|
</h1>
|
|
250
287
|
</header>
|
|
251
288
|
<main>
|
package/server/views/help.ejs
CHANGED
|
@@ -235,6 +235,8 @@ body.dark .item .tile .badge {
|
|
|
235
235
|
padding: 10px 0;
|
|
236
236
|
}
|
|
237
237
|
</style>
|
|
238
|
+
<script src="/popper.min.js"></script>
|
|
239
|
+
<script src="/tippy-bundle.umd.min.js"></script>
|
|
238
240
|
<script src="/hotkeys.min.js"></script>
|
|
239
241
|
<script src="/noty.js"></script>
|
|
240
242
|
<script src="/notyq.js"></script>
|
|
@@ -254,15 +256,54 @@ body.dark .item .tile .badge {
|
|
|
254
256
|
<header class='navheader grabbable'>
|
|
255
257
|
<h1>
|
|
256
258
|
<a class='home' href="/"><img class='icon' src="/pinokio-black.png"></a>
|
|
257
|
-
<button class='btn2' id='back'><div><i class="fa-solid fa-chevron-left"></i></div
|
|
258
|
-
<button class='btn2' id='forward'><div><i class="fa-solid fa-chevron-right"></i></div
|
|
259
|
-
<button class='btn2' id='refresh-page'><div><i class="fa-solid fa-rotate-right"></i></div
|
|
259
|
+
<button class='btn2' id='back' data-tippy-content="back"><div><i class="fa-solid fa-chevron-left"></i></div></button>
|
|
260
|
+
<button class='btn2' id='forward' data-tippy-content="forward"><div><i class="fa-solid fa-chevron-right"></i></div></button>
|
|
261
|
+
<button class='btn2' id='refresh-page' data-tippy-content="refresh"><div><i class="fa-solid fa-rotate-right"></i></div></button>
|
|
262
|
+
<button class='btn2' id='screenshot' data-tippy-content="take a screenshot"><i class="fa-solid fa-camera"></i></button>
|
|
260
263
|
<div class='flexible'></div>
|
|
261
|
-
<
|
|
262
|
-
<
|
|
263
|
-
|
|
264
|
-
|
|
264
|
+
<a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
|
|
265
|
+
<div><i class="fa-solid fa-table-columns"></i></div>
|
|
266
|
+
</a>
|
|
267
|
+
<a class='btn2' href="/rows" data-tippy-content="split into 2 rows">
|
|
268
|
+
<div><i class="fa-solid fa-table-columns fa-rotate-270"></i></div>
|
|
269
|
+
</a>
|
|
270
|
+
<div class="dropdown btn2">
|
|
271
|
+
<button class='btn2' id='window-management'>
|
|
272
|
+
<div><i class="fa-solid fa-plus"></i></div>
|
|
273
|
+
</button>
|
|
274
|
+
<div class="dropdown-content" id="dropdown-content">
|
|
275
|
+
<button class='btn2' id='clone-win' data-tippy-content="clone this window">
|
|
276
|
+
<div><i class="fa-solid fa-clone"></i><div>clone this window</div></div>
|
|
277
|
+
</button>
|
|
278
|
+
<button id='new-window' data-tippy-content="open a new window" title='open a new window' class='btn2' data-agent="<%=agent%>">
|
|
279
|
+
<div><i class="fa-solid fa-plus"></i><div>new window</div></div>
|
|
280
|
+
</button>
|
|
281
|
+
</div>
|
|
282
|
+
</div>
|
|
283
|
+
<!--
|
|
284
|
+
<div class="dropdown btn2">
|
|
285
|
+
<button class='btn2' id='window-management'>
|
|
286
|
+
<div><i class="fa-regular fa-window-restore"></i></div>
|
|
287
|
+
</button>
|
|
288
|
+
<div class="dropdown-content" id="dropdown-content">
|
|
289
|
+
<button class='btn2' id='clone-win' data-tippy-content="clone this window">
|
|
290
|
+
<div><i class="fa-solid fa-clone"></i><div>clone this window</div></div>
|
|
291
|
+
</button>
|
|
292
|
+
<a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
|
|
293
|
+
<div><i class="fa-solid fa-table-columns"></i><div>split columns</div></div>
|
|
294
|
+
</a>
|
|
295
|
+
<a class='btn2' href="/rows" data-tippy-content="split into 2 rows">
|
|
296
|
+
<div><i class="fa-solid fa-table-columns fa-rotate-270"></i><div>split rows</div></div>
|
|
297
|
+
</a>
|
|
298
|
+
<button id='new-window' data-tippy-content="open a new window" title='open a new window' class='btn2' data-agent="<%=agent%>">
|
|
299
|
+
<div><i class="fa-solid fa-plus"></i><div>new window</div></div>
|
|
300
|
+
</button>
|
|
301
|
+
</div>
|
|
265
302
|
</div>
|
|
303
|
+
-->
|
|
304
|
+
<button class='btn2 hidden' id='close-window' data-tippy-content='close this section'>
|
|
305
|
+
<div><i class="fa-solid fa-xmark"></i></div>
|
|
306
|
+
</button>
|
|
266
307
|
</h1>
|
|
267
308
|
</header>
|
|
268
309
|
<main>
|