output: Fix taxonomy term base template lookup
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 3 Sep 2017 09:32:26 +0000 (11:32 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 3 Sep 2017 09:32:26 +0000 (11:32 +0200)
To make sure it uses the base templates in _default as a last resort.

Fixes #3856

output/layout_base.go
output/layout_base_test.go

index dc653ad0fb0d18e109768a2de78d2a6a11302d03..79baf9b5f5f93b229c7082b34c8b5305d04f35d9 100644 (file)
@@ -21,7 +21,9 @@ import (
        "github.com/gohugoio/hugo/helpers"
 )
 
-const baseFileBase = "baseof"
+const (
+       baseFileBase = "baseof"
+)
 
 var (
        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,
                // 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:
@@ -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 {
        // workLayoutDir will always be the most specific, so start there.
        pathsToCheck := []string{filepath.Join((append([]string{workLayoutDir}, path...))...)}
index b78f313524cf20784ee145b17ce0384a5bd34420..2435fed03c4db396a6a90381f1f062bd8b4a160b 100644 (file)
@@ -50,6 +50,14 @@ func TestLayoutBase(t *testing.T) {
                                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{