summaryrefslogtreecommitdiffstats
path: root/hugolib/site_output.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-03-22 11:34:17 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-03-27 15:43:56 +0200
commitdbb83f925a7cb256b69b158e2caf0d99e3c7c5e6 (patch)
tree2ad59d18c8f0847cf2f8bd3938327a4c9d462483 /hugolib/site_output.go
parent4aaed87dd97b085b1505e53b7d4564aa8f7f18ef (diff)
hugolib: Read default output formats from site config
Diffstat (limited to 'hugolib/site_output.go')
-rw-r--r--hugolib/site_output.go89
1 files changed, 57 insertions, 32 deletions
diff --git a/hugolib/site_output.go b/hugolib/site_output.go
index 6b27bb1a1..8b0dd7d63 100644
--- a/hugolib/site_output.go
+++ b/hugolib/site_output.go
@@ -14,56 +14,81 @@
package hugolib
import (
+ "fmt"
"path"
"strings"
+ "github.com/spf13/cast"
"github.com/spf13/hugo/config"
"github.com/spf13/hugo/output"
)
-type siteOutputDefinitions []siteOutputDefinition
+func createSiteOutputFormats(cfg config.Provider) (map[string]output.Formats, error) {
+ if !cfg.IsSet("outputs") {
+ return createDefaultOutputFormats(cfg)
+ }
-type siteOutputDefinition struct {
- // What Kinds of pages are excluded in this definition.
- // A blank strings means NONE.
- // Comma separated list (for now).
- ExcludedKinds string
+ outFormats := make(map[string]output.Formats)
- Outputs []output.Format
-}
+ outputs := cfg.GetStringMap("outputs")
-func (defs siteOutputDefinitions) ForKind(kind string) []output.Format {
- var result []output.Format
+ if outputs == nil || len(outputs) == 0 {
+ // TODO(bep) outputs log a warning?
+ return outFormats, nil
+ }
- for _, def := range defs {
- if def.ExcludedKinds == "" || !strings.Contains(def.ExcludedKinds, kind) {
- result = append(result, def.Outputs...)
+ for k, v := range outputs {
+ var formats output.Formats
+ vals := cast.ToStringSlice(v)
+ for _, format := range vals {
+ f, found := output.GetFormat(format)
+ if !found {
+ return nil, fmt.Errorf("Failed to resolve output format %q from site config", format)
+ }
+ formats = append(formats, f)
}
- }
- return result
-}
+ if len(formats) > 0 {
+ outFormats[k] = formats
+ }
+ }
-func createSiteOutputDefinitions(cfg config.Provider) siteOutputDefinitions {
+ // Make sure every kind has at least one output format
+ for _, kind := range allKinds {
+ if _, found := outFormats[kind]; !found {
+ outFormats[kind] = output.Formats{output.HTMLType}
+ }
+ }
- var defs siteOutputDefinitions
+ return outFormats, nil
- // All have HTML
- defs = append(defs, siteOutputDefinition{ExcludedKinds: "", Outputs: []output.Format{output.HTMLType}})
+}
- // TODO(bep) output deprecate rssURI
- rssBase := cfg.GetString("rssURI")
- if rssBase == "" {
- rssBase = "index"
- }
+func createDefaultOutputFormats(cfg config.Provider) (map[string]output.Formats, error) {
+ outFormats := make(map[string]output.Formats)
+ for _, kind := range allKinds {
+ var formats output.Formats
+ // All have HTML
+ formats = append(formats, output.HTMLType)
+
+ // All but page have RSS
+ if kind != KindPage {
+ // TODO(bep) output deprecate rssURI
+ rssBase := cfg.GetString("rssURI")
+ if rssBase == "" {
+ rssBase = "index"
+ }
+
+ // RSS has now a well defined media type, so strip any suffix provided
+ rssBase = strings.TrimSuffix(rssBase, path.Ext(rssBase))
+ rssType := output.RSSType
+ rssType.BaseName = rssBase
+ formats = append(formats, rssType)
- // RSS has now a well defined media type, so strip any suffix provided
- rssBase = strings.TrimSuffix(rssBase, path.Ext(rssBase))
- rssType := output.RSSType
- rssType.BaseName = rssBase
+ }
- // Some have RSS
- defs = append(defs, siteOutputDefinition{ExcludedKinds: "page", Outputs: []output.Format{rssType}})
+ outFormats[kind] = formats
+ }
- return defs
+ return outFormats, nil
}