Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli W. Hunter <elihunter173@gmail.com>2020-03-14 17:43:10 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-05-15 22:12:43 +0300
commit423b8f2fb834139cf31514b14b1c1bf28e43b384 (patch)
treedcd2d3c2dfcc5e2960056462c2d048906b1acc55 /hugolib
parent991934497e88dcd4134a369a213bb5072c51c139 (diff)
Add render template hooks for headings
This commit also * Renames previous types to be non-specific. (e.g. hookedRenderer rather than linkRenderer) Resolves #6713
Diffstat (limited to 'hugolib')
-rw-r--r--hugolib/page.go46
-rw-r--r--hugolib/page__per_output.go2
-rw-r--r--hugolib/site.go12
3 files changed, 36 insertions, 24 deletions
diff --git a/hugolib/page.go b/hugolib/page.go
index fddc25fa0..bd518c1e1 100644
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -375,48 +375,54 @@ func (ps *pageState) initCommonProviders(pp pagePaths) error {
return nil
}
-func (p *pageState) createRenderHooks(f output.Format) (*hooks.Render, error) {
-
+func (p *pageState) createRenderHooks(f output.Format) (*hooks.Renderers, error) {
layoutDescriptor := p.getLayoutDescriptor()
layoutDescriptor.RenderingHook = true
layoutDescriptor.LayoutOverride = false
layoutDescriptor.Layout = ""
+ var renderers hooks.Renderers
+
layoutDescriptor.Kind = "render-link"
- linkTempl, linkTemplFound, err := p.s.Tmpl().LookupLayout(layoutDescriptor, f)
+ templ, templFound, err := p.s.Tmpl().LookupLayout(layoutDescriptor, f)
if err != nil {
return nil, err
}
+ if templFound {
+ renderers.LinkRenderer = hookRenderer{
+ templateHandler: p.s.Tmpl(),
+ Provider: templ.(tpl.Info),
+ templ: templ,
+ }
+ }
layoutDescriptor.Kind = "render-image"
- imgTempl, imgTemplFound, err := p.s.Tmpl().LookupLayout(layoutDescriptor, f)
+ templ, templFound, err = p.s.Tmpl().LookupLayout(layoutDescriptor, f)
if err != nil {
return nil, err
}
-
- var linkRenderer hooks.LinkRenderer
- var imageRenderer hooks.LinkRenderer
-
- if linkTemplFound {
- linkRenderer = contentLinkRenderer{
+ if templFound {
+ renderers.ImageRenderer = hookRenderer{
templateHandler: p.s.Tmpl(),
- Provider: linkTempl.(tpl.Info),
- templ: linkTempl,
+ Provider: templ.(tpl.Info),
+ templ: templ,
}
}
- if imgTemplFound {
- imageRenderer = contentLinkRenderer{
+ layoutDescriptor.Kind = "render-heading"
+ templ, templFound, err = p.s.Tmpl().LookupLayout(layoutDescriptor, f)
+ if err != nil {
+ return nil, err
+ }
+ if templFound {
+ renderers.HeadingRenderer = hookRenderer{
templateHandler: p.s.Tmpl(),
- Provider: imgTempl.(tpl.Info),
- templ: imgTempl,
+ Provider: templ.(tpl.Info),
+ templ: templ,
}
}
- return &hooks.Render{
- LinkRenderer: linkRenderer,
- ImageRenderer: imageRenderer,
- }, nil
+ return &renderers, nil
}
func (p *pageState) getLayoutDescriptor() output.LayoutDescriptor {
diff --git a/hugolib/page__per_output.go b/hugolib/page__per_output.go
index d7841f178..77a01801d 100644
--- a/hugolib/page__per_output.go
+++ b/hugolib/page__per_output.go
@@ -245,7 +245,7 @@ type pageContentOutput struct {
placeholdersEnabledInit sync.Once
// May be nil.
- renderHooks *hooks.Render
+ renderHooks *hooks.Renderers
// Set if there are more than one output format variant
renderHooksHaveVariants bool // TODO(bep) reimplement this in another way, consolidate with shortcodes
diff --git a/hugolib/site.go b/hugolib/site.go
index 5688b5fac..34671443e 100644
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -1650,14 +1650,20 @@ var infoOnMissingLayout = map[string]bool{
"404": true,
}
-type contentLinkRenderer struct {
+// hookRenderer is the canonical implementation of all hooks.ITEMRenderer,
+// where ITEM is the thing being hooked.
+type hookRenderer struct {
templateHandler tpl.TemplateHandler
identity.Provider
templ tpl.Template
}
-func (r contentLinkRenderer) Render(w io.Writer, ctx hooks.LinkContext) error {
- return r.templateHandler.Execute(r.templ, w, ctx)
+func (hr hookRenderer) RenderLink(w io.Writer, ctx hooks.LinkContext) error {
+ return hr.templateHandler.Execute(hr.templ, w, ctx)
+}
+
+func (hr hookRenderer) RenderHeading(w io.Writer, ctx hooks.HeadingContext) error {
+ return hr.templateHandler.Execute(hr.templ, w, ctx)
}
func (s *Site) renderForTemplate(name, outputFormat string, d interface{}, w io.Writer, templ tpl.Template) (err error) {