1package about
2
3import (
4 "io"
5 "net/http"
6 "os"
7
8 "github.com/gomarkdown/markdown"
9 "github.com/gomarkdown/markdown/html"
10 "github.com/gomarkdown/markdown/parser"
11
12 "git.gabrielgio.me/cerrado/pkg/ext"
13 "git.gabrielgio.me/cerrado/templates"
14)
15
16type (
17 AboutHandler struct {
18 readmePath string
19 }
20
21 configurationRepository interface {
22 GetRootReadme() string
23 }
24)
25
26func NewAboutHandler(configRepo configurationRepository) *AboutHandler {
27 return &AboutHandler{configRepo.GetRootReadme()}
28}
29
30func (g *AboutHandler) About(w http.ResponseWriter, r *ext.Request) error {
31 f, err := os.Open(g.readmePath)
32 if err != nil {
33 return err
34 }
35
36 bs, err := io.ReadAll(f)
37 if err != nil {
38 return err
39 }
40
41 extensions := parser.CommonExtensions | parser.AutoHeadingIDs | parser.NoEmptyLineBeforeBlock
42 p := parser.NewWithExtensions(extensions)
43 doc := p.Parse(bs)
44
45 htmlFlags := html.CommonFlags | html.HrefTargetBlank
46 opts := html.RendererOptions{Flags: htmlFlags}
47 renderer := html.NewRenderer(opts)
48
49 bs = markdown.Render(doc, renderer)
50
51 gitList := &templates.AboutPage{
52 Body: bs,
53 }
54 templates.WritePageTemplate(w, gitList, r.Context())
55 return nil
56}