package main import ( "context" "fmt" "io" "log" "net/http" "os" "path/filepath" "piekarnikgosi/data" "piekarnikgosi/html" "piekarnikgosi/utils" "sort" ) type ComponentRenderer interface { Render(ctx context.Context, w io.Writer) error } func saveFile(name string, comp ComponentRenderer) { file, err := os.Create("www/" + name + ".html") if err != nil { log.Fatal(err) } defer file.Close() err = comp.Render(context.Background(), file) if err != nil { log.Fatal(err) } } func portfolioImages() []string { entries, err := os.ReadDir("img/portfolio") if err != nil { log.Fatal(err) } var names []string for _, e := range entries { if filepath.Ext(e.Name()) == ".avif" { names = append(names, e.Name()) } } sort.Strings(names) return names } func generateHTML() { log.Println("generating html") saveFile(`index`, html.Index()) saveFile(`kawiarnia`, html.Kawiarnia()) saveFile(`portfolio`, html.Portfolio(portfolioImages())) saveFile(`wyroby`, html.Wyroby(data.Cakes, "wyroby")) saveFile(`wyroby_deserki`, html.Wyroby(data.Desserts, "wyroby_deserki")) saveFile(`wyroby_torty`, html.WyrobyTorty()) saveFile(`wyroby_slodkie_stoly`, html.WyrobySlodkieStoly()) saveFile(`wyroby_lody`, html.WyrobyLody()) } func mergeStyles() { log.Println("generating css") cssFiles := []string{ "normalize.css", "base.css", "components.css", "home.css", "layout.css", "wyroby.css", "wyroby_torty.css", "wyroby_slodkie_stoly.css", "wyroby_lody.css", "portfolio.css", "kawiarnia.css", } var bundledCSS []byte for _, fileName := range cssFiles { filePath := fmt.Sprint("css/", fileName) content, err := os.ReadFile(filePath) if err != nil { log.Fatal(err) } bundledCSS = append(bundledCSS, content...) bundledCSS = append(bundledCSS, '\n') } err := os.WriteFile("www/style.css", bundledCSS, 0666) if err != nil { log.Fatal(err) } } func ensureDir() { log.Println("creating directories") err := os.MkdirAll("www/images", 0777) if err != nil { log.Fatal(err) } } func main() { ensureDir() generateHTML() mergeStyles() utils.CopyFile("img/favicon.avif", "www/images/favicon.avif") utils.CopyFile("img/logo.svg", "www/images/logo.svg") log.Println("listening on :8000") log.Fatal(http.ListenAndServe(":8000", http.FileServer(http.Dir("www")))) }