commit 254cd89c8e50f46bb733cc170a79e9d3089ae5a8
parent 10de077164501e18a253e7abb77af8824cfebb8a
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date: Mon, 6 Mar 2017 13:40:06 +0100
hugolob: A first incorporation of output types in rendering
Diffstat:
5 files changed, 25 insertions(+), 16 deletions(-)
diff --git 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
@@ -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
@@ -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
@@ -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
+
+ if len(p.layoutsCalculated) > 0 {
+ // TODO(bep) output
+ layouts = p.layoutsCalculated
+ } else {
+ layouts = s.layoutHandler.For(p.layoutIdentifier, "", outputType)
+ }
+
+ switch outputType {
- case media.HTMLType:
+ 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
@@ -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)