From: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date: Mon, 6 Mar 2017 12:40:06 +0000 (+0100)
Subject: hugolob: A first incorporation of output types in rendering
X-Git-Tag: v0.20~104
X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=254cd89c;p=brevno-suite%2Fhugo

hugolob: A first incorporation of output types in rendering
---

diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go
index 88c0caa3..84f49bbc 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 fb842ca3..17d3e9af 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 ee20ecc1..08bfcf4d 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 54c88d9b..7da4e433 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
+
+			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
index d79ab059..222494b0 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)