feat: title on pages
This commit is contained in:
@@ -16,6 +16,7 @@ type PageHeader struct {
|
||||
type Page struct {
|
||||
PageHeader
|
||||
Content string
|
||||
Images []Image
|
||||
}
|
||||
|
||||
func (s *Service) GetPages(ctx context.Context) (pages []PageHeader, err error) {
|
||||
@@ -46,7 +47,7 @@ func (s *Service) GetPage(ctx context.Context, uid string) (page Page, err error
|
||||
return
|
||||
}
|
||||
|
||||
html, err := s.getHTML(ctx, p)
|
||||
html, imgs, err := s.getHTML(ctx, p)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@@ -54,6 +55,7 @@ func (s *Service) GetPage(ctx context.Context, uid string) (page Page, err error
|
||||
page = Page{
|
||||
PageHeader: p,
|
||||
Content: string(html),
|
||||
Images: imgs,
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -14,7 +14,13 @@ import (
|
||||
"github.com/gomarkdown/markdown/parser"
|
||||
)
|
||||
|
||||
func (s *Service) getHTML(ctx context.Context, page PageHeader) (out []byte, err error) {
|
||||
// image can be used to preload
|
||||
type Image struct {
|
||||
SrcSet string
|
||||
Src string
|
||||
}
|
||||
|
||||
func (s *Service) getHTML(ctx context.Context, page PageHeader) (out []byte, imgs []Image, err error) {
|
||||
extensions := parser.CommonExtensions | parser.AutoHeadingIDs | parser.NoEmptyLineBeforeBlock
|
||||
p := parser.NewWithExtensions(extensions)
|
||||
|
||||
@@ -24,7 +30,7 @@ func (s *Service) getHTML(ctx context.Context, page PageHeader) (out []byte, err
|
||||
htmlFlags := html.CommonFlags | html.HrefTargetBlank
|
||||
opts := html.RendererOptions{
|
||||
Flags: htmlFlags,
|
||||
RenderNodeHook: imageMiddleware(page),
|
||||
RenderNodeHook: imageMiddleware(page, &imgs),
|
||||
}
|
||||
renderer := html.NewRenderer(opts)
|
||||
|
||||
@@ -32,7 +38,7 @@ func (s *Service) getHTML(ctx context.Context, page PageHeader) (out []byte, err
|
||||
return
|
||||
}
|
||||
|
||||
func imageMiddleware(page PageHeader) func(w io.Writer, node ast.Node, entering bool) (ast.WalkStatus, bool) {
|
||||
func imageMiddleware(page PageHeader, imgs *[]Image) func(w io.Writer, node ast.Node, entering bool) (ast.WalkStatus, bool) {
|
||||
return func(w io.Writer, node ast.Node, entering bool) (ast.WalkStatus, bool) {
|
||||
if !entering {
|
||||
return ast.GoToNext, false
|
||||
@@ -53,14 +59,20 @@ func imageMiddleware(page PageHeader) func(w io.Writer, node ast.Node, entering
|
||||
slog.Error("could not get image url", "err", err)
|
||||
return ast.GoToNext, false
|
||||
}
|
||||
image := Image{
|
||||
SrcSet: images.SourceSet(src),
|
||||
Src: src + "?w=1024",
|
||||
}
|
||||
|
||||
img.Attribute = &ast.Attribute{Attrs: map[string][]byte{
|
||||
"srcset": []byte(images.SourceSet(src)),
|
||||
// "srcset": []byte(image.SrcSet),
|
||||
"fetchpriority": []byte("low"),
|
||||
"loading": []byte("lazy"),
|
||||
"class": []byte("min-h-48"),
|
||||
"src": []byte(src),
|
||||
"src": []byte(image.Src),
|
||||
}}
|
||||
|
||||
*imgs = append(*imgs, image)
|
||||
// // img.Attrs["srcset"] =
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user