summaryrefslogtreecommitdiffstats
path: root/hugolib
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-02-18 14:00:58 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-02-18 14:08:59 +0100
commit19e12caf8c90516e3b803ae8a40b907bd89dc96c (patch)
treeb3640819a334588ab5c684d540ac177c34ffad15 /hugolib
parent20f2211fce55e1811629245f9e5e4a2ac754d788 (diff)
Fix RenderString for pages without content
Fixes #6882
Diffstat (limited to 'hugolib')
-rw-r--r--hugolib/content_render_hooks_test.go27
-rw-r--r--hugolib/page.go14
-rw-r--r--hugolib/page__meta.go20
3 files changed, 48 insertions, 13 deletions
diff --git a/hugolib/content_render_hooks_test.go b/hugolib/content_render_hooks_test.go
index 1db232d05..fb9b6b83c 100644
--- a/hugolib/content_render_hooks_test.go
+++ b/hugolib/content_render_hooks_test.go
@@ -372,3 +372,30 @@ RSTART:<em>italic org mode</em>:REND
`)
}
+
+// https://github.com/gohugoio/hugo/issues/6882
+func TestRenderStringOnListPage(t *testing.T) {
+ renderStringTempl := `
+{{ .RenderString "**Hello**" }}
+`
+ b := newTestSitesBuilder(t)
+ b.WithContent("mysection/p1.md", `FOO`)
+ b.WithTemplates(
+ "index.html", renderStringTempl,
+ "_default/list.html", renderStringTempl,
+ "_default/single.html", renderStringTempl,
+ )
+
+ b.Build(BuildCfg{})
+
+ for _, filename := range []string{
+ "index.html",
+ "mysection/index.html",
+ "categories/index.html",
+ "tags/index.html",
+ "mysection/p1/index.html",
+ } {
+ b.AssertFileContent("public/"+filename, `<strong>Hello</strong>`)
+ }
+
+}
diff --git a/hugolib/page.go b/hugolib/page.go
index 4ffcb6264..fa6c84d87 100644
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -631,6 +631,20 @@ func (p *pageState) wrapError(err error) error {
}
func (p *pageState) getContentConverter() converter.Converter {
+ var err error
+ p.m.contentConverterInit.Do(func() {
+ markup := p.m.markup
+ if markup == "html" {
+ // Only used for shortcode inner content.
+ markup = "markdown"
+ }
+ p.m.contentConverter, err = p.m.newContentConverter(p, markup, p.m.renderingConfigOverrides)
+
+ })
+
+ if err != nil {
+ p.s.Log.ERROR.Println("Failed to create content converter:", err)
+ }
return p.m.contentConverter
}
diff --git a/hugolib/page__meta.go b/hugolib/page__meta.go
index 8ecffbda3..7eb7cbfe1 100644
--- a/hugolib/page__meta.go
+++ b/hugolib/page__meta.go
@@ -19,6 +19,7 @@ import (
"path/filepath"
"regexp"
"strings"
+ "sync"
"time"
"github.com/gohugoio/hugo/markup/converter"
@@ -118,7 +119,9 @@ type pageMeta struct {
s *Site
- contentConverter converter.Converter
+ renderingConfigOverrides map[string]interface{}
+ contentConverterInit sync.Once
+ contentConverter converter.Converter
}
func (p *pageMeta) Aliases() []string {
@@ -686,17 +689,8 @@ func (p *pageMeta) applyDefaultValues(n *contentNode) error {
renderingConfigOverrides = maps.ToStringMap(bfParam)
}
- markup := p.markup
- if markup == "html" {
- // Only used for shortcode inner content.
- markup = "markdown"
- }
+ p.renderingConfigOverrides = renderingConfigOverrides
- cp, err := p.newContentConverter(n.p, markup, renderingConfigOverrides)
- if err != nil {
- return err
- }
- p.contentConverter = cp
}
return nil
@@ -709,7 +703,7 @@ func (p *pageMeta) newContentConverter(ps *pageState, markup string, renderingCo
}
cp := p.s.ContentSpec.Converters.Get(markup)
if cp == nil {
- return nil, errors.Errorf("no content renderer found for markup %q", p.markup)
+ return converter.NopConverter, errors.Errorf("no content renderer found for markup %q", p.markup)
}
cpp, err := cp.New(
@@ -722,7 +716,7 @@ func (p *pageMeta) newContentConverter(ps *pageState, markup string, renderingCo
)
if err != nil {
- return nil, err
+ return converter.NopConverter, err
}
return cpp, nil