Refactored the code so that it's easier to work on and get it ready to rip out Fiber's templates.

master
Zed A. Shaw 11 months ago
parent a9bcb6360a
commit 21fd1cb613
  1. 100
      main.go

@ -19,63 +19,89 @@ func Fail(err error, format string, v ...any) error {
return err return err
} }
func RenderMarkdown(target_path string, ext string, path string) error {
// need to strip the .md and replace with .html
html_name, _ := strings.CutSuffix(target_path, ext)
html_name = fmt.Sprintf("%s.html", html_name)
func ProcessDirEntry(engine *html.Engine, path string, d fs.DirEntry, err error) error { log.Printf("MARKDOWN: %s -> %s", path, html_name)
settings := config.Settings
if !d.IsDir() { out, err := os.OpenFile(html_name, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil { return Fail(err, "path: %s", path); } defer out.Close()
if err != nil { return Fail(err, "writing file %s", target_path) }
dir := filepath.Dir(path) input_data, err := os.ReadFile(path)
err = os.MkdirAll(dir, 0750) err = goldmark.Convert(input_data, out)
if err != nil {
return Fail(err, "making dir %s", dir); return err;
} }
split_path := strings.Split(path, string(os.PathSeparator))[1:] func RenderHTML(engine *html.Engine, source_name string, target_path string, page_id string) error {
source_name := strings.Join(split_path, "/") // Render wants / even on windows log.Printf("RENDER: %s -> %s", source_name, target_path)
ext := filepath.Ext(source_name)
source_name, found := strings.CutSuffix(source_name, ext)
if found && source_name != settings.Layout { out, err := os.OpenFile(target_path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
prefixed_path := append([]string{settings.Target}, split_path...) defer out.Close()
target_path := filepath.Join(prefixed_path...) if err != nil { return Fail(err, "writing file %s", target_path) }
_, err := os.Stat(target_path)
if os.IsNotExist(err) { err = engine.Render(out, source_name, fiber.Map{"PageId": page_id}, config.Settings.Layout)
return err;
}
func MkdirPath(target_path string) error {
target_dir := filepath.Dir(target_path) target_dir := filepath.Dir(target_path)
_, err := os.Stat(target_dir)
if os.IsNotExist(err) {
log.Println("MAKING: ", target_dir) log.Println("MAKING: ", target_dir)
os.MkdirAll(target_dir, 0750) err = os.MkdirAll(target_dir, 0750)
if err != nil { return Fail(err, "making path to %s", target_dir); }
} }
// generate a data-testid for all pages based on template name return nil;
page_id := strings.ReplaceAll(source_name, "/", "-") + "-page" }
if ext == ".html" { func SplitPathExt(path string) (string, string, bool) {
out, err := os.OpenFile(target_path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) split_path := strings.Split(path, string(os.PathSeparator))[1:]
defer out.Close() source_name := strings.Join(split_path, "/") // Render wants / even on windows
if err != nil { return Fail(err, "writing file %s", target_path) } ext := filepath.Ext(source_name)
source_name, found := strings.CutSuffix(source_name, ext)
return source_name, ext, found
}
err = engine.Render(out, source_name, fiber.Map{"PageId": page_id}, settings.Layout) func RePrefixPath(path string, new_prefix string) string {
if err != nil { return Fail(err, "failed to render %s", path) } split_path := strings.Split(path, string(os.PathSeparator))[1:]
log.Printf("RENDER: %s -> %s", source_name, target_path) prefixed_path := append([]string{new_prefix}, split_path...)
} else if ext == ".md" { return filepath.Join(prefixed_path...)
// need to strip the .md and replace with .html }
html_name, _ := strings.CutSuffix(target_path, ext)
html_name = fmt.Sprintf("%s.html", html_name)
log.Printf("MARKDOWN: %s -> %s", path, html_name) func ProcessDirEntry(engine *html.Engine, path string, d fs.DirEntry, err error) error {
settings := config.Settings
out, err := os.OpenFile(html_name, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) if !d.IsDir() {
defer out.Close() if err != nil { return Fail(err, "path: %s", path); }
if err != nil { return Fail(err, "writing file %s", target_path) } source_name, ext, found := SplitPathExt(path)
input_data, err := os.ReadFile(path) if found && source_name != settings.Layout {
err = goldmark.Convert(input_data, out) target_path := RePrefixPath(path, settings.Target)
err = MkdirPath(target_path)
if err != nil { return Fail(err, "making target path: %s", target_path) }
// generate a data-testid for all pages based on template name
page_id := strings.ReplaceAll(source_name, "/", "-") + "-page"
if ext == ".html" {
err = RenderHTML(engine, source_name, target_path, page_id)
if err != nil { return Fail(err, "failed to render %s", path) }
} else if ext == ".md" {
RenderMarkdown(target_path, ext, path)
if err != nil { return Fail(err, "failed to render markdown %s", path) } if err != nil { return Fail(err, "failed to render markdown %s", path) }
} }

Loading…
Cancel
Save