mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
parent
20f2211fce
commit
19e12caf8c
4 changed files with 62 additions and 13 deletions
|
@ -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>`)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -631,6 +631,20 @@ func (p *pageState) wrapError(err error) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *pageState) getContentConverter() converter.Converter {
|
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
|
return p.m.contentConverter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/markup/converter"
|
"github.com/gohugoio/hugo/markup/converter"
|
||||||
|
@ -118,6 +119,8 @@ type pageMeta struct {
|
||||||
|
|
||||||
s *Site
|
s *Site
|
||||||
|
|
||||||
|
renderingConfigOverrides map[string]interface{}
|
||||||
|
contentConverterInit sync.Once
|
||||||
contentConverter converter.Converter
|
contentConverter converter.Converter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -686,17 +689,8 @@ func (p *pageMeta) applyDefaultValues(n *contentNode) error {
|
||||||
renderingConfigOverrides = maps.ToStringMap(bfParam)
|
renderingConfigOverrides = maps.ToStringMap(bfParam)
|
||||||
}
|
}
|
||||||
|
|
||||||
markup := p.markup
|
p.renderingConfigOverrides = renderingConfigOverrides
|
||||||
if markup == "html" {
|
|
||||||
// Only used for shortcode inner content.
|
|
||||||
markup = "markdown"
|
|
||||||
}
|
|
||||||
|
|
||||||
cp, err := p.newContentConverter(n.p, markup, renderingConfigOverrides)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
p.contentConverter = cp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -709,7 +703,7 @@ func (p *pageMeta) newContentConverter(ps *pageState, markup string, renderingCo
|
||||||
}
|
}
|
||||||
cp := p.s.ContentSpec.Converters.Get(markup)
|
cp := p.s.ContentSpec.Converters.Get(markup)
|
||||||
if cp == nil {
|
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(
|
cpp, err := cp.New(
|
||||||
|
@ -722,7 +716,7 @@ func (p *pageMeta) newContentConverter(ps *pageState, markup string, renderingCo
|
||||||
)
|
)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return converter.NopConverter, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return cpp, nil
|
return cpp, nil
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
package converter
|
package converter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/common/loggers"
|
"github.com/gohugoio/hugo/common/loggers"
|
||||||
"github.com/gohugoio/hugo/config"
|
"github.com/gohugoio/hugo/config"
|
||||||
"github.com/gohugoio/hugo/identity"
|
"github.com/gohugoio/hugo/identity"
|
||||||
|
@ -65,6 +67,18 @@ func (n newConverter) Name() string {
|
||||||
return n.name
|
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
|
// Converter wraps the Convert method that converts some markup into
|
||||||
// another format, e.g. Markdown to HTML.
|
// another format, e.g. Markdown to HTML.
|
||||||
type Converter interface {
|
type Converter interface {
|
||||||
|
|
Loading…
Reference in a new issue