Skip to content

Commit

Permalink
Fix RenderString for pages without content
Browse files Browse the repository at this point in the history
Fixes #6882
  • Loading branch information
bep committed Feb 18, 2020
1 parent 20f2211 commit 19e12ca
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 13 deletions.
27 changes: 27 additions & 0 deletions hugolib/content_render_hooks_test.go
Expand Up @@ -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>`)
}

}
14 changes: 14 additions & 0 deletions hugolib/page.go
Expand Up @@ -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
}

Expand Down
20 changes: 7 additions & 13 deletions hugolib/page__meta.go
Expand Up @@ -19,6 +19,7 @@ import (
"path/filepath"
"regexp"
"strings"
"sync"
"time"

"github.com/gohugoio/hugo/markup/converter"
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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
Expand All @@ -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(
Expand All @@ -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
Expand Down
14 changes: 14 additions & 0 deletions markup/converter/converter.go
Expand Up @@ -14,6 +14,8 @@
package converter

import (
"bytes"

"github.com/gohugoio/hugo/common/loggers"
"github.com/gohugoio/hugo/config"
"github.com/gohugoio/hugo/identity"
Expand Down Expand Up @@ -65,6 +67,18 @@ func (n newConverter) Name() string {
return n.name
}

var NopConverter = new(nopConverter)

type nopConverter int

func (nopConverter) Convert(ctx RenderContext) (Result, error) {
return &bytes.Buffer{}, nil
}

func (nopConverter) Supports(feature identity.Identity) bool {
return false
}

// Converter wraps the Convert method that converts some markup into
// another format, e.g. Markdown to HTML.
type Converter interface {
Expand Down

0 comments on commit 19e12ca

Please sign in to comment.