all: Refactor to nonglobal template handling

Updates #2701
This commit is contained in:
Bjørn Erik Pedersen
2017-01-10 01:36:59 +01:00
committed by GitHub
parent 4ea4359ac1
commit d6000a208c
17 changed files with 255 additions and 209 deletions

View File

@@ -115,19 +115,23 @@ func (s *Site) reset() *Site {
}
// newSite creates a new site in the given language.
func newSite(lang *helpers.Language) *Site {
func newSite(lang *helpers.Language, deps *deps, withTemplate ...func(templ tpl.Template) error) *Site {
c := newPageCollections()
// TODO(bep) globals (also see other Site creation places)
deps := newDeps(DepsCfg{})
// TODO(bep) globals
viper.Set("currentContentLanguage", lang)
if deps == nil {
depsCfg := DepsCfg{WithTemplate: withTemplate}
deps = newDeps(depsCfg)
}
return &Site{deps: deps, Language: lang, PageCollections: c, Info: newSiteInfo(siteBuilderCfg{pageCollections: c, language: lang})}
}
// NewSiteDefaultLang creates a new site in the default language.
func NewSiteDefaultLang() *Site {
return newSite(helpers.NewDefaultLanguage())
func NewSiteDefaultLang(withTemplate ...func(templ tpl.Template) error) *Site {
return newSite(helpers.NewDefaultLanguage(), nil, withTemplate...)
}
// Convenience func used in tests.
@@ -656,24 +660,23 @@ func (s *Site) reProcess(events []fsnotify.Event) (whatChanged, error) {
}
func (s *Site) loadTemplates() {
s.owner.tmpl = tpl.InitializeT(s.log)
s.owner.tmpl.LoadTemplates(s.absLayoutDir())
if s.hasTheme() {
s.owner.tmpl.LoadTemplatesWithPrefix(s.absThemeDir()+"/layouts", "theme")
}
}
func (s *Site) prepTemplates(withTemplate func(templ tpl.Template) error) error {
s.loadTemplates()
if withTemplate != nil {
if err := withTemplate(s.owner.tmpl); err != nil {
return err
wt := func(tmpl tpl.Template) error {
// TODO(bep) global error handling
tmpl.LoadTemplates(s.absLayoutDir())
if s.hasTheme() {
tmpl.LoadTemplatesWithPrefix(s.absThemeDir()+"/layouts", "theme")
}
if withTemplate != nil {
if err := withTemplate(tmpl); err != nil {
return err
}
}
return nil
}
s.owner.tmpl.MarkReady()
s.refreshTemplates(wt)
return nil
}
@@ -778,6 +781,7 @@ func (s *Site) process(config BuildCfg) (err error) {
if err = s.initialize(); err != nil {
return
}
s.prepTemplates(config.withTemplate)
s.owner.tmpl.PrintErrors()
s.timerStep("initialize & template prep")