shithub: hugo

Download patch

ref: f88fe312cb35f7de1615c095edd2f898303dd23b
parent: d33563b5d79af01260a24cea355160d802b2bd4e
author: Bjørn Erik Pedersen <[email protected]>
date: Sun Sep 3 07:32:26 EDT 2017

output: Fix taxonomy term base template lookup

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

Fixes #3856

--- a/output/layout_base.go
+++ b/output/layout_base.go
@@ -21,7 +21,9 @@
 	"github.com/gohugoio/hugo/helpers"
 )
 
-const baseFileBase = "baseof"
+const (
+	baseFileBase = "baseof"
+)
 
 var (
 	aceTemplateInnerMarkers = [][]byte{[]byte("= content")}
@@ -170,11 +172,14 @@
 		// For each of the steps above, it will first look in the project, then, if theme is set,
 		// in the theme's layouts folder.
 		// Also note that the <current-path> may be both the project's layout folder and the theme's.
-		pairsToCheck := [][]string{
-			{baseTemplatedDir, currBaseFilename},
-			{baseTemplatedDir, baseFilename},
-			{"_default", currBaseFilename},
-			{"_default", baseFilename},
+		pairsToCheck := createPairsToCheck(baseTemplatedDir, baseFilename, currBaseFilename)
+
+		if strings.Contains(currBaseFilename, ".terms.") {
+			// We need to get from baseof.terms.html to baseof.html etc.
+			// See #3856
+			currBaseFilename = strings.Replace(currBaseFilename, ".terms", "", 1)
+			baseFilename = strings.Replace(baseFilename, ".terms", "", 1)
+			pairsToCheck = append(pairsToCheck, createPairsToCheck(baseTemplatedDir, baseFilename, currBaseFilename)...)
 		}
 
 	Loop:
@@ -192,6 +197,15 @@
 
 	return id, nil
 
+}
+
+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 {
--- a/output/layout_base_test.go
+++ b/output/layout_base_test.go
@@ -50,6 +50,14 @@
 				OverlayFilename: "/sites/mysite/layouts/_default/single.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,
 			"mytheme/layouts/_default/baseof.html",
 			TemplateNames{