summaryrefslogtreecommitdiffstats
path: root/hugolib/page.go
diff options
context:
space:
mode:
Diffstat (limited to 'hugolib/page.go')
-rw-r--r--hugolib/page.go51
1 files changed, 28 insertions, 23 deletions
diff --git a/hugolib/page.go b/hugolib/page.go
index 13d5d0c26..10a75311b 100644
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -39,7 +39,6 @@ import (
"github.com/spf13/cast"
bp "github.com/spf13/hugo/bufferpool"
"github.com/spf13/hugo/source"
- "github.com/spf13/viper"
)
var (
@@ -195,8 +194,11 @@ type Page struct {
scratch *Scratch
+ // It would be tempting to use the language set on the Site, but in they way we do
+ // multi-site processing, these values may differ during the initial page processing.
language *helpers.Language
- lang string
+
+ lang string
}
// pageInit lazy initializes different parts of the page. It is extracted
@@ -518,10 +520,11 @@ func (p *Page) renderContent(content []byte) []byte {
return p.Site.SourceRelativeLinkFile(ref, p)
}
}
- return helpers.RenderBytes(&helpers.RenderingContext{
+
+ return p.s.ContentSpec.RenderBytes(&helpers.RenderingContext{
Content: content, RenderTOC: true, PageFmt: p.determineMarkupType(),
- ConfigProvider: p.Language(),
- DocumentID: p.UniqueID(), DocumentName: p.Path(),
+ Cfg: p.Language(),
+ DocumentID: p.UniqueID(), DocumentName: p.Path(),
Config: p.getRenderingConfig(), LinkResolver: fn, FileResolver: fileFn})
}
@@ -532,7 +535,7 @@ func (p *Page) getRenderingConfig() *helpers.Blackfriday {
if p.Language() == nil {
panic(fmt.Sprintf("nil language for %s with source lang %s", p.BaseFileName(), p.lang))
}
- p.renderingConfig = helpers.NewBlackfriday(p.Language())
+ p.renderingConfig = p.s.ContentSpec.NewBlackfriday()
if err := mapstructure.Decode(pageParam, p.renderingConfig); err != nil {
p.s.Log.FATAL.Printf("Failed to get rendering config for %s:\n%s", p.BaseFileName(), err.Error())
@@ -544,15 +547,18 @@ func (p *Page) getRenderingConfig() *helpers.Blackfriday {
}
func (s *Site) newPage(filename string) *Page {
+ sp := source.NewSourceSpec(s.Cfg, s.Fs)
page := Page{
pageInit: &pageInit{},
Kind: kindFromFilename(filename),
contentType: "",
- Source: Source{File: *source.NewFile(filename)},
+ Source: Source{File: *sp.NewFile(filename)},
Keywords: []string{}, Sitemap: Sitemap{Priority: -1},
Params: make(map[string]interface{}),
translations: make(Pages, 0),
sections: sectionsFromFilename(filename),
+ Site: &s.Info,
+ s: s,
}
s.Log.DEBUG.Println("Reading from", page.File.Path())
@@ -799,7 +805,7 @@ func (p *Page) Extension() string {
if p.extension != "" {
return p.extension
}
- return viper.GetString("defaultExtension")
+ return p.s.Cfg.GetString("defaultExtension")
}
// AllTranslations returns all translations, including the current Page.
@@ -832,8 +838,8 @@ func (p *Page) LinkTitle() string {
}
func (p *Page) shouldBuild() bool {
- return shouldBuild(viper.GetBool("buildFuture"), viper.GetBool("buildExpired"),
- viper.GetBool("buildDrafts"), p.Draft, p.PublishDate, p.ExpiryDate)
+ return shouldBuild(p.s.Cfg.GetBool("buildFuture"), p.s.Cfg.GetBool("buildExpired"),
+ p.s.Cfg.GetBool("buildDrafts"), p.Draft, p.PublishDate, p.ExpiryDate)
}
func shouldBuild(buildFuture bool, buildExpired bool, buildDrafts bool, Draft bool,
@@ -886,7 +892,7 @@ func (p *Page) URL() string {
func (p *Page) RelPermalink() string {
link := p.getPermalink()
- if viper.GetBool("canonifyURLs") {
+ if p.s.Cfg.GetBool("canonifyURLs") {
// replacements for relpermalink with baseURL on the form http://myhost.com/sub/ will fail later on
// have to return the URL relative from baseURL
relpath, err := helpers.GetRelativePath(link.String(), string(p.Site.BaseURL))
@@ -1047,8 +1053,8 @@ func (p *Page) update(f interface{}) error {
p.Draft = !*published
}
- if p.Date.IsZero() && viper.GetBool("useModTimeAsFallback") {
- fi, err := p.s.Fs.Source.Stat(filepath.Join(helpers.AbsPathify(viper.GetString("contentDir")), p.File.Path()))
+ if p.Date.IsZero() && p.s.Cfg.GetBool("useModTimeAsFallback") {
+ fi, err := p.s.Fs.Source.Stat(filepath.Join(p.s.PathSpec.AbsPathify(p.s.Cfg.GetString("contentDir")), p.File.Path()))
if err == nil {
p.Date = fi.ModTime()
}
@@ -1060,7 +1066,7 @@ func (p *Page) update(f interface{}) error {
if isCJKLanguage != nil {
p.isCJKLanguage = *isCJKLanguage
- } else if viper.GetBool("hasCJKLanguage") {
+ } else if p.s.Cfg.GetBool("hasCJKLanguage") {
if cjk.Match(p.rawContent) {
p.isCJKLanguage = true
} else {
@@ -1378,10 +1384,9 @@ func (p *Page) saveSourceAs(path string, safe bool) error {
func (p *Page) saveSource(by []byte, inpath string, safe bool) (err error) {
if !filepath.IsAbs(inpath) {
- inpath = helpers.AbsPathify(inpath)
+ inpath = p.s.PathSpec.AbsPathify(inpath)
}
p.s.Log.INFO.Println("creating", inpath)
-
if safe {
err = helpers.SafeWriteToDisk(inpath, bytes.NewReader(by), p.s.Fs.Source)
} else {
@@ -1691,25 +1696,27 @@ func (p *Page) initLanguage() {
if p.language != nil {
return
}
- pageLang := p.lang
+
ml := p.Site.multilingual
if ml == nil {
panic("Multilanguage not set")
}
- if pageLang == "" {
+ if p.lang == "" {
+ p.lang = ml.DefaultLang.Lang
p.language = ml.DefaultLang
return
}
- language := ml.Language(pageLang)
+ language := ml.Language(p.lang)
if language == nil {
// It can be a file named stefano.chiodino.md.
- p.s.Log.WARN.Printf("Page language (if it is that) not found in multilang setup: %s.", pageLang)
+ p.s.Log.WARN.Printf("Page language (if it is that) not found in multilang setup: %s.", p.lang)
language = ml.DefaultLang
}
p.language = language
+
})
}
@@ -1743,6 +1750,7 @@ func (p *Page) addLangFilepathPrefix(outfile string) string {
if outfile == "" {
outfile = helpers.FilePathSeparator
}
+
if !p.shouldAddLanguagePrefix() {
return outfile
}
@@ -1795,7 +1803,4 @@ func (p *Page) setValuesForKind(s *Site) {
case KindTaxonomyTerm:
p.URLPath.URL = "/" + path.Join(p.sections...) + "/"
}
-
- p.s = s
-
}