Skip to content

Commit 34c65c0

Browse files
綾人綾人
authored andcommitted
implement basic CLI to capture code screenshots
1 parent 0d6b4dc commit 34c65c0

5 files changed

Lines changed: 90 additions & 0 deletions

File tree

cmd/cli/generated_code.png

2.25 KB
Loading

cmd/cli/main.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package main
2+
3+
import (
4+
"encoding/base64"
5+
"fmt"
6+
"os"
7+
"time"
8+
9+
"github.com/go-rod/rod"
10+
"github.com/go-rod/rod/lib/launcher"
11+
)
12+
13+
func main() {
14+
// Get code from command line arguments
15+
if len(os.Args) < 2 {
16+
fmt.Println("Usage: go run main.go '<code string>'")
17+
os.Exit(1)
18+
}
19+
20+
code := os.Args[1]
21+
22+
// Browser Launch
23+
launchURL := launcher.New().Headless(true).MustLaunch()
24+
browser := rod.New().ControlURL(launchURL).MustConnect()
25+
defer browser.MustClose()
26+
27+
// Dynamically generate HTML from code Browser startup
28+
htmlContent := generateHTML(code)
29+
30+
// Convert HTML to Data URL and open
31+
dataURL := "data:text/html;base64," + base64.StdEncoding.EncodeToString([]byte(htmlContent))
32+
page := browser.MustPage(dataURL)
33+
34+
// page load wait
35+
time.Sleep(1 * time.Second)
36+
37+
// Only the pre element is scrubbed.
38+
pre := page.MustElement("pre")
39+
outputFile := "generated_code.png"
40+
pre.MustScreenshot(outputFile)
41+
42+
fmt.Println("Screenshot saved:", outputFile)
43+
}
44+
45+
// Generate an HTML template from the given code string
46+
func generateHTML(code string) string {
47+
return fmt.Sprintf(`
48+
<!DOCTYPE html>
49+
<html lang="en">
50+
<head><meta charset="UTF-8"><title>SnapCode</title>
51+
<style>
52+
body { background: #1e1e1e; display:flex;justify-content:center;align-items:center;height:100vh;margin:0; }
53+
pre { background:#282c34;color:#61dafb;padding:16px;border-radius:8px;font-size:16px;overflow:auto; }
54+
</style>
55+
</head>
56+
<body>
57+
<pre><code>%s</code></pre>
58+
</body>
59+
</html>
60+
`, code)
61+
}

cmd/cli/snapcode

14.2 MB
Binary file not shown.

go.mod

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module snapcode
2+
3+
go 1.24.2
4+
5+
require github.com/go-rod/rod v0.116.2
6+
7+
require (
8+
github.com/ysmood/fetchup v0.2.3 // indirect
9+
github.com/ysmood/goob v0.4.0 // indirect
10+
github.com/ysmood/got v0.40.0 // indirect
11+
github.com/ysmood/gson v0.7.3 // indirect
12+
github.com/ysmood/leakless v0.9.0 // indirect
13+
)

go.sum

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
github.com/go-rod/rod v0.116.2 h1:A5t2Ky2A+5eD/ZJQr1EfsQSe5rms5Xof/qj296e+ZqA=
2+
github.com/go-rod/rod v0.116.2/go.mod h1:H+CMO9SCNc2TJ2WfrG+pKhITz57uGNYU43qYHh438Mg=
3+
github.com/ysmood/fetchup v0.2.3 h1:ulX+SonA0Vma5zUFXtv52Kzip/xe7aj4vqT5AJwQ+ZQ=
4+
github.com/ysmood/fetchup v0.2.3/go.mod h1:xhibcRKziSvol0H1/pj33dnKrYyI2ebIvz5cOOkYGns=
5+
github.com/ysmood/goob v0.4.0 h1:HsxXhyLBeGzWXnqVKtmT9qM7EuVs/XOgkX7T6r1o1AQ=
6+
github.com/ysmood/goob v0.4.0/go.mod h1:u6yx7ZhS4Exf2MwciFr6nIM8knHQIE22lFpWHnfql18=
7+
github.com/ysmood/gop v0.2.0 h1:+tFrG0TWPxT6p9ZaZs+VY+opCvHU8/3Fk6BaNv6kqKg=
8+
github.com/ysmood/gop v0.2.0/go.mod h1:rr5z2z27oGEbyB787hpEcx4ab8cCiPnKxn0SUHt6xzk=
9+
github.com/ysmood/got v0.40.0 h1:ZQk1B55zIvS7zflRrkGfPDrPG3d7+JOza1ZkNxcc74Q=
10+
github.com/ysmood/got v0.40.0/go.mod h1:W7DdpuX6skL3NszLmAsC5hT7JAhuLZhByVzHTq874Qg=
11+
github.com/ysmood/gotrace v0.6.0 h1:SyI1d4jclswLhg7SWTL6os3L1WOKeNn/ZtzVQF8QmdY=
12+
github.com/ysmood/gotrace v0.6.0/go.mod h1:TzhIG7nHDry5//eYZDYcTzuJLYQIkykJzCRIo4/dzQM=
13+
github.com/ysmood/gson v0.7.3 h1:QFkWbTH8MxyUTKPkVWAENJhxqdBa4lYTQWqZCiLG6kE=
14+
github.com/ysmood/gson v0.7.3/go.mod h1:3Kzs5zDl21g5F/BlLTNcuAGAYLKt2lV5G8D1zF3RNmg=
15+
github.com/ysmood/leakless v0.9.0 h1:qxCG5VirSBvmi3uynXFkcnLMzkphdh3xx5FtrORwDCU=
16+
github.com/ysmood/leakless v0.9.0/go.mod h1:R8iAXPRaG97QJwqxs74RdwzcRHT1SWCGTNqY8q0JvMQ=

0 commit comments

Comments
 (0)