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