From 0a81a6b4bae3de53aa9c179b855c671a2d30eec7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 17 Nov 2017 12:27:50 +0100 Subject: output: Fall back to unstranslated base template Fixes #3893 --- output/layout_base.go | 18 ++++++++++++------ output/layout_base_test.go | 18 +++++++++++++++--- 2 files changed, 27 insertions(+), 9 deletions(-) (limited to 'output') diff --git a/output/layout_base.go b/output/layout_base.go index 79baf9b5f..49ae1d64e 100644 --- a/output/layout_base.go +++ b/output/layout_base.go @@ -174,12 +174,18 @@ func CreateTemplateNames(d TemplateLookupDescriptor) (TemplateNames, error) { // Also note that the may be both the project's layout folder and the theme's. 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)...) + // We may have language code and/or "terms" in the template name. We want the most specific, + // but need to fall back to the baseof.html or baseof.ace if needed. + // E.g. list-baseof.en.html and list-baseof.terms.en.html + // See #3893, #3856. + baseBaseFilename, currBaseBaseFilename := helpers.Filename(baseFilename), helpers.Filename(currBaseFilename) + p1, p2 := strings.Split(baseBaseFilename, "."), strings.Split(currBaseBaseFilename, ".") + if len(p1) > 0 && len(p1) == len(p2) { + for i := len(p1); i > 0; i-- { + v1, v2 := strings.Join(p1[:i], ".")+"."+ext, strings.Join(p2[:i], ".")+"."+ext + pairsToCheck = append(pairsToCheck, createPairsToCheck(baseTemplatedDir, v1, v2)...) + + } } Loop: diff --git a/output/layout_base_test.go b/output/layout_base_test.go index 2435fed03..d7c7fbb90 100644 --- a/output/layout_base_test.go +++ b/output/layout_base_test.go @@ -50,6 +50,19 @@ func TestLayoutBase(t *testing.T) { OverlayFilename: "/sites/mysite/layouts/_default/single.html", MasterFilename: "/sites/mysite/layouts/_default/single-baseof.html", }}, + // Issue #3893 + {"Base Lang, Default Base", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: "layouts", RelPath: "_default/list.en.html"}, true, "_default/baseof.html", + TemplateNames{ + Name: "_default/list.en.html", + OverlayFilename: "/sites/mysite/layouts/_default/list.en.html", + MasterFilename: "/sites/mysite/layouts/_default/baseof.html", + }}, + {"Base Lang, Lang Base", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: "layouts", RelPath: "_default/list.en.html"}, true, "_default/baseof.html|_default/baseof.en.html", + TemplateNames{ + Name: "_default/list.en.html", + OverlayFilename: "/sites/mysite/layouts/_default/list.en.html", + MasterFilename: "/sites/mysite/layouts/_default/baseof.en.html", + }}, // Issue #3856 {"Base Taxonomy Term", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: "taxonomy/tag.terms.html"}, true, "_default/baseof.html", TemplateNames{ @@ -116,12 +129,11 @@ func TestLayoutBase(t *testing.T) { OverlayFilename: "/sites/mysite/layouts/_default/single.amp.html", MasterFilename: "/sites/mysite/layouts/_default/single-baseof.amp.html", }}, - {"AMP with no match in base", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPathAmp}, true, "single-baseof.html", + {"AMP with no AMP base", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPathAmp}, true, "single-baseof.html", TemplateNames{ Name: "_default/single.amp.html", OverlayFilename: "/sites/mysite/layouts/_default/single.amp.html", - // There is a single-baseof.html, but that makes no sense. - MasterFilename: "", + MasterFilename: "/sites/mysite/layouts/_default/single-baseof.html", }}, {"JSON with base", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPathJSON}, true, "single-baseof.json", -- cgit v1.2.3