diff options
| -rw-r--r-- | content/embed.go | 7 | ||||
| -rw-r--r-- | markdown/markdown.go | 28 | ||||
| -rw-r--r-- | pages/pages.go | 15 | ||||
| -rw-r--r-- | public/embed.go | 8 | ||||
| -rw-r--r-- | templates/embed.go | 7 | ||||
| -rw-r--r-- | web/web.go | 12 |
6 files changed, 30 insertions, 47 deletions
diff --git a/content/embed.go b/content/embed.go deleted file mode 100644 index be34e02..0000000 --- a/content/embed.go +++ /dev/null @@ -1,7 +0,0 @@ -package content - -import "embed" - -//go:embed *.md -//go:embed posts/*.md -var FS embed.FS diff --git a/markdown/markdown.go b/markdown/markdown.go index cc2abf1..1d5dbf0 100644 --- a/markdown/markdown.go +++ b/markdown/markdown.go @@ -4,10 +4,11 @@ import ( "bytes" "fmt" "io/fs" + "os" + "path" "path/filepath" "strings" - "git.sr.ht/~a73x/home/content" "github.com/adrg/frontmatter" ) @@ -17,15 +18,15 @@ type Content struct { Path string } -func ParseContents() ([]Content, error) { - contentFiles, err := glob(content.FS, ".", ".md") +func ParseContents(contentPath string) ([]Content, error) { + contentFiles, err := glob(contentPath, ".md") if err != nil { return nil, fmt.Errorf("failed to glob: %v", err) } res := make([]Content, 0, len(contentFiles)) for _, contentFile := range contentFiles { - c, err := parseMarkdownFile(content.FS, contentFile) + c, err := parseMarkdownFile(contentPath, contentFile) if err != nil { return nil, fmt.Errorf("failed to read markdown file: %v", err) } @@ -36,11 +37,15 @@ func ParseContents() ([]Content, error) { return res, nil } -func glob(embedded fs.FS, dir string, ext string) ([]string, error) { +// glob returns relative file paths that match the extension +func glob(dir string, ext string) ([]string, error) { files := []string{} - err := fs.WalkDir(embedded, dir, func(path string, d fs.DirEntry, err error) error { - if filepath.Ext(path) == ext { - files = append(files, path) + err := filepath.WalkDir(dir, func(p string, d fs.DirEntry, err error) error { + if filepath.Ext(p) == ext { + // just diff + relPath, _ := filepath.Rel(dir, p) + + files = append(files, relPath) } return nil }) @@ -48,8 +53,8 @@ func glob(embedded fs.FS, dir string, ext string) ([]string, error) { return files, err } -func parseMarkdownFile(embedded fs.FS, path string) (Content, error) { - input, err := fs.ReadFile(embedded, path) +func parseMarkdownFile(basePath, contentPath string) (Content, error) { + input, err := os.ReadFile(path.Join(basePath, contentPath)) if err != nil { return Content{}, fmt.Errorf("failed to read post: %v", err) } @@ -60,7 +65,8 @@ func parseMarkdownFile(embedded fs.FS, path string) (Content, error) { if err != nil { return Content{}, fmt.Errorf("failed to parse frontmatter: %v", err) } - path = strings.Replace(path, ".md", "", 1) + + path := strings.Replace(contentPath, ".md", "", 1) if path == "index" { path = "" } diff --git a/pages/pages.go b/pages/pages.go index 5ca5cff..7eaf903 100644 --- a/pages/pages.go +++ b/pages/pages.go @@ -3,12 +3,12 @@ package pages import ( "bytes" "fmt" + "path" "sort" "text/template" "git.sr.ht/~a73x/home/html" "git.sr.ht/~a73x/home/markdown" - "git.sr.ht/~a73x/home/templates" ) type Navigation struct { @@ -28,11 +28,16 @@ type ParserPair struct { func renderTemplate(config GlobalState, content markdown.Content) (string, error) { tmpl := content.Meta["template"] chosenTemplate := fmt.Sprintf("%s.html", tmpl) - t, err := template.ParseFS(templates.FS, chosenTemplate, "layouts/*.html") + t, err := template.ParseGlob("templates/layouts/*.html") if err != nil { return "", fmt.Errorf("failed to parse layouts: %v", err) } + t, err = t.ParseFiles(path.Join("templates", chosenTemplate)) + if err != nil { + return "", fmt.Errorf("failed to parse template: %v", err) + } + contentParser, err := template.New("content").Parse(string(content.Body)) if err != nil { return "", fmt.Errorf("failed parsing content: %v", err) @@ -57,7 +62,7 @@ func renderTemplate(config GlobalState, content markdown.Content) (string, error data.Body = string(html.MDToHTML(newContent.Bytes(), hasToc)) b := &bytes.Buffer{} - if err := t.Execute(b, data); err != nil { + if err := t.ExecuteTemplate(b, chosenTemplate, data); err != nil { return "", err } @@ -69,8 +74,8 @@ type Page struct { Content string } -func Collect() ([]Page, error) { - contents, err := markdown.ParseContents() +func Collect(contentPath string) ([]Page, error) { + contents, err := markdown.ParseContents(contentPath) if err != nil { return nil, err } diff --git a/public/embed.go b/public/embed.go deleted file mode 100644 index d985ff7..0000000 --- a/public/embed.go +++ /dev/null @@ -1,8 +0,0 @@ -package public - -import "embed" - -//go:embed static/*.svg -//go:embed static/*.woff2 -//go:embed static/*.css -var FS embed.FS diff --git a/templates/embed.go b/templates/embed.go deleted file mode 100644 index 80f8511..0000000 --- a/templates/embed.go +++ /dev/null @@ -1,7 +0,0 @@ -package templates - -import "embed" - -//go:embed *.html -//go:embed layouts/*.html -var FS embed.FS @@ -1,13 +1,10 @@ package web import ( - "fmt" - "io/fs" "net/http" "time" "git.sr.ht/~a73x/home/pages" - "git.sr.ht/~a73x/home/public" "go.uber.org/zap" ) @@ -26,17 +23,14 @@ func New(logger *zap.Logger) (*http.Server, error) { } mux := http.NewServeMux() - pages, err := pages.Collect() + pages, err := pages.Collect("./content") if err != nil { return nil, err } - staticFs, err := fs.Sub(public.FS, "static") - if err != nil { - return nil, fmt.Errorf("failed to setup static handler: %v", err) - } + staticFs := http.FileServer(http.Dir("./public/static")) - mux.Handle("GET /static/", http.StripPrefix("/static/", http.FileServer(http.FS(staticFs)))) + mux.Handle("GET /static/", http.StripPrefix("/static/", staticFs)) for _, page := range pages { mux.HandleFunc("GET "+page.Path, func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(page.Content)) |
