diff options
author | Brian Picciano <mediocregopher@gmail.com> | 2024-05-19 22:14:25 +0200 |
---|---|---|
committer | Brian Picciano <mediocregopher@gmail.com> | 2024-05-19 22:14:25 +0200 |
commit | 332e983da476974805a3a0d53bfedaebe73a9fcb (patch) | |
tree | 1956248d86fc07c0193ffdeea77469655fd69c8a /src/render | |
parent | 0665d0c65974533fbd313f4e0b062b5103057aeb (diff) |
Get rid of most of preprocess funcs, only Image leftover for convenience
Diffstat (limited to 'src/render')
-rw-r--r-- | src/render/methods.go | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/src/render/methods.go b/src/render/methods.go index ee22dfd..2b8675b 100644 --- a/src/render/methods.go +++ b/src/render/methods.go @@ -5,11 +5,13 @@ import ( "context" "fmt" "html/template" + "io" "net/url" "path" "path/filepath" "strconv" "strings" + txttpl "text/template" "dev.mediocregopher.com/mediocre-blog.git/src/gmi/gemtext" "dev.mediocregopher.com/mediocre-blog.git/src/post" @@ -196,11 +198,41 @@ func (m *Methods) GetPostSeriesNextPrevious( return res, nil } -func (m *Methods) PostGemtextBody(p post.StoredPost) (string, error) { +type preprocessPostPayload struct { + RootURL URLBuilder + image func(args ...string) (string, error) +} + +func (p preprocessPostPayload) Image(args ...string) (string, error) { + return p.image(args...) +} + +// preprocessPostBody interprets the Post's Body as a text template which may +// use any of the functions found in PreprocessFunctions (all must be set). It +// executes the template and writes the result to the given writer. +func (m *Methods) preprocessPostBody(into io.Writer, p post.Post) error { + tpl := txttpl.New("") + + tpl, err := tpl.Parse(p.Body) + if err != nil { + return fmt.Errorf("parsing post body as template: %w", err) + } + + err = tpl.Execute(into, preprocessPostPayload{ + RootURL: m.RootURL(), + image: m.preprocessFuncs.Image, + }) + if err != nil { + return fmt.Errorf("executing post body as template: %w", err) + } + return nil +} + +func (m *Methods) PostGemtextBody(p post.StoredPost) (string, error) { buf := new(bytes.Buffer) - if err := p.PreprocessBody(buf, m.preprocessFuncs); err != nil { + if err := m.preprocessPostBody(buf, p.Post); err != nil { return "", fmt.Errorf("preprocessing post body: %w", err) } @@ -222,7 +254,7 @@ func (m *Methods) PostGemtextBody(p post.StoredPost) (string, error) { func (m *Methods) PostHTMLBody(p post.StoredPost) (template.HTML, error) { bodyBuf := new(bytes.Buffer) - if err := p.PreprocessBody(bodyBuf, m.preprocessFuncs); err != nil { + if err := m.preprocessPostBody(bodyBuf, p.Post); err != nil { return "", fmt.Errorf("preprocessing post body: %w", err) } |