pinokiod 3.19.4 → 3.19.6
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/bin/cli.js +4 -4
- package/kernel/bin/index.js +63 -45
- package/kernel/index.js +12 -6
- package/kernel/prototype.js +18 -0
- package/kernel/shells.js +1 -0
- package/kernel/util.js +2 -3
- package/package.json +1 -1
- package/server/index.js +18 -14
- package/server/socket.js +1 -0
- package/server/views/app.ejs +17 -6
- package/server/views/git.ejs +2 -1
- package/server/views/install.ejs +1 -0
- package/server/views/partials/repos.ejs +5 -0
package/kernel/bin/cli.js
CHANGED
|
@@ -2,16 +2,16 @@ const path = require('path')
|
|
|
2
2
|
class CLI {
|
|
3
3
|
async install(req, ondata) {
|
|
4
4
|
await this.kernel.exec({
|
|
5
|
-
message: "npm install -g
|
|
5
|
+
message: "npm install -g pterm@latest --force",
|
|
6
6
|
}, ondata)
|
|
7
7
|
}
|
|
8
8
|
async installed(req, ondata) {
|
|
9
9
|
console.log("Check installed")
|
|
10
10
|
if (this.kernel.which('pinokio')) {
|
|
11
11
|
let res = await this.kernel.exec({
|
|
12
|
-
message: "pinokio version"
|
|
12
|
+
message: "pinokio version terminal"
|
|
13
13
|
}, ondata)
|
|
14
|
-
if (/.*
|
|
14
|
+
if (/.*pterm@0\.0\.6.*/.test(res.stdout)) {
|
|
15
15
|
console.log("Installed")
|
|
16
16
|
return true
|
|
17
17
|
} else {
|
|
@@ -24,7 +24,7 @@ class CLI {
|
|
|
24
24
|
}
|
|
25
25
|
async uninstall(req, ondata) {
|
|
26
26
|
await this.kernel.exec({
|
|
27
|
-
message: "npm uninstall -g
|
|
27
|
+
message: "npm uninstall -g pterm",
|
|
28
28
|
}, ondata)
|
|
29
29
|
}
|
|
30
30
|
}
|
package/kernel/bin/index.js
CHANGED
|
@@ -630,35 +630,38 @@ class Bin {
|
|
|
630
630
|
return res
|
|
631
631
|
}
|
|
632
632
|
}
|
|
633
|
-
async init_launcher(req, ondata) {
|
|
634
|
-
console.log("init_launcher", req)
|
|
635
|
-
try {
|
|
636
|
-
let projectType = req.params.projectType
|
|
637
|
-
let startType = req.params.cliType || req.params.startType
|
|
638
|
-
console.log({ projectType, startType })
|
|
639
|
-
|
|
640
|
-
let cwd = req.cwd
|
|
641
|
-
let name = req.name
|
|
642
|
-
let payload = {}
|
|
643
|
-
payload.cwd = path.resolve(cwd, name)
|
|
644
|
-
payload.input = req.params
|
|
645
|
-
|
|
646
|
-
let mod_path = path.resolve(__dirname, "../proto", projectType, startType)
|
|
647
|
-
let mod = await this.kernel.require(mod_path)
|
|
648
|
-
|
|
649
|
-
await mod(payload, ondata, this.kernel)
|
|
650
|
-
|
|
651
|
-
// copy readme
|
|
652
|
-
let readme_path = path.resolve(__dirname, "../proto/PINOKIO.md")
|
|
653
|
-
console.log("copy to", readme_path, path.resolve(cwd, name, "PINOKIO.md"))
|
|
654
|
-
await fs.promises.cp(readme_path, path.resolve(cwd, name, "PINOKIO.md"))
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
return {
|
|
660
|
-
}
|
|
661
|
-
|
|
633
|
+
// async init_launcher(req, ondata) {
|
|
634
|
+
// console.log("init_launcher", req)
|
|
635
|
+
// try {
|
|
636
|
+
// let projectType = req.params.projectType
|
|
637
|
+
// let startType = req.params.cliType || req.params.startType
|
|
638
|
+
// console.log({ projectType, startType })
|
|
639
|
+
//
|
|
640
|
+
// let cwd = req.cwd
|
|
641
|
+
// let name = req.name
|
|
642
|
+
// let payload = {}
|
|
643
|
+
// payload.cwd = path.resolve(cwd, name)
|
|
644
|
+
// payload.input = req.params
|
|
645
|
+
//
|
|
646
|
+
// let mod_path = path.resolve(__dirname, "../proto", projectType, startType)
|
|
647
|
+
// let mod = await this.kernel.require(mod_path)
|
|
648
|
+
//
|
|
649
|
+
// await mod(payload, ondata, this.kernel)
|
|
650
|
+
//
|
|
651
|
+
// // copy readme
|
|
652
|
+
// let readme_path = path.resolve(__dirname, "../proto/PINOKIO.md")
|
|
653
|
+
// console.log("copy to", readme_path, path.resolve(cwd, name, "PINOKIO.md"))
|
|
654
|
+
// await fs.promises.cp(readme_path, path.resolve(cwd, name, "PINOKIO.md"))
|
|
655
|
+
//
|
|
656
|
+
// // copy CLI.md
|
|
657
|
+
// let cli_readme_path =
|
|
658
|
+
//
|
|
659
|
+
// return { success: "/p/" + name }
|
|
660
|
+
// } catch (e) {
|
|
661
|
+
// console.log("ERROR", e)
|
|
662
|
+
// return { error: e.stack }
|
|
663
|
+
// }
|
|
664
|
+
// }
|
|
662
665
|
async filepicker(req, ondata) {
|
|
663
666
|
let res = await Util.filepicker(req, ondata, this.kernel)
|
|
664
667
|
return res
|
|
@@ -681,7 +684,6 @@ class Bin {
|
|
|
681
684
|
} else {
|
|
682
685
|
this.client = null
|
|
683
686
|
}
|
|
684
|
-
console.log("Client", this.client)
|
|
685
687
|
let requirements = JSON.parse(req.params)
|
|
686
688
|
for(let x=0; x<10; x++) {
|
|
687
689
|
console.log(`## Install Attempt ${x}`)
|
|
@@ -761,6 +763,7 @@ class Bin {
|
|
|
761
763
|
async check_installed(r, dependencies) {
|
|
762
764
|
if (Array.isArray(r.name)) {
|
|
763
765
|
for(let name of r.name) {
|
|
766
|
+
let d = Date.now()
|
|
764
767
|
let installed = await this._installed(name, r.type, dependencies)
|
|
765
768
|
if (!installed) return false
|
|
766
769
|
}
|
|
@@ -773,13 +776,10 @@ class Bin {
|
|
|
773
776
|
async _installed(name, type, dependencies) {
|
|
774
777
|
if (type === "conda") {
|
|
775
778
|
let conda_installed = this.installed.conda.has(name)
|
|
776
|
-
console.log({ dependencies })
|
|
777
779
|
let dependencies_installed = true
|
|
778
780
|
for(let d of dependencies) {
|
|
779
|
-
console.log("checking dependency", d)
|
|
780
781
|
if(!this.installed.conda.has(d)) {
|
|
781
782
|
dependencies_installed = false
|
|
782
|
-
console.log("not installed", d)
|
|
783
783
|
break
|
|
784
784
|
}
|
|
785
785
|
}
|
|
@@ -793,10 +793,20 @@ class Bin {
|
|
|
793
793
|
let filepath = path.resolve(__dirname, "..", "kernel", "bin", name + ".js")
|
|
794
794
|
let mod = this.mod[name]
|
|
795
795
|
let installed = false
|
|
796
|
-
if (
|
|
797
|
-
|
|
796
|
+
if (!this.cached_mod_installed) {
|
|
797
|
+
this.cached_mod_installed = {}
|
|
798
|
+
}
|
|
799
|
+
if (this.cached_mod_installed[name] === true) {
|
|
800
|
+
return true
|
|
801
|
+
} else {
|
|
802
|
+
if (mod.installed) {
|
|
803
|
+
installed = await mod.installed()
|
|
804
|
+
if (installed) {
|
|
805
|
+
this.cached_mod_installed[name] = true
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
return installed
|
|
798
809
|
}
|
|
799
|
-
return installed
|
|
800
810
|
}
|
|
801
811
|
}
|
|
802
812
|
preset(mode) {
|
|
@@ -979,15 +989,22 @@ class Bin {
|
|
|
979
989
|
let install_required = true
|
|
980
990
|
if (!requirements_pending) {
|
|
981
991
|
install_required = false
|
|
982
|
-
console.log("requirements", requirements)
|
|
983
992
|
for(let i=0; i<requirements.length; i++) {
|
|
984
993
|
let r = requirements[i]
|
|
985
994
|
let fingerprint = JSON.stringify(r)
|
|
986
995
|
let installed
|
|
987
|
-
if (this.requirements_cache
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
996
|
+
if (fingerprint in this.requirements_cache) {
|
|
997
|
+
let relevant = this.relevant(r)
|
|
998
|
+
requirements[i].relevant = relevant
|
|
999
|
+
if (relevant) {
|
|
1000
|
+
let dependencies
|
|
1001
|
+
if (r.name === "conda") {
|
|
1002
|
+
dependencies = config.bin.conda_requirements
|
|
1003
|
+
requirements[i].dependencies = dependencies
|
|
1004
|
+
}
|
|
1005
|
+
installed = this.requirements_cache[fingerprint]
|
|
1006
|
+
requirements[i].installed = this.requirements_cache[fingerprint]
|
|
1007
|
+
}
|
|
991
1008
|
} else {
|
|
992
1009
|
//let installed = await this.installed(r)
|
|
993
1010
|
//requirements[i].installed = installed
|
|
@@ -1003,10 +1020,11 @@ class Bin {
|
|
|
1003
1020
|
requirements[i].dependencies = dependencies
|
|
1004
1021
|
}
|
|
1005
1022
|
installed = await this.check_installed(r, dependencies)
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1023
|
+
this.requirements_cache[fingerprint] = installed
|
|
1024
|
+
//if (installed) {
|
|
1025
|
+
// // cache if true
|
|
1026
|
+
// this.requirements_cache[fingerprint] = true
|
|
1027
|
+
//}
|
|
1010
1028
|
requirements[i].installed = installed
|
|
1011
1029
|
}
|
|
1012
1030
|
}
|
package/kernel/index.js
CHANGED
|
@@ -277,7 +277,8 @@ class Kernel {
|
|
|
277
277
|
return installed
|
|
278
278
|
}
|
|
279
279
|
async network_running() {
|
|
280
|
-
let installed =
|
|
280
|
+
let installed = true
|
|
281
|
+
// let installed = await this.network_installed()
|
|
281
282
|
if (installed) {
|
|
282
283
|
try {
|
|
283
284
|
await axios.get(`http://127.0.0.1:2019/config/`, { timeout: 1000 });
|
|
@@ -782,7 +783,9 @@ class Kernel {
|
|
|
782
783
|
this.bin.init().then(() => {
|
|
783
784
|
if (this.homedir) {
|
|
784
785
|
this.shell.init().then(async () => {
|
|
785
|
-
|
|
786
|
+
this.bin.check({
|
|
787
|
+
bin: this.bin.preset("ai"),
|
|
788
|
+
})
|
|
786
789
|
if (this.envs) {
|
|
787
790
|
this.template.update({
|
|
788
791
|
env: this.envs,
|
|
@@ -924,10 +927,13 @@ class Kernel {
|
|
|
924
927
|
}
|
|
925
928
|
async exec(params, ondata) {
|
|
926
929
|
// params.path = this.path()
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
930
|
+
if (this.client) {
|
|
931
|
+
params.cols = this.client.cols
|
|
932
|
+
params.rows = this.client.rows
|
|
933
|
+
} else if (this.bin.client) {
|
|
934
|
+
params.cols = this.bin.client.cols
|
|
935
|
+
params.rows = this.bin.client.rows
|
|
936
|
+
}
|
|
931
937
|
let response = await this.shell.run(params, null, ondata)
|
|
932
938
|
return response
|
|
933
939
|
}
|
package/kernel/prototype.js
CHANGED
|
@@ -24,6 +24,9 @@ class Proto {
|
|
|
24
24
|
}, (e) => {
|
|
25
25
|
process.stdout.write(e.raw)
|
|
26
26
|
})
|
|
27
|
+
}
|
|
28
|
+
let exists2 = await this.kernel.exists("prototype/PINOKIO.md")
|
|
29
|
+
if (!exists2) {
|
|
27
30
|
await this.kernel.download({
|
|
28
31
|
uri: "https://raw.githubusercontent.com/pinokiocomputer/home/refs/heads/main/docs/README.md",
|
|
29
32
|
path: this.kernel.path("prototype"),
|
|
@@ -32,6 +35,16 @@ class Proto {
|
|
|
32
35
|
process.stdout.write(e.raw)
|
|
33
36
|
})
|
|
34
37
|
}
|
|
38
|
+
let exists3 = await this.kernel.exists("prototype/CLI.md")
|
|
39
|
+
if (!exists3) {
|
|
40
|
+
await this.kernel.download({
|
|
41
|
+
uri: "https://raw.githubusercontent.com/pinokiocomputer/pterm/refs/heads/main/README.md",
|
|
42
|
+
path: this.kernel.path("prototype"),
|
|
43
|
+
filename: "CLI.md"
|
|
44
|
+
}, (e) => {
|
|
45
|
+
process.stdout.write(e.raw)
|
|
46
|
+
})
|
|
47
|
+
}
|
|
35
48
|
}
|
|
36
49
|
}
|
|
37
50
|
async reset() {
|
|
@@ -59,6 +72,11 @@ class Proto {
|
|
|
59
72
|
let readme_path = this.kernel.path("prototype/PINOKIO.md")
|
|
60
73
|
await fs.promises.cp(readme_path, path.resolve(cwd, name, "PINOKIO.md"))
|
|
61
74
|
|
|
75
|
+
// copy cli.md
|
|
76
|
+
let cli_readme_path = this.kernel.path("prototype/CLI.md")
|
|
77
|
+
await fs.promises.cp(cli_readme_path, path.resolve(cwd, name, "CLI.md"))
|
|
78
|
+
|
|
79
|
+
|
|
62
80
|
return { success: "/p/" + name }
|
|
63
81
|
} catch (e) {
|
|
64
82
|
console.log("ERROR", e)
|
package/kernel/shells.js
CHANGED
package/kernel/util.js
CHANGED
|
@@ -32,10 +32,9 @@ if( __dirname.includes(".asar") ) {
|
|
|
32
32
|
}
|
|
33
33
|
const { getFolderSize, getFolderSizeBin, getFolderSizeWasm, } = g
|
|
34
34
|
const du = async (folderpath) => {
|
|
35
|
-
console.time("disk size calc")
|
|
35
|
+
// console.time("disk size calc")
|
|
36
36
|
let totalSize = await getFolderSizeBin(folderpath)
|
|
37
|
-
console.timeEnd("disk size calc")
|
|
38
|
-
console.log("totalSize", totalSize)
|
|
37
|
+
// console.timeEnd("disk size calc")
|
|
39
38
|
return totalSize;
|
|
40
39
|
}
|
|
41
40
|
|
package/package.json
CHANGED
package/server/index.js
CHANGED
|
@@ -366,10 +366,6 @@ class Server {
|
|
|
366
366
|
}
|
|
367
367
|
|
|
368
368
|
async chrome(req, res, type) {
|
|
369
|
-
let d = "Request " + Date.now()
|
|
370
|
-
console.time(d)
|
|
371
|
-
|
|
372
|
-
console.time("bin check " + d)
|
|
373
369
|
let { requirements, install_required, requirements_pending, error } = await this.kernel.bin.check({
|
|
374
370
|
bin: this.kernel.bin.preset("dev"),
|
|
375
371
|
})
|
|
@@ -377,7 +373,6 @@ class Server {
|
|
|
377
373
|
res.redirect(`/setup/dev?callback=${req.originalUrl}`)
|
|
378
374
|
return
|
|
379
375
|
}
|
|
380
|
-
console.timeEnd("bin check " + d)
|
|
381
376
|
|
|
382
377
|
let name = req.params.name
|
|
383
378
|
let config = await this.kernel.api.meta(name)
|
|
@@ -530,7 +525,6 @@ class Server {
|
|
|
530
525
|
|
|
531
526
|
let c = this.kernel.path("api", name)
|
|
532
527
|
|
|
533
|
-
let repos = await this.kernel.git.repos(c)
|
|
534
528
|
await this.kernel.plugin.init()
|
|
535
529
|
let plugin = await this.getPlugin(name)
|
|
536
530
|
let plugin_menu = null
|
|
@@ -543,7 +537,7 @@ class Server {
|
|
|
543
537
|
let current_urls = await this.current_urls(req.originalUrl.slice(1))
|
|
544
538
|
|
|
545
539
|
const result = {
|
|
546
|
-
repos,
|
|
540
|
+
// repos,
|
|
547
541
|
current_urls,
|
|
548
542
|
path: this.kernel.path("api", name),
|
|
549
543
|
plugin_menu,
|
|
@@ -559,6 +553,7 @@ class Server {
|
|
|
559
553
|
running:this.kernel.api.running,
|
|
560
554
|
memory: this.kernel.memory,
|
|
561
555
|
sidebar: "/pinokio/sidebar/" + name,
|
|
556
|
+
repos: "/pinokio/repos/" + name,
|
|
562
557
|
dynamic: "/pinokio/dynamic/" + name,
|
|
563
558
|
// dynamic: "/pinokio/dynamic/" + name,
|
|
564
559
|
dynamic_content: null,
|
|
@@ -579,7 +574,6 @@ class Server {
|
|
|
579
574
|
if (!this.kernel.proto.config) {
|
|
580
575
|
await this.kernel.proto.init()
|
|
581
576
|
}
|
|
582
|
-
console.timeEnd(d)
|
|
583
577
|
res.render("app", result)
|
|
584
578
|
}
|
|
585
579
|
getVariationUrls(req) {
|
|
@@ -2468,7 +2462,6 @@ class Server {
|
|
|
2468
2462
|
}
|
|
2469
2463
|
}
|
|
2470
2464
|
async getPlugin(name) {
|
|
2471
|
-
console.log("getPlugin", name)
|
|
2472
2465
|
if (this.kernel.plugin.config) {
|
|
2473
2466
|
try {
|
|
2474
2467
|
let info = new Info(this.kernel)
|
|
@@ -2494,7 +2487,6 @@ class Server {
|
|
|
2494
2487
|
}
|
|
2495
2488
|
}
|
|
2496
2489
|
async check_router_up() {
|
|
2497
|
-
console.log("/check_router_up")
|
|
2498
2490
|
// check if caddy is runnign properly
|
|
2499
2491
|
// try https://pinokio.localhost
|
|
2500
2492
|
// if it works, proceed
|
|
@@ -2509,9 +2501,9 @@ class Server {
|
|
|
2509
2501
|
https_running = true
|
|
2510
2502
|
}
|
|
2511
2503
|
} catch (e) {
|
|
2512
|
-
console.log(e)
|
|
2504
|
+
// console.log(e)
|
|
2513
2505
|
}
|
|
2514
|
-
console.log({ https_running })
|
|
2506
|
+
// console.log({ https_running })
|
|
2515
2507
|
if (!https_running) {
|
|
2516
2508
|
return { error: "pinokio.host not yet available" }
|
|
2517
2509
|
}
|
|
@@ -4608,6 +4600,17 @@ class Server {
|
|
|
4608
4600
|
}
|
|
4609
4601
|
res.send(html)
|
|
4610
4602
|
}))
|
|
4603
|
+
this.app.get("/pinokio/repos/:name", ex(async (req, res) => {
|
|
4604
|
+
// await this.kernel.plugin.init()
|
|
4605
|
+
let c = this.kernel.path("api", req.params.name)
|
|
4606
|
+
let repos = await this.kernel.git.repos(c)
|
|
4607
|
+
let html = await new Promise((resolve, reject) => {
|
|
4608
|
+
ejs.renderFile(path.resolve(__dirname, "views/partials/repos.ejs"), { repos }, (err, html) => {
|
|
4609
|
+
resolve(html)
|
|
4610
|
+
})
|
|
4611
|
+
})
|
|
4612
|
+
res.send(html)
|
|
4613
|
+
}))
|
|
4611
4614
|
this.app.get("/pinokio/sidebar/:name", ex(async (req, res) => {
|
|
4612
4615
|
let name = req.params.name
|
|
4613
4616
|
let app_path = this.kernel.path("api", name, "pinokio.js")
|
|
@@ -4894,6 +4897,9 @@ class Server {
|
|
|
4894
4897
|
await compressing.zip.compressDir(folder, zipPath)
|
|
4895
4898
|
res.json({ success: true })
|
|
4896
4899
|
}))
|
|
4900
|
+
this.app.get("/pinokio/version", ex(async (req, res) => {
|
|
4901
|
+
res.json(this.version)
|
|
4902
|
+
}))
|
|
4897
4903
|
this.app.get("/pinokio/info", ex(async (req, res) => {
|
|
4898
4904
|
await this.kernel.getInfo(true)
|
|
4899
4905
|
let info = Object.assign({}, this.kernel.i)
|
|
@@ -5221,7 +5227,6 @@ class Server {
|
|
|
5221
5227
|
if (this.kernel.peer.active) {
|
|
5222
5228
|
// if network is active, return success only if the router is up for all of its peers (including itself)
|
|
5223
5229
|
console.log({ peer_info: this.kernel.peer.info })
|
|
5224
|
-
console.time("check_peer")
|
|
5225
5230
|
let ready = true
|
|
5226
5231
|
if (this.kernel.peer.info && Object.keys(this.kernel.peer.info).length > 0) {
|
|
5227
5232
|
for(let host in this.kernel.peer.info) {
|
|
@@ -5237,7 +5242,6 @@ class Server {
|
|
|
5237
5242
|
ready = false;
|
|
5238
5243
|
}
|
|
5239
5244
|
console.log({ info: this.kernel.peer.info, ready })
|
|
5240
|
-
console.timeEnd("check_peer")
|
|
5241
5245
|
if (ready) {
|
|
5242
5246
|
res.json({ success: true })
|
|
5243
5247
|
} else {
|
package/server/socket.js
CHANGED
package/server/views/app.ejs
CHANGED
|
@@ -873,12 +873,7 @@ body.dark .appcanvas {
|
|
|
873
873
|
<div class='tab'><i class="fa-solid fa-cloud"></i> Git</div>
|
|
874
874
|
<div class='loader'><i class="fa-solid fa-angle-down"></i><i class="fa-solid fa-angle-up hidden"></i></div>
|
|
875
875
|
</div>
|
|
876
|
-
<div class='submenu'>
|
|
877
|
-
<% repos.forEach((git, index) => { %>
|
|
878
|
-
<a target="/git/<%=git.gitParentRelPath%>" href="/git/<%=git.gitParentRelPath%>" class='btn header-item frame-link' data-index="<%=index%>" data-mode="refresh">
|
|
879
|
-
<div class='tab'><i class="fa-regular fa-folder-open"></i> <%=git.gitRelPath%></div>
|
|
880
|
-
</a>
|
|
881
|
-
<% }) %>
|
|
876
|
+
<div class='submenu' id='git-repos'>
|
|
882
877
|
</div>
|
|
883
878
|
</div>
|
|
884
879
|
<% } %>
|
|
@@ -1933,6 +1928,14 @@ body.dark .appcanvas {
|
|
|
1933
1928
|
document.querySelector(".dynamic").innerHTML = dynamic
|
|
1934
1929
|
}
|
|
1935
1930
|
|
|
1931
|
+
|
|
1932
|
+
const repos = await fetch("<%=repos%>").then((res) => {
|
|
1933
|
+
return res.text()
|
|
1934
|
+
})
|
|
1935
|
+
if (document.querySelector("#git-repos")) {
|
|
1936
|
+
document.querySelector("#git-repos").innerHTML = repos
|
|
1937
|
+
}
|
|
1938
|
+
|
|
1936
1939
|
location.hash = ""
|
|
1937
1940
|
|
|
1938
1941
|
// render the selected frame only if not silent
|
|
@@ -2042,6 +2045,14 @@ body.dark .appcanvas {
|
|
|
2042
2045
|
});
|
|
2043
2046
|
refresh_du()
|
|
2044
2047
|
<% if (type !== 'run') { %>
|
|
2048
|
+
debugger
|
|
2049
|
+
fetch("<%=repos%>").then((res) => {
|
|
2050
|
+
return res.text()
|
|
2051
|
+
}).then((repos) => {
|
|
2052
|
+
if (document.querySelector("#git-repos")) {
|
|
2053
|
+
document.querySelector("#git-repos").innerHTML = repos
|
|
2054
|
+
}
|
|
2055
|
+
})
|
|
2045
2056
|
if (document.querySelector(".dynamic .reveal")) {
|
|
2046
2057
|
document.querySelector(".dynamic .reveal").click()
|
|
2047
2058
|
}
|
package/server/views/git.ejs
CHANGED
|
@@ -115,11 +115,12 @@ main h3 {
|
|
|
115
115
|
<nav>
|
|
116
116
|
<% if (remote) { %>
|
|
117
117
|
<a href="/run/scripts/git/push.json?cwd=<%=encodeURIComponent(dir)%>" class='btn'><i class="fa-brands fa-github"></i> Publish to GitHub</a>
|
|
118
|
+
<a href="/run/scripts/git/commit.json?cwd=<%=encodeURIComponent(dir)%>" class='btn'><i class="fa-solid fa-floppy-disk"></i> Commit (Save the current version)</a>
|
|
118
119
|
<a href="<%=remote%>" target="_blank"><%=remote%></a>
|
|
119
120
|
<% } else { %>
|
|
120
121
|
<a href="/run/scripts/git/create.json?cwd=<%=encodeURIComponent(dir)%>" class='btn'><i class="fa-brands fa-github"></i> Create on GitHub</a>
|
|
122
|
+
<a href="/run/scripts/git/commit.json?cwd=<%=encodeURIComponent(dir)%>" class='btn'><i class="fa-solid fa-floppy-disk"></i> Commit (Save the current version)</a>
|
|
121
123
|
<% } %>
|
|
122
|
-
<a href="/run/scripts/git/commit.json?cwd=<%=encodeURIComponent(dir)%>" class='btn'><i class="fa-solid fa-floppy-disk"></i> Commit (Save the current version)</a>
|
|
123
124
|
</nav>
|
|
124
125
|
<main>
|
|
125
126
|
<h2>Changed Files</h2>
|
package/server/views/install.ejs
CHANGED
|
@@ -244,6 +244,7 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
244
244
|
});
|
|
245
245
|
observer.observe(document.body)
|
|
246
246
|
await new Promise((resolve, reject) => {
|
|
247
|
+
console.log({ cols: term.cols, rows: term.rows })
|
|
247
248
|
socket.run({
|
|
248
249
|
id: location.pathname,
|
|
249
250
|
method: "kernel.bin.install",
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<% repos.forEach((git, index) => { %>
|
|
2
|
+
<a target="/git/<%=git.gitParentRelPath%>" href="/git/<%=git.gitParentRelPath%>" class='btn header-item frame-link' data-index="<%=index%>" data-mode="refresh">
|
|
3
|
+
<div class='tab'><i class="fa-regular fa-folder-open"></i> <%=git.gitRelPath%></div>
|
|
4
|
+
</a>
|
|
5
|
+
<% }) %>
|