]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Make all renderhook Text methods return template.HTML
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 31 Aug 2024 15:25:15 +0000 (17:25 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 31 Aug 2024 19:05:58 +0000 (21:05 +0200)
13 files changed:
common/types/hstring/stringtypes.go
common/types/hstring/stringtypes_test.go
hugolib/content_render_hooks_test.go
hugolib/page__content.go
markup/converter/hooks/hooks.go
markup/goldmark/blockquotes/blockquotes.go
markup/goldmark/blockquotes/blockquotes_integration_test.go
markup/goldmark/goldmark_integration_test.go
markup/goldmark/render_hooks.go
markup/goldmark/tables/tables.go
markup/goldmark/tables/tables_integration_test.go
tpl/tplimpl/embedded/templates/_default/_markup/render-link.html
tpl/tplimpl/embedded/templates/_default/_markup/render-table.html

index 5e8e3a23dbf01c5e0fc0d780e902400868ce9bd2..05977ddceeb10887a4dc71017ab8d6547b37a22e 100644 (file)
 
 package hstring
 
-type RenderedString string
+import (
+       "html/template"
 
-func (s RenderedString) String() string {
+       "github.com/gohugoio/hugo/common/types"
+)
+
+var _ types.PrintableValueProvider = RenderedHTML("")
+
+// RenderedHTML is a string that represents rendered HTML.
+// When printed in templates it will be rendered as template.HTML and considered safe.
+type RenderedHTML string
+
+func (s RenderedHTML) String() string {
        return string(s)
 }
+
+func (s RenderedHTML) PrintableValue() any {
+       return template.HTML(s)
+}
index 2f1f865c8b5cfdcf015c1bff464e58c45996e8b8..75b7af13c25cb52f2605a1b7ef45a525ae56badd 100644 (file)
@@ -25,6 +25,6 @@ func TestRenderedString(t *testing.T) {
        c := qt.New(t)
 
        // Validate that it will behave like a string in Hugo settings.
-       c.Assert(cast.ToString(RenderedString("Hugo")), qt.Equals, "Hugo")
-       c.Assert(template.HTML(RenderedString("Hugo")), qt.Equals, template.HTML("Hugo"))
+       c.Assert(cast.ToString(RenderedHTML("Hugo")), qt.Equals, "Hugo")
+       c.Assert(template.HTML(RenderedHTML("Hugo")), qt.Equals, template.HTML("Hugo"))
 }
index abe305762595f2833200a9cc94e170130f172394..593d01da891b339064d2816a7993979465a5c6f4 100644 (file)
@@ -98,8 +98,8 @@ baseURL="https://example.org"
 P1: {{ $p.Content }}
 
        `,
-               "_default/_markup/render-link.html", `html-link: {{ .Destination | safeURL }}|Text: {{ .Text | safeHTML }}|Plain: {{ .PlainText | safeHTML }}`,
-               "_default/_markup/render-image.html", `html-image: {{ .Destination | safeURL }}|Text: {{ .Text | safeHTML }}|Plain: {{ .PlainText | safeHTML }}`,
+               "_default/_markup/render-link.html", `html-link: {{ .Destination | safeURL }}|Text: {{ .Text }}|Plain: {{ .PlainText | safeHTML }}`,
+               "_default/_markup/render-image.html", `html-image: {{ .Destination | safeURL }}|Text: {{ .Text }}|Plain: {{ .PlainText | safeHTML }}`,
        )
 
        b.WithContent("p1.md", `---
index 30caebed0d9a8c299cb38f693498593e9a422432..31080b929ae2a13e6c46759cf249564bbcec4631 100644 (file)
@@ -928,7 +928,7 @@ func (c *cachedContentScope) RenderString(ctx context.Context, args ...any) (tem
 
        contentToRenderv := args[sidx]
 
-       if _, ok := contentToRenderv.(hstring.RenderedString); ok {
+       if _, ok := contentToRenderv.(hstring.RenderedHTML); ok {
                // This content is already rendered, this is potentially
                // a infinite recursion.
                return "", errors.New("text is already rendered, repeating it may cause infinite recursion")
index 9487fd0a71002e4fd19b8454a14aa6a9687078c9..0232b619f970dc3c3dd83ca84ced72a71a58f604 100644 (file)
@@ -41,7 +41,7 @@ type LinkContext interface {
        Title() string
 
        // The rendered (HTML) text.
-       Text() hstring.RenderedString
+       Text() hstring.RenderedHTML
 
        // The plain variant of Text.
        PlainText() string
@@ -100,7 +100,7 @@ type BlockquoteContext interface {
 
        // The blockquote text.
        // If type is "alert", this will be the alert text.
-       Text() hstring.RenderedString
+       Text() hstring.RenderedHTML
 
        /// Returns the blockquote type, one of "regular" and "alert".
        // Type "alert" indicates that this is a GitHub type alert.
@@ -166,7 +166,7 @@ type HeadingContext interface {
        // Anchor is the HTML id assigned to the heading.
        Anchor() string
        // Text is the rendered (HTML) heading text, excluding the heading marker.
-       Text() hstring.RenderedString
+       Text() hstring.RenderedHTML
        // PlainText is the unrendered version of Text.
        PlainText() string
 
@@ -213,7 +213,7 @@ const (
 type GetRendererFunc func(t RendererType, id any) any
 
 type TableCell struct {
-       Text      hstring.RenderedString
+       Text      hstring.RenderedHTML
        Alignment string // left, center, or right
 }
 
index a261ec4fe3980bb183d18675d06758801326fcbb..f68cccd06e7104b7abb4a53c4861730d0bbc55c4 100644 (file)
@@ -95,7 +95,7 @@ func (r *htmlRenderer) renderBlockquote(w util.BufWriter, src []byte, node ast.N
                BaseContext:      render.NewBaseContext(ctx, renderer, n, src, nil, ordinal),
                typ:              typ,
                alertType:        alertType,
-               text:             hstring.RenderedString(text),
+               text:             hstring.RenderedHTML(text),
                AttributesHolder: attributes.New(n.Attributes(), attributes.AttributesOwnerGeneral),
        }
 
@@ -134,7 +134,7 @@ func (r *htmlRenderer) renderBlockquoteDefault(
 type blockquoteContext struct {
        hooks.BaseContext
 
-       text      hstring.RenderedString
+       text      hstring.RenderedHTML
        alertType string
        typ       string
 
@@ -149,7 +149,7 @@ func (c *blockquoteContext) AlertType() string {
        return c.alertType
 }
 
-func (c *blockquoteContext) Text() hstring.RenderedString {
+func (c *blockquoteContext) Text() hstring.RenderedHTML {
        return c.text
 }
 
index e4447e5e9b492324bb7cae15f2e4b83b2d11dc56..f12600b4207c1ac9aa31a080d69ec857b8774990 100644 (file)
@@ -32,9 +32,9 @@ func TestBlockquoteHook(t *testing.T) {
         block = true
         title = true
 -- layouts/_default/_markup/render-blockquote.html --
-Blockquote: |{{ .Text | safeHTML }}|{{ .Type }}|
+Blockquote: |{{ .Text }}|{{ .Type }}|
 -- layouts/_default/_markup/render-blockquote-alert.html --
-{{ $text := .Text | safeHTML }}
+{{ $text := .Text }}
 Blockquote Alert: |{{ $text }}|{{ .Type }}|
 Blockquote Alert Attributes: |{{ $text }}|{{ .Attributes }}|
 Blockquote Alert Page: |{{ $text }}|{{ .Page.Title }}|{{ .PageInner.Title }}|
index 19338310c022759829adae14f3b176b210bf32b5..c691435eee7f67526b02dd92c81fab5e1f966c4a 100644 (file)
@@ -76,7 +76,7 @@ title: "p1"
   {{- range $k, $v := .Attributes -}}
     {{- printf " %s=%q" $k $v | safeHTMLAttr -}}
   {{- end -}}
->{{ .Text | safeHTML }}</h{{ .Level }}>
+>{{ .Text }}</h{{ .Level }}>
 `
 
        b := hugolib.Test(t, files)
@@ -146,11 +146,11 @@ title: "p1"
 {{ .Content }}
 -- layouts/_default/_markup/render-heading.html --
 <h{{ .Level }} id="{{ .Anchor | safeURL }}">
-  {{ .Text | safeHTML }}
+  {{ .Text }}
   <a class="anchor" href="#{{ .Anchor | safeURL }}">#</a>
 </h{{ .Level }}>
 -- layouts/_default/_markup/render-link.html --
-<a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}>{{ .Text | safeHTML }}</a>
+<a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}>{{ .Text }}</a>
 
 `
 
@@ -236,11 +236,11 @@ func BenchmarkRenderHooks(b *testing.B) {
 -- config.toml --
 -- layouts/_default/_markup/render-heading.html --
 <h{{ .Level }} id="{{ .Anchor | safeURL }}">
-       {{ .Text | safeHTML }}
+       {{ .Text }}
        <a class="anchor" href="#{{ .Anchor | safeURL }}">#</a>
 </h{{ .Level }}>
 -- layouts/_default/_markup/render-link.html --
-<a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}>{{ .Text | safeHTML }}</a>
+<a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}>{{ .Text }}</a>
 -- layouts/_default/single.html --
 {{ .Content }}
 `
@@ -452,7 +452,7 @@ Link https procol: https://www.example.org
 
                if withHook {
                        files += `-- layouts/_default/_markup/render-link.html --
-<a href="{{ .Destination | safeURL }}">{{ .Text | safeHTML }}</a>`
+<a href="{{ .Destination | safeURL }}">{{ .Text }}</a>`
                }
 
                return hugolib.NewIntegrationTestBuilder(
index 790b2f4caa71af8e6c4d89cb2cdf9eff25a4939c..d72300434d9d2b4a7d758c19f1d92ccb55490a1b 100644 (file)
@@ -52,7 +52,7 @@ type linkContext struct {
        pageInner   any
        destination string
        title       string
-       text        hstring.RenderedString
+       text        hstring.RenderedHTML
        plainText   string
        *attributes.AttributesHolder
 }
@@ -69,7 +69,7 @@ func (ctx linkContext) PageInner() any {
        return ctx.pageInner
 }
 
-func (ctx linkContext) Text() hstring.RenderedString {
+func (ctx linkContext) Text() hstring.RenderedHTML {
        return ctx.text
 }
 
@@ -100,7 +100,7 @@ type headingContext struct {
        pageInner any
        level     int
        anchor    string
-       text      hstring.RenderedString
+       text      hstring.RenderedHTML
        plainText string
        *attributes.AttributesHolder
 }
@@ -121,7 +121,7 @@ func (ctx headingContext) Anchor() string {
        return ctx.anchor
 }
 
-func (ctx headingContext) Text() hstring.RenderedString {
+func (ctx headingContext) Text() hstring.RenderedHTML {
        return ctx.text
 }
 
@@ -199,7 +199,7 @@ func (r *hookedRenderer) renderImage(w util.BufWriter, source []byte, node ast.N
                                pageInner:        pageInner,
                                destination:      string(n.Destination),
                                title:            string(n.Title),
-                               text:             hstring.RenderedString(text),
+                               text:             hstring.RenderedHTML(text),
                                plainText:        string(n.Text(source)),
                                AttributesHolder: attributes.New(attrs, attributes.AttributesOwnerGeneral),
                        },
@@ -288,7 +288,7 @@ func (r *hookedRenderer) renderLink(w util.BufWriter, source []byte, node ast.No
                        pageInner:        pageInner,
                        destination:      string(n.Destination),
                        title:            string(n.Title),
-                       text:             hstring.RenderedString(text),
+                       text:             hstring.RenderedHTML(text),
                        plainText:        string(n.Text(source)),
                        AttributesHolder: attributes.Empty,
                },
@@ -355,7 +355,7 @@ func (r *hookedRenderer) renderAutoLink(w util.BufWriter, source []byte, node as
                        page:             page,
                        pageInner:        pageInner,
                        destination:      url,
-                       text:             hstring.RenderedString(label),
+                       text:             hstring.RenderedHTML(label),
                        plainText:        label,
                        AttributesHolder: attributes.Empty,
                },
@@ -442,7 +442,7 @@ func (r *hookedRenderer) renderHeading(w util.BufWriter, source []byte, node ast
                        pageInner:        pageInner,
                        level:            n.Level,
                        anchor:           string(anchor),
-                       text:             hstring.RenderedString(text),
+                       text:             hstring.RenderedHTML(text),
                        plainText:        string(n.Text(source)),
                        AttributesHolder: attributes.New(n.Attributes(), attributes.AttributesOwnerGeneral),
                },
index 61c9b893f5e056bbdda2a9a59c66201d1a28ad67..943da974ea1e007ed70c262051b0d2bb867fa7a4 100644 (file)
@@ -132,7 +132,7 @@ func (r *htmlRenderer) renderCell(w util.BufWriter, source []byte, node ast.Node
                alignment = "left"
        }
 
-       cell := hooks.TableCell{Text: hstring.RenderedString(text), Alignment: alignment}
+       cell := hooks.TableCell{Text: hstring.RenderedHTML(text), Alignment: alignment}
 
        if node.Parent().Kind() == gast.KindTableHeader {
                table.THead[len(table.THead)-1] = append(table.THead[len(table.THead)-1], cell)
index 8055265c8550ab6fb95e241599f9972b02a615ab..dadce5c81fece5f7d89f45d94a492d2078af3783 100644 (file)
@@ -32,7 +32,7 @@ title = true
 | Item              | In Stock | Price |
 | :---------------- | :------: | ----: |
 | Python Hat        |   True   | 23.99 |
-| SQL Hat           |   True   | 23.99 |
+| SQL **Hat**           |   True   | 23.99 |
 | Codecademy Tee    |  False   | 19.99 |
 | Codecademy Hoodie |  False   | 42.99 |
 {.foo foo="bar"}
@@ -61,7 +61,7 @@ Attributes: {{ .Attributes }}|
        b.AssertFileContent("public/p1/index.html",
                "Attributes: map[class:foo foo:bar]|",
                "table-0-thead: 0: 0: left: Item| 1: center: In Stock| 2: right: Price|$",
-               "table-0-tbody: 0: 0: left: Python Hat| 1: center: True| 2: right: 23.99| 1: 0: left: SQL Hat| 1: center: True| 2: right: 23.99| 2: 0: left: Codecademy Tee| 1: center: False| 2: right: 19.99| 3: 0: left: Codecademy Hoodie| 1: center: False| 2: right: 42.99|$",
+               "table-0-tbody: 0: 0: left: Python Hat| 1: center: True| 2: right: 23.99| 1: 0: left: SQL <strong>Hat</strong>| 1: center: True| 2: right: 23.99| 2: 0: left: Codecademy Tee| 1: center: False| 2: right: 19.99| 3: 0: left: Codecademy Hoodie| 1: center: False| 2: right: 42.99|$",
        )
 
        b.AssertFileContent("public/p1/index.html",
index daf3f11e1a7be9a6242e62389b9a66fae024ccdf..f82158a2d5ccfe9242c87262a81813543154d5bd 100644 (file)
@@ -25,5 +25,5 @@
       {{- printf " %s=%q" $k $v | safeHTMLAttr -}}
     {{- end -}}
   {{- end -}}
-  >{{ .Text | safeHTML }}</a>
+  >{{ .Text }}</a>
 {{- /**/ -}}
index 307f0a5a3505779001bd3a00ae012217039afcdf..a0b0cc34d4c9aec90382a8f7369b04e39495555c 100644 (file)
@@ -9,7 +9,7 @@
       <tr>
         {{- range . }}
           <th {{ printf "style=%q" (printf "text-align: %s" .Alignment) | safeHTMLAttr }}>
-            {{- .Text | safeHTML -}}
+            {{- .Text -}}
           </th>
         {{- end }}
       </tr>
@@ -20,7 +20,7 @@
       <tr>
         {{- range . }}
           <td {{ printf "style=%q" (printf "text-align: %s" .Alignment) | safeHTMLAttr }}>
-            {{- .Text | safeHTML -}}
+            {{- .Text -}}
           </td>
         {{- end }}
       </tr>