mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-25 22:00:58 +02:00
output: Fix permalink in sitemap etc. when multiple permalinkable output formats
In Hugo 0.55.0 we made AMP `permalinkable`. We also render the output formats in their natural sort order, meaning `AMP` will be rendered before `HTML`. References in the sitemap would then point to the AMP version, and this is normally not what you'd want. This commit fixes that by making `HTML` by default sort before the others. If this is not you want, you can set `weight` on the output format configuration. Fixes #5910
This commit is contained in:
@@ -78,6 +78,9 @@ type Format struct {
|
||||
// example. AMP would, however, be a good example of an output format where this
|
||||
// behaviour is wanted.
|
||||
Permalinkable bool `json:"permalinkable"`
|
||||
|
||||
// Setting this to a non-zero value will be used as the first sort criteria.
|
||||
Weight int `json:"weight"`
|
||||
}
|
||||
|
||||
// An ordered list of built-in output formats.
|
||||
@@ -125,6 +128,10 @@ var (
|
||||
Rel: "canonical",
|
||||
IsHTML: true,
|
||||
Permalinkable: true,
|
||||
|
||||
// Weight will be used as first sort criteria. HTML will, by default,
|
||||
// be rendered first, but set it to 10 so it's easy to put one above it.
|
||||
Weight: 10,
|
||||
}
|
||||
|
||||
JSONFormat = Format{
|
||||
@@ -180,9 +187,21 @@ func init() {
|
||||
// Formats is a slice of Format.
|
||||
type Formats []Format
|
||||
|
||||
func (formats Formats) Len() int { return len(formats) }
|
||||
func (formats Formats) Swap(i, j int) { formats[i], formats[j] = formats[j], formats[i] }
|
||||
func (formats Formats) Less(i, j int) bool { return formats[i].Name < formats[j].Name }
|
||||
func (formats Formats) Len() int { return len(formats) }
|
||||
func (formats Formats) Swap(i, j int) { formats[i], formats[j] = formats[j], formats[i] }
|
||||
func (formats Formats) Less(i, j int) bool {
|
||||
fi, fj := formats[i], formats[j]
|
||||
if fi.Weight == fj.Weight {
|
||||
return fi.Name < fj.Name
|
||||
}
|
||||
|
||||
if fj.Weight == 0 {
|
||||
return true
|
||||
}
|
||||
|
||||
return fi.Weight > 0 && fi.Weight < fj.Weight
|
||||
|
||||
}
|
||||
|
||||
// GetBySuffix gets a output format given as suffix, e.g. "html".
|
||||
// It will return false if no format could be found, or if the suffix given
|
||||
|
Reference in New Issue
Block a user