pinokiod 7.5.44 → 7.5.45
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 +1 -1
- package/server/index.js +403 -24
- package/server/public/style.css +0 -264
- package/server/public/urldropdown.css +7 -0
- package/server/views/app.ejs +2 -0
- package/server/views/app_search_test.ejs +2 -0
- package/server/views/connect/x.ejs +2 -0
- package/server/views/container.ejs +2 -0
- package/server/views/create.ejs +3 -0
- package/server/views/editor.ejs +3 -0
- package/server/views/env_editor.ejs +2 -0
- package/server/views/explore.ejs +2 -0
- package/server/views/general_editor.ejs +3 -0
- package/server/views/help.ejs +2 -0
- package/server/views/index.ejs +539 -2
- package/server/views/init/index.ejs +2 -0
- package/server/views/keys.ejs +2 -0
- package/server/views/mini.ejs +2 -0
- package/server/views/net.ejs +2 -0
- package/server/views/network.ejs +887 -94
- package/server/views/partials/app_navheader.ejs +2 -0
- package/server/views/partials/home_action_modal.ejs +22 -0
- package/server/views/partials/home_server_popover.ejs +21 -0
- package/server/views/partials/home_server_popover_assets.ejs +1262 -0
- package/server/views/partials/main_sidebar.ejs +1 -221
- package/server/views/pro.ejs +7 -0
- package/server/views/prototype/index.ejs +2 -0
- package/server/views/review.ejs +2 -0
- package/server/views/screenshots.ejs +2 -0
- package/server/views/settings.ejs +2 -0
- package/server/views/shell.ejs +7 -0
- package/server/views/task.ejs +2 -0
- package/server/views/terminal.ejs +2 -0
- package/server/views/terminals.ejs +2 -0
- package/test/launch-settings-ui.test.js +355 -0
- package/test/main-sidebar.test.js +26 -16
|
@@ -1,35 +1,5 @@
|
|
|
1
1
|
<%
|
|
2
2
|
const sidebarSelected = (typeof selected !== "undefined" && selected) ? String(selected) : "";
|
|
3
|
-
const sidebarList = (typeof list !== "undefined" && Array.isArray(list)) ? list : [];
|
|
4
|
-
const sidebarCurrentHost = (typeof current_host !== "undefined" && current_host) ? current_host : "";
|
|
5
|
-
const sidebarSelectedNetName = (typeof selectedNetName !== "undefined" && selectedNetName) ? String(selectedNetName) : "";
|
|
6
|
-
const sidebarShowPeerAccess = typeof showPeerAccess === "boolean" ? showPeerAccess : true;
|
|
7
|
-
const sidebarPeerSourcePoints = Array.isArray(typeof peer_access_points !== "undefined" ? peer_access_points : null) ? peer_access_points : [];
|
|
8
|
-
const sidebarPeerAccessPoints = sidebarPeerSourcePoints
|
|
9
|
-
.filter((point) => point && point.url)
|
|
10
|
-
.map((point) => {
|
|
11
|
-
const url = String(point.url);
|
|
12
|
-
return {
|
|
13
|
-
url,
|
|
14
|
-
qr: point.qr ? String(point.qr) : `/qr?data=${encodeURIComponent(url)}&s=4&m=0`,
|
|
15
|
-
scope_label: point.scope_label ? String(point.scope_label) : "",
|
|
16
|
-
};
|
|
17
|
-
});
|
|
18
|
-
const sidebarPeerAccessRouterInstalled = typeof peer_access_router_installed === "boolean" ? peer_access_router_installed : true;
|
|
19
|
-
if (
|
|
20
|
-
sidebarPeerAccessPoints.length === 0 &&
|
|
21
|
-
typeof peer_qr !== "undefined" && peer_qr &&
|
|
22
|
-
typeof peer_url !== "undefined" && peer_url
|
|
23
|
-
) {
|
|
24
|
-
sidebarPeerAccessPoints.push({
|
|
25
|
-
url: String(peer_url),
|
|
26
|
-
qr: String(peer_qr),
|
|
27
|
-
scope_label: "",
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
const sidebarShowPhoneAccess = sidebarShowPeerAccess && sidebarPeerAccessPoints.length > 0;
|
|
31
|
-
const sidebarPhoneAccessNeedsSetup = sidebarShowPhoneAccess && !sidebarPeerAccessRouterInstalled;
|
|
32
|
-
const brands = { win32: "windows", darwin: "apple", linux: "Linux" };
|
|
33
3
|
%>
|
|
34
4
|
<button type="button" class="main-sidebar-mobile-toggle" data-main-sidebar-toggle aria-label="Open navigation" aria-expanded="false">
|
|
35
5
|
<i class="fa-solid fa-bars" aria-hidden="true"></i>
|
|
@@ -53,23 +23,6 @@
|
|
|
53
23
|
</button>
|
|
54
24
|
</div>
|
|
55
25
|
|
|
56
|
-
<div class='main-sidebar-section' aria-label="Computer">
|
|
57
|
-
<div class="main-sidebar-section-title">Computer</div>
|
|
58
|
-
<a href="/home" class="tab <%= sidebarSelected === 'home' ? 'selected' : '' %>"><i class='fas fa-laptop-code'></i><div class='caption'>This machine</div></a>
|
|
59
|
-
<a href="/network" class="tab <%= sidebarSelected === 'network' ? 'selected' : '' %>"><i class="fa-solid fa-wifi"></i><div class='caption'>Local network</div></a>
|
|
60
|
-
<% if (sidebarList.length > 0) { %>
|
|
61
|
-
<% sidebarList.forEach(({ host, name, platform }) => { %>
|
|
62
|
-
<% const selectedNet = sidebarSelectedNetName && String(name || "") === sidebarSelectedNetName; %>
|
|
63
|
-
<a href="/net/<%=name%>" class="submenu tab <%= selectedNet ? 'selected' : '' %>"><i class="fa-brands fa-<%=brands[platform]%>"></i><div class='caption'><%=name%> (<%=sidebarCurrentHost === host ? 'this machine' : host%>)</div></a>
|
|
64
|
-
<% }) %>
|
|
65
|
-
<% } %>
|
|
66
|
-
<% if (sidebarShowPhoneAccess) { %>
|
|
67
|
-
<button type="button" class="tab main-sidebar-phone-trigger" data-peer-access-open aria-haspopup="dialog" aria-controls="main-sidebar-peer-dialog" aria-expanded="false">
|
|
68
|
-
<i class="fa-solid fa-mobile-screen-button"></i><div class='caption'>Phone</div>
|
|
69
|
-
</button>
|
|
70
|
-
<% } %>
|
|
71
|
-
</div>
|
|
72
|
-
|
|
73
26
|
<div class='main-sidebar-section' aria-label="Manage">
|
|
74
27
|
<div class="main-sidebar-section-title">Manage</div>
|
|
75
28
|
<a class="tab <%= sidebarSelected === 'checkpoints' ? 'selected' : '' %>" href="/checkpoints"><i class="fa-solid fa-clock-rotate-left"></i><div class='caption'>Checkpoints</div></a>
|
|
@@ -82,74 +35,13 @@
|
|
|
82
35
|
|
|
83
36
|
<div class='main-sidebar-section' aria-label="Configure">
|
|
84
37
|
<div class="main-sidebar-section-title">Configure</div>
|
|
38
|
+
<a href="/network" class="tab <%= sidebarSelected === 'network' ? 'selected' : '' %>"><i class="fa-solid fa-wifi"></i><div class='caption'>Home Server</div></a>
|
|
85
39
|
<a class="tab <%= sidebarSelected === 'autolaunch' ? 'selected' : '' %>" href="/autolaunch"><i class="fa-solid fa-power-off"></i><div class='caption'>Autolaunch</div></a>
|
|
86
40
|
<a href="/connect" class="tab <%= sidebarSelected === 'connect' ? 'selected' : '' %>"><i class="fa-solid fa-plug"></i><div class='caption'>Login</div></a>
|
|
87
41
|
<a class="tab <%= sidebarSelected === 'settings' ? 'selected' : '' %>" href="/home?mode=settings"><i class="fa-solid fa-gear"></i><div class='caption'>Settings</div></a>
|
|
88
42
|
</div>
|
|
89
43
|
</nav>
|
|
90
44
|
</aside>
|
|
91
|
-
<% if (sidebarShowPhoneAccess) { %>
|
|
92
|
-
<div class="main-sidebar-peer-dialog" data-peer-access-modal hidden>
|
|
93
|
-
<button type="button" class="main-sidebar-peer-dialog-backdrop" data-peer-access-close aria-label="Close phone popup" tabindex="-1"></button>
|
|
94
|
-
<section class="main-sidebar-peer-dialog-surface" id="main-sidebar-peer-dialog" role="dialog" aria-modal="true" aria-labelledby="main-sidebar-peer-dialog-title">
|
|
95
|
-
<div class="main-sidebar-peer-dialog-header">
|
|
96
|
-
<div class="main-sidebar-peer-dialog-icon" aria-hidden="true">
|
|
97
|
-
<i class="fa-solid fa-mobile-screen-button"></i>
|
|
98
|
-
</div>
|
|
99
|
-
<div class="main-sidebar-peer-dialog-heading">
|
|
100
|
-
<div class="main-sidebar-peer-dialog-title" id="main-sidebar-peer-dialog-title"><%= sidebarPhoneAccessNeedsSetup ? 'Set up local access' : 'Open from another device' %></div>
|
|
101
|
-
<div class="main-sidebar-peer-dialog-subtitle"><%= sidebarPhoneAccessNeedsSetup ? 'Same network only' : 'Same Wi-Fi/LAN only' %></div>
|
|
102
|
-
</div>
|
|
103
|
-
<button type="button" class="main-sidebar-peer-dialog-close" data-peer-access-close aria-label="Close phone popup">
|
|
104
|
-
<i class="fa-solid fa-xmark" aria-hidden="true"></i>
|
|
105
|
-
</button>
|
|
106
|
-
</div>
|
|
107
|
-
<% if (!sidebarPhoneAccessNeedsSetup && sidebarPeerAccessPoints.length > 1) { %>
|
|
108
|
-
<div class="main-sidebar-peer-dialog-tabs" role="tablist" aria-label="Phone connection options">
|
|
109
|
-
<% sidebarPeerAccessPoints.forEach((point, index) => { %>
|
|
110
|
-
<% const tabLabel = point.scope_label || `Option ${index + 1}`; %>
|
|
111
|
-
<button type="button" class="main-sidebar-peer-dialog-tab <%= index === 0 ? 'is-active' : '' %>" data-peer-access-tab data-peer-access-index="<%= index %>" role="tab" aria-selected="<%= index === 0 ? 'true' : 'false' %>" aria-controls="main-sidebar-peer-panel-<%= index %>" tabindex="<%= index === 0 ? '0' : '-1' %>"><%= tabLabel %></button>
|
|
112
|
-
<% }) %>
|
|
113
|
-
</div>
|
|
114
|
-
<% } %>
|
|
115
|
-
<div class="main-sidebar-peer-dialog-body">
|
|
116
|
-
<% if (sidebarPhoneAccessNeedsSetup) { %>
|
|
117
|
-
<div class="main-sidebar-peer-setup">
|
|
118
|
-
<p class="main-sidebar-peer-setup-copy">To open Pinokio from another device on this network, set up local access first.</p>
|
|
119
|
-
<div class="main-sidebar-peer-setup-actions">
|
|
120
|
-
<a class="main-sidebar-peer-setup-primary" href="/setup/network" data-peer-access-setup>
|
|
121
|
-
Set up local access
|
|
122
|
-
</a>
|
|
123
|
-
<button type="button" class="main-sidebar-peer-setup-secondary" data-peer-access-close>
|
|
124
|
-
Cancel
|
|
125
|
-
</button>
|
|
126
|
-
</div>
|
|
127
|
-
</div>
|
|
128
|
-
<% } else { %>
|
|
129
|
-
<% sidebarPeerAccessPoints.forEach((point, index) => { %>
|
|
130
|
-
<div class="main-sidebar-peer-dialog-panel <%= index === 0 ? 'is-active' : '' %>" id="main-sidebar-peer-panel-<%= index %>" data-peer-access-panel data-peer-access-index="<%= index %>" role="tabpanel" <%= index === 0 ? '' : 'hidden' %>>
|
|
131
|
-
<a class="main-sidebar-peer-qr-link" href="<%= point.url %>" target="_blank" rel="noreferrer">
|
|
132
|
-
<img class="main-sidebar-peer-qr-image" src="<%= point.qr %>" alt="QR code for <%= point.url %>"/>
|
|
133
|
-
</a>
|
|
134
|
-
<div class="main-sidebar-peer-caption">
|
|
135
|
-
Scan with a device on the same local network
|
|
136
|
-
</div>
|
|
137
|
-
<div class="main-sidebar-peer-local-note">
|
|
138
|
-
This link is not public and will not work outside this network.
|
|
139
|
-
</div>
|
|
140
|
-
<div class="main-sidebar-peer-url-row">
|
|
141
|
-
<a class="main-sidebar-peer-url" href="<%= point.url %>" target="_blank" rel="noreferrer"><%= point.url %></a>
|
|
142
|
-
<button type="button" class="main-sidebar-peer-copy" data-peer-access-copy data-peer-access-url="<%= point.url %>" aria-label="Copy phone URL" title="Copy URL">
|
|
143
|
-
<i class="fa-regular fa-copy" aria-hidden="true"></i>
|
|
144
|
-
</button>
|
|
145
|
-
</div>
|
|
146
|
-
</div>
|
|
147
|
-
<% }) %>
|
|
148
|
-
<% } %>
|
|
149
|
-
</div>
|
|
150
|
-
</section>
|
|
151
|
-
</div>
|
|
152
|
-
<% } %>
|
|
153
45
|
<script>
|
|
154
46
|
(() => {
|
|
155
47
|
const body = document.body;
|
|
@@ -305,118 +197,6 @@
|
|
|
305
197
|
};
|
|
306
198
|
}
|
|
307
199
|
|
|
308
|
-
if (window.__pinokioPeerAccessModalInit) return;
|
|
309
|
-
window.__pinokioPeerAccessModalInit = true;
|
|
310
|
-
|
|
311
|
-
const peerAccessTrigger = document.querySelector("[data-peer-access-open]");
|
|
312
|
-
const peerAccessModal = document.querySelector("[data-peer-access-modal]");
|
|
313
|
-
if (body && peerAccessTrigger && peerAccessModal) {
|
|
314
|
-
const peerAccessCloseButtons = peerAccessModal.querySelectorAll("[data-peer-access-close]");
|
|
315
|
-
const peerAccessTabs = peerAccessModal.querySelectorAll("[data-peer-access-tab]");
|
|
316
|
-
const peerAccessPanels = peerAccessModal.querySelectorAll("[data-peer-access-panel]");
|
|
317
|
-
const peerAccessCopyButtons = peerAccessModal.querySelectorAll("[data-peer-access-copy]");
|
|
318
|
-
const peerAccessSetupLinks = peerAccessModal.querySelectorAll("[data-peer-access-setup]");
|
|
319
|
-
const peerAccessFocusTarget = peerAccessModal.querySelector(".main-sidebar-peer-dialog-close");
|
|
320
|
-
|
|
321
|
-
const setPeerAccessOpen = (open) => {
|
|
322
|
-
const nextOpen = !!open;
|
|
323
|
-
peerAccessModal.hidden = !nextOpen;
|
|
324
|
-
body.classList.toggle("main-sidebar-peer-dialog-open", nextOpen);
|
|
325
|
-
peerAccessTrigger.setAttribute("aria-expanded", nextOpen ? "true" : "false");
|
|
326
|
-
if (nextOpen) {
|
|
327
|
-
window.requestAnimationFrame(() => {
|
|
328
|
-
if (peerAccessFocusTarget && typeof peerAccessFocusTarget.focus === "function") {
|
|
329
|
-
peerAccessFocusTarget.focus();
|
|
330
|
-
}
|
|
331
|
-
});
|
|
332
|
-
} else if (typeof peerAccessTrigger.focus === "function") {
|
|
333
|
-
peerAccessTrigger.focus();
|
|
334
|
-
}
|
|
335
|
-
};
|
|
336
|
-
|
|
337
|
-
const setPeerAccessPanel = (index) => {
|
|
338
|
-
const activeIndex = String(index);
|
|
339
|
-
peerAccessTabs.forEach((tab) => {
|
|
340
|
-
const active = tab.dataset.peerAccessIndex === activeIndex;
|
|
341
|
-
tab.classList.toggle("is-active", active);
|
|
342
|
-
tab.setAttribute("aria-selected", active ? "true" : "false");
|
|
343
|
-
tab.setAttribute("tabindex", active ? "0" : "-1");
|
|
344
|
-
});
|
|
345
|
-
peerAccessPanels.forEach((panel) => {
|
|
346
|
-
const active = panel.dataset.peerAccessIndex === activeIndex;
|
|
347
|
-
panel.hidden = !active;
|
|
348
|
-
panel.classList.toggle("is-active", active);
|
|
349
|
-
});
|
|
350
|
-
};
|
|
351
|
-
|
|
352
|
-
const copyText = async (text) => {
|
|
353
|
-
if (navigator.clipboard && typeof navigator.clipboard.writeText === "function") {
|
|
354
|
-
await navigator.clipboard.writeText(text);
|
|
355
|
-
return;
|
|
356
|
-
}
|
|
357
|
-
const textarea = document.createElement("textarea");
|
|
358
|
-
textarea.value = text;
|
|
359
|
-
textarea.setAttribute("readonly", "");
|
|
360
|
-
textarea.style.position = "fixed";
|
|
361
|
-
textarea.style.opacity = "0";
|
|
362
|
-
document.body.appendChild(textarea);
|
|
363
|
-
textarea.select();
|
|
364
|
-
document.execCommand("copy");
|
|
365
|
-
textarea.remove();
|
|
366
|
-
};
|
|
367
|
-
|
|
368
|
-
peerAccessTrigger.addEventListener("click", () => {
|
|
369
|
-
setPeerAccessOpen(peerAccessModal.hidden);
|
|
370
|
-
});
|
|
371
|
-
|
|
372
|
-
peerAccessCloseButtons.forEach((button) => {
|
|
373
|
-
button.addEventListener("click", () => setPeerAccessOpen(false));
|
|
374
|
-
});
|
|
375
|
-
|
|
376
|
-
peerAccessTabs.forEach((tab) => {
|
|
377
|
-
tab.addEventListener("click", () => setPeerAccessPanel(tab.dataset.peerAccessIndex || "0"));
|
|
378
|
-
});
|
|
379
|
-
|
|
380
|
-
peerAccessSetupLinks.forEach((link) => {
|
|
381
|
-
link.addEventListener("click", (event) => {
|
|
382
|
-
event.preventDefault();
|
|
383
|
-
const currentPath = `${window.location.pathname}${window.location.search}`;
|
|
384
|
-
window.location.href = `/setup/network?callback=${encodeURIComponent(currentPath || "/")}`;
|
|
385
|
-
});
|
|
386
|
-
});
|
|
387
|
-
|
|
388
|
-
peerAccessCopyButtons.forEach((button) => {
|
|
389
|
-
button.addEventListener("click", async () => {
|
|
390
|
-
const url = button.dataset.peerAccessUrl || "";
|
|
391
|
-
if (!url) return;
|
|
392
|
-
try {
|
|
393
|
-
await copyText(url);
|
|
394
|
-
const icon = button.querySelector("i");
|
|
395
|
-
button.setAttribute("aria-label", "Copied phone URL");
|
|
396
|
-
button.setAttribute("title", "Copied");
|
|
397
|
-
if (icon) {
|
|
398
|
-
icon.classList.remove("fa-regular", "fa-copy");
|
|
399
|
-
icon.classList.add("fa-solid", "fa-check");
|
|
400
|
-
}
|
|
401
|
-
window.setTimeout(() => {
|
|
402
|
-
button.setAttribute("aria-label", "Copy phone URL");
|
|
403
|
-
button.setAttribute("title", "Copy URL");
|
|
404
|
-
if (icon) {
|
|
405
|
-
icon.classList.remove("fa-solid", "fa-check");
|
|
406
|
-
icon.classList.add("fa-regular", "fa-copy");
|
|
407
|
-
}
|
|
408
|
-
}, 1200);
|
|
409
|
-
} catch (_) {}
|
|
410
|
-
});
|
|
411
|
-
});
|
|
412
|
-
|
|
413
|
-
document.addEventListener("keydown", (event) => {
|
|
414
|
-
if (event.key === "Escape" && !peerAccessModal.hidden) {
|
|
415
|
-
setPeerAccessOpen(false);
|
|
416
|
-
}
|
|
417
|
-
});
|
|
418
|
-
}
|
|
419
|
-
|
|
420
200
|
if (window.__pinokioMainSidebarMobileInit) return;
|
|
421
201
|
window.__pinokioMainSidebarMobileInit = true;
|
|
422
202
|
|
package/server/views/pro.ejs
CHANGED
|
@@ -204,8 +204,15 @@ body.dark #status-window b {
|
|
|
204
204
|
</div>
|
|
205
205
|
<div id='status-window'></div>
|
|
206
206
|
<div id='progress-window' class='hidden'><div id='progress-bar'></div></div>
|
|
207
|
+
<% if (target === "_top") { %>
|
|
208
|
+
<div class='flexible'></div>
|
|
209
|
+
<%- include('partials/home_server_popover') %>
|
|
210
|
+
<% } %>
|
|
207
211
|
</h1>
|
|
208
212
|
</header>
|
|
213
|
+
<% if (target === "_top") { %>
|
|
214
|
+
<%- include('partials/home_server_popover_assets') %>
|
|
215
|
+
<% } %>
|
|
209
216
|
<div class='terminal-container'>
|
|
210
217
|
<div id='terminal'></div>
|
|
211
218
|
</div>
|
|
@@ -1019,6 +1019,7 @@ body.dark .appcanvas {
|
|
|
1019
1019
|
<button class='btn2' id='screenshot' data-tippy-content="screen capture"><i class="fa-solid fa-camera"></i></button>
|
|
1020
1020
|
<button class='btn2' id='inspector' data-tippy-content="X-ray mode"><i class="fa-solid fa-eye"></i></button>
|
|
1021
1021
|
<div class='flexible'></div>
|
|
1022
|
+
<%- include('../partials/home_server_popover') %>
|
|
1022
1023
|
<a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
|
|
1023
1024
|
<div><i class="fa-solid fa-table-columns"></i></div>
|
|
1024
1025
|
</a>
|
|
@@ -1033,6 +1034,7 @@ body.dark .appcanvas {
|
|
|
1033
1034
|
</button>
|
|
1034
1035
|
</h1>
|
|
1035
1036
|
</header>
|
|
1037
|
+
<%- include('../partials/home_server_popover_assets') %>
|
|
1036
1038
|
<main>
|
|
1037
1039
|
<div class="container">
|
|
1038
1040
|
<h1><img class='logo2' src="/pinokio-black.png"/> Project Setup</h1>
|
package/server/views/review.ejs
CHANGED
|
@@ -956,6 +956,7 @@ body.dark .top-menu .btn2.selected {
|
|
|
956
956
|
<a class="btn2 <%=type === 'files' ? 'selected' : ''%>" href="/p/<%=name%>/files"><div><i class="fa-solid fa-file-lines"></i></div><div class='caption'>Files</div></a>
|
|
957
957
|
<a class="btn2 <%=type === 'review' ? 'selected' : ''%>" href="<%=review_tab%>"><div><i class="fa-regular fa-message"></i></div><div class='caption'>Forum</div></a>
|
|
958
958
|
</div>
|
|
959
|
+
<%- include('partials/home_server_popover') %>
|
|
959
960
|
<a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
|
|
960
961
|
<div><i class="fa-solid fa-table-columns"></i></div>
|
|
961
962
|
</a>
|
|
@@ -970,6 +971,7 @@ body.dark .top-menu .btn2.selected {
|
|
|
970
971
|
</button>
|
|
971
972
|
</h1>
|
|
972
973
|
</header>
|
|
974
|
+
<%- include('partials/home_server_popover_assets') %>
|
|
973
975
|
<div class='appcanvas'>
|
|
974
976
|
<iframe src="<%=redirect_uri%>" allow="fullscreen *;" allowfullscreen></iframe>
|
|
975
977
|
</div>
|
|
@@ -889,6 +889,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
|
889
889
|
<div class='url-dropdown' id='url-dropdown'></div>
|
|
890
890
|
</div>
|
|
891
891
|
</form>
|
|
892
|
+
<%- include('partials/home_server_popover') %>
|
|
892
893
|
<a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
|
|
893
894
|
<div><i class="fa-solid fa-table-columns"></i></div>
|
|
894
895
|
</a>
|
|
@@ -903,6 +904,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
|
903
904
|
</button>
|
|
904
905
|
</h1>
|
|
905
906
|
</header>
|
|
907
|
+
<%- include('partials/home_server_popover_assets') %>
|
|
906
908
|
<main>
|
|
907
909
|
<div class='task-container'>
|
|
908
910
|
<section class='task-shell screenshots-shell'>
|
|
@@ -1034,6 +1034,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
|
1034
1034
|
<div class='url-dropdown' id='url-dropdown'></div>
|
|
1035
1035
|
</div>
|
|
1036
1036
|
</form>
|
|
1037
|
+
<%- include('partials/home_server_popover') %>
|
|
1037
1038
|
<a class='btn2' href="/columns" data-tippy-content="split into 2 columns">
|
|
1038
1039
|
<div><i class="fa-solid fa-table-columns"></i></div>
|
|
1039
1040
|
</a>
|
|
@@ -1048,6 +1049,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
|
1048
1049
|
</button>
|
|
1049
1050
|
</h1>
|
|
1050
1051
|
</header>
|
|
1052
|
+
<%- include('partials/home_server_popover_assets') %>
|
|
1051
1053
|
<main>
|
|
1052
1054
|
<div class='task-container settings-container'>
|
|
1053
1055
|
<section class='task-shell settings-shell'>
|
package/server/views/shell.ejs
CHANGED
|
@@ -1896,8 +1896,15 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
1896
1896
|
</div>
|
|
1897
1897
|
<div id='status-window'></div>
|
|
1898
1898
|
<div id='progress-window' class='hidden'><div id='progress-bar'></div></div>
|
|
1899
|
+
<% if (target === "_top") { %>
|
|
1900
|
+
<div class='flexible'></div>
|
|
1901
|
+
<%- include('partials/home_server_popover') %>
|
|
1902
|
+
<% } %>
|
|
1899
1903
|
</div>
|
|
1900
1904
|
</header>
|
|
1905
|
+
<% if (target === "_top") { %>
|
|
1906
|
+
<%- include('partials/home_server_popover_assets') %>
|
|
1907
|
+
<% } %>
|
|
1901
1908
|
<div class='terminal-container'>
|
|
1902
1909
|
<div id='terminal'></div>
|
|
1903
1910
|
</div>
|
package/server/views/task.ejs
CHANGED
|
@@ -301,6 +301,7 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
301
301
|
<a class='home-button home' href="/home"><i class='fa-solid fa-home'></i></a>
|
|
302
302
|
<% } %>
|
|
303
303
|
<div class='flexible'></div>
|
|
304
|
+
<%- include('partials/home_server_popover') %>
|
|
304
305
|
<div class='nav-btns'>
|
|
305
306
|
<a class='btn' href="<%=editorpath%>"><i class="fa-solid fa-pen-to-square"></i> Edit file</a>
|
|
306
307
|
<button class='btn' id='open-fs' data-filepath="<%=filepath%>"><i class="fa-solid fa-eye"></i> Open in File Explorer</button>
|
|
@@ -310,6 +311,7 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
310
311
|
</div>
|
|
311
312
|
</h1>
|
|
312
313
|
</header>
|
|
314
|
+
<%- include('partials/home_server_popover_assets') %>
|
|
313
315
|
<% } %>
|
|
314
316
|
</main>
|
|
315
317
|
<div id='editor' class='<%=init ? "hidden" : ''%>'><%=str%></div>
|
|
@@ -3412,6 +3412,7 @@ const reloadMemory = async () => {
|
|
|
3412
3412
|
<button class="btn2" id="screenshot" data-tippy-content="screen capture"><i class="fa-solid fa-camera"></i></button>
|
|
3413
3413
|
<button class="btn2" id="inspector" data-tippy-content="X-ray mode"><i class="fa-solid fa-eye"></i></button>
|
|
3414
3414
|
<div class="flexible"></div>
|
|
3415
|
+
<%- include('partials/home_server_popover') %>
|
|
3415
3416
|
<a class="btn2" href="/columns" data-tippy-content="split into 2 columns">
|
|
3416
3417
|
<div><i class="fa-solid fa-table-columns"></i></div>
|
|
3417
3418
|
</a>
|
|
@@ -3426,6 +3427,7 @@ const reloadMemory = async () => {
|
|
|
3426
3427
|
</button>
|
|
3427
3428
|
</h1>
|
|
3428
3429
|
</header>
|
|
3430
|
+
<%- include('partials/home_server_popover_assets') %>
|
|
3429
3431
|
<% } %>
|
|
3430
3432
|
<% if (!install_required) { %>
|
|
3431
3433
|
<header class='navheader2'>
|
|
@@ -4563,6 +4563,7 @@ body.dark .pinokio-git-commit-item {
|
|
|
4563
4563
|
<button class="btn2" id="screenshot" data-tippy-content="screen capture"><i class="fa-solid fa-camera"></i></button>
|
|
4564
4564
|
<button class="btn2" id="inspector" data-tippy-content="X-ray mode"><i class="fa-solid fa-eye"></i></button>
|
|
4565
4565
|
<div class="flexible"></div>
|
|
4566
|
+
<%- include('partials/home_server_popover') %>
|
|
4566
4567
|
<a class="btn2" href="/columns" data-tippy-content="split into 2 columns">
|
|
4567
4568
|
<div><i class="fa-solid fa-table-columns"></i></div>
|
|
4568
4569
|
</a>
|
|
@@ -4577,6 +4578,7 @@ body.dark .pinokio-git-commit-item {
|
|
|
4577
4578
|
</button>
|
|
4578
4579
|
</h1>
|
|
4579
4580
|
</header>
|
|
4581
|
+
<%- include('partials/home_server_popover_assets') %>
|
|
4580
4582
|
<main>
|
|
4581
4583
|
<div class='container terminals-page'>
|
|
4582
4584
|
<form class='search terminals-search-form'>
|