tpl: Fix it so embedded render-codeblock-goat is used even if custom render-codeblock exists

Fixes #13595
This commit is contained in:
Bjørn Erik Pedersen 2025-04-12 12:02:33 +02:00
parent 53221f88ca
commit c8710625b7
No known key found for this signature in database
3 changed files with 100 additions and 7 deletions

View file

@ -208,12 +208,9 @@ func (this TemplateDescriptor) doCompare(category Category, isEmbedded bool, oth
w.w1 += weightVariant1 w.w1 += weightVariant1
} }
if other.Variant2 != "" && other.Variant2 == this.Variant2 { if other.Variant1 != "" && other.Variant2 == this.Variant2 {
w.w1 += weightVariant2 w.w1 += weightVariant2
} }
if other.Variant2 != "" && this.Variant2 == "" {
w.w1--
}
return w return w
} }

View file

@ -1832,7 +1832,10 @@ func (best *bestMatch) isBetter(w weight, ti *TemplInfo) bool {
return false return false
} }
if best.w.w1 > 0 { // Note that for render hook templates, we need to make
// the embedded render hook template wih if they're a better match,
// e.g. render-codeblock-goat.html.
if best.templ.category != CategoryMarkup && best.w.w1 > 0 {
currentBestIsEmbedded := best.templ.subCategory == SubCategoryEmbedded currentBestIsEmbedded := best.templ.subCategory == SubCategoryEmbedded
if currentBestIsEmbedded { if currentBestIsEmbedded {
if ti.subCategory != SubCategoryEmbedded { if ti.subCategory != SubCategoryEmbedded {

View file

@ -827,7 +827,46 @@ func TestPartialHTML(t *testing.T) {
} }
// Issue #13593. // Issue #13593.
func TestNoGoat(t *testing.T) { func TestGoatAndNoGoat(t *testing.T) {
t.Parallel()
files := `
-- hugo.toml --
-- content/_index.md --
---
title: "Home"
---
§§§
printf "Hello, world!"
§§§
§§§ goat
.---. .-. .-. .-. .---.
| A +--->| 1 |<--->| 2 |<--->| 3 |<---+ B |
'---' '-' '+' '+' '---'
§§§
-- layouts/all.html --
{{ .Content }}
`
b := hugolib.Test(t, files)
// Basic code block.
b.AssertFileContent("public/index.html", "<code>printf &#34;Hello, world!&#34;\n</code>")
// Goat code block.
b.AssertFileContent("public/index.html", "Menlo,Lucida")
}
// Issue #13595.
func TestGoatAndNoGoatCustomTemplate(t *testing.T) {
t.Parallel() t.Parallel()
files := ` files := `
@ -841,6 +880,16 @@ title: "Home"
printf "Hello, world!" printf "Hello, world!"
§§§ §§§
§§§ goat
.---. .-. .-. .-. .---.
| A +--->| 1 |<--->| 2 |<--->| 3 |<---+ B |
'---' '-' '+' '+' '---'
§§§
-- layouts/_markup/render-codeblock.html --
_markup/render-codeblock.html
-- layouts/all.html -- -- layouts/all.html --
{{ .Content }} {{ .Content }}
@ -848,7 +897,51 @@ printf "Hello, world!"
b := hugolib.Test(t, files) b := hugolib.Test(t, files)
b.AssertFileContent("public/index.html", "Hello, world!") // Basic code block.
b.AssertFileContent("public/index.html", "_markup/render-codeblock.html")
// Goat code block.
b.AssertFileContent("public/index.html", "Menlo,Lucida")
}
func TestGoatcustom(t *testing.T) {
t.Parallel()
files := `
-- hugo.toml --
-- content/_index.md --
---
title: "Home"
---
§§§
printf "Hello, world!"
§§§
§§§ goat
.---. .-. .-. .-. .---.
| A +--->| 1 |<--->| 2 |<--->| 3 |<---+ B |
'---' '-' '+' '+' '---'
§§§
-- layouts/_markup/render-codeblock.html --
_markup/render-codeblock.html
-- layouts/_markup/render-codeblock-goat.html --
_markup/render-codeblock-goat.html
-- layouts/all.html --
{{ .Content }}
`
b := hugolib.Test(t, files)
// Basic code block.
b.AssertFileContent("public/index.html", "_markup/render-codeblock.html")
// Custom Goat code block.
b.AssertFileContent("public/index.html", "_markup/render-codeblock.html_markup/render-codeblock-goat.html")
} }
// Issue #13515 // Issue #13515