package main import ( "context" "fmt" "io" "log" "net/http" "os" "piekarnikgosi/resources" "piekarnikgosi/templates" ) 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 generateHTML() { log.Println("generating html") saveFile(`index`, templates.Index()) saveFile(`kawiarnia`, templates.Kawiarnia()) saveFile(`portfolio`, templates.Portfolio()) saveFile(`wyroby`, templates.Wyroby(resources.Cakes, "wyroby")) saveFile(`wyroby_deserki`, templates.Wyroby(resources.Desserts, "wyroby_deserki")) saveFile(`wyroby_torty`, templates.WyrobyTorty()) saveFile(`wyroby_slodkie_stoly`, templates.WyrobySlodkieStoly()) saveFile(`wyroby_lody`, templates.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("templates/styles/", 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() log.Println("listening on :8000") log.Fatal(http.ListenAndServe(":8000", http.FileServer(http.Dir("www")))) }