summaryrefslogtreecommitdiff
path: root/src/gmi
diff options
context:
space:
mode:
Diffstat (limited to 'src/gmi')
-rw-r--r--src/gmi/tpl.go104
-rw-r--r--src/gmi/tpl/feed.xml28
-rw-r--r--src/gmi/tpl/posts/index.gmi2
3 files changed, 94 insertions, 40 deletions
diff --git a/src/gmi/tpl.go b/src/gmi/tpl.go
index c648abd..edd3a75 100644
--- a/src/gmi/tpl.go
+++ b/src/gmi/tpl.go
@@ -35,10 +35,9 @@ type rendererGetPostSeriesNextPreviousRes struct {
}
type renderer struct {
- url *url.URL
- postStore post.Store
- gmiPublicURL *url.URL
- httpPublicURL *url.URL
+ url *url.URL
+ postStore post.Store
+ preprocessFuncs post.PreprocessFunctions
}
func (r renderer) GetPosts(page, count int) (rendererGetPostsRes, error) {
@@ -91,39 +90,9 @@ func (r renderer) GetPostSeriesNextPrevious(p post.StoredPost) (rendererGetPostS
func (r renderer) PostBody(p post.StoredPost) (string, error) {
- preprocessFuncs := post.PreprocessFunctions{
- BlogURL: func(path string) string {
- return filepath.Join("/", r.gmiPublicURL.Path, path)
- },
- AssetURL: func(id string) string {
- return filepath.Join("/assets", id)
- },
- PostURL: func(id string) string {
- return filepath.Join("/posts", id)
- },
- StaticURL: func(path string) string {
- httpPublicURL := *r.httpPublicURL
- httpPublicURL.Path = filepath.Join(httpPublicURL.Path, "/static", path)
- return httpPublicURL.String()
- },
- Image: func(args ...string) (string, error) {
-
- var (
- id = args[0]
- descr = "Image"
- )
-
- if len(args) > 1 {
- descr = args[1]
- }
-
- return fmt.Sprintf("=> %s %s", filepath.Join("/assets", id), descr), nil
- },
- }
-
buf := new(bytes.Buffer)
- if err := p.PreprocessBody(buf, preprocessFuncs); err != nil {
+ if err := p.PreprocessBody(buf, r.preprocessFuncs); err != nil {
return "", fmt.Errorf("preprocessing post body: %w", err)
}
@@ -159,8 +128,66 @@ func (r renderer) Add(a, b int) int { return a + b }
func (a *api) tplHandler() (gemini.Handler, error) {
+ blogURL := func(path string, abs bool) string {
+ path = filepath.Join(a.params.PublicURL.Path, path)
+
+ if !abs {
+ return path
+ }
+
+ u := *a.params.PublicURL
+ u.Path = path
+ return u.String()
+ }
+
+ preprocessFuncs := post.PreprocessFunctions{
+ BlogURL: func(path string) string {
+ return blogURL(path, false)
+ },
+ AssetURL: func(id string) string {
+ path := filepath.Join("assets", id)
+ return blogURL(path, false)
+ },
+ PostURL: func(id string) string {
+ path := filepath.Join("posts", id) + ".gmi"
+ return blogURL(path, false)
+ },
+ StaticURL: func(path string) string {
+ httpPublicURL := *a.params.HTTPPublicURL
+ httpPublicURL.Path = filepath.Join(httpPublicURL.Path, "/static", path)
+ return httpPublicURL.String()
+ },
+ Image: func(args ...string) (string, error) {
+
+ var (
+ id = args[0]
+ descr = "Image"
+ )
+
+ if len(args) > 1 {
+ descr = args[1]
+ }
+
+ path := blogURL(filepath.Join("assets", id), false)
+
+ return fmt.Sprintf("=> %s %s", path, descr), nil
+ },
+ }
+
allTpls := template.New("")
+ allTpls.Funcs(preprocessFuncs.ToFuncsMap())
+
+ allTpls.Funcs(template.FuncMap{
+ "BlogURLAbs": func(path string) string {
+ return blogURL(path, true)
+ },
+ "PostURLAbs": func(id string) string {
+ path := filepath.Join("posts", id) + ".gmi"
+ return blogURL(path, true)
+ },
+ })
+
err := fs.WalkDir(tplFS, "tpl", func(path string, d fs.DirEntry, err error) error {
if err != nil {
@@ -219,10 +246,9 @@ func (a *api) tplHandler() (gemini.Handler, error) {
buf := new(bytes.Buffer)
err := tpl.Execute(buf, renderer{
- url: r.URL,
- postStore: a.params.PostStore,
- gmiPublicURL: a.params.PublicURL,
- httpPublicURL: a.params.HTTPPublicURL,
+ url: r.URL,
+ postStore: a.params.PostStore,
+ preprocessFuncs: preprocessFuncs,
})
if err != nil {
diff --git a/src/gmi/tpl/feed.xml b/src/gmi/tpl/feed.xml
new file mode 100644
index 0000000..497fb11
--- /dev/null
+++ b/src/gmi/tpl/feed.xml
@@ -0,0 +1,28 @@
+{{ $getPostsRes := .GetPosts 0 15 -}}
+{{ $posts := $getPostsRes.Posts -}}
+
+<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom">
+ <title>mediocregopher's lil web corner</title>
+ <id>{{ BlogURLAbs "/" }}</id>
+ {{ if gt (len $posts) 0 -}}
+ <updated>{{ (index $posts 0).PublishedAt.Format "2006-01-02T15:04:05Z07:00" }}</updated>
+ {{ end -}}
+ <link href="{{ BlogURLAbs "/" }}"></link>
+ <author>
+ <name>mediocregopher</name>
+ </author>
+ {{ range $posts -}}
+ <entry>
+ <title>{{ .Title }}</title>
+ <updated>{{ .PublishedAt.Format "2006-01-02T15:04:05Z07:00" }}</updated>
+ <id>{{ PostURLAbs .ID }}</id>
+ <link href="{{ PostURLAbs .ID }}" rel="alternate"></link>
+ {{ if .Description -}}
+ <summary type="html">{{ .Description }}</summary>
+ {{ end -}}
+ <author>
+ <name>mediocregopher</name>
+ </author>
+ </entry>
+ {{ end -}}
+</feed>
diff --git a/src/gmi/tpl/posts/index.gmi b/src/gmi/tpl/posts/index.gmi
index dd4c84c..9d0f6e2 100644
--- a/src/gmi/tpl/posts/index.gmi
+++ b/src/gmi/tpl/posts/index.gmi
@@ -9,7 +9,7 @@
{{ end -}}
{{ range $getPostsRes.Posts -}}
-=> /posts/{{ .ID }}.gmi {{ .PublishedAt.Format "2006-01-02" }} - {{ .Title }}
+=> {{ PostURL .ID }} {{ .PublishedAt.Format "2006-01-02" }} - {{ .Title }}
{{ end -}}