mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-17 21:01:26 +02:00
hugolib: Refactor/-work the permalink/target path logic
This is a pretty fundamental change in Hugo, but absolutely needed if we should have any hope of getting "multiple outputs" done. This commit's goal is to say: * Every file target path is created by `createTargetPath`, i.e. one function for all. * That function takes every page and site parameter into account, to avoid fragile string parsing to uglify etc. later on. * The path creation logic has full test coverage. * All permalinks, paginator URLs etc. are then built on top of that same logic. Fixes #1252 Fixes #2110 Closes #2374 Fixes #1885 Fixes #3102 Fixes #3179 Fixes #1641 Fixes #1989
This commit is contained in:
@@ -14,18 +14,13 @@
|
||||
package hugolib
|
||||
|
||||
import (
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
"github.com/spf13/hugo/config"
|
||||
"github.com/spf13/hugo/output"
|
||||
)
|
||||
|
||||
var defaultOutputDefinitions = siteOutputDefinitions{
|
||||
// All have HTML
|
||||
siteOutputDefinition{ExcludedKinds: "", Outputs: []output.Type{output.HTMLType}},
|
||||
// Some have RSS
|
||||
siteOutputDefinition{ExcludedKinds: "page", Outputs: []output.Type{output.RSSType}},
|
||||
}
|
||||
|
||||
type siteOutputDefinitions []siteOutputDefinition
|
||||
|
||||
type siteOutputDefinition struct {
|
||||
@@ -48,3 +43,27 @@ func (defs siteOutputDefinitions) ForKind(kind string) []output.Type {
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func createSiteOutputDefinitions(cfg config.Provider) siteOutputDefinitions {
|
||||
|
||||
var defs siteOutputDefinitions
|
||||
|
||||
// All have HTML
|
||||
defs = append(defs, siteOutputDefinition{ExcludedKinds: "", Outputs: []output.Type{output.HTMLType}})
|
||||
|
||||
// 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
|
||||
|
||||
// Some have RSS
|
||||
defs = append(defs, siteOutputDefinition{ExcludedKinds: "page", Outputs: []output.Type{rssType}})
|
||||
|
||||
return defs
|
||||
}
|
||||
|
Reference in New Issue
Block a user