pinokiod 3.9.28 → 3.9.30
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 +0 -20
- package/kernel/api/input/index.js +2 -1
- package/kernel/api/shell/index.js +1 -1
- package/kernel/bin/index.js +0 -15
- package/kernel/index.js +9 -31
- package/kernel/loader.js +1 -0
- package/kernel/plugin.js +2 -2
- package/kernel/prototype.js +28 -23
- package/kernel/shells.js +6 -2
- package/package.json +1 -1
- package/server/index.js +111 -32
- package/server/public/fseditor.js +2 -9
- package/server/public/modalinput.js +28 -9
- package/server/public/opener.js +0 -1
- package/server/public/style.css +44 -5
- package/server/views/app.ejs +50 -40
- package/server/views/connect.ejs +96 -13
- package/server/views/network.ejs +4 -2
- package/server/views/partials/dynamic.ejs +3 -5
- package/server/views/partials/menu.ejs +1 -1
- package/server/views/prototype/index.ejs +967 -310
- package/server/views/prototype/old_index.ejs +646 -0
- package/server/views/prototype/show.ejs +11 -158
- package/server/views/settings.ejs +6 -3
|
@@ -10,6 +10,7 @@ const ModalInput = async (params, uri) => {
|
|
|
10
10
|
title,
|
|
11
11
|
description,
|
|
12
12
|
placeholder,
|
|
13
|
+
required,
|
|
13
14
|
default
|
|
14
15
|
}]
|
|
15
16
|
}
|
|
@@ -37,20 +38,34 @@ const ModalInput = async (params, uri) => {
|
|
|
37
38
|
input = `<select data-id="${field.key}">${items}</select>`
|
|
38
39
|
}
|
|
39
40
|
} else if (type === 'checkbox') {
|
|
40
|
-
input = `<div class='checkbox-row'
|
|
41
|
+
input = `<div class='checkbox-row'>
|
|
42
|
+
<input data-type="checkbox" type="checkbox" data-id="${field.key}" value="${field.key}" />
|
|
43
|
+
<div class='flexible'>
|
|
44
|
+
<h5>${field.title}</h5>
|
|
45
|
+
<div>${field.description ? field.description : ''}</div>
|
|
46
|
+
</div>
|
|
47
|
+
</div>`
|
|
41
48
|
} else if (type === 'file') {
|
|
42
49
|
input = `<div class='dropzone' data-type='file' data-id='${field.key}'></div>`
|
|
43
50
|
//input = `<input type='file' data-id="${field.key}" />`
|
|
44
51
|
} else {
|
|
45
52
|
input = `<input ${autofocus} type='${type}' data-id="${field.key}" class="swal2-input" placeholder="${field.placeholder ? field.placeholder : ''}">`
|
|
46
53
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"
|
|
53
|
-
|
|
54
|
+
if (type === 'checkbox') {
|
|
55
|
+
return [
|
|
56
|
+
"<div class='field'>",
|
|
57
|
+
input,
|
|
58
|
+
"</div>"
|
|
59
|
+
].join("\n")
|
|
60
|
+
} else {
|
|
61
|
+
return [
|
|
62
|
+
"<div class='field'>",
|
|
63
|
+
`<label class='title'>${field.title ? field.title : ''}</label>`,
|
|
64
|
+
input,
|
|
65
|
+
`<label class='description'>${field.description ? field.description : ''}</label>`,
|
|
66
|
+
"</div>"
|
|
67
|
+
].join("\n")
|
|
68
|
+
}
|
|
54
69
|
}).join("\n"),
|
|
55
70
|
//focusConfirm: false,
|
|
56
71
|
confirmButtonText: 'Done',
|
|
@@ -86,9 +101,13 @@ const ModalInput = async (params, uri) => {
|
|
|
86
101
|
for(let field of form) {
|
|
87
102
|
let input = Swal.getPopup().querySelector("[data-id='" + field.key + "']")
|
|
88
103
|
let type = input.getAttribute("data-type")
|
|
89
|
-
debugger
|
|
90
104
|
if (type !== 'file' && type !== 'checkbox') {
|
|
91
105
|
response[field.key] = input.value
|
|
106
|
+
debugger
|
|
107
|
+
if (field.required && input.value.length === 0) {
|
|
108
|
+
alert(`${field.title || field.key} value must exist`)
|
|
109
|
+
return false
|
|
110
|
+
}
|
|
92
111
|
}
|
|
93
112
|
if (type === 'checkbox') {
|
|
94
113
|
response[field.key] = input.checked
|
package/server/public/opener.js
CHANGED
package/server/public/style.css
CHANGED
|
@@ -98,6 +98,31 @@ body.dark .dynamic.selected {
|
|
|
98
98
|
background: rgba(0,0,0,0.05);
|
|
99
99
|
*/
|
|
100
100
|
}
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
.loader-container {
|
|
104
|
+
background: rgba(0,0,0,0.2) !important;
|
|
105
|
+
}
|
|
106
|
+
body.dark .loader-container {
|
|
107
|
+
background: rgba(0,0,0,0.3) !important;
|
|
108
|
+
}
|
|
109
|
+
.loader-dialog {
|
|
110
|
+
padding: 100px;
|
|
111
|
+
}
|
|
112
|
+
body.dark .loader-popup {
|
|
113
|
+
background: rgba(255,255,255,0.07) !important;
|
|
114
|
+
color: whitesmoke;
|
|
115
|
+
}
|
|
116
|
+
.swal2-popup.loader-popup {
|
|
117
|
+
font-size: 12px;
|
|
118
|
+
letter-spacing: 1px;
|
|
119
|
+
background: rgba(0,0,0,0.6);
|
|
120
|
+
width: 200px !important;
|
|
121
|
+
border-radius: 50px !important;
|
|
122
|
+
color: white;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
|
|
101
126
|
.type-tab {
|
|
102
127
|
display: flex;
|
|
103
128
|
align-items: center;
|
|
@@ -153,10 +178,10 @@ body.dark .type-tabs {
|
|
|
153
178
|
.navheader {
|
|
154
179
|
backdrop-filter: blur(16px);
|
|
155
180
|
|
|
156
|
-
/*
|
|
157
181
|
padding: 15px 10px 5px;
|
|
158
|
-
|
|
182
|
+
/*
|
|
159
183
|
padding: 15px;
|
|
184
|
+
*/
|
|
160
185
|
}
|
|
161
186
|
.navheader .btn2 {
|
|
162
187
|
text-transform: lowercase;
|
|
@@ -1469,7 +1494,8 @@ body.dark .swal2-modal input {
|
|
|
1469
1494
|
.swal2-modal input[type=checkbox] {
|
|
1470
1495
|
width: 14px;
|
|
1471
1496
|
height: 14px;
|
|
1472
|
-
background:
|
|
1497
|
+
background: whitesmoke;
|
|
1498
|
+
margin: 0;
|
|
1473
1499
|
margin-right: 5px;
|
|
1474
1500
|
}
|
|
1475
1501
|
.swal2-modal input[type=checkbox]:checked {
|
|
@@ -1477,7 +1503,12 @@ body.dark .swal2-modal input {
|
|
|
1477
1503
|
}
|
|
1478
1504
|
.swal2-modal .checkbox-row {
|
|
1479
1505
|
display: flex;
|
|
1480
|
-
align-items:
|
|
1506
|
+
align-items: flex-start;
|
|
1507
|
+
text-align: left;
|
|
1508
|
+
}
|
|
1509
|
+
.swal2-modal .checkbox-row h5 {
|
|
1510
|
+
margin: 0;
|
|
1511
|
+
font-size: 14px;
|
|
1481
1512
|
}
|
|
1482
1513
|
.swal2-container {
|
|
1483
1514
|
font-size: 14px !important;
|
|
@@ -1790,7 +1821,8 @@ body.dark .not-running-apps, body.dark .running-apps {
|
|
|
1790
1821
|
}
|
|
1791
1822
|
*/
|
|
1792
1823
|
.running-apps .line img {
|
|
1793
|
-
border:
|
|
1824
|
+
border-left: 10px solid #82bc09;
|
|
1825
|
+
padding-left: 10px;
|
|
1794
1826
|
/*
|
|
1795
1827
|
border: 3px solid #8fd400;
|
|
1796
1828
|
*/
|
|
@@ -1798,6 +1830,13 @@ body.dark .not-running-apps, body.dark .running-apps {
|
|
|
1798
1830
|
border-radius: 5px;
|
|
1799
1831
|
*/
|
|
1800
1832
|
}
|
|
1833
|
+
body.dark .not-running-apps .line img {
|
|
1834
|
+
border-left: 10px solid rgba(255,255,255,0.1);
|
|
1835
|
+
}
|
|
1836
|
+
.not-running-apps .line img {
|
|
1837
|
+
border-left: 10px solid rgba(0,0,0,0.04);
|
|
1838
|
+
padding-left: 10px;
|
|
1839
|
+
}
|
|
1801
1840
|
/*
|
|
1802
1841
|
.running-apps .line.align-top h3 .col .title {
|
|
1803
1842
|
color: #8fd400;
|
package/server/views/app.ejs
CHANGED
|
@@ -78,14 +78,18 @@ body aside {
|
|
|
78
78
|
*/
|
|
79
79
|
border-right: 1px solid rgba(0,0,0,0.04);
|
|
80
80
|
height: 100%;
|
|
81
|
+
padding-bottom: 100px;
|
|
82
|
+
box-sizing: border-box;
|
|
81
83
|
}
|
|
82
84
|
body.dark aside {
|
|
83
85
|
background: var(--dark-bg);
|
|
84
86
|
border-right: 1px solid rgba(255,255,255,0.04);
|
|
85
87
|
}
|
|
86
88
|
aside {
|
|
89
|
+
/*
|
|
87
90
|
display: flex;
|
|
88
91
|
flex-direction: column;
|
|
92
|
+
*/
|
|
89
93
|
width: 200px;
|
|
90
94
|
overflow: auto;
|
|
91
95
|
box-sizing: border-box;
|
|
@@ -379,6 +383,7 @@ body.dark .frame-link.selected {
|
|
|
379
383
|
width: 100%;
|
|
380
384
|
*/
|
|
381
385
|
word-break: break-word;
|
|
386
|
+
padding-right: 10px;
|
|
382
387
|
/*
|
|
383
388
|
margin-right: 10px;
|
|
384
389
|
*/
|
|
@@ -425,6 +430,7 @@ body.dark .grid-btns .btn2 {
|
|
|
425
430
|
flex-grow: 1;
|
|
426
431
|
display: flex;
|
|
427
432
|
align-items: center;
|
|
433
|
+
padding-right: 10px;
|
|
428
434
|
}
|
|
429
435
|
.label i {
|
|
430
436
|
margin-right: 10px;
|
|
@@ -551,7 +557,7 @@ body.dark #location {
|
|
|
551
557
|
#location {
|
|
552
558
|
background: rgba(0,0,0,0.04);
|
|
553
559
|
padding: 10px;
|
|
554
|
-
margin: 0 10px;
|
|
560
|
+
margin: 0 0 0 10px;
|
|
555
561
|
font-size: 12px;
|
|
556
562
|
font-family: verdana;
|
|
557
563
|
box-sizing: border-box;
|
|
@@ -559,6 +565,17 @@ body.dark #location {
|
|
|
559
565
|
border: none;
|
|
560
566
|
outline: none;
|
|
561
567
|
}
|
|
568
|
+
body.dark #open-location {
|
|
569
|
+
background: rgba(255,255,255,0.03);
|
|
570
|
+
color: white;
|
|
571
|
+
}
|
|
572
|
+
#open-location {
|
|
573
|
+
border: none;
|
|
574
|
+
background: rgba(0,0,0,0.04);
|
|
575
|
+
padding: 10px;
|
|
576
|
+
margin-right: 10px;
|
|
577
|
+
font-size: 14px;
|
|
578
|
+
}
|
|
562
579
|
.bar {
|
|
563
580
|
-webkit-app-region: no-drag !important;
|
|
564
581
|
cursor: auto;
|
|
@@ -602,24 +619,6 @@ body.dark .submenu {
|
|
|
602
619
|
margin-left: 15px;
|
|
603
620
|
box-sizing: border-box;
|
|
604
621
|
}
|
|
605
|
-
.loader-dialog {
|
|
606
|
-
padding: 10px;
|
|
607
|
-
}
|
|
608
|
-
body.dark .loader-popup {
|
|
609
|
-
background: rgba(0,0,0,0.2);
|
|
610
|
-
color: whitesmoke;
|
|
611
|
-
}
|
|
612
|
-
.loader-popup {
|
|
613
|
-
text-transform: uppercase;
|
|
614
|
-
font-size: 12px;
|
|
615
|
-
letter-spacing: 1px;
|
|
616
|
-
padding: 20px;
|
|
617
|
-
background: rgba(0,0,0,0.2);
|
|
618
|
-
color: white;
|
|
619
|
-
}
|
|
620
|
-
body.dark .loader-container {
|
|
621
|
-
background: rgba(255,255,255,0.3);
|
|
622
|
-
}
|
|
623
622
|
#menu-mobile {
|
|
624
623
|
display: none;
|
|
625
624
|
}
|
|
@@ -746,6 +745,7 @@ body.dark .appcanvas {
|
|
|
746
745
|
<a href="/network" class='btn2'><div><i class="fa-solid fa-wifi"></i></div><div>Network</div></a>
|
|
747
746
|
<a href="/connect" class='btn2'><div><i class="fa-solid fa-circle-user"></i></div><div>Connect</div></a>
|
|
748
747
|
<input type='url' id='location' readonly value="<%=execUrl%>">
|
|
748
|
+
<a id='open-location' target="_blank"><i class="fa-solid fa-arrow-up-right-from-square"></i></a>
|
|
749
749
|
<div class='nav-btns'>
|
|
750
750
|
<a class='btn2' href="<%=portal%>" target="_blank"><div><i class="fa-solid fa-question"></i></div><div>Help</div></a>
|
|
751
751
|
<button class='btn2' id='genlog'><div><i class="fa-solid fa-laptop-code"></i></div><div>Logs</div></button>
|
|
@@ -784,14 +784,9 @@ body.dark .appcanvas {
|
|
|
784
784
|
<div class='tab'>
|
|
785
785
|
<i class='fa-solid fa-pen-to-square'></i> Edit
|
|
786
786
|
</div>
|
|
787
|
-
<div class='loader'><i class="fa-solid fa-
|
|
787
|
+
<div class='loader'><i class="fa-solid fa-angle-down"></i><i class="fa-solid fa-angle-up hidden"></i></div>
|
|
788
788
|
</div>
|
|
789
789
|
<div class='edit-group editsubmenu submenu hidden'>
|
|
790
|
-
<a <%=config.init_required ? 'data-init' : ''%> class='btn header-item frame-link' href="/prototype?type=init&path=<%=path%>">
|
|
791
|
-
<div class='tab'>
|
|
792
|
-
<i class='fa-solid fa-bolt'></i> Initialize
|
|
793
|
-
</div>
|
|
794
|
-
</a>
|
|
795
790
|
<!--
|
|
796
791
|
<a class='btn header-item frame-link' href="/prototype?type=extension&path=<%=path%>">
|
|
797
792
|
<div class='tab'>
|
|
@@ -816,15 +811,20 @@ body.dark .appcanvas {
|
|
|
816
811
|
</div>
|
|
817
812
|
</div>
|
|
818
813
|
<div class='m n system' data-type="n">
|
|
819
|
-
<a target="<%=src%>" href="<%=src%>" class='btn header-item frame-link' data-index="0">
|
|
814
|
+
<a target="<%=src%>" href="<%=src%>" class='btn header-item frame-link' data-index="0" data-mode="refresh">
|
|
820
815
|
<div class='tab'><i class="fa-regular fa-folder-open"></i> Files <div class='disk-usage'></div></div>
|
|
821
816
|
</a>
|
|
817
|
+
<a <%=config.init_required ? 'data-init' : ''%> class='btn header-item frame-link' href="/prototype?type=init&path=<%=path%>" target="/prototype?type=init&path=<%=path%>" data-index="1" data-mode="refresh">
|
|
818
|
+
<div class='tab'>
|
|
819
|
+
<i class='fa-solid fa-bolt'></i> Initialize
|
|
820
|
+
</div>
|
|
821
|
+
</a>
|
|
822
822
|
<% if (profile || feed) { %>
|
|
823
823
|
<div class='btn header-item frame-link revealer' data-group='.info-group'>
|
|
824
824
|
<div class='tab'>
|
|
825
825
|
<i class='fa-solid fa-circle-info'></i> Info
|
|
826
826
|
</div>
|
|
827
|
-
<div class='loader'><i class="fa-solid fa-
|
|
827
|
+
<div class='loader'><i class="fa-solid fa-angle-down"></i><i class="fa-solid fa-angle-up hidden"></i></div>
|
|
828
828
|
</div>
|
|
829
829
|
<div class='info-group submenu hidden'>
|
|
830
830
|
<% if (profile) { %>
|
|
@@ -848,7 +848,7 @@ body.dark .appcanvas {
|
|
|
848
848
|
<div class='tab'>
|
|
849
849
|
<i class='fa-solid fa-gear'></i> Settings
|
|
850
850
|
</div>
|
|
851
|
-
<div class='loader'><i class="fa-solid fa-
|
|
851
|
+
<div class='loader'><i class="fa-solid fa-angle-down"></i><i class="fa-solid fa-angle-up hidden"></i></div>
|
|
852
852
|
</div>
|
|
853
853
|
<div class='config-group submenu hidden'>
|
|
854
854
|
<a target="/share/<%=name%>" href="/share/<%=name%>", class="btn header-item frame-link" data-index="2" data-mode="refresh">
|
|
@@ -1020,11 +1020,6 @@ body.dark .appcanvas {
|
|
|
1020
1020
|
// }
|
|
1021
1021
|
}
|
|
1022
1022
|
const renderSelection = (e, force) => {
|
|
1023
|
-
let init = document.querySelector("[data-init]")
|
|
1024
|
-
if (init) {
|
|
1025
|
-
location.href = init.href
|
|
1026
|
-
return
|
|
1027
|
-
}
|
|
1028
1023
|
let selection = null
|
|
1029
1024
|
<% if (type === "run" && env.PINOKIO_SCRIPT_DEFAULT && env.PINOKIO_SCRIPT_DEFAULT.toString().toLowerCase() === "true") { %>
|
|
1030
1025
|
selection = document.querySelector("[data-default]")
|
|
@@ -1107,10 +1102,13 @@ body.dark .appcanvas {
|
|
|
1107
1102
|
|
|
1108
1103
|
//document.querySelector("#location").value = url
|
|
1109
1104
|
|
|
1105
|
+
document.querySelector("#open-location").setAttribute('href', target.href)
|
|
1110
1106
|
if (target.pathname.startsWith("/run")) {
|
|
1111
1107
|
document.querySelector("#location").value = target.pathname.slice(4)
|
|
1112
|
-
} else {
|
|
1108
|
+
} else if (target.pathname.startsWith("/api")) {
|
|
1113
1109
|
document.querySelector("#location").value = target.pathname
|
|
1110
|
+
} else {
|
|
1111
|
+
document.querySelector("#location").value = target.href
|
|
1114
1112
|
}
|
|
1115
1113
|
|
|
1116
1114
|
|
|
@@ -1574,8 +1572,8 @@ body.dark .appcanvas {
|
|
|
1574
1572
|
e.stopPropagation()
|
|
1575
1573
|
let group = target.getAttribute("data-group")
|
|
1576
1574
|
document.querySelector(group).classList.toggle("hidden")
|
|
1577
|
-
target.querySelector(".loader .fa-
|
|
1578
|
-
target.querySelector(".loader .fa-
|
|
1575
|
+
target.querySelector(".loader .fa-angle-down").classList.toggle("hidden")
|
|
1576
|
+
target.querySelector(".loader .fa-angle-up").classList.toggle("hidden")
|
|
1579
1577
|
return
|
|
1580
1578
|
}
|
|
1581
1579
|
|
|
@@ -1699,12 +1697,19 @@ body.dark .appcanvas {
|
|
|
1699
1697
|
} else {
|
|
1700
1698
|
if (target.classList.contains("reveal")) {
|
|
1701
1699
|
// nested menu
|
|
1702
|
-
target.closest(".dynamic").classList.toggle("selected")
|
|
1703
|
-
target.closest(".nested-menu").querySelector(".submenu").classList.toggle("hidden")
|
|
1704
|
-
target.querySelector(".loader .fa-caret-down").classList.toggle("hidden")
|
|
1705
|
-
target.querySelector(".loader .fa-caret-up").classList.toggle("hidden")
|
|
1706
1700
|
e.preventDefault()
|
|
1707
1701
|
e.stopPropagation()
|
|
1702
|
+
<% if (type === 'run') { %>
|
|
1703
|
+
// run mode => switch to dev mode
|
|
1704
|
+
location.pathname = location.pathname + "/browse"
|
|
1705
|
+
<% } else { %>
|
|
1706
|
+
// dev mode => already dev. reveal the hidden menu
|
|
1707
|
+
target.closest(".dynamic").classList.toggle("selected")
|
|
1708
|
+
target.closest(".nested-menu").querySelector(".submenu").classList.toggle("hidden")
|
|
1709
|
+
target.querySelector(".loader .fa-angle-down").classList.toggle("hidden")
|
|
1710
|
+
target.querySelector(".loader .fa-angle-up").classList.toggle("hidden")
|
|
1711
|
+
<% } %>
|
|
1712
|
+
return
|
|
1708
1713
|
} else {
|
|
1709
1714
|
//location.hash = target.target
|
|
1710
1715
|
|
|
@@ -1815,6 +1820,11 @@ body.dark .appcanvas {
|
|
|
1815
1820
|
})
|
|
1816
1821
|
})
|
|
1817
1822
|
}
|
|
1823
|
+
let init = document.querySelector("[data-init]")
|
|
1824
|
+
console.log("init")
|
|
1825
|
+
if (init) {
|
|
1826
|
+
init.click()
|
|
1827
|
+
}
|
|
1818
1828
|
window.addEventListener('message', (event) => {
|
|
1819
1829
|
|
|
1820
1830
|
// only process the event it's coming from pinokio
|
package/server/views/connect.ejs
CHANGED
|
@@ -112,13 +112,13 @@ main {
|
|
|
112
112
|
padding: 80px;
|
|
113
113
|
text-align: center;
|
|
114
114
|
}
|
|
115
|
-
.
|
|
116
|
-
|
|
117
|
-
padding: 10px;
|
|
115
|
+
.desc {
|
|
116
|
+
padding: 10px 0;
|
|
118
117
|
}
|
|
119
118
|
.head h3 {
|
|
120
|
-
font-size:
|
|
119
|
+
font-size: 40px;
|
|
121
120
|
text-transform: uppercase;
|
|
121
|
+
font-weight: lighter;
|
|
122
122
|
margin: 0;
|
|
123
123
|
}
|
|
124
124
|
.head h3 i {
|
|
@@ -128,12 +128,10 @@ body.dark .card {
|
|
|
128
128
|
color: white;
|
|
129
129
|
}
|
|
130
130
|
.card {
|
|
131
|
+
padding: 30px;
|
|
132
|
+
display:flex;
|
|
131
133
|
text-decoration: none;
|
|
132
|
-
width: 200px;
|
|
133
134
|
color: rgba(0,0,0,0.9);
|
|
134
|
-
text-align: center;
|
|
135
|
-
height: 400px;
|
|
136
|
-
margin: 20px;
|
|
137
135
|
}
|
|
138
136
|
.card:hover {
|
|
139
137
|
color: royalblue !important;
|
|
@@ -142,12 +140,83 @@ body.dark .card {
|
|
|
142
140
|
opacity: 0.7;
|
|
143
141
|
}
|
|
144
142
|
.card h3 {
|
|
143
|
+
margin: 0;
|
|
145
144
|
font-size: 30px;
|
|
146
145
|
letter-spacing: -1px;
|
|
146
|
+
font-weight: lighter;
|
|
147
|
+
}
|
|
148
|
+
.card .col {
|
|
149
|
+
padding: 0 10px;
|
|
150
|
+
flex-grow: 1;
|
|
147
151
|
}
|
|
148
152
|
.card i {
|
|
149
153
|
font-size: 50px;
|
|
150
154
|
}
|
|
155
|
+
body.dark .config {
|
|
156
|
+
color: white;
|
|
157
|
+
}
|
|
158
|
+
.config {
|
|
159
|
+
/*
|
|
160
|
+
background: rgba(0,0,0,0.9);
|
|
161
|
+
*/
|
|
162
|
+
color: black;
|
|
163
|
+
padding: 30px;
|
|
164
|
+
text-align: left;
|
|
165
|
+
}
|
|
166
|
+
.config-header {
|
|
167
|
+
}
|
|
168
|
+
.config-body {
|
|
169
|
+
padding-top: 20px;
|
|
170
|
+
margin-top: 20px;
|
|
171
|
+
}
|
|
172
|
+
.config .btn {
|
|
173
|
+
font-size: 16px;
|
|
174
|
+
font-weight: bold;
|
|
175
|
+
width: 100px;
|
|
176
|
+
background: royalblue;
|
|
177
|
+
flex-shrink: 0;
|
|
178
|
+
}
|
|
179
|
+
.config-row {
|
|
180
|
+
padding: 10px 20px 0 0;
|
|
181
|
+
}
|
|
182
|
+
.label {
|
|
183
|
+
padding-bottom: 5px;
|
|
184
|
+
font-weight: bold;
|
|
185
|
+
}
|
|
186
|
+
.config-row input[type=text] {
|
|
187
|
+
padding: 7px;
|
|
188
|
+
}
|
|
189
|
+
.header-label {
|
|
190
|
+
padding: 0;
|
|
191
|
+
font-size: 50px;
|
|
192
|
+
letter-spacing: -2px;
|
|
193
|
+
font-weight: lighter;
|
|
194
|
+
/*
|
|
195
|
+
text-align: center;
|
|
196
|
+
*/
|
|
197
|
+
text-transform: capitalize;
|
|
198
|
+
}
|
|
199
|
+
.dark .container-row {
|
|
200
|
+
background: rgba(255, 255, 255, 0.04);
|
|
201
|
+
}
|
|
202
|
+
.container-row {
|
|
203
|
+
background: rgba(0, 0, 100, 0.04);
|
|
204
|
+
box-sizing: border-box;
|
|
205
|
+
}
|
|
206
|
+
.header-label-sub h1 {
|
|
207
|
+
font-size: 25px;
|
|
208
|
+
letter-spacing: -1px;
|
|
209
|
+
font-weight: lighter;
|
|
210
|
+
}
|
|
211
|
+
.header-label-sub {
|
|
212
|
+
font-size: 16px;
|
|
213
|
+
padding: 10px 0;
|
|
214
|
+
border-bottom: 1px solid rgba(0,0,0,0.1);
|
|
215
|
+
}
|
|
216
|
+
.header-label-sub .s {
|
|
217
|
+
padding: 10px 0;
|
|
218
|
+
opacity: 0.7;
|
|
219
|
+
}
|
|
151
220
|
</style>
|
|
152
221
|
<script src="/hotkeys.min.js"></script>
|
|
153
222
|
<script src="/sweetalert2.js"></script>
|
|
@@ -181,17 +250,31 @@ body.dark .card {
|
|
|
181
250
|
</h1>
|
|
182
251
|
</header>
|
|
183
252
|
<main>
|
|
184
|
-
<div class='
|
|
185
|
-
<
|
|
253
|
+
<div class='config'>
|
|
254
|
+
<div class='config-header'>
|
|
255
|
+
<div class='header-label'><i class='fa-solid fa-circle-user'></i> Connect</div>
|
|
256
|
+
<div class='desc'>Authenticate 3rd party services with Pinokio.</div>
|
|
257
|
+
</div>
|
|
186
258
|
</div>
|
|
187
|
-
<div class='
|
|
259
|
+
<div class='container'>
|
|
260
|
+
<div class='container-row'>
|
|
188
261
|
<% items.forEach((item) => { %>
|
|
189
262
|
<a class='card' href="<%=item.url%>">
|
|
190
263
|
<i class="<%=item.icon%>"></i>
|
|
191
|
-
<
|
|
192
|
-
|
|
264
|
+
<div class='col'>
|
|
265
|
+
<h3><%=item.title%></h3>
|
|
266
|
+
<div class='desc'><%=item.description%></div>
|
|
267
|
+
</div>
|
|
193
268
|
</a>
|
|
194
269
|
<% }) %>
|
|
270
|
+
</div>
|
|
271
|
+
<!--
|
|
272
|
+
<div class='config-row' id='network_name'>
|
|
273
|
+
<div class='label'>Network Name</div>
|
|
274
|
+
<input id='name' type='text' value="name">
|
|
275
|
+
</div>
|
|
276
|
+
<button class='btn save'>Save</button>
|
|
277
|
+
-->
|
|
195
278
|
</div>
|
|
196
279
|
</main>
|
|
197
280
|
</body>
|
package/server/views/network.ejs
CHANGED
|
@@ -162,7 +162,8 @@ a.ln:hover {
|
|
|
162
162
|
.header-label {
|
|
163
163
|
padding: 0;
|
|
164
164
|
font-size: 50px;
|
|
165
|
-
letter-spacing: -
|
|
165
|
+
letter-spacing: -2px;
|
|
166
|
+
font-weight: lighter;
|
|
166
167
|
/*
|
|
167
168
|
text-align: center;
|
|
168
169
|
*/
|
|
@@ -171,7 +172,7 @@ a.ln:hover {
|
|
|
171
172
|
.header-label-sub h1 {
|
|
172
173
|
font-size: 25px;
|
|
173
174
|
letter-spacing: -1px;
|
|
174
|
-
font-weight:
|
|
175
|
+
font-weight: lighter;
|
|
175
176
|
}
|
|
176
177
|
.header-label-sub {
|
|
177
178
|
font-size: 16px;
|
|
@@ -235,6 +236,7 @@ td:first-child, th:first-child {
|
|
|
235
236
|
max-width: 100px;
|
|
236
237
|
}
|
|
237
238
|
.container-row th h2 {
|
|
239
|
+
font-weight: lighter;
|
|
238
240
|
font-size: 18px;
|
|
239
241
|
margin: 0;
|
|
240
242
|
text-transform: uppercase;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
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-
|
|
6
|
+
<div class='loader'><i class="fa-solid fa-angle-down"></i><i class="fa-solid fa-angle-up hidden"></i></div>
|
|
7
7
|
</div>
|
|
8
8
|
<div class='submenu hidden'>
|
|
9
9
|
<%- include('./menu', { menu: item.menu }) %>
|
|
@@ -41,14 +41,12 @@
|
|
|
41
41
|
<div class='loader shutdown online'>
|
|
42
42
|
</div>
|
|
43
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
44
|
<button class='btn'>
|
|
49
45
|
<i class="fa-solid fa-square"></i> Stop
|
|
50
46
|
</button>
|
|
51
47
|
</div>
|
|
48
|
+
<% } else { %>
|
|
49
|
+
<i class="fa-solid fa-angle-right"></i>
|
|
52
50
|
<% } %>
|
|
53
51
|
</a>
|
|
54
52
|
<% } %>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
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-
|
|
6
|
+
<div class='loader'><i class="fa-solid fa-angle-down"></i><i class="fa-solid fa-angle-up hidden"></i></div>
|
|
7
7
|
</div>
|
|
8
8
|
<div class='submenu hidden'>
|
|
9
9
|
<%- include('./menu', { menu: item.menu }) %>
|