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.
@@ -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'><input data-type="checkbox" type="checkbox" data-id="${field.key}" value="${field.key}" />${field.text}</div>`
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
- return [
48
- "<div class='field'>",
49
- `<label class='title'>${field.title ? field.title : ''}</label>`,
50
- input,
51
- `<label class='description'>${field.description ? field.description : ''}</label>`,
52
- "</div>"
53
- ].join("\n")
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
@@ -38,7 +38,6 @@ document.addEventListener("click", async (e) => {
38
38
  }
39
39
  }
40
40
  if (el) {
41
- debugger
42
41
  e.preventDefault()
43
42
  e.stopPropagation()
44
43
  let run = el.getAttribute("data-run")
@@ -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: white;
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: center;
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: 3px solid #82bc09;
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;
@@ -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-caret-down"></i><i class="fa-solid fa-caret-up hidden"></i></div>
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-caret-down"></i><i class="fa-solid fa-caret-up hidden"></i></div>
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-caret-down"></i><i class="fa-solid fa-caret-up hidden"></i></div>
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-caret-down").classList.toggle("hidden")
1578
- target.querySelector(".loader .fa-caret-up").classList.toggle("hidden")
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
@@ -112,13 +112,13 @@ main {
112
112
  padding: 80px;
113
113
  text-align: center;
114
114
  }
115
- .head .desc {
116
- opacity: 0.7;
117
- padding: 10px;
115
+ .desc {
116
+ padding: 10px 0;
118
117
  }
119
118
  .head h3 {
120
- font-size: 20px;
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='head'>
185
- <h3><i class="fa-solid fa-circle-user"></i><br><br>Connect with 3rd Party</h3>
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='setup-items'>
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
- <h3><%=item.title%></h3>
192
- <div class='desc'><%=item.description%></div>
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>
@@ -162,7 +162,8 @@ a.ln:hover {
162
162
  .header-label {
163
163
  padding: 0;
164
164
  font-size: 50px;
165
- letter-spacing: -1px;
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: bold;
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-caret-down"></i><i class="fa-solid fa-caret-up hidden"></i></div>
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-caret-down"></i><i class="fa-solid fa-caret-up hidden"></i></div>
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 }) %>