diff --git a/config/loader.go b/config/loader.go index cb4fb19..085df14 100644 --- a/config/loader.go +++ b/config/loader.go @@ -7,7 +7,7 @@ import ( type config struct { Views string `toml:"views"` - Layouts string `toml:"layouts"` + Layout string `toml:"layout"` Target string `toml:"target"` } diff --git a/example/ssgod.toml b/example/ssgod.toml index 1e9034a..f0b83c3 100644 --- a/example/ssgod.toml +++ b/example/ssgod.toml @@ -1,3 +1,3 @@ views = "./pages" -layouts = "layouts/main" +layout = "layouts/main" target = "./public" diff --git a/main.go b/main.go index 8a3d271..c160dd8 100644 --- a/main.go +++ b/main.go @@ -18,57 +18,63 @@ func Fail(err error, format string, v ...any) error { 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(path string, d fs.DirEntry, err error) error { - if !d.IsDir() { - if err != nil { return Fail(err, "path: %s", path); } +func ProcessDirEntry(engine *html.Engine, path string, d fs.DirEntry, err error) error { + settings := config.Settings + + if !d.IsDir() { + if err != nil { return Fail(err, "path: %s", path); } - dir := filepath.Dir(path) - err = os.MkdirAll(dir, 0750) - if err != nil { - return Fail(err, "making dir %s", dir); - } + dir := filepath.Dir(path) + err = os.MkdirAll(dir, 0750) + if err != nil { + return Fail(err, "making dir %s", dir); + } - split_path := strings.Split(path, string(os.PathSeparator))[1:] - source_name := strings.Join(split_path, "/") // Render wants / even on windows - ext := filepath.Ext(source_name) - template_name, found := strings.CutSuffix(source_name, ext) + split_path := strings.Split(path, string(os.PathSeparator))[1:] + source_name := strings.Join(split_path, "/") // Render wants / even on windows + ext := filepath.Ext(source_name) + template_name, found := strings.CutSuffix(source_name, ext) - if found && ext == ".html" && template_name != layout { - prefixed_path := append([]string{target}, split_path...) + if found && ext == ".html" && template_name != settings.Layout { + prefixed_path := append([]string{settings.Target}, split_path...) - target_path := filepath.Join(prefixed_path...) - _, err := os.Stat(target_path) + target_path := filepath.Join(prefixed_path...) + _, err := os.Stat(target_path) - if os.IsNotExist(err) { - target_dir := filepath.Dir(target_path) - log.Println("MAKING: ", target_dir) - os.MkdirAll(target_dir, 0750) - } + if os.IsNotExist(err) { + target_dir := filepath.Dir(target_path) + log.Println("MAKING: ", target_dir) + 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) - if err != nil { return Fail(err, "writing file %s", target_path) } + 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) } - // generate a data-testid for all pages based on template name - page_id := strings.ReplaceAll(template_name, "/", "-") + "-page" + // generate a data-testid for all pages based on template name + page_id := strings.ReplaceAll(template_name, "/", "-") + "-page" - err = engine.Render(out, template_name, fiber.Map{"PageId": page_id}, layout) - if err != nil { return Fail(err, "failed to render %s", path) } + err = engine.Render(out, template_name, fiber.Map{"PageId": page_id}, settings.Layout) + if err != nil { return Fail(err, "failed to render %s", path) } - log.Printf("RENDER: %s -> %s", template_name, target_path) - out.Close() - } - } + log.Printf("RENDER: %s -> %s", template_name, target_path) + 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") } } @@ -76,7 +82,7 @@ func RenderPages(pages_path string, layout string, target string) { func main() { config.Load("ssgod.toml") 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() }