From 81bf0016b3a776732bba430872ce5719f3251e70 Mon Sep 17 00:00:00 2001 From: Brian Picciano Date: Mon, 4 Nov 2024 20:00:57 +0100 Subject: Add heading_template to gemtext middleware --- http/handlers/gemtext.go | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'http/handlers') diff --git a/http/handlers/gemtext.go b/http/handlers/gemtext.go index bc617f4..7f12799 100644 --- a/http/handlers/gemtext.go +++ b/http/handlers/gemtext.go @@ -64,6 +64,20 @@ type Gemtext struct { // TemplatePath string `json:"template"` + // Path to a template which will be used for rendering headings. If not + // given then headings will be rendered with appropriate HTML header tags. + // + // The template will be rendered with these extra data fields: + // + // ##### `.Level` + // + // Which level of heading is being rendered, 1, 2, or 3. + // + // ##### `.Text` + // + // The text of the heading. + HeadingTemplatePath string `json:"heading_template"` + // Path to a template which will be used for rendering links. If not given // then links will be rendered using an anchor tag wrapped in a paragraph // tag. @@ -181,9 +195,23 @@ func (g *Gemtext) ServeHTTP( Req: r, RespHeader: templates.WrappedHeader{Header: rec.Header()}, } + + parser gemtext.HTMLTranslator ) - parser := gemtext.HTMLTranslator{} + if g.HeadingTemplatePath != "" { + parser.RenderHeading = func(w io.Writer, level int, text string) error { + payload := struct { + *templates.TemplateContext + Level int + Text string + }{ + ctx, level, text, + } + + return g.render(w, ctx, osFS, g.HeadingTemplatePath, payload) + } + } if g.LinkTemplatePath != "" { parser.RenderLink = func(w io.Writer, url, label string) error { @@ -258,6 +286,10 @@ func gemtextParseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, if !h.Args(&g.TemplatePath) { return nil, h.ArgErr() } + case "heading_template": + if !h.Args(&g.HeadingTemplatePath) { + return nil, h.ArgErr() + } case "link_template": if !h.Args(&g.LinkTemplatePath) { return nil, h.ArgErr() -- cgit v1.2.3