From 254cd89c8e50f46bb733cc170a79e9d3089ae5a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 6 Mar 2017 13:40:06 +0100 Subject: [PATCH] hugolob: A first incorporation of output types in rendering --- hugolib/hugo_sites.go | 4 ++-- hugolib/page.go | 14 ++++++-------- hugolib/site.go | 1 + hugolib/site_render.go | 20 ++++++++++++++------ output/outputType.go | 2 ++ 5 files changed, 25 insertions(+), 16 deletions(-) diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go index 88c0caa39..84f49bbc9 100644 --- a/hugolib/hugo_sites.go +++ b/hugolib/hugo_sites.go @@ -550,9 +550,9 @@ func (s *Site) preparePagesForRender(cfg *BuildCfg) { // TODO(bep) output this is temporary if p.IsNode() && p.Kind != KindTaxonomyTerm { - p.mediaTypes = mediaTypesWithRSS + p.outputTypes = outputTypesWithRSS } else { - p.mediaTypes = mediaTypesHTML + p.outputTypes = outputTypesHTML } //analyze for raw stats diff --git a/hugolib/page.go b/hugolib/page.go index fb842ca37..17d3e9af6 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -23,6 +23,7 @@ import ( "github.com/mitchellh/mapstructure" "github.com/spf13/hugo/helpers" + "github.com/spf13/hugo/output" "github.com/spf13/hugo/parser" "html/template" @@ -36,11 +37,8 @@ import ( "time" "unicode/utf8" - "github.com/spf13/hugo/output" - "github.com/spf13/cast" bp "github.com/spf13/hugo/bufferpool" - "github.com/spf13/hugo/media" "github.com/spf13/hugo/source" ) @@ -203,9 +201,8 @@ type Page struct { lang string - // The media types this page will be rendered to. - // TODO(bep) probably wrap this to add additional information like template evaluation? - mediaTypes media.Types + // The output types this page will be rendered to. + outputTypes output.Types // Used to pick the correct template(s) layoutIdentifier pageLayoutIdentifier @@ -676,6 +673,7 @@ func (p *Page) Section() string { } func (p *Page) layouts(layouts ...string) []string { + // TODO(bep) output if len(p.layoutsCalculated) > 0 { return p.layoutsCalculated } @@ -1879,8 +1877,8 @@ func kindFromFilename(filename string) string { // TODO(bep) output var ( - mediaTypesWithRSS = media.Types{media.HTMLType, media.RSSType} - mediaTypesHTML = media.Types{media.HTMLType} + outputTypesWithRSS = output.Types{output.HTMLType, output.RSSType} + outputTypesHTML = output.Types{output.HTMLType} ) func (p *Page) setValuesForKind(s *Site) { diff --git a/hugolib/site.go b/hugolib/site.go index ee20ecc19..08bfcf4d6 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -1676,6 +1676,7 @@ func errorCollator(results <-chan error, errs chan<- error) { close(errs) } +// TODO(bep) output move func (s *Site) appendThemeTemplates(in []string) []string { if !s.PathSpec.ThemeSet() { return in diff --git a/hugolib/site_render.go b/hugolib/site_render.go index 54c88d9b2..7da4e433f 100644 --- a/hugolib/site_render.go +++ b/hugolib/site_render.go @@ -21,7 +21,7 @@ import ( "time" bp "github.com/spf13/hugo/bufferpool" - "github.com/spf13/hugo/media" + "github.com/spf13/hugo/output" ) // renderPages renders pages each corresponding to a markdown file. @@ -64,13 +64,21 @@ func pageRenderer(s *Site, pages <-chan *Page, results chan<- error, wg *sync.Wa defer wg.Done() for p := range pages { // TODO(bep) output - for _, mediaType := range p.mediaTypes { - switch mediaType { + for _, outputType := range p.outputTypes { + var layouts []string - case media.HTMLType: + if len(p.layoutsCalculated) > 0 { + // TODO(bep) output + layouts = p.layoutsCalculated + } else { + layouts = s.layoutHandler.For(p.layoutIdentifier, "", outputType) + } + + switch outputType { + + case output.HTMLType: targetPath := p.TargetPath() - layouts := p.layouts() s.Log.DEBUG.Printf("Render %s to %q with layouts %q", p.Kind, targetPath, layouts) if err := s.renderAndWritePage("page "+p.FullFilePath(), targetPath, p, s.appendThemeTemplates(layouts)...); err != nil { @@ -84,7 +92,7 @@ func pageRenderer(s *Site, pages <-chan *Page, results chan<- error, wg *sync.Wa } } - case media.RSSType: + case output.RSSType: if err := s.renderRSS(p); err != nil { results <- err } diff --git a/output/outputType.go b/output/outputType.go index d79ab0590..222494b09 100644 --- a/output/outputType.go +++ b/output/outputType.go @@ -29,6 +29,8 @@ var ( } ) +type Types []Type + // Type represents an output represenation, usually to a file on disk. type Type struct { // The Name is used as an identifier. Internal output types (i.e. HTML and RSS)