shithub: hugo

Download patch

ref: a5d0a57e6bdab583134a68c035aac9b3007f006a
parent: f465571b33c8736a95534dd43f07527869d1eec3
author: Bjørn Erik Pedersen <[email protected]>
date: Mon Jul 2 06:33:55 EDT 2018

output: Fix the shortcodes/partials vs base template detection

Fixes #4897

--- a/output/layout_base.go
+++ b/output/layout_base.go
@@ -58,6 +58,10 @@
 	ContainsAny func(filename string, subslices [][]byte) (bool, error)
 }
 
+func isShorthCodeOrPartial(name string) bool {
+	return strings.HasPrefix(name, "shortcodes/") || strings.HasPrefix(name, "partials/")
+}
+
 func CreateTemplateNames(d TemplateLookupDescriptor) (TemplateNames, error) {
 
 	name := filepath.ToSlash(d.RelPath)
@@ -104,12 +108,12 @@
 	}
 
 	// Ace and Go templates may have both a base and inner template.
-	pathDir := filepath.Dir(d.RelPath)
-
-	if ext == "amber" || strings.HasSuffix(pathDir, "partials") || strings.HasSuffix(pathDir, "shortcodes") {
+	if ext == "amber" || isShorthCodeOrPartial(name) {
 		// No base template support
 		return id, nil
 	}
+
+	pathDir := filepath.Dir(d.RelPath)
 
 	innerMarkers := goTemplateInnerMarkers
 
--- a/output/layout_base_test.go
+++ b/output/layout_base_test.go
@@ -75,6 +75,18 @@
 				Name:            "partials/menu.html",
 				OverlayFilename: "partials/menu.html",
 			}},
+		{"Partial in subfolder", TemplateLookupDescriptor{WorkingDir: workingDir, RelPath: "/partials/sub/menu.html"}, true,
+			"_default/baseof.html",
+			TemplateNames{
+				Name:            "partials/sub/menu.html",
+				OverlayFilename: "/partials/sub/menu.html",
+			}},
+		{"Shortcode in subfolder", TemplateLookupDescriptor{WorkingDir: workingDir, RelPath: "shortcodes/sub/menu.html"}, true,
+			"_default/baseof.html",
+			TemplateNames{
+				Name:            "shortcodes/sub/menu.html",
+				OverlayFilename: "shortcodes/sub/menu.html",
+			}},
 		{"AMP, no base", TemplateLookupDescriptor{WorkingDir: workingDir, RelPath: layoutPathAmp}, false, "",
 			TemplateNames{
 				Name:            "_default/single.amp.html",