File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ )
Original file line number Diff line number Diff line change 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 =
You can’t perform that action at this time.
0 commit comments