Files
schreifuchs.ch/web/layouts/render.go
T
2026-03-19 18:27:23 +01:00

46 lines
1.1 KiB
Go

package layouts
import (
"context"
"fmt"
"io"
"log/slog"
"net/http"
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/pkg/config"
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/pkg/templer"
"github.com/a-h/templ"
)
type Layouts struct {
cfg config.Cfg
}
func New(cfg config.Cfg) *Layouts {
return &Layouts{
cfg: cfg,
}
}
// Render renders a page. If the query paramenter "c" is set
// the component gets rendered without the layout
func (l *Layouts) Render(ctx context.Context, w io.Writer, r *http.Request, component templ.Component) {
withLayout := !r.URL.Query().Has("c")
fmt.Println("layout: ", withLayout)
title := templer.GetTitle(ctx, "Schreifuchs")
slog.Debug("HX-Request", "value", r.Header.Get("HX-Request"))
if r.Header.Get("HX-Request") != "true" {
ctx = templ.WithChildren(ctx, component)
component = Base(l.cfg, title)
} else {
ctx = templ.WithChildren(ctx, component)
component = Head(l.cfg, title)
}
if err := component.Render(ctx, w); err != nil {
slog.Error("error while rendering component", "err", err, "ctx", ctx)
}
}