shithub: hugo

Download patch

ref: 254cd89c8e50f46bb733cc170a79e9d3089ae5a8
parent: 10de077164501e18a253e7abb77af8824cfebb8a
author: Bjørn Erik Pedersen <[email protected]>
date: Mon Mar 6 08:40:06 EST 2017

hugolob: A first incorporation of output types in rendering

--- a/hugolib/hugo_sites.go
+++ b/hugolib/hugo_sites.go
@@ -550,9 +550,9 @@
 
 				// 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
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -23,6 +23,7 @@
 
 	"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 @@
 	"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 @@
 
 	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) layouts(layouts ...string) []string {
+	// TODO(bep) output
 	if len(p.layoutsCalculated) > 0 {
 		return p.layoutsCalculated
 	}
@@ -1879,8 +1877,8 @@
 
 // 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) {
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -1676,6 +1676,7 @@
 	close(errs)
 }
 
+// TODO(bep) output move
 func (s *Site) appendThemeTemplates(in []string) []string {
 	if !s.PathSpec.ThemeSet() {
 		return in
--- a/hugolib/site_render.go
+++ b/hugolib/site_render.go
@@ -21,7 +21,7 @@
 	"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 @@
 	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 @@
 					}
 				}
 
-			case media.RSSType:
+			case output.RSSType:
 				if err := s.renderRSS(p); err != nil {
 					results <- err
 				}
--- a/output/outputType.go
+++ b/output/outputType.go
@@ -29,6 +29,8 @@
 	}
 )
 
+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)