summaryrefslogtreecommitdiffstats
path: root/hugolib/hugo_sites.go
diff options
context:
space:
mode:
Diffstat (limited to 'hugolib/hugo_sites.go')
-rw-r--r--hugolib/hugo_sites.go91
1 files changed, 43 insertions, 48 deletions
diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go
index c8ae51d0a..f0feec23e 100644
--- a/hugolib/hugo_sites.go
+++ b/hugolib/hugo_sites.go
@@ -22,9 +22,7 @@ import (
"github.com/spf13/hugo/deps"
"github.com/spf13/hugo/helpers"
- "github.com/spf13/viper"
-
- "github.com/spf13/hugo/source"
+ "github.com/spf13/hugo/i18n"
"github.com/spf13/hugo/tpl"
"github.com/spf13/hugo/tplapi"
)
@@ -48,7 +46,7 @@ func newHugoSites(cfg deps.DepsCfg, sites ...*Site) (*HugoSites, error) {
return nil, errors.New("Cannot provide Language in Cfg when sites are provided")
}
- langConfig, err := newMultiLingualFromSites(sites...)
+ langConfig, err := newMultiLingualFromSites(cfg.Cfg, sites...)
if err != nil {
return nil, err
@@ -62,6 +60,9 @@ func newHugoSites(cfg deps.DepsCfg, sites ...*Site) (*HugoSites, error) {
s.owner = h
}
+ // TODO(bep)
+ cfg.Cfg.Set("multilingual", sites[0].multilingualEnabled())
+
applyDepsIfNeeded(cfg, sites...)
h.Deps = sites[0].Deps
@@ -70,11 +71,14 @@ func newHugoSites(cfg deps.DepsCfg, sites ...*Site) (*HugoSites, error) {
}
func applyDepsIfNeeded(cfg deps.DepsCfg, sites ...*Site) error {
-
if cfg.TemplateProvider == nil {
cfg.TemplateProvider = tpl.DefaultTemplateProvider
}
+ if cfg.TranslationProvider == nil {
+ cfg.TranslationProvider = i18n.NewTranslationProvider()
+ }
+
var (
d *deps.Deps
err error
@@ -89,7 +93,9 @@ func applyDepsIfNeeded(cfg deps.DepsCfg, sites ...*Site) error {
cfg.Language = s.Language
cfg.WithTemplate = s.withSiteTemplates(cfg.WithTemplate)
d = deps.New(cfg)
- if err := d.LoadTemplates(); err != nil {
+ s.Deps = d
+
+ if err := d.LoadResources(); err != nil {
return err
}
@@ -98,16 +104,16 @@ func applyDepsIfNeeded(cfg deps.DepsCfg, sites ...*Site) error {
if err != nil {
return err
}
+ s.Deps = d
}
- s.Deps = d
+
}
return nil
}
-// NewHugoSitesFromConfiguration creates HugoSites from the global Viper config.
-// TODO(bep) globals rename this when all the globals are gone.
-func NewHugoSitesFromConfiguration(cfg deps.DepsCfg) (*HugoSites, error) {
+// NewHugoSites creates HugoSites from the given config.
+func NewHugoSites(cfg deps.DepsCfg) (*HugoSites, error) {
sites, err := createSitesFromConfig(cfg)
if err != nil {
return nil, err
@@ -141,10 +147,10 @@ func createSitesFromConfig(cfg deps.DepsCfg) ([]*Site, error) {
sites []*Site
)
- multilingual := viper.GetStringMap("languages")
+ multilingual := cfg.Cfg.GetStringMap("languages")
if len(multilingual) == 0 {
- l := helpers.NewDefaultLanguage()
+ l := helpers.NewDefaultLanguage(cfg.Cfg)
cfg.Language = l
s, err := newSite(cfg)
if err != nil {
@@ -156,7 +162,7 @@ func createSitesFromConfig(cfg deps.DepsCfg) ([]*Site, error) {
if len(multilingual) > 0 {
var err error
- languages, err := toSortedLanguages(multilingual)
+ languages, err := toSortedLanguages(cfg.Cfg, multilingual)
if err != nil {
return nil, fmt.Errorf("Failed to parse multilingual config: %s", err)
@@ -190,14 +196,14 @@ func (h *HugoSites) reset() {
func (h *HugoSites) createSitesFromConfig() error {
- depsCfg := deps.DepsCfg{Fs: h.Fs}
+ depsCfg := deps.DepsCfg{Fs: h.Fs, Cfg: h.Cfg}
sites, err := createSitesFromConfig(depsCfg)
if err != nil {
return err
}
- langConfig, err := newMultiLingualFromSites(sites...)
+ langConfig, err := newMultiLingualFromSites(depsCfg.Cfg, sites...)
if err != nil {
return err
@@ -251,12 +257,12 @@ func (h *HugoSites) renderCrossSitesArtifacts() error {
return nil
}
- if viper.GetBool("disableSitemap") {
+ if h.Cfg.GetBool("disableSitemap") {
return nil
}
// TODO(bep) DRY
- sitemapDefault := parseSitemap(viper.GetStringMap("sitemap"))
+ sitemapDefault := parseSitemap(h.Cfg.GetStringMap("sitemap"))
s := h.Sites[0]
@@ -398,6 +404,24 @@ func (h *HugoSites) createMissingPages() error {
return nil
}
+func (s *Site) assignSiteByLanguage(p *Page) {
+
+ pageLang := p.Lang()
+
+ if pageLang == "" {
+ panic("Page language missing: " + p.Title)
+ }
+
+ for _, site := range s.owner.Sites {
+ if strings.HasPrefix(site.Language.Lang, pageLang) {
+ p.s = site
+ p.Site = &site.Info
+ return
+ }
+ }
+
+}
+
func (h *HugoSites) setupTranslations() {
master := h.Sites[0]
@@ -410,11 +434,11 @@ func (h *HugoSites) setupTranslations() {
shouldBuild := p.shouldBuild()
for i, site := range h.Sites {
- if strings.HasPrefix(site.Language.Lang, p.Lang()) {
+ // The site is assigned by language when read.
+ if site == p.s {
site.updateBuildStats(p)
if shouldBuild {
site.Pages = append(site.Pages, p)
- p.Site = &site.Info
}
}
@@ -577,32 +601,3 @@ func (h *HugoSites) findAllPagesByKind(kind string) Pages {
func (h *HugoSites) findAllPagesByKindNotIn(kind string) Pages {
return h.findPagesByKindNotIn(kind, h.Sites[0].AllPages)
}
-
-// Convenience func used in tests.
-func newHugoSitesFromSourceAndLanguages(input []source.ByteSource, languages helpers.Languages, cfg deps.DepsCfg) (*HugoSites, error) {
- if len(languages) == 0 {
- panic("Must provide at least one language")
- }
-
- first := &Site{
- Language: languages[0],
- Source: &source.InMemorySource{ByteSource: input},
- }
- if len(languages) == 1 {
- return newHugoSites(cfg, first)
- }
-
- sites := make([]*Site, len(languages))
- sites[0] = first
- for i := 1; i < len(languages); i++ {
- sites[i] = &Site{Language: languages[i]}
- }
-
- return newHugoSites(cfg, sites...)
-
-}
-
-// Convenience func used in tests.
-func newHugoSitesDefaultLanguage(cfg deps.DepsCfg) (*HugoSites, error) {
- return newHugoSitesFromSourceAndLanguages(nil, helpers.Languages{helpers.NewDefaultLanguage()}, cfg)
-}