Support uglyURLs per section

Fixes #4256
This commit is contained in:
Bjørn Erik Pedersen 2018-01-11 17:46:43 +01:00
parent db85e83403
commit 57e10f174e
3 changed files with 61 additions and 3 deletions

View file

@ -86,7 +86,7 @@ func (p *Page) initTargetPathDescriptor() error {
PathSpec: p.s.PathSpec, PathSpec: p.s.PathSpec,
Kind: p.Kind, Kind: p.Kind,
Sections: p.sections, Sections: p.sections,
UglyURLs: p.s.Info.uglyURLs, UglyURLs: p.s.Info.uglyURLs(p),
Dir: filepath.ToSlash(p.Source.Dir()), Dir: filepath.ToSlash(p.Source.Dir()),
URL: p.URLPath.URL, URL: p.URLPath.URL,
IsMultihost: p.s.owner.IsMultihost(), IsMultihost: p.s.owner.IsMultihost(),

View file

@ -357,7 +357,7 @@ type SiteInfo struct {
BuildDrafts bool BuildDrafts bool
canonifyURLs bool canonifyURLs bool
relativeURLs bool relativeURLs bool
uglyURLs bool uglyURLs func(p *Page) bool
preserveTaxonomyNames bool preserveTaxonomyNames bool
Data *map[string]interface{} Data *map[string]interface{}
@ -413,6 +413,9 @@ func newSiteInfo(cfg siteBuilderCfg) SiteInfo {
multilingual: newMultiLingualForLanguage(cfg.language), multilingual: newMultiLingualForLanguage(cfg.language),
PageCollections: cfg.pageCollections, PageCollections: cfg.pageCollections,
Params: make(map[string]interface{}), Params: make(map[string]interface{}),
uglyURLs: func(p *Page) bool {
return false
},
} }
} }
@ -1035,6 +1038,24 @@ func (s *Site) initializeSiteInfo() {
multilingual = s.owner.multilingual multilingual = s.owner.multilingual
} }
var uglyURLs = func(p *Page) bool {
return false
}
v := s.Cfg.Get("uglyURLs")
if v != nil {
if vv, ok := v.(bool); ok {
uglyURLs = func(p *Page) bool {
return vv
}
} else {
m := cast.ToStringMapBool(v)
uglyURLs = func(p *Page) bool {
return m[p.Section()]
}
}
}
s.Info = SiteInfo{ s.Info = SiteInfo{
Title: lang.GetString("title"), Title: lang.GetString("title"),
Author: lang.GetStringMap("author"), Author: lang.GetStringMap("author"),
@ -1052,7 +1073,7 @@ func (s *Site) initializeSiteInfo() {
BuildDrafts: s.Cfg.GetBool("buildDrafts"), BuildDrafts: s.Cfg.GetBool("buildDrafts"),
canonifyURLs: s.Cfg.GetBool("canonifyURLs"), canonifyURLs: s.Cfg.GetBool("canonifyURLs"),
relativeURLs: s.Cfg.GetBool("relativeURLs"), relativeURLs: s.Cfg.GetBool("relativeURLs"),
uglyURLs: s.Cfg.GetBool("uglyURLs"), uglyURLs: uglyURLs,
preserveTaxonomyNames: lang.GetBool("preserveTaxonomyNames"), preserveTaxonomyNames: lang.GetBool("preserveTaxonomyNames"),
PageCollections: s.PageCollections, PageCollections: s.PageCollections,
Menus: &s.Menus, Menus: &s.Menus,

View file

@ -87,3 +87,40 @@ func TestPageCount(t *testing.T) {
} }
} }
} }
func TestUglyURLsPerSection(t *testing.T) {
t.Parallel()
assert := require.New(t)
const dt = `---
title: Do not go gentle into that good night
---
Wild men who caught and sang the sun in flight,
And learn, too late, they grieved it on its way,
Do not go gentle into that good night.
`
cfg, fs := newTestCfg()
cfg.Set("uglyURLs", map[string]bool{
"sect2": true,
})
writeSource(t, fs, filepath.Join("content", "sect1", "p1.md"), dt)
writeSource(t, fs, filepath.Join("content", "sect2", "p2.md"), dt)
s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg}, BuildCfg{SkipRender: true})
assert.Len(s.RegularPages, 2)
notUgly := s.getPage(KindPage, "sect1/p1.md")
assert.NotNil(notUgly)
assert.Equal("/sect1/p1/", notUgly.RelPermalink())
ugly := s.getPage(KindPage, "sect2/p2.md")
assert.NotNil(ugly)
assert.Equal("/sect2/p2.html", ugly.RelPermalink())
}