pinokiod 3.85.0 → 3.87.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/Dockerfile +61 -0
- package/docker-entrypoint.sh +75 -0
- package/kernel/api/hf/index.js +1 -1
- package/kernel/api/index.js +8 -1
- package/kernel/api/shell/index.js +6 -0
- package/kernel/api/terminal/index.js +166 -0
- package/kernel/bin/caddy.js +10 -4
- package/kernel/bin/conda.js +3 -2
- package/kernel/bin/index.js +53 -2
- package/kernel/bin/setup.js +32 -0
- package/kernel/bin/vs.js +11 -2
- package/kernel/index.js +42 -2
- package/kernel/info.js +36 -0
- package/kernel/peer.js +42 -18
- package/kernel/prototype.js +1 -0
- package/kernel/router/index.js +23 -15
- package/kernel/router/localhost_static_router.js +0 -3
- package/kernel/router/pinokio_domain_router.js +333 -0
- package/kernel/shell.js +43 -2
- package/kernel/shells.js +21 -1
- package/kernel/util.js +4 -2
- package/package.json +2 -1
- package/pipe/views/login.ejs +1 -1
- package/script/install-mode.js +33 -0
- package/script/pinokio.json +7 -0
- package/server/index.js +636 -246
- package/server/public/Socket.js +48 -0
- package/server/public/common.js +1956 -257
- package/server/public/fseditor.js +71 -12
- package/server/public/install.js +1 -1
- package/server/public/layout.js +740 -0
- package/server/public/modalinput.js +0 -1
- package/server/public/opener.js +12 -11
- package/server/public/serve/style.css +1 -1
- package/server/public/style.css +122 -129
- package/server/public/tab-idle-notifier.js +629 -0
- package/server/public/terminal_input_tracker.js +63 -0
- package/server/public/urldropdown.css +780 -45
- package/server/public/urldropdown.js +806 -156
- package/server/public/window_storage.js +97 -28
- package/server/socket.js +40 -9
- package/server/views/404.ejs +1 -1
- package/server/views/500.ejs +3 -3
- package/server/views/app.ejs +3146 -1381
- package/server/views/bookmarklet.ejs +197 -0
- package/server/views/bootstrap.ejs +1 -1
- package/server/views/columns.ejs +2 -13
- package/server/views/connect/x.ejs +4 -4
- package/server/views/connect.ejs +13 -14
- package/server/views/container.ejs +3 -4
- package/server/views/d.ejs +225 -55
- package/server/views/download.ejs +1 -1
- package/server/views/editor.ejs +2 -2
- package/server/views/env_editor.ejs +3 -3
- package/server/views/explore.ejs +2 -2
- package/server/views/file_explorer.ejs +3 -3
- package/server/views/git.ejs +7 -7
- package/server/views/github.ejs +3 -3
- package/server/views/help.ejs +2 -2
- package/server/views/index.ejs +17 -16
- package/server/views/index2.ejs +7 -7
- package/server/views/init/index.ejs +15 -79
- package/server/views/install.ejs +4 -4
- package/server/views/keys.ejs +2 -2
- package/server/views/layout.ejs +105 -0
- package/server/views/mini.ejs +2 -2
- package/server/views/net.ejs +45 -13
- package/server/views/network.ejs +41 -27
- package/server/views/network2.ejs +11 -11
- package/server/views/old_network.ejs +10 -10
- package/server/views/partials/dynamic.ejs +3 -5
- package/server/views/partials/menu.ejs +3 -5
- package/server/views/partials/running.ejs +1 -1
- package/server/views/pro.ejs +369 -0
- package/server/views/prototype/index.ejs +3 -3
- package/server/views/required_env_editor.ejs +2 -2
- package/server/views/review.ejs +15 -27
- package/server/views/rows.ejs +2 -13
- package/server/views/screenshots.ejs +298 -142
- package/server/views/settings.ejs +6 -7
- package/server/views/setup.ejs +3 -4
- package/server/views/setup_home.ejs +2 -2
- package/server/views/share_editor.ejs +4 -4
- package/server/views/shell.ejs +280 -29
- package/server/views/start.ejs +2 -2
- package/server/views/task.ejs +2 -2
- package/server/views/terminal.ejs +326 -52
- package/server/views/tools.ejs +461 -17
package/server/views/d.ejs
CHANGED
|
@@ -17,11 +17,14 @@
|
|
|
17
17
|
<style>
|
|
18
18
|
main {
|
|
19
19
|
box-sizing: border-box;
|
|
20
|
+
padding: 0;
|
|
20
21
|
/*
|
|
21
22
|
flex-wrap: wrap;
|
|
22
23
|
*/
|
|
24
|
+
/*
|
|
23
25
|
max-width: 800px;
|
|
24
26
|
padding: 30px 45px;
|
|
27
|
+
*/
|
|
25
28
|
/*
|
|
26
29
|
justify-content: center;
|
|
27
30
|
*/
|
|
@@ -29,72 +32,102 @@ main {
|
|
|
29
32
|
.tab-content {
|
|
30
33
|
display: flex;
|
|
31
34
|
flex-wrap: wrap;
|
|
32
|
-
gap: 5px;
|
|
33
35
|
flex-grow: 1;
|
|
34
36
|
width: 100%;
|
|
35
37
|
}
|
|
36
38
|
.submenu.tab {
|
|
37
39
|
margin: 10px 0;
|
|
38
40
|
}
|
|
39
|
-
.tab:hover {
|
|
40
|
-
color: royalblue;
|
|
41
|
-
}
|
|
42
41
|
.tab {
|
|
43
|
-
/*
|
|
44
|
-
min-width: 250px;
|
|
45
|
-
*/
|
|
46
42
|
width: 100%;
|
|
47
43
|
text-decoration: none;
|
|
48
44
|
display: flex;
|
|
49
|
-
/*
|
|
50
|
-
flex-direction: column;
|
|
51
|
-
*/
|
|
52
45
|
font-size: 14px;
|
|
53
46
|
font-weight: bold;
|
|
54
47
|
color: black;
|
|
55
48
|
overflow: hidden;
|
|
56
49
|
box-sizing: border-box;
|
|
57
|
-
border-radius: 4px;
|
|
58
50
|
align-items: center;
|
|
59
51
|
gap: 10px;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
52
|
+
padding: 5px;
|
|
53
|
+
cursor: pointer;
|
|
54
|
+
transition: background 0.2s ease;
|
|
63
55
|
|
|
64
56
|
/*
|
|
65
57
|
margin-bottom: 10px;
|
|
66
58
|
*/
|
|
67
59
|
background: rgba(0,0,0,0.05);
|
|
68
60
|
}
|
|
61
|
+
.tab:hover,
|
|
62
|
+
.tab:focus-visible {
|
|
63
|
+
background: rgba(0, 0, 0, 0.1);
|
|
64
|
+
}
|
|
65
|
+
.tab:focus-visible {
|
|
66
|
+
outline: 2px solid rgba(127, 91, 243, 0.6);
|
|
67
|
+
outline-offset: 2px;
|
|
68
|
+
}
|
|
69
69
|
body.dark .tab {
|
|
70
70
|
color: white;
|
|
71
71
|
background: rgba(255,255,255,0.03);
|
|
72
72
|
}
|
|
73
|
+
body.dark .tab:hover,
|
|
74
|
+
body.dark .tab:focus-visible {
|
|
75
|
+
background: rgba(255, 255, 255, 0.08);
|
|
76
|
+
}
|
|
73
77
|
.tab h2 {
|
|
74
78
|
margin: 0;
|
|
75
|
-
font-
|
|
79
|
+
font-weight: normal;
|
|
80
|
+
font-size: 14px;
|
|
76
81
|
}
|
|
77
82
|
.tab .col {
|
|
78
83
|
flex-grow: 1;
|
|
79
84
|
margin-left: 10px;
|
|
80
85
|
}
|
|
81
86
|
.tab i.img {
|
|
82
|
-
height:
|
|
83
|
-
width:
|
|
87
|
+
height: 30px;
|
|
88
|
+
width: 30px;
|
|
84
89
|
background: white;
|
|
85
90
|
color: black;
|
|
86
91
|
display: flex;
|
|
87
92
|
justify-content: center;
|
|
88
93
|
font-size: 20px;
|
|
89
94
|
align-items: center;
|
|
90
|
-
border-radius: 3px;
|
|
91
95
|
}
|
|
92
96
|
.tab img {
|
|
93
|
-
height:
|
|
94
|
-
width:
|
|
95
|
-
border-radius: 3px;
|
|
97
|
+
height: 30px;
|
|
98
|
+
width: 30px;
|
|
96
99
|
background: white;
|
|
97
100
|
}
|
|
101
|
+
.tab .disclosure-indicator {
|
|
102
|
+
display: inline-flex;
|
|
103
|
+
align-items: center;
|
|
104
|
+
justify-content: center;
|
|
105
|
+
width: 20px;
|
|
106
|
+
height: 20px;
|
|
107
|
+
color: rgba(0, 0, 0, 0.4);
|
|
108
|
+
flex-shrink: 0;
|
|
109
|
+
pointer-events: none;
|
|
110
|
+
transition: transform 0.2s ease, color 0.2s ease;
|
|
111
|
+
}
|
|
112
|
+
.tab:hover .disclosure-indicator,
|
|
113
|
+
.tab:focus-visible .disclosure-indicator {
|
|
114
|
+
color: rgba(0, 0, 0, 0.7);
|
|
115
|
+
transform: translateX(2px);
|
|
116
|
+
}
|
|
117
|
+
.tab.is-starting {
|
|
118
|
+
cursor: wait;
|
|
119
|
+
opacity: 0.7;
|
|
120
|
+
}
|
|
121
|
+
.tab.is-starting .disclosure-indicator {
|
|
122
|
+
opacity: 0.85;
|
|
123
|
+
}
|
|
124
|
+
body.dark .tab .disclosure-indicator {
|
|
125
|
+
color: rgba(255, 255, 255, 0.4);
|
|
126
|
+
}
|
|
127
|
+
body.dark .tab:hover .disclosure-indicator,
|
|
128
|
+
body.dark .tab:focus-visible .disclosure-indicator {
|
|
129
|
+
color: rgba(255, 255, 255, 0.9);
|
|
130
|
+
}
|
|
98
131
|
/*
|
|
99
132
|
body.dark .tab i {
|
|
100
133
|
background: rgba(0,0,0,0.1);
|
|
@@ -114,12 +147,6 @@ body.dark .tab i {
|
|
|
114
147
|
}
|
|
115
148
|
*/
|
|
116
149
|
.menu-container {
|
|
117
|
-
/*
|
|
118
|
-
border: 15px solid rgba(0,0,0,0.04);
|
|
119
|
-
background: white;
|
|
120
|
-
border-radius: 20px;
|
|
121
|
-
*/
|
|
122
|
-
margin-bottom: 30px;
|
|
123
150
|
align-items: flex-start;
|
|
124
151
|
}
|
|
125
152
|
/*
|
|
@@ -132,9 +159,15 @@ body.dark .menu-container {
|
|
|
132
159
|
flex-direction: column;
|
|
133
160
|
box-sizing: border-box;
|
|
134
161
|
}
|
|
162
|
+
body.dark .tab-header {
|
|
163
|
+
background: rgba(255,255,255,0.04);
|
|
164
|
+
}
|
|
135
165
|
.tab-header {
|
|
136
|
-
margin-bottom: 10px;
|
|
137
166
|
font-weight: bold;
|
|
167
|
+
width: 100%;
|
|
168
|
+
box-sizing: border-box;
|
|
169
|
+
padding: 10px;
|
|
170
|
+
background: rgba(0,0,0,0.04);
|
|
138
171
|
}
|
|
139
172
|
.container {
|
|
140
173
|
margin: 0;
|
|
@@ -164,7 +197,7 @@ body.dark .btn {
|
|
|
164
197
|
border: none;
|
|
165
198
|
}
|
|
166
199
|
.btn:hover {
|
|
167
|
-
color:
|
|
200
|
+
color: rgba(127, 91, 243, 0.9);
|
|
168
201
|
}
|
|
169
202
|
.btn {
|
|
170
203
|
padding: 2px 10px;
|
|
@@ -228,13 +261,14 @@ body.dark .btn.run-btn {
|
|
|
228
261
|
padding: 10px;
|
|
229
262
|
border-radius: 0;
|
|
230
263
|
/*
|
|
231
|
-
background:
|
|
264
|
+
background: rgba(127, 91, 243, 0.9) !important;
|
|
232
265
|
*/
|
|
233
266
|
}
|
|
234
267
|
.tab-header h3 {
|
|
235
268
|
margin: 0;
|
|
236
|
-
font-size:
|
|
237
|
-
text-transform:
|
|
269
|
+
font-size: 14px;
|
|
270
|
+
text-transform: uppercase;
|
|
271
|
+
opacity: 0.6;
|
|
238
272
|
}
|
|
239
273
|
.tab-header h3 i {
|
|
240
274
|
}
|
|
@@ -268,6 +302,9 @@ header h1 {
|
|
|
268
302
|
h4 {
|
|
269
303
|
margin: 0 0 5px;
|
|
270
304
|
}
|
|
305
|
+
form.search {
|
|
306
|
+
padding: 10px;
|
|
307
|
+
}
|
|
271
308
|
body.dark .btn.file-open {
|
|
272
309
|
background: rgba(255,255,255,0.1) !important;
|
|
273
310
|
}
|
|
@@ -298,6 +335,7 @@ body.dark #update-spec {
|
|
|
298
335
|
<form class='search'>
|
|
299
336
|
<input type='search' class="flexible" placeholder='Filter tools'>
|
|
300
337
|
</form>
|
|
338
|
+
<!--
|
|
301
339
|
<header>
|
|
302
340
|
<h1>Build</h1>
|
|
303
341
|
<div class='flexible'></div>
|
|
@@ -309,20 +347,14 @@ body.dark #update-spec {
|
|
|
309
347
|
</div>
|
|
310
348
|
</div>
|
|
311
349
|
</header>
|
|
350
|
+
-->
|
|
312
351
|
<div class='spec'>
|
|
313
352
|
<div class='explain'>
|
|
314
353
|
<h3><i class="fa-regular fa-circle-check"></i> TODO</h3>
|
|
315
354
|
<ol>
|
|
316
355
|
<li><strong>Build manually:</strong> Open the project files and start building. <a class='btn file-open' data-filepath="<%=filepath%>"><i class="fa-solid fa-folder-open"></i> open project folder</a></li>
|
|
317
356
|
<li><strong>Build with AI:</strong> Click any of the below AI tools to instantly start building with AI.</li>
|
|
318
|
-
<!--
|
|
319
|
-
<li><strong>Build with AI:</strong> Click any of the AI tools below to start building with AI. The AI will automatically build based on the spec:</li>
|
|
320
|
-
-->
|
|
321
357
|
</ol>
|
|
322
|
-
<!--
|
|
323
|
-
<textarea><%=spec%></textarea>
|
|
324
|
-
<button id='update-spec'>Update</button>
|
|
325
|
-
-->
|
|
326
358
|
</div>
|
|
327
359
|
</div>
|
|
328
360
|
|
|
@@ -332,13 +364,10 @@ body.dark #update-spec {
|
|
|
332
364
|
<div class='menu-container'>
|
|
333
365
|
<div class='tab-header'>
|
|
334
366
|
<h3><i class='<%=item.icon%>'></i> <%=item.title%></h3>
|
|
335
|
-
<% if (item.subtitle) { %>
|
|
336
|
-
<div class='subtitle'><%=item.subtitle%></div>
|
|
337
|
-
<% } %>
|
|
338
367
|
</div>
|
|
339
368
|
<div class='tab-content'>
|
|
340
369
|
<% item.menu.forEach((i) => { %>
|
|
341
|
-
<
|
|
370
|
+
<div class='tab' role="button" tabindex="0" data-index="<%=index++%>" data-target="@<%=i.href%>" data-href="<%=i.href%>">
|
|
342
371
|
<% if (i.image) { %>
|
|
343
372
|
<img src="<%=i.image%>">
|
|
344
373
|
<% } else if (i.icon) { %>
|
|
@@ -348,14 +377,14 @@ body.dark #update-spec {
|
|
|
348
377
|
<% if (i.subtitle) { %>
|
|
349
378
|
<div class='subtitle'><%=i.subtitle%></div>
|
|
350
379
|
<% } %>
|
|
380
|
+
<div class='flexible'></div>
|
|
351
381
|
<% if (i.link) { %>
|
|
352
382
|
<div target="_blank" data-href="<%=i.link%>"><i class="fa-solid fa-circle-info"></i></div>
|
|
353
383
|
<% } %>
|
|
354
|
-
<div class='
|
|
355
|
-
|
|
356
|
-
<i class="fa-solid fa-angle-right"></i>
|
|
384
|
+
<div class='disclosure-indicator' aria-hidden="true">
|
|
385
|
+
<i class="fa-solid fa-chevron-right"></i>
|
|
357
386
|
</div>
|
|
358
|
-
</
|
|
387
|
+
</div>
|
|
359
388
|
<% }) %>
|
|
360
389
|
</div>
|
|
361
390
|
</div>
|
|
@@ -397,6 +426,7 @@ setTimeout(() => {
|
|
|
397
426
|
location.href = location.href
|
|
398
427
|
}, 2000)
|
|
399
428
|
<% } %>
|
|
429
|
+
/*
|
|
400
430
|
document.querySelector("#git-pull").addEventListener("click", (e) => {
|
|
401
431
|
e.preventDefault()
|
|
402
432
|
e.stopPropagation()
|
|
@@ -415,6 +445,7 @@ document.querySelector("#git-pull").addEventListener("click", (e) => {
|
|
|
415
445
|
}
|
|
416
446
|
})
|
|
417
447
|
})
|
|
448
|
+
*/
|
|
418
449
|
/*
|
|
419
450
|
const resize = (textarea) => {
|
|
420
451
|
textarea.style.height = "";
|
|
@@ -501,6 +532,74 @@ const renderSearch = () => {
|
|
|
501
532
|
}
|
|
502
533
|
}
|
|
503
534
|
renderSearch()
|
|
535
|
+
const generateSession = () => {
|
|
536
|
+
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
|
|
537
|
+
return crypto.randomUUID()
|
|
538
|
+
}
|
|
539
|
+
return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`
|
|
540
|
+
}
|
|
541
|
+
const appendSessionParam = (value, session) => {
|
|
542
|
+
if (!value) return value
|
|
543
|
+
if (value.includes('session=')) {
|
|
544
|
+
return value
|
|
545
|
+
}
|
|
546
|
+
const delimiter = value.includes('?') ? '&' : '?'
|
|
547
|
+
return `${value}${delimiter}session=${session}`
|
|
548
|
+
}
|
|
549
|
+
const START_ICON_HTML = '<i class="fa-solid fa-chevron-right"></i>'
|
|
550
|
+
const STARTING_ICON_HTML = '<i class="fa-solid fa-circle-notch fa-spin"></i>'
|
|
551
|
+
const setTabLaunchState = (tab, state) => {
|
|
552
|
+
if (!tab) return
|
|
553
|
+
const indicator = tab.querySelector('.disclosure-indicator')
|
|
554
|
+
if (indicator) {
|
|
555
|
+
indicator.innerHTML = state === 'starting' ? STARTING_ICON_HTML : START_ICON_HTML
|
|
556
|
+
}
|
|
557
|
+
if (state === 'starting') {
|
|
558
|
+
tab.classList.add('is-starting')
|
|
559
|
+
} else {
|
|
560
|
+
tab.classList.remove('is-starting')
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
const pendingLaunchTabs = new Map()
|
|
564
|
+
const launchTab = (tab) => {
|
|
565
|
+
if (!tab) {
|
|
566
|
+
return false
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
if (tab.classList.contains('is-starting')) {
|
|
570
|
+
return false
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
const baseHref = tab.dataset.href
|
|
574
|
+
const baseTarget = tab.dataset.target
|
|
575
|
+
|
|
576
|
+
if (!baseHref || !baseTarget) {
|
|
577
|
+
return false
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
const session = generateSession()
|
|
581
|
+
pendingLaunchTabs.set(session, tab)
|
|
582
|
+
setTabLaunchState(tab, 'starting')
|
|
583
|
+
|
|
584
|
+
const href = appendSessionParam(baseHref, session)
|
|
585
|
+
const target = appendSessionParam(baseTarget, session)
|
|
586
|
+
|
|
587
|
+
window.parent.postMessage({
|
|
588
|
+
launch: {
|
|
589
|
+
name: target,
|
|
590
|
+
href
|
|
591
|
+
}
|
|
592
|
+
}, "*")
|
|
593
|
+
|
|
594
|
+
return true
|
|
595
|
+
}
|
|
596
|
+
const extractSession = (value) => {
|
|
597
|
+
if (!value || typeof value !== 'string') {
|
|
598
|
+
return null
|
|
599
|
+
}
|
|
600
|
+
const match = value.match(/session=([^&]+)/)
|
|
601
|
+
return match ? match[1] : null
|
|
602
|
+
}
|
|
504
603
|
document.querySelector("form input[type=search]").addEventListener("input", (e) => {
|
|
505
604
|
selectedIndex = 0
|
|
506
605
|
selectedBtnIndex = 0
|
|
@@ -508,16 +607,87 @@ document.querySelector("form input[type=search]").addEventListener("input", (e)
|
|
|
508
607
|
})
|
|
509
608
|
document.querySelector("form input[type=search]").focus()
|
|
510
609
|
document.addEventListener("click", (e) => {
|
|
511
|
-
|
|
610
|
+
const infoTarget = e.target.closest('[data-href][target="_blank"]')
|
|
611
|
+
if (infoTarget) {
|
|
512
612
|
e.preventDefault()
|
|
513
613
|
e.stopPropagation()
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
614
|
+
window.open(infoTarget.getAttribute('data-href'), '_blank')
|
|
615
|
+
return
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
const tab = e.target.closest('.tab[data-href]')
|
|
619
|
+
if (!tab) {
|
|
620
|
+
return
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
if (launchTab(tab)) {
|
|
624
|
+
e.preventDefault()
|
|
625
|
+
e.stopPropagation()
|
|
626
|
+
}
|
|
627
|
+
})
|
|
628
|
+
|
|
629
|
+
document.addEventListener('keydown', (e) => {
|
|
630
|
+
if (!['Enter', ' ', 'Spacebar'].includes(e.key)) {
|
|
631
|
+
return
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
const target = e.target
|
|
635
|
+
if (!(target instanceof HTMLElement)) {
|
|
636
|
+
return
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
const tab = target.closest('.tab[data-href]')
|
|
640
|
+
if (!tab || tab !== target) {
|
|
641
|
+
return
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
const launched = launchTab(tab)
|
|
645
|
+
if (launched) {
|
|
646
|
+
e.preventDefault()
|
|
647
|
+
e.stopPropagation()
|
|
648
|
+
}
|
|
649
|
+
})
|
|
650
|
+
|
|
651
|
+
window.addEventListener('message', (event) => {
|
|
652
|
+
const data = event.data
|
|
653
|
+
if (!data || typeof data !== 'object') {
|
|
654
|
+
return
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
let session = null
|
|
658
|
+
|
|
659
|
+
if (typeof data.session === 'string') {
|
|
660
|
+
session = data.session
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
if (!session && typeof data.id === 'string') {
|
|
664
|
+
session = extractSession(data.id)
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
if (!session && data.data && typeof data.data.id === 'string') {
|
|
668
|
+
session = extractSession(data.data.id)
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
if (!session && data.launch && typeof data.launch.href === 'string') {
|
|
672
|
+
session = extractSession(data.launch.href)
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
if (!session && typeof data.href === 'string') {
|
|
676
|
+
session = extractSession(data.href)
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
if (session && pendingLaunchTabs.has(session)) {
|
|
680
|
+
const tab = pendingLaunchTabs.get(session)
|
|
681
|
+
pendingLaunchTabs.delete(session)
|
|
682
|
+
setTabLaunchState(tab, 'idle')
|
|
683
|
+
return
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
if (data.type === 'start' || data.type === 'result' || data.type === 'error' || data.type === 'disconnect') {
|
|
687
|
+
pendingLaunchTabs.forEach((tab) => {
|
|
688
|
+
setTabLaunchState(tab, 'idle')
|
|
689
|
+
})
|
|
690
|
+
pendingLaunchTabs.clear()
|
|
521
691
|
}
|
|
522
692
|
})
|
|
523
693
|
</script>
|
package/server/views/editor.ejs
CHANGED
|
@@ -116,7 +116,7 @@ header .runner {
|
|
|
116
116
|
padding: 10px 0 0;
|
|
117
117
|
}
|
|
118
118
|
#del-bin {
|
|
119
|
-
color:
|
|
119
|
+
color: rgba(127, 91, 243, 0.9);
|
|
120
120
|
cursor: pointer;
|
|
121
121
|
font-weight: bold;
|
|
122
122
|
padding: 0 5px;
|
|
@@ -671,7 +671,7 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
671
671
|
})
|
|
672
672
|
let config = {
|
|
673
673
|
scrollback: 9999999,
|
|
674
|
-
fontSize:
|
|
674
|
+
fontSize: 12,
|
|
675
675
|
theme,
|
|
676
676
|
}
|
|
677
677
|
let res = await fetch("/xterm_config").then((res) => {
|
|
@@ -117,7 +117,7 @@ body.dark .env-item label {
|
|
|
117
117
|
color: cornflowerblue;
|
|
118
118
|
}
|
|
119
119
|
.env-item label {
|
|
120
|
-
color:
|
|
120
|
+
color: rgba(127, 91, 243, 0.9);
|
|
121
121
|
display: block;
|
|
122
122
|
margin-bottom: 5px;
|
|
123
123
|
font-weight: bold;
|
|
@@ -143,7 +143,7 @@ body.dark .comment {
|
|
|
143
143
|
padding-left: 10px;
|
|
144
144
|
}
|
|
145
145
|
#save {
|
|
146
|
-
background:
|
|
146
|
+
background: rgba(127, 91, 243, 0.9);
|
|
147
147
|
}
|
|
148
148
|
a#customize {
|
|
149
149
|
text-decoration: underline;
|
|
@@ -227,7 +227,7 @@ footer .btn.go-home {
|
|
|
227
227
|
}
|
|
228
228
|
.warning a {
|
|
229
229
|
text-decoration: none;
|
|
230
|
-
color:
|
|
230
|
+
color: rgba(127, 91, 243, 0.9);
|
|
231
231
|
}
|
|
232
232
|
</style>
|
|
233
233
|
<script>
|
package/server/views/explore.ejs
CHANGED
|
@@ -58,7 +58,7 @@ body {
|
|
|
58
58
|
text-decoration: none;
|
|
59
59
|
font-weight: bold;
|
|
60
60
|
font-size: 16px;
|
|
61
|
-
color:
|
|
61
|
+
color: rgba(127, 91, 243, 0.9);
|
|
62
62
|
}
|
|
63
63
|
.item .col {
|
|
64
64
|
padding: 0 10px;
|
|
@@ -84,7 +84,7 @@ body {
|
|
|
84
84
|
/*
|
|
85
85
|
border: 3px solid black;
|
|
86
86
|
*/
|
|
87
|
-
background:
|
|
87
|
+
background: rgba(127, 91, 243, 0.9);
|
|
88
88
|
}
|
|
89
89
|
.selectors .selector {
|
|
90
90
|
color: white;
|
|
@@ -106,12 +106,12 @@ header .runner {
|
|
|
106
106
|
margin-top: 5px;
|
|
107
107
|
}
|
|
108
108
|
a.badge {
|
|
109
|
-
color:
|
|
109
|
+
color: rgba(127, 91, 243, 0.9);
|
|
110
110
|
text-decoration: none;
|
|
111
111
|
cursor: pointer;
|
|
112
112
|
}
|
|
113
113
|
.badge a {
|
|
114
|
-
color:
|
|
114
|
+
color: rgba(127, 91, 243, 0.9);
|
|
115
115
|
text-decoration: none;
|
|
116
116
|
}
|
|
117
117
|
body.dark .btn {
|
|
@@ -196,7 +196,7 @@ body.dark .browser-options-row {
|
|
|
196
196
|
<% if (dep.downloaded) { %>
|
|
197
197
|
<div class='item'><i class="fa-solid fa-check"></i> <a class='downloaded' href="<%=dep.downloaded%>" target="_blank"><%=dep.uri%></a><div class='flexible'></div></div>
|
|
198
198
|
<% } else { %>
|
|
199
|
-
<div class='item'><a class='btn' href="
|
|
199
|
+
<div class='item'><a class='btn' href="/home?mode=download&uri=<%=dep.uri%>" target="_blank"><i class="fa-solid fa-download"></i> Download</a> <%=dep.uri%><div class='flexible'></div></div>
|
|
200
200
|
<% } %>
|
|
201
201
|
<% }) %>
|
|
202
202
|
</div>
|
package/server/views/git.ejs
CHANGED
|
@@ -33,7 +33,7 @@ body {
|
|
|
33
33
|
}
|
|
34
34
|
.changes .diffs .btn {
|
|
35
35
|
margin-left: 5px !important;
|
|
36
|
-
background:
|
|
36
|
+
background: rgba(127, 91, 243, 0.9);
|
|
37
37
|
}
|
|
38
38
|
aside {
|
|
39
39
|
width: 200px;
|
|
@@ -76,7 +76,7 @@ aside .item, .log .item {
|
|
|
76
76
|
.item .switch {
|
|
77
77
|
padding: 5px 10px;
|
|
78
78
|
margin: 10px 0 0px;
|
|
79
|
-
background:
|
|
79
|
+
background: rgba(127, 91, 243, 0.9);
|
|
80
80
|
display: block;
|
|
81
81
|
text-align: center;
|
|
82
82
|
}
|
|
@@ -106,12 +106,12 @@ nav {
|
|
|
106
106
|
background: rgba(0,0,0,0.04);
|
|
107
107
|
}
|
|
108
108
|
body.dark nav a.btn, nav a.btn {
|
|
109
|
-
background:
|
|
109
|
+
background: rgba(127, 91, 243, 0.9);
|
|
110
110
|
padding: 5px 10px;
|
|
111
111
|
}
|
|
112
112
|
nav a {
|
|
113
113
|
display: block;
|
|
114
|
-
color:
|
|
114
|
+
color: rgba(127, 91, 243, 0.9);
|
|
115
115
|
text-decoration: none;
|
|
116
116
|
}
|
|
117
117
|
label {
|
|
@@ -266,7 +266,7 @@ body.dark .chunk {
|
|
|
266
266
|
height: 100%;
|
|
267
267
|
}
|
|
268
268
|
.chunk.selected, body.dark .chunk.selected {
|
|
269
|
-
border: 3px solid
|
|
269
|
+
border: 3px solid rgba(127, 91, 243, 0.9);
|
|
270
270
|
}
|
|
271
271
|
|
|
272
272
|
.add { background: #e6ffed; color: green; }
|
|
@@ -398,7 +398,7 @@ body.dark .branches .label {
|
|
|
398
398
|
align-items: center;
|
|
399
399
|
}
|
|
400
400
|
.branches .btn {
|
|
401
|
-
background:
|
|
401
|
+
background: rgba(127, 91, 243, 0.9);
|
|
402
402
|
padding: 2px 10px;
|
|
403
403
|
}
|
|
404
404
|
.branches .btn i {
|
|
@@ -464,7 +464,7 @@ body.dark .change-count {
|
|
|
464
464
|
box-sizing: border-box;
|
|
465
465
|
width: 100%;
|
|
466
466
|
margin: 0;
|
|
467
|
-
background:
|
|
467
|
+
background: rgba(127, 91, 243, 0.9);
|
|
468
468
|
}
|
|
469
469
|
|
|
470
470
|
</style>
|
package/server/views/github.ejs
CHANGED
|
@@ -79,7 +79,7 @@ body {
|
|
|
79
79
|
}
|
|
80
80
|
.item .title {
|
|
81
81
|
text-decoration: none;
|
|
82
|
-
color:
|
|
82
|
+
color: rgba(127, 91, 243, 0.9);
|
|
83
83
|
}
|
|
84
84
|
.item .col {
|
|
85
85
|
padding: 10px;
|
|
@@ -174,7 +174,7 @@ body.dark .card {
|
|
|
174
174
|
margin: 20px;
|
|
175
175
|
}
|
|
176
176
|
.card:hover {
|
|
177
|
-
color:
|
|
177
|
+
color: rgba(127, 91, 243, 0.9) !important;
|
|
178
178
|
}
|
|
179
179
|
.card .desc {
|
|
180
180
|
opacity: 0.7;
|
|
@@ -187,7 +187,7 @@ body.dark .card {
|
|
|
187
187
|
font-size: 50px;
|
|
188
188
|
}
|
|
189
189
|
a {
|
|
190
|
-
color:
|
|
190
|
+
color: rgba(127, 91, 243, 0.9);
|
|
191
191
|
}
|
|
192
192
|
body.dark hr {
|
|
193
193
|
background: rgba(255,255,255,0.05);
|
package/server/views/help.ejs
CHANGED
|
@@ -124,7 +124,7 @@ body.dark .item select {
|
|
|
124
124
|
}
|
|
125
125
|
.item .title {
|
|
126
126
|
text-decoration: none;
|
|
127
|
-
color:
|
|
127
|
+
color: rgba(127, 91, 243, 0.9);
|
|
128
128
|
}
|
|
129
129
|
.item .col {
|
|
130
130
|
padding: 10px;
|
|
@@ -201,7 +201,7 @@ hr {
|
|
|
201
201
|
margin-top: 10px;
|
|
202
202
|
}
|
|
203
203
|
a.link {
|
|
204
|
-
color:
|
|
204
|
+
color: rgba(127, 91, 243, 0.9);
|
|
205
205
|
}
|
|
206
206
|
.item .tile h2 {
|
|
207
207
|
margin: 0;
|