Refactor the code more to make it esier to work on.

master
Zed A. Shaw 4 weeks ago
parent 08f90ec9f4
commit c0b4d68a9a
  1. 2
      config/loader.go
  2. 2
      example/ssgod.toml
  3. 88
      main.go

@ -7,7 +7,7 @@ import (
type config struct { type config struct {
Views string `toml:"views"` Views string `toml:"views"`
Layouts string `toml:"layouts"` Layout string `toml:"layout"`
Target string `toml:"target"` Target string `toml:"target"`
} }

@ -1,3 +1,3 @@
views = "./pages" views = "./pages"
layouts = "layouts/main" layout = "layouts/main"
target = "./public" target = "./public"

@ -18,57 +18,63 @@ func Fail(err error, format string, v ...any) error {
return err return err
} }
func RenderPages(pages_path string, layout string, target string) {
log.Printf("LAYOUT IS: %v", layout)
engine := html.New(pages_path, ".html")
engine.Load()
err := filepath.WalkDir(pages_path, func ProcessDirEntry(engine *html.Engine, path string, d fs.DirEntry, err error) error {
func(path string, d fs.DirEntry, err error) error { settings := config.Settings
if !d.IsDir() {
if err != nil { return Fail(err, "path: %s", path); } if !d.IsDir() {
if err != nil { return Fail(err, "path: %s", path); }
dir := filepath.Dir(path) dir := filepath.Dir(path)
err = os.MkdirAll(dir, 0750) err = os.MkdirAll(dir, 0750)
if err != nil { if err != nil {
return Fail(err, "making dir %s", dir); return Fail(err, "making dir %s", dir);
} }
split_path := strings.Split(path, string(os.PathSeparator))[1:] split_path := strings.Split(path, string(os.PathSeparator))[1:]
source_name := strings.Join(split_path, "/") // Render wants / even on windows source_name := strings.Join(split_path, "/") // Render wants / even on windows
ext := filepath.Ext(source_name) ext := filepath.Ext(source_name)
template_name, found := strings.CutSuffix(source_name, ext) template_name, found := strings.CutSuffix(source_name, ext)
if found && ext == ".html" && template_name != layout { if found && ext == ".html" && template_name != settings.Layout {
prefixed_path := append([]string{target}, split_path...) prefixed_path := append([]string{settings.Target}, split_path...)
target_path := filepath.Join(prefixed_path...) target_path := filepath.Join(prefixed_path...)
_, err := os.Stat(target_path) _, err := os.Stat(target_path)
if os.IsNotExist(err) { if os.IsNotExist(err) {
target_dir := filepath.Dir(target_path) target_dir := filepath.Dir(target_path)
log.Println("MAKING: ", target_dir) log.Println("MAKING: ", target_dir)
os.MkdirAll(target_dir, 0750) os.MkdirAll(target_dir, 0750)
} }
// TODO: compare time stamps and skip if not newer // TODO: compare time stamps and skip if not newer
out, err := os.OpenFile(target_path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) out, err := os.OpenFile(target_path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil { return Fail(err, "writing file %s", target_path) } if err != nil { return Fail(err, "writing file %s", target_path) }
// generate a data-testid for all pages based on template name // generate a data-testid for all pages based on template name
page_id := strings.ReplaceAll(template_name, "/", "-") + "-page" page_id := strings.ReplaceAll(template_name, "/", "-") + "-page"
err = engine.Render(out, template_name, fiber.Map{"PageId": page_id}, layout) err = engine.Render(out, template_name, fiber.Map{"PageId": page_id}, settings.Layout)
if err != nil { return Fail(err, "failed to render %s", path) } if err != nil { return Fail(err, "failed to render %s", path) }
log.Printf("RENDER: %s -> %s", template_name, target_path) log.Printf("RENDER: %s -> %s", template_name, target_path)
out.Close() out.Close()
} }
} }
return nil
}
func RenderPages() {
engine := html.New(config.Settings.Views, ".html")
engine.Load()
return nil err := filepath.WalkDir(config.Settings.Views,
}) func (path string, d fs.DirEntry, err error) error {
return ProcessDirEntry(engine, path, d, err)
})
if err != nil { log.Fatalf("can't walk content") } if err != nil { log.Fatalf("can't walk content") }
} }
@ -76,7 +82,7 @@ func RenderPages(pages_path string, layout string, target string) {
func main() { func main() {
config.Load("ssgod.toml") config.Load("ssgod.toml")
log.Printf("views=%s, layouts=%s, target=%s", log.Printf("views=%s, layouts=%s, target=%s",
config.Settings.Views, config.Settings.Layouts, config.Settings.Target) config.Settings.Views, config.Settings.Layout, config.Settings.Target)
RenderPages(config.Settings.Views, config.Settings.Layouts, config.Settings.Target) RenderPages()
} }

Loading…
Cancel
Save