output: Fix taxonomy term base template lookup

To make sure it uses the base templates in _default as a last resort.

Fixes #3856
This commit is contained in:
Bjørn Erik Pedersen 2017-09-03 11:32:26 +02:00
parent d33563b5d7
commit f88fe312cb
2 changed files with 28 additions and 6 deletions

View file

@ -21,7 +21,9 @@ import (
"github.com/gohugoio/hugo/helpers" "github.com/gohugoio/hugo/helpers"
) )
const baseFileBase = "baseof" const (
baseFileBase = "baseof"
)
var ( var (
aceTemplateInnerMarkers = [][]byte{[]byte("= content")} aceTemplateInnerMarkers = [][]byte{[]byte("= content")}
@ -170,11 +172,14 @@ func CreateTemplateNames(d TemplateLookupDescriptor) (TemplateNames, error) {
// For each of the steps above, it will first look in the project, then, if theme is set, // For each of the steps above, it will first look in the project, then, if theme is set,
// in the theme's layouts folder. // in the theme's layouts folder.
// Also note that the <current-path> may be both the project's layout folder and the theme's. // Also note that the <current-path> may be both the project's layout folder and the theme's.
pairsToCheck := [][]string{ pairsToCheck := createPairsToCheck(baseTemplatedDir, baseFilename, currBaseFilename)
{baseTemplatedDir, currBaseFilename},
{baseTemplatedDir, baseFilename}, if strings.Contains(currBaseFilename, ".terms.") {
{"_default", currBaseFilename}, // We need to get from baseof.terms.html to baseof.html etc.
{"_default", baseFilename}, // See #3856
currBaseFilename = strings.Replace(currBaseFilename, ".terms", "", 1)
baseFilename = strings.Replace(baseFilename, ".terms", "", 1)
pairsToCheck = append(pairsToCheck, createPairsToCheck(baseTemplatedDir, baseFilename, currBaseFilename)...)
} }
Loop: Loop:
@ -194,6 +199,15 @@ func CreateTemplateNames(d TemplateLookupDescriptor) (TemplateNames, error) {
} }
func createPairsToCheck(baseTemplatedDir, baseFilename, currBaseFilename string) [][]string {
return [][]string{
{baseTemplatedDir, currBaseFilename},
{baseTemplatedDir, baseFilename},
{"_default", currBaseFilename},
{"_default", baseFilename},
}
}
func basePathsToCheck(path []string, layoutDir, workLayoutDir, themeLayoutDir string) []string { func basePathsToCheck(path []string, layoutDir, workLayoutDir, themeLayoutDir string) []string {
// workLayoutDir will always be the most specific, so start there. // workLayoutDir will always be the most specific, so start there.
pathsToCheck := []string{filepath.Join((append([]string{workLayoutDir}, path...))...)} pathsToCheck := []string{filepath.Join((append([]string{workLayoutDir}, path...))...)}

View file

@ -50,6 +50,14 @@ func TestLayoutBase(t *testing.T) {
OverlayFilename: "/sites/mysite/layouts/_default/single.html", OverlayFilename: "/sites/mysite/layouts/_default/single.html",
MasterFilename: "/sites/mysite/layouts/_default/single-baseof.html", MasterFilename: "/sites/mysite/layouts/_default/single-baseof.html",
}}, }},
// Issue #3856
{"Base Taxonomy Term", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: "taxonomy/tag.terms.html"}, true, "_default/baseof.html",
TemplateNames{
Name: "taxonomy/tag.terms.html",
OverlayFilename: "/sites/mysite/layouts/taxonomy/tag.terms.html",
MasterFilename: "/sites/mysite/layouts/_default/baseof.html",
}},
{"Base in theme", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPath1, ThemeDir: themeDir}, true, {"Base in theme", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPath1, ThemeDir: themeDir}, true,
"mytheme/layouts/_default/baseof.html", "mytheme/layouts/_default/baseof.html",
TemplateNames{ TemplateNames{