mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
Make the shortcode template lookup for output formats stable
Fixes #7774
This commit is contained in:
parent
65c502cc81
commit
0d86a32d8f
2 changed files with 65 additions and 0 deletions
|
@ -1347,3 +1347,49 @@ title: "No Inner!"
|
|||
err := b.BuildE(BuildCfg{})
|
||||
b.Assert(err.Error(), qt.Contains, `failed to extract shortcode: shortcode "noinner" has no .Inner, yet a closing tag was provided`)
|
||||
}
|
||||
|
||||
func TestShortcodeStableOutputFormatTemplates(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
for i := 0; i < 5; i++ {
|
||||
|
||||
b := newTestSitesBuilder(t)
|
||||
|
||||
const numPages = 10
|
||||
|
||||
for i := 0; i < numPages; i++ {
|
||||
b.WithContent(fmt.Sprintf("page%d.md", i), `---
|
||||
title: "Page"
|
||||
outputs: ["html", "css", "csv", "json"]
|
||||
---
|
||||
{{< myshort >}}
|
||||
|
||||
`)
|
||||
}
|
||||
|
||||
b.WithTemplates(
|
||||
"_default/single.html", "{{ .Content }}",
|
||||
"_default/single.css", "{{ .Content }}",
|
||||
"_default/single.csv", "{{ .Content }}",
|
||||
"_default/single.json", "{{ .Content }}",
|
||||
"shortcodes/myshort.html", `Short-HTML`,
|
||||
"shortcodes/myshort.csv", `Short-CSV`,
|
||||
)
|
||||
|
||||
b.Build(BuildCfg{})
|
||||
|
||||
//helpers.PrintFs(b.Fs.Destination, "public", os.Stdout)
|
||||
|
||||
for i := 0; i < numPages; i++ {
|
||||
b.AssertFileContent(fmt.Sprintf("public/page%d/index.html", i), "Short-HTML")
|
||||
b.AssertFileContent(fmt.Sprintf("public/page%d/index.csv", i), "Short-CSV")
|
||||
b.AssertFileContent(fmt.Sprintf("public/page%d/index.json", i), "Short-HTML")
|
||||
|
||||
}
|
||||
|
||||
for i := 0; i < numPages; i++ {
|
||||
b.AssertFileContent(fmt.Sprintf("public/page%d/styles.css", i), "Short-HTML")
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ import (
|
|||
"path/filepath"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
@ -814,6 +815,24 @@ func (t *templateHandler) postTransform() error {
|
|||
}
|
||||
}
|
||||
|
||||
for _, v := range t.shortcodes {
|
||||
sort.Slice(v.variants, func(i, j int) bool {
|
||||
v1, v2 := v.variants[i], v.variants[j]
|
||||
name1, name2 := v1.ts.Name(), v2.ts.Name()
|
||||
isHTMl1, isHTML2 := strings.HasSuffix(name1, "html"), strings.HasSuffix(name2, "html")
|
||||
|
||||
// There will be a weighted selection later, but make
|
||||
// sure these are sorted to get a stable selection for
|
||||
// output formats missing specific templates.
|
||||
// Prefer HTML.
|
||||
if isHTMl1 || isHTML2 && !(isHTMl1 && isHTML2) {
|
||||
return isHTMl1
|
||||
}
|
||||
|
||||
return name1 < name2
|
||||
})
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue