pinokiod 3.9.3 → 3.9.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/kernel/api/index.js +153 -67
- package/kernel/api/rm/index.js +3 -2
- package/kernel/api/set/index.js +4 -2
- package/kernel/bin/caddy.js +0 -2
- package/kernel/bin/index.js +13 -0
- package/kernel/index.js +10 -8
- package/kernel/info.js +3 -0
- package/kernel/plugin.js +34 -0
- package/kernel/router/index.js +1 -1
- package/kernel/router/localhost_variable_router.js +1 -1
- package/kernel/router/peer_variable_router.js +1 -1
- package/kernel/shell.js +14 -0
- package/kernel/util.js +19 -1
- package/package.json +1 -1
- package/server/index.js +296 -98
- package/server/public/electron.css +2 -0
- package/server/public/modalinput.js +7 -2
- package/server/public/opener.js +32 -0
- package/server/public/style.css +33 -2
- package/server/socket.js +7 -3
- package/server/views/app.ejs +188 -72
- package/server/views/env_editor.ejs +1 -0
- package/server/views/file_explorer.ejs +1 -1
- package/server/views/index.ejs +35 -16
- package/server/views/partials/dynamic.ejs +54 -6
- package/server/views/partials/menu.ejs +11 -6
- package/server/views/prototype/index.ejs +366 -31
- package/server/views/prototype/show.ejs +386 -30
- package/server/views/required_env_editor.ejs +1 -0
- package/server/views/settings.ejs +58 -43
- package/server/views/terminal.ejs +6 -0
- package/:w +0 -1247
package/server/views/index.ejs
CHANGED
|
@@ -128,9 +128,12 @@ body.dark .browser-options-row {
|
|
|
128
128
|
border-bottom: 1px solid rgba(255,255,255,0.05);
|
|
129
129
|
}
|
|
130
130
|
*/
|
|
131
|
-
.context-menu-wrapper {
|
|
132
|
-
padding: 2px 0;
|
|
131
|
+
body.dark .context-menu-wrapper {
|
|
133
132
|
background: rgba(0,0,0,0.9);
|
|
133
|
+
color: white;
|
|
134
|
+
}
|
|
135
|
+
.context-menu-wrapper {
|
|
136
|
+
background: rgba(0,0,0,0.06) !important;
|
|
134
137
|
}
|
|
135
138
|
.context-menu {
|
|
136
139
|
/*
|
|
@@ -150,6 +153,10 @@ body.dark .browser-options-row {
|
|
|
150
153
|
width: 80px;
|
|
151
154
|
padding: 6px 10px !important;
|
|
152
155
|
text-align: left;
|
|
156
|
+
color: black;
|
|
157
|
+
}
|
|
158
|
+
body.dark .context-menu .btn {
|
|
159
|
+
color: white;
|
|
153
160
|
}
|
|
154
161
|
.context-menu.collapsed {
|
|
155
162
|
/*
|
|
@@ -157,16 +164,19 @@ body.dark .browser-options-row {
|
|
|
157
164
|
*/
|
|
158
165
|
display: none;
|
|
159
166
|
}
|
|
160
|
-
body.dark .open-menu {
|
|
167
|
+
body.dark .open-menu, body.dark .browse {
|
|
168
|
+
border: none !important;
|
|
161
169
|
background: black !important;
|
|
162
170
|
color: white !important;
|
|
163
171
|
}
|
|
164
|
-
.open-menu {
|
|
172
|
+
.open-menu, .browse {
|
|
165
173
|
width: 80px;
|
|
166
174
|
border-radius: 0 !important;
|
|
167
|
-
background:
|
|
175
|
+
background: rgba(0,0,0,0.06) !important;
|
|
168
176
|
color: black !important;
|
|
177
|
+
/*
|
|
169
178
|
border: 1px solid rgba(0, 0, 0, 0.3);
|
|
179
|
+
*/
|
|
170
180
|
}
|
|
171
181
|
.open-menu.selected {
|
|
172
182
|
border: none !important;
|
|
@@ -369,27 +379,33 @@ body.dark .open-menu {
|
|
|
369
379
|
<div class='description'><%=item.description%></div>
|
|
370
380
|
<div class='menu-btns'>
|
|
371
381
|
<div>
|
|
382
|
+
<button class='btn browse' data-src="<%=item.browser_url%>/browse">
|
|
383
|
+
<i class='fa-solid fa-code'></i> Dev
|
|
384
|
+
</button>
|
|
372
385
|
<button class='btn open-menu'>
|
|
373
386
|
<i class="fa-solid fa-bars"></i><span> Menu</span>
|
|
374
387
|
</button>
|
|
375
388
|
<div class='context-menu collapsed'>
|
|
376
389
|
<div class='context-menu-wrapper'>
|
|
377
|
-
<button class='btn browse' data-src="<%=item.browser_url%>/browse">
|
|
378
|
-
<i class='fa-regular fa-folder-open'></i> View
|
|
379
|
-
</button>
|
|
380
390
|
<button class='btn copy-menu' data-src="<%=item.browser_url%>/browse">
|
|
381
391
|
<i class='fa-solid fa-copy'></i> Copy
|
|
382
392
|
</button>
|
|
383
393
|
</div>
|
|
384
394
|
</div>
|
|
385
395
|
</div>
|
|
386
|
-
<div class='flexible'></div>
|
|
387
396
|
<% if (item.running_scripts) { %>
|
|
388
397
|
<% item.running_scripts.forEach((s) => { %>
|
|
398
|
+
<% if (s.id) { %>
|
|
399
|
+
<button class='btn shutdown' data-id="<%=s.id%>">
|
|
400
|
+
<i class="fa-solid fa-stop"></i> Stop <%=s.name%>
|
|
401
|
+
<i class='fa-solid fa-spin fa-circle-notch'></i>
|
|
402
|
+
</button>
|
|
403
|
+
<% } else { %>
|
|
389
404
|
<button class='btn shutdown' data-src="<%=s.path%>">
|
|
390
405
|
<i class="fa-solid fa-stop"></i> Stop <%=s.name%>
|
|
391
406
|
<i class='fa-solid fa-spin fa-circle-notch'></i>
|
|
392
407
|
</button>
|
|
408
|
+
<% } %>
|
|
393
409
|
<% }) %>
|
|
394
410
|
<% } %>
|
|
395
411
|
</div>
|
|
@@ -437,14 +453,14 @@ body.dark .open-menu {
|
|
|
437
453
|
<div class='title'><%=item.name%></div>
|
|
438
454
|
<div class='description'><%=item.description%></div>
|
|
439
455
|
<div class='menu-btns'>
|
|
456
|
+
<button class='btn browse' data-src="<%=item.browser_url%>/browse">
|
|
457
|
+
<i class='fa-solid fa-code'></i> Dev
|
|
458
|
+
</button>
|
|
440
459
|
<button class='btn open-menu'>
|
|
441
460
|
<i class="fa-solid fa-bars"></i><span> Menu</span>
|
|
442
461
|
</button>
|
|
443
462
|
<div class='context-menu collapsed'>
|
|
444
463
|
<div class='context-menu-wrapper'>
|
|
445
|
-
<button class='btn browse' data-src="<%=item.browser_url%>/browse">
|
|
446
|
-
<i class='fa-regular fa-folder-open'></i> View
|
|
447
|
-
</button>
|
|
448
464
|
<button class='btn copy-menu' data-src="<%=item.browser_url%>/browse">
|
|
449
465
|
<i class='fa-solid fa-copy'></i> Copy
|
|
450
466
|
</button>
|
|
@@ -872,13 +888,16 @@ document.addEventListener("click", async (e) => {
|
|
|
872
888
|
e.preventDefault()
|
|
873
889
|
e.stopPropagation()
|
|
874
890
|
let src = target.getAttribute("data-src")
|
|
891
|
+
let id = target.getAttribute('data-id')
|
|
875
892
|
console.log("src", src)
|
|
876
893
|
|
|
894
|
+
let params = {}
|
|
895
|
+
if (id) params.id = id
|
|
896
|
+
if (src) params.uri = "~/" + src
|
|
897
|
+
|
|
877
898
|
socket.run({
|
|
878
899
|
method: "kernel.api.stop",
|
|
879
|
-
params
|
|
880
|
-
uri: "~/" + src
|
|
881
|
-
}
|
|
900
|
+
params,
|
|
882
901
|
}, (packet) => {
|
|
883
902
|
console.log("packet", packet)
|
|
884
903
|
if (packet.type === "result") {
|
|
@@ -906,7 +925,7 @@ document.addEventListener("click", async (e) => {
|
|
|
906
925
|
e.preventDefault()
|
|
907
926
|
e.stopPropagation()
|
|
908
927
|
let contextMenu = target.closest(".col").querySelector(".context-menu").classList.toggle("collapsed")
|
|
909
|
-
target.classList.toggle("selected")
|
|
928
|
+
// target.classList.toggle("selected")
|
|
910
929
|
return
|
|
911
930
|
}
|
|
912
931
|
|
|
@@ -1,9 +1,57 @@
|
|
|
1
|
-
<% dynamic.forEach((item,
|
|
2
|
-
|
|
3
|
-
<div class='
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
<% dynamic.forEach((item, index) => { %>
|
|
2
|
+
<% if (item.menu) { %>
|
|
3
|
+
<div class='nested-menu <%=item.display || ""%>'>
|
|
4
|
+
<div class='btn header-item frame-link reveal'>
|
|
5
|
+
<div class='tab'><%-item.btn%></div>
|
|
6
|
+
<div class='loader'><i class="fa-solid fa-caret-down"></i><i class="fa-solid fa-caret-up hidden"></i></div>
|
|
6
7
|
</div>
|
|
8
|
+
<div class='submenu hidden'>
|
|
9
|
+
<%- include('./menu', { menu: item.menu }) %>
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
<% } else { %>
|
|
13
|
+
<% if (item.btn) { %>
|
|
14
|
+
<% if (item.action) { %>
|
|
15
|
+
<div <%=item.default ? 'data-default' : ''%> data-action="<%=JSON.stringify(item.action)%>" class='btn header-item frame-link <%=item.display || ""%>'>
|
|
16
|
+
<div class='tab'><%-item.btn%></div>
|
|
17
|
+
</div>
|
|
18
|
+
<% } else if (item.run) { %>
|
|
19
|
+
<div data-run="<%=item.run%>" data-cwd="<%=item.cwd%>" class='btn header-item frame-link <%=item.display || ""%>'>
|
|
20
|
+
<div class='tab'><%-item.btn%></div>
|
|
21
|
+
</div>
|
|
22
|
+
<% } else if (item.command) { %>
|
|
23
|
+
<div data-command="<%=item.command%>" data-filepath="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>'>
|
|
24
|
+
<div class='tab'><%-item.btn%></div>
|
|
25
|
+
</div>
|
|
26
|
+
<% } else if (item.fs) { %>
|
|
27
|
+
<div data-filepath="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>'>
|
|
28
|
+
<div class='tab'><%-item.btn%></div>
|
|
29
|
+
</div>
|
|
30
|
+
<% } else if (item.target === "_blank") { %>
|
|
31
|
+
<a <%=item.default ? 'data-default' : ''%> data-confirm="<%=item.confirm%>" data-index="<%=index+4%>" target="<%=item.target%>" data-mode="<%=item.mode%>" href="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>'>
|
|
32
|
+
<div class='tab'><%-item.btn%></div>
|
|
33
|
+
<div class='loader'>
|
|
34
|
+
<i class="fa-solid fa-up-right-from-square"></i>
|
|
35
|
+
</div>
|
|
36
|
+
</a>
|
|
37
|
+
<% } else { %>
|
|
38
|
+
<a <%=item.default ? 'data-default' : ''%> data-confirm="<%=item.confirm%>" data-index="<%=index+4%>" target="<%=item.target%>" data-mode="<%=item.mode%>" href="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>'>
|
|
39
|
+
<div class='tab'><%-item.btn%></div>
|
|
40
|
+
<% if (item.running) { %>
|
|
41
|
+
<div class='loader shutdown online'>
|
|
42
|
+
</div>
|
|
43
|
+
<div class='loader shutdown hidden'>
|
|
44
|
+
<!--
|
|
45
|
+
<i class='fa-solid fa-spin fa-circle-notch'></i>
|
|
46
|
+
<i class="fa-solid fa-chevron-right"></i>
|
|
47
|
+
-->
|
|
48
|
+
<button class='btn'>
|
|
49
|
+
<i class="fa-solid fa-square"></i> Stop
|
|
50
|
+
</button>
|
|
51
|
+
</div>
|
|
52
|
+
<% } %>
|
|
53
|
+
</a>
|
|
54
|
+
<% } %>
|
|
7
55
|
<% } %>
|
|
8
|
-
|
|
56
|
+
<% } %>
|
|
9
57
|
<% }) %>
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
<% menu.forEach((item, index) => { %>
|
|
2
2
|
<% if (item.menu) { %>
|
|
3
|
-
<div class='nested-menu'>
|
|
3
|
+
<div class='nested-menu <%=item.display || ""%>'>
|
|
4
4
|
<div class='btn header-item frame-link reveal'>
|
|
5
5
|
<div class='tab'><%-item.btn%></div>
|
|
6
|
+
<div class='loader'><i class="fa-solid fa-caret-down"></i><i class="fa-solid fa-caret-up hidden"></i></div>
|
|
6
7
|
</div>
|
|
7
8
|
<div class='submenu hidden'>
|
|
8
9
|
<%- include('./menu', { menu: item.menu }) %>
|
|
@@ -11,26 +12,30 @@
|
|
|
11
12
|
<% } else { %>
|
|
12
13
|
<% if (item.btn) { %>
|
|
13
14
|
<% if (item.action) { %>
|
|
14
|
-
<div <%=item.default ? 'data-default' : ''%> data-action="<%=JSON.stringify(item.action)%>" class='btn header-item frame-link'>
|
|
15
|
+
<div <%=item.default ? 'data-default' : ''%> data-action="<%=JSON.stringify(item.action)%>" class='btn header-item frame-link <%=item.display || ""%>'>
|
|
16
|
+
<div class='tab'><%-item.btn%></div>
|
|
17
|
+
</div>
|
|
18
|
+
<% } else if (item.run) { %>
|
|
19
|
+
<div data-run="<%=item.run%>" data-cwd="<%=item.cwd%>" class='btn header-item frame-link <%=item.display || ""%>'>
|
|
15
20
|
<div class='tab'><%-item.btn%></div>
|
|
16
21
|
</div>
|
|
17
22
|
<% } else if (item.command) { %>
|
|
18
|
-
<div data-command="<%=item.command%>" data-filepath="<%=item.href%>" class='btn header-item frame-link'>
|
|
23
|
+
<div data-command="<%=item.command%>" data-filepath="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>'>
|
|
19
24
|
<div class='tab'><%-item.btn%></div>
|
|
20
25
|
</div>
|
|
21
26
|
<% } else if (item.fs) { %>
|
|
22
|
-
<div data-filepath="<%=item.href%>" class='btn header-item frame-link'>
|
|
27
|
+
<div data-filepath="<%=item.href%>" class='btn header-item frame-link <%=item.display || ""%>'>
|
|
23
28
|
<div class='tab'><%-item.btn%></div>
|
|
24
29
|
</div>
|
|
25
30
|
<% } else if (item.target === "_blank") { %>
|
|
26
|
-
<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'>
|
|
31
|
+
<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 || ""%>'>
|
|
27
32
|
<div class='tab'><%-item.btn%></div>
|
|
28
33
|
<div class='loader'>
|
|
29
34
|
<i class="fa-solid fa-up-right-from-square"></i>
|
|
30
35
|
</div>
|
|
31
36
|
</a>
|
|
32
37
|
<% } else { %>
|
|
33
|
-
<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'>
|
|
38
|
+
<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 || ""%>'>
|
|
34
39
|
<div class='tab'><%-item.btn%></div>
|
|
35
40
|
<% if (item.running) { %>
|
|
36
41
|
<div class='loader shutdown online'>
|
|
@@ -144,15 +144,16 @@ body.dark .badge {
|
|
|
144
144
|
margin-right: 10px;
|
|
145
145
|
border-radius: 10px;
|
|
146
146
|
}
|
|
147
|
+
body.dark .prototype-header {
|
|
148
|
+
color: white;
|
|
149
|
+
}
|
|
147
150
|
.prototype-header .btn {
|
|
148
151
|
border: 1px solid rgba(255,255,255,0.3);
|
|
149
152
|
}
|
|
150
153
|
.prototype-header {
|
|
151
154
|
align-items: center;
|
|
152
155
|
display: flex;
|
|
153
|
-
padding: 40px;
|
|
154
|
-
background: black;
|
|
155
|
-
color: white;
|
|
156
|
+
padding: 40px 20px;
|
|
156
157
|
}
|
|
157
158
|
.prototype-header h1 {
|
|
158
159
|
letter-spacing: -1px;
|
|
@@ -196,6 +197,324 @@ body.dark .browser-options-row {
|
|
|
196
197
|
padding: 0;
|
|
197
198
|
}
|
|
198
199
|
}
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
.online {
|
|
207
|
+
width: 10px;
|
|
208
|
+
height: 10px;
|
|
209
|
+
background: yellowgreen;
|
|
210
|
+
border-radius: 10px;
|
|
211
|
+
}
|
|
212
|
+
#menu {
|
|
213
|
+
display: flex;
|
|
214
|
+
}
|
|
215
|
+
#menu i {
|
|
216
|
+
display: block;
|
|
217
|
+
}
|
|
218
|
+
#menu img {
|
|
219
|
+
display: none;
|
|
220
|
+
height: 30px;
|
|
221
|
+
object-fit: contain;
|
|
222
|
+
/*
|
|
223
|
+
border-radius: 20px
|
|
224
|
+
*/
|
|
225
|
+
}
|
|
226
|
+
#menu.margin {
|
|
227
|
+
/*
|
|
228
|
+
padding: 5px;
|
|
229
|
+
*/
|
|
230
|
+
}
|
|
231
|
+
#menu.margin i {
|
|
232
|
+
display: none;
|
|
233
|
+
}
|
|
234
|
+
#menu.margin img {
|
|
235
|
+
display: block;
|
|
236
|
+
}
|
|
237
|
+
html, body {
|
|
238
|
+
width: 100%;
|
|
239
|
+
height: 100%;
|
|
240
|
+
margin: 0;
|
|
241
|
+
}
|
|
242
|
+
body {
|
|
243
|
+
display: flex;
|
|
244
|
+
flex-direction: column;
|
|
245
|
+
}
|
|
246
|
+
.menu {
|
|
247
|
+
overflow: auto;
|
|
248
|
+
}
|
|
249
|
+
body.dark .m {
|
|
250
|
+
border-top: 1px solid rgba(255,255,255,0.04);
|
|
251
|
+
}
|
|
252
|
+
.m {
|
|
253
|
+
border-top: 1px solid rgba(0,0,0,0.04);
|
|
254
|
+
}
|
|
255
|
+
.container {
|
|
256
|
+
position: relative;
|
|
257
|
+
display: flex;
|
|
258
|
+
flex-direction: column;
|
|
259
|
+
flex-grow: 1;
|
|
260
|
+
}
|
|
261
|
+
body aside {
|
|
262
|
+
/*
|
|
263
|
+
background: var(--light-bg);
|
|
264
|
+
*/
|
|
265
|
+
border-right: 1px solid rgba(0,0,0,0.04);
|
|
266
|
+
height: 100%;
|
|
267
|
+
}
|
|
268
|
+
body.dark aside {
|
|
269
|
+
background: var(--dark-bg);
|
|
270
|
+
border-right: 1px solid rgba(255,255,255,0.04);
|
|
271
|
+
}
|
|
272
|
+
aside {
|
|
273
|
+
display: flex;
|
|
274
|
+
flex-direction: column;
|
|
275
|
+
width: 200px;
|
|
276
|
+
overflow: auto;
|
|
277
|
+
box-sizing: border-box;
|
|
278
|
+
flex-shrink: 0;
|
|
279
|
+
}
|
|
280
|
+
main {
|
|
281
|
+
flex-grow: 1;
|
|
282
|
+
min-height: 0;
|
|
283
|
+
/*
|
|
284
|
+
height: 100%;
|
|
285
|
+
*/
|
|
286
|
+
}
|
|
287
|
+
main iframe[name^=http] {
|
|
288
|
+
background: white;
|
|
289
|
+
}
|
|
290
|
+
main iframe {
|
|
291
|
+
width: 100%;
|
|
292
|
+
height: 100%;
|
|
293
|
+
border: none;
|
|
294
|
+
}
|
|
295
|
+
.header-item {
|
|
296
|
+
/*
|
|
297
|
+
display: block;
|
|
298
|
+
*/
|
|
299
|
+
display: flex;
|
|
300
|
+
font-size: 12px;
|
|
301
|
+
text-decoration: none;
|
|
302
|
+
align-items: center;
|
|
303
|
+
border-radius: 0;
|
|
304
|
+
cursor: pointer;
|
|
305
|
+
}
|
|
306
|
+
.header-item.selected {
|
|
307
|
+
}
|
|
308
|
+
.header-item .btn2 {
|
|
309
|
+
margin: 0;
|
|
310
|
+
border: none;
|
|
311
|
+
padding: 5px;
|
|
312
|
+
/*
|
|
313
|
+
color: var(--light-color);
|
|
314
|
+
*/
|
|
315
|
+
}
|
|
316
|
+
body.dark .header-item .btn2 {
|
|
317
|
+
/*
|
|
318
|
+
color: var(--darkt-color);
|
|
319
|
+
*/
|
|
320
|
+
}
|
|
321
|
+
.bar .btn2 i {
|
|
322
|
+
display: block;
|
|
323
|
+
margin-right: 5px;
|
|
324
|
+
}
|
|
325
|
+
.header-item > * {
|
|
326
|
+
display: block;
|
|
327
|
+
}
|
|
328
|
+
.header-item img {
|
|
329
|
+
/*
|
|
330
|
+
width: 60px;
|
|
331
|
+
*/
|
|
332
|
+
height: 80px;
|
|
333
|
+
width: 80px;
|
|
334
|
+
/*
|
|
335
|
+
border-radius: 10px;
|
|
336
|
+
*/
|
|
337
|
+
object-fit: contain;
|
|
338
|
+
display: inline-block;
|
|
339
|
+
/*
|
|
340
|
+
border-radius: 30px;
|
|
341
|
+
*/
|
|
342
|
+
}
|
|
343
|
+
body.dark .header-item.btn {
|
|
344
|
+
/*
|
|
345
|
+
color: white;
|
|
346
|
+
*/
|
|
347
|
+
color: var(--dark-color);
|
|
348
|
+
}
|
|
349
|
+
.header-item.btn {
|
|
350
|
+
padding: 10px;
|
|
351
|
+
background: none !important;
|
|
352
|
+
color: var(--light-color);
|
|
353
|
+
}
|
|
354
|
+
.logo {
|
|
355
|
+
font-size: 20px;
|
|
356
|
+
padding: 20px;
|
|
357
|
+
}
|
|
358
|
+
body .logo {
|
|
359
|
+
color: var(--light-color);
|
|
360
|
+
}
|
|
361
|
+
body.dark .logo {
|
|
362
|
+
color: var(--dark-btn-color);
|
|
363
|
+
/*
|
|
364
|
+
color: white;
|
|
365
|
+
*/
|
|
366
|
+
}
|
|
367
|
+
body #new-window {
|
|
368
|
+
color: var(--light-color);
|
|
369
|
+
}
|
|
370
|
+
body.dark #new-window {
|
|
371
|
+
color: var(--dark-btn-color);
|
|
372
|
+
/*
|
|
373
|
+
color: white;
|
|
374
|
+
*/
|
|
375
|
+
}
|
|
376
|
+
/*
|
|
377
|
+
.dark .app-info {
|
|
378
|
+
background: rgba(255,255,255,0.04);
|
|
379
|
+
}
|
|
380
|
+
*/
|
|
381
|
+
.app-info {
|
|
382
|
+
|
|
383
|
+
/*
|
|
384
|
+
display: flex;
|
|
385
|
+
*/
|
|
386
|
+
box-sizing: border-box;
|
|
387
|
+
text-align: center;;
|
|
388
|
+
font-weight: bold;
|
|
389
|
+
align-items: center;
|
|
390
|
+
/*
|
|
391
|
+
background: rgba(0,0,0,0.04);
|
|
392
|
+
*/
|
|
393
|
+
}
|
|
394
|
+
.folderbuttons {
|
|
395
|
+
display: grid;
|
|
396
|
+
grid-template-columns: repeat(4, 1fr);
|
|
397
|
+
gap: 0px;
|
|
398
|
+
}
|
|
399
|
+
.header-btns {
|
|
400
|
+
padding: 0 !important;
|
|
401
|
+
}
|
|
402
|
+
body.dark .header-btns {
|
|
403
|
+
border-top: 1px solid rgba(255,255,255,0.04);
|
|
404
|
+
}
|
|
405
|
+
.app-info-edit {
|
|
406
|
+
text-decoration: none;
|
|
407
|
+
color: black;
|
|
408
|
+
border-bottom: 1px solid rgba(255,255,255,0.1);
|
|
409
|
+
}
|
|
410
|
+
/*
|
|
411
|
+
.dark .app-info-edit {
|
|
412
|
+
border-top: 1px solid rgba(255,255,255,0.2);
|
|
413
|
+
border-bottom: 1px solid rgba(255,255,255,0.2);
|
|
414
|
+
}
|
|
415
|
+
*/
|
|
416
|
+
.dark .app-info-edit:hover {
|
|
417
|
+
background: rgba(0,0,0,0.2);
|
|
418
|
+
}
|
|
419
|
+
.app-info-edit:hover{
|
|
420
|
+
background: rgba(0,0,0,0.05);
|
|
421
|
+
}
|
|
422
|
+
.app-info-edit i{
|
|
423
|
+
display: block;
|
|
424
|
+
}
|
|
425
|
+
.app-info-edit, .app-info-copy {
|
|
426
|
+
font-weight: normal;
|
|
427
|
+
|
|
428
|
+
/*
|
|
429
|
+
border-radius: 20px;
|
|
430
|
+
*/
|
|
431
|
+
font-size: 12px;
|
|
432
|
+
padding: 15px 5px;
|
|
433
|
+
/*
|
|
434
|
+
margin: 10px 20px 0;
|
|
435
|
+
*/
|
|
436
|
+
}
|
|
437
|
+
.app-info-card {
|
|
438
|
+
padding: 10px !important;
|
|
439
|
+
}
|
|
440
|
+
.app-info .btn {
|
|
441
|
+
width: 100%;
|
|
442
|
+
}
|
|
443
|
+
.app-info-card > * {
|
|
444
|
+
padding: 5px;
|
|
445
|
+
color: var(--light-color);
|
|
446
|
+
text-decoration: none;
|
|
447
|
+
box-sizing: border-box;
|
|
448
|
+
}
|
|
449
|
+
body.dark .app-info-card > * {
|
|
450
|
+
color: var(--dark-color);
|
|
451
|
+
}
|
|
452
|
+
.appcanvas {
|
|
453
|
+
display: flex;
|
|
454
|
+
flex-grow: 1;
|
|
455
|
+
border-top: 1px solid rgba(0, 0,0 ,0.04);
|
|
456
|
+
}
|
|
457
|
+
body.dark .appcanvas {
|
|
458
|
+
border-top: 1px solid rgba(255,255,255,0.04);
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
@media only screen and (max-width: 480px) {
|
|
462
|
+
nav .btn2 {
|
|
463
|
+
width: auto !important;
|
|
464
|
+
min-width: 40px;
|
|
465
|
+
border-right: none;
|
|
466
|
+
flex-direction: column;
|
|
467
|
+
}
|
|
468
|
+
.app-info {
|
|
469
|
+
display: flex;
|
|
470
|
+
padding: 10px;
|
|
471
|
+
}
|
|
472
|
+
.app-info img {
|
|
473
|
+
width: 60px;
|
|
474
|
+
height: 60px;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
.header-item {
|
|
478
|
+
font-size: 16px;
|
|
479
|
+
}
|
|
480
|
+
aside.active {
|
|
481
|
+
width: 100%;
|
|
482
|
+
z-index: 10000000;
|
|
483
|
+
}
|
|
484
|
+
aside:not(.active) {
|
|
485
|
+
display: none;
|
|
486
|
+
}
|
|
487
|
+
.container {
|
|
488
|
+
display: none;
|
|
489
|
+
}
|
|
490
|
+
.container.active {
|
|
491
|
+
display: block;
|
|
492
|
+
position: absolute;
|
|
493
|
+
z-index: 10000000;
|
|
494
|
+
width: 100%;
|
|
495
|
+
height: 100%;
|
|
496
|
+
}
|
|
497
|
+
/*
|
|
498
|
+
.grid-btns {
|
|
499
|
+
display: none;
|
|
500
|
+
}
|
|
501
|
+
*/
|
|
502
|
+
#menu {
|
|
503
|
+
display: none;
|
|
504
|
+
}
|
|
505
|
+
#menu-mobile {
|
|
506
|
+
display: flex;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
body.dark .header-item.cursor.header-top {
|
|
510
|
+
background: none !important;
|
|
511
|
+
}
|
|
512
|
+
.header-item.cursor.header-top {
|
|
513
|
+
background: none !important;
|
|
514
|
+
}
|
|
515
|
+
.header-item.header-top {
|
|
516
|
+
display: block;
|
|
517
|
+
}
|
|
199
518
|
</style>
|
|
200
519
|
<script src="/hotkeys.min.js"></script>
|
|
201
520
|
<script src="/sweetalert2.js"></script>
|
|
@@ -248,38 +567,54 @@ body.dark .browser-options-row {
|
|
|
248
567
|
</div>
|
|
249
568
|
</h1>
|
|
250
569
|
</header>
|
|
251
|
-
<
|
|
252
|
-
<
|
|
253
|
-
<div class='
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
</div>
|
|
259
|
-
<div class='flexible'></div>
|
|
260
|
-
<a class='btn' id='download'><i class='fa-solid fa-download'></i> Download a custom prototype script</a>
|
|
261
|
-
</div>
|
|
262
|
-
<div class='folder-templates drawer'>
|
|
263
|
-
<% items.forEach((folder, i) => { %>
|
|
264
|
-
<a class='line folder' href="/prototype/show/<%=folder.id%>">
|
|
265
|
-
<% if (folder.icon) { %>
|
|
266
|
-
<img src="<%=folder.icon%>">
|
|
267
|
-
<% } else { %>
|
|
268
|
-
<% if (theme === 'dark') { %>
|
|
269
|
-
<img src="/pinokio-white.png">
|
|
570
|
+
<div class='appcanvas'>
|
|
571
|
+
<aside class='active'>
|
|
572
|
+
<div class='header-top header-item'>
|
|
573
|
+
<div class='app-info'>
|
|
574
|
+
<div class='app-info-card'>
|
|
575
|
+
<% if (config.icon) { %>
|
|
576
|
+
<img src="<%=config.icon%>"/>
|
|
270
577
|
<% } else { %>
|
|
271
|
-
<
|
|
578
|
+
<i class="fa-regular fa-circle-dot"></i>
|
|
272
579
|
<% } %>
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
580
|
+
<div><%=config.title%></div>
|
|
581
|
+
<div class="folderpath"><%=config.web_path%></div>
|
|
582
|
+
</div>
|
|
583
|
+
</div>
|
|
584
|
+
</div>
|
|
585
|
+
</aside>
|
|
586
|
+
<main>
|
|
587
|
+
<div class='container'>
|
|
588
|
+
<div class='prototype-header'>
|
|
589
|
+
<div>
|
|
590
|
+
<h1><%=title%></h1>
|
|
591
|
+
<div class='desc'><%=description%></div>
|
|
277
592
|
</div>
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
593
|
+
<div class='flexible'></div>
|
|
594
|
+
<a class='btn' id='download'><i class='fa-solid fa-download'></i> Download a custom prototype script</a>
|
|
595
|
+
</div>
|
|
596
|
+
<div class='folder-templates drawer'>
|
|
597
|
+
<% items.forEach((folder, i) => { %>
|
|
598
|
+
<a class='line folder' href="/prototype/show/<%=folder.id%>?path=<%=path%>">
|
|
599
|
+
<% if (folder.icon) { %>
|
|
600
|
+
<img src="<%=folder.icon%>">
|
|
601
|
+
<% } else { %>
|
|
602
|
+
<% if (theme === 'dark') { %>
|
|
603
|
+
<img src="/pinokio-white.png">
|
|
604
|
+
<% } else { %>
|
|
605
|
+
<img src="/pinokio-black.png">
|
|
606
|
+
<% } %>
|
|
607
|
+
<% } %>
|
|
608
|
+
<div class='col flexible'>
|
|
609
|
+
<div class='title'><%=folder.title%></div>
|
|
610
|
+
<div class='description'><%=folder.description%></div>
|
|
611
|
+
</div>
|
|
612
|
+
</a>
|
|
613
|
+
<% }) %>
|
|
614
|
+
</div>
|
|
615
|
+
</div>
|
|
616
|
+
</main>
|
|
281
617
|
</div>
|
|
282
|
-
</main>
|
|
283
618
|
<script>
|
|
284
619
|
let paths = location.pathname.split("/").filter(x=>x)
|
|
285
620
|
var term
|