77 lines
1.4 KiB
Go
77 lines
1.4 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"io"
|
||
|
"os"
|
||
|
|
||
|
"git.jojodev.com/jolheiser/simpleicons"
|
||
|
"github.com/a-h/templ"
|
||
|
"gopkg.in/yaml.v3"
|
||
|
)
|
||
|
|
||
|
type Link struct {
|
||
|
Name string `yaml:"name"`
|
||
|
URL string `yaml:"url"`
|
||
|
IconName string `yaml:"icon"`
|
||
|
}
|
||
|
|
||
|
func (l Link) Icon() simpleicons.Icon {
|
||
|
return simpleicons.Icons[l.IconName]
|
||
|
}
|
||
|
|
||
|
var tailwindCSS = `
|
||
|
@tailwind base;
|
||
|
@tailwind components;
|
||
|
@tailwind utilities;
|
||
|
`
|
||
|
|
||
|
//go:generate templ generate
|
||
|
//go:generate go run .
|
||
|
//go:generate tailwind-ctp -i ./dist/styles.css -o ./dist/styles.css --minify
|
||
|
func main() {
|
||
|
var links struct {
|
||
|
Links []Link `yaml:"links"`
|
||
|
}
|
||
|
|
||
|
fi, err := os.Open("links.yaml")
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
defer fi.Close()
|
||
|
if err := yaml.NewDecoder(fi).Decode(&links); err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
if err := os.MkdirAll("dist", os.ModePerm); err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
html, err := os.Create("dist/index.html")
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
defer html.Close()
|
||
|
|
||
|
err = index(links.Links).Render(context.Background(), html)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
css, err := os.Create("dist/styles.css")
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
defer css.Close()
|
||
|
if _, err := css.WriteString(tailwindCSS); err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func SafeHTML(html string) templ.Component {
|
||
|
return templ.ComponentFunc(func(ctx context.Context, w io.Writer) (err error) {
|
||
|
_, err = io.WriteString(w, html)
|
||
|
return
|
||
|
})
|
||
|
}
|