summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--content/embed.go7
-rw-r--r--markdown/markdown.go28
-rw-r--r--pages/pages.go15
-rw-r--r--public/embed.go8
-rw-r--r--templates/embed.go7
-rw-r--r--web/web.go12
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
diff --git a/web/web.go b/web/web.go
index ec097f0..96f85d2 100644
--- a/web/web.go
+++ b/web/web.go
@@ -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))