From a5d0a57e6bdab583134a68c035aac9b3007f006a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 2 Jul 2018 10:33:55 +0200 Subject: [PATCH] output: Fix the shortcodes/partials vs base template detection Fixes #4897 --- output/layout_base.go | 10 +++++++--- output/layout_base_test.go | 12 ++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/output/layout_base.go b/output/layout_base.go index 31e1194f408..d3c52347c64 100644 --- a/output/layout_base.go +++ b/output/layout_base.go @@ -58,6 +58,10 @@ type TemplateLookupDescriptor struct { 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,13 +108,13 @@ func CreateTemplateNames(d TemplateLookupDescriptor) (TemplateNames, error) { } // 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 var baseFilename string diff --git a/output/layout_base_test.go b/output/layout_base_test.go index 719407524d3..25294c91870 100644 --- a/output/layout_base_test.go +++ b/output/layout_base_test.go @@ -75,6 +75,18 @@ func TestLayoutBase(t *testing.T) { 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",