diff options
Diffstat (limited to 'output')
-rw-r--r-- | output/docshelper.go | 2 | ||||
-rw-r--r-- | output/layout.go | 30 | ||||
-rw-r--r-- | output/layout_base.go | 91 | ||||
-rw-r--r-- | output/layout_base_test.go | 97 | ||||
-rw-r--r-- | output/layout_test.go | 80 |
5 files changed, 88 insertions, 212 deletions
diff --git a/output/docshelper.go b/output/docshelper.go index 6b7826002..fcf9ae61c 100644 --- a/output/docshelper.go +++ b/output/docshelper.go @@ -68,7 +68,7 @@ func createLayoutExamples() interface{} { {"Taxonomy term in categories", LayoutDescriptor{Kind: "taxonomyTerm", Type: "categories", Section: "category"}, false, HTMLFormat}, } { - l := NewLayoutHandler(example.hasTheme) + l := NewLayoutHandler() layouts, _ := l.For(example.d, example.f) basicExamples = append(basicExamples, Example{ diff --git a/output/layout.go b/output/layout.go index 206293842..f83490d81 100644 --- a/output/layout.go +++ b/output/layout.go @@ -41,8 +41,6 @@ type LayoutDescriptor struct { // LayoutHandler calculates the layout template to use to render a given output type. type LayoutHandler struct { - hasTheme bool - mu sync.RWMutex cache map[layoutCacheKey][]string } @@ -53,8 +51,8 @@ type layoutCacheKey struct { } // NewLayoutHandler creates a new LayoutHandler. -func NewLayoutHandler(hasTheme bool) *LayoutHandler { - return &LayoutHandler{hasTheme: hasTheme, cache: make(map[layoutCacheKey][]string)} +func NewLayoutHandler() *LayoutHandler { + return &LayoutHandler{cache: make(map[layoutCacheKey][]string)} } // For returns a layout for the given LayoutDescriptor and options. @@ -72,30 +70,6 @@ func (l *LayoutHandler) For(d LayoutDescriptor, f Format) ([]string, error) { layouts := resolvePageTemplate(d, f) - if l.hasTheme { - // From Hugo 0.33 we interleave the project/theme templates. This was kind of a fundamental change, but the - // previous behaviour was surprising. - // As an example, an `index.html` in theme for the home page will now win over a `_default/list.html` in the project. - layoutsWithThemeLayouts := []string{} - - // First place all non internal templates - for _, t := range layouts { - if !strings.HasPrefix(t, "_internal/") { - layoutsWithThemeLayouts = append(layoutsWithThemeLayouts, t) - layoutsWithThemeLayouts = append(layoutsWithThemeLayouts, "theme/"+t) - } - } - - // Lastly place internal templates - for _, t := range layouts { - if strings.HasPrefix(t, "_internal/") { - layoutsWithThemeLayouts = append(layoutsWithThemeLayouts, t) - } - } - - layouts = layoutsWithThemeLayouts - } - layouts = prependTextPrefixIfNeeded(f, layouts...) layouts = helpers.UniqueStrings(layouts) diff --git a/output/layout_base.go b/output/layout_base.go index 49ae1d64e..31e1194f4 100644 --- a/output/layout_base.go +++ b/output/layout_base.go @@ -40,26 +40,16 @@ type TemplateNames struct { } type TemplateLookupDescriptor struct { - // TemplateDir is the project or theme root of the current template. - // This will be the same as WorkingDir for non-theme templates. - TemplateDir string - // The full path to the site root. WorkingDir string - // Main project layout dir, defaults to "layouts" - LayoutDir string - // The path to the template relative the the base. // I.e. shortcodes/youtube.html RelPath string - // The template name prefix to look for, i.e. "theme". + // The template name prefix to look for. Prefix string - // The theme dir if theme active. - ThemeDir string - // All the output formats in play. This is used to decide if text/template or // html/template. OutputFormats Formats @@ -71,6 +61,7 @@ type TemplateLookupDescriptor struct { func CreateTemplateNames(d TemplateLookupDescriptor) (TemplateNames, error) { name := filepath.ToSlash(d.RelPath) + name = strings.TrimPrefix(name, "/") if d.Prefix != "" { name = strings.Trim(d.Prefix, "/") + "/" + name @@ -78,22 +69,8 @@ func CreateTemplateNames(d TemplateLookupDescriptor) (TemplateNames, error) { var ( id TemplateNames - - // This is the path to the actual template in process. This may - // be in the theme's or the project's /layouts. - baseLayoutDir = filepath.Join(d.TemplateDir, d.LayoutDir) - fullPath = filepath.Join(baseLayoutDir, d.RelPath) - - // This is always the project's layout dir. - baseWorkLayoutDir = filepath.Join(d.WorkingDir, d.LayoutDir) - - baseThemeLayoutDir string ) - if d.ThemeDir != "" { - baseThemeLayoutDir = filepath.Join(d.ThemeDir, "layouts") - } - // The filename will have a suffix with an optional type indicator. // Examples: // index.html @@ -119,7 +96,7 @@ func CreateTemplateNames(d TemplateLookupDescriptor) (TemplateNames, error) { filenameNoSuffix := parts[0] - id.OverlayFilename = fullPath + id.OverlayFilename = d.RelPath id.Name = name if isPlainText { @@ -127,7 +104,7 @@ func CreateTemplateNames(d TemplateLookupDescriptor) (TemplateNames, error) { } // Ace and Go templates may have both a base and inner template. - pathDir := filepath.Dir(fullPath) + pathDir := filepath.Dir(d.RelPath) if ext == "amber" || strings.HasSuffix(pathDir, "partials") || strings.HasSuffix(pathDir, "shortcodes") { // No base template support @@ -150,7 +127,7 @@ func CreateTemplateNames(d TemplateLookupDescriptor) (TemplateNames, error) { // This may be a view that shouldn't have base template // Have to look inside it to make sure - needsBase, err := d.ContainsAny(fullPath, innerMarkers) + needsBase, err := d.ContainsAny(d.RelPath, innerMarkers) if err != nil { return id, err } @@ -158,21 +135,14 @@ func CreateTemplateNames(d TemplateLookupDescriptor) (TemplateNames, error) { if needsBase { currBaseFilename := fmt.Sprintf("%s-%s", filenameNoSuffix, baseFilename) - templateDir := filepath.Dir(fullPath) - - // Find the base, e.g. "_default". - baseTemplatedDir := strings.TrimPrefix(templateDir, baseLayoutDir) - baseTemplatedDir = strings.TrimPrefix(baseTemplatedDir, helpers.FilePathSeparator) - // Look for base template in the follwing order: // 1. <current-path>/<template-name>-baseof.<outputFormat>(optional).<suffix>, e.g. list-baseof.<outputFormat>(optional).<suffix>. // 2. <current-path>/baseof.<outputFormat>(optional).<suffix> // 3. _default/<template-name>-baseof.<outputFormat>(optional).<suffix>, e.g. list-baseof.<outputFormat>(optional).<suffix>. // 4. _default/baseof.<outputFormat>(optional).<suffix> - // 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 := createPairsToCheck(baseTemplatedDir, baseFilename, currBaseFilename) + // + // The filesystem it looks in a a composite of the project and potential theme(s). + pathsToCheck := createPathsToCheck(pathDir, 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. @@ -183,20 +153,15 @@ func CreateTemplateNames(d TemplateLookupDescriptor) (TemplateNames, error) { 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)...) + pathsToCheck = append(pathsToCheck, createPathsToCheck(pathDir, v1, v2)...) } } - Loop: - for _, pair := range pairsToCheck { - pathsToCheck := basePathsToCheck(pair, baseLayoutDir, baseWorkLayoutDir, baseThemeLayoutDir) - - for _, pathToCheck := range pathsToCheck { - if ok, err := d.FileExists(pathToCheck); err == nil && ok { - id.MasterFilename = pathToCheck - break Loop - } + for _, p := range pathsToCheck { + if ok, err := d.FileExists(p); err == nil && ok { + id.MasterFilename = p + break } } } @@ -205,29 +170,11 @@ 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...))...)} - - if layoutDir != "" && layoutDir != workLayoutDir { - pathsToCheck = append(pathsToCheck, filepath.Join((append([]string{layoutDir}, path...))...)) +func createPathsToCheck(baseTemplatedDir, baseFilename, currBaseFilename string) []string { + return []string{ + filepath.Join(baseTemplatedDir, currBaseFilename), + filepath.Join(baseTemplatedDir, baseFilename), + filepath.Join("_default", currBaseFilename), + filepath.Join("_default", baseFilename), } - - // May have a theme - if themeLayoutDir != "" && themeLayoutDir != layoutDir { - pathsToCheck = append(pathsToCheck, filepath.Join((append([]string{themeLayoutDir}, path...))...)) - - } - - return pathsToCheck - } diff --git a/output/layout_base_test.go b/output/layout_base_test.go index d7c7fbb90..719407524 100644 --- a/output/layout_base_test.go +++ b/output/layout_base_test.go @@ -25,8 +25,6 @@ func TestLayoutBase(t *testing.T) { var ( workingDir = "/sites/mysite/" - themeDir = "/themes/mytheme/" - layoutBase1 = "layouts" layoutPath1 = "_default/single.html" layoutPathAmp = "_default/single.amp.html" layoutPathJSON = "_default/single.json" @@ -39,108 +37,72 @@ func TestLayoutBase(t *testing.T) { basePathMatchStrings string expect TemplateNames }{ - {"No base", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPath1}, false, "", + {"No base", TemplateLookupDescriptor{WorkingDir: workingDir, RelPath: layoutPath1}, false, "", TemplateNames{ Name: "_default/single.html", - OverlayFilename: "/sites/mysite/layouts/_default/single.html", + OverlayFilename: "_default/single.html", }}, - {"Base", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPath1}, true, "", + {"Base", TemplateLookupDescriptor{WorkingDir: workingDir, RelPath: layoutPath1}, true, "", TemplateNames{ Name: "_default/single.html", - OverlayFilename: "/sites/mysite/layouts/_default/single.html", - MasterFilename: "/sites/mysite/layouts/_default/single-baseof.html", + OverlayFilename: "_default/single.html", + MasterFilename: "_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", + {"Base Lang, Default Base", TemplateLookupDescriptor{WorkingDir: workingDir, 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", + OverlayFilename: "_default/list.en.html", + MasterFilename: "_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", + {"Base Lang, Lang Base", TemplateLookupDescriptor{WorkingDir: workingDir, 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", + OverlayFilename: "_default/list.en.html", + MasterFilename: "_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", + {"Base Taxonomy Term", TemplateLookupDescriptor{WorkingDir: workingDir, 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", + OverlayFilename: "taxonomy/tag.terms.html", + MasterFilename: "_default/baseof.html", }}, - {"Base in theme", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPath1, ThemeDir: themeDir}, true, - "mytheme/layouts/_default/baseof.html", - TemplateNames{ - Name: "_default/single.html", - OverlayFilename: "/sites/mysite/layouts/_default/single.html", - MasterFilename: "/themes/mytheme/layouts/_default/baseof.html", - }}, - {"Template in theme, base in theme", TemplateLookupDescriptor{TemplateDir: themeDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPath1, ThemeDir: themeDir}, true, - "mytheme/layouts/_default/baseof.html", - TemplateNames{ - Name: "_default/single.html", - OverlayFilename: "/themes/mytheme/layouts/_default/single.html", - MasterFilename: "/themes/mytheme/layouts/_default/baseof.html", - }}, - {"Template in theme, base in site", TemplateLookupDescriptor{TemplateDir: themeDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPath1, ThemeDir: themeDir}, true, - "/sites/mysite/layouts/_default/baseof.html", - TemplateNames{ - Name: "_default/single.html", - OverlayFilename: "/themes/mytheme/layouts/_default/single.html", - MasterFilename: "/sites/mysite/layouts/_default/baseof.html", - }}, - {"Template in site, base in theme", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPath1, ThemeDir: themeDir}, true, - "/themes/mytheme", - TemplateNames{ - Name: "_default/single.html", - OverlayFilename: "/sites/mysite/layouts/_default/single.html", - MasterFilename: "/themes/mytheme/layouts/_default/single-baseof.html", - }}, - {"With prefix, base in theme", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPath1, - ThemeDir: themeDir, Prefix: "someprefix"}, true, - "mytheme/layouts/_default/baseof.html", - TemplateNames{ - Name: "someprefix/_default/single.html", - OverlayFilename: "/sites/mysite/layouts/_default/single.html", - MasterFilename: "/themes/mytheme/layouts/_default/baseof.html", - }}, - {"Partial", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: "partials/menu.html"}, true, + {"Partial", TemplateLookupDescriptor{WorkingDir: workingDir, RelPath: "partials/menu.html"}, true, "mytheme/layouts/_default/baseof.html", TemplateNames{ Name: "partials/menu.html", - OverlayFilename: "/sites/mysite/layouts/partials/menu.html", + OverlayFilename: "partials/menu.html", }}, - {"AMP, no base", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPathAmp}, false, "", + {"AMP, no base", TemplateLookupDescriptor{WorkingDir: workingDir, RelPath: layoutPathAmp}, false, "", TemplateNames{ Name: "_default/single.amp.html", - OverlayFilename: "/sites/mysite/layouts/_default/single.amp.html", + OverlayFilename: "_default/single.amp.html", }}, - {"JSON, no base", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPathJSON}, false, "", + {"JSON, no base", TemplateLookupDescriptor{WorkingDir: workingDir, RelPath: layoutPathJSON}, false, "", TemplateNames{ Name: "_default/single.json", - OverlayFilename: "/sites/mysite/layouts/_default/single.json", + OverlayFilename: "_default/single.json", }}, - {"AMP with base", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPathAmp}, true, "single-baseof.html|single-baseof.amp.html", + {"AMP with base", TemplateLookupDescriptor{WorkingDir: workingDir, RelPath: layoutPathAmp}, true, "single-baseof.html|single-baseof.amp.html", TemplateNames{ Name: "_default/single.amp.html", - OverlayFilename: "/sites/mysite/layouts/_default/single.amp.html", - MasterFilename: "/sites/mysite/layouts/_default/single-baseof.amp.html", + OverlayFilename: "_default/single.amp.html", + MasterFilename: "_default/single-baseof.amp.html", }}, - {"AMP with no AMP base", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPathAmp}, true, "single-baseof.html", + {"AMP with no AMP base", TemplateLookupDescriptor{WorkingDir: workingDir, RelPath: layoutPathAmp}, true, "single-baseof.html", TemplateNames{ Name: "_default/single.amp.html", - OverlayFilename: "/sites/mysite/layouts/_default/single.amp.html", - MasterFilename: "/sites/mysite/layouts/_default/single-baseof.html", + OverlayFilename: "_default/single.amp.html", + MasterFilename: "_default/single-baseof.html", }}, - {"JSON with base", TemplateLookupDescriptor{TemplateDir: workingDir, WorkingDir: workingDir, LayoutDir: layoutBase1, RelPath: layoutPathJSON}, true, "single-baseof.json", + {"JSON with base", TemplateLookupDescriptor{WorkingDir: workingDir, RelPath: layoutPathJSON}, true, "single-baseof.json", TemplateNames{ Name: "_default/single.json", - OverlayFilename: "/sites/mysite/layouts/_default/single.json", - MasterFilename: "/sites/mysite/layouts/_default/single-baseof.json", + OverlayFilename: "_default/single.json", + MasterFilename: "_default/single-baseof.json", }}, } { t.Run(this.name, func(t *testing.T) { @@ -164,7 +126,6 @@ func TestLayoutBase(t *testing.T) { this.d.OutputFormats = Formats{AMPFormat, HTMLFormat, RSSFormat, JSONFormat} this.d.WorkingDir = filepath.FromSlash(this.d.WorkingDir) - this.d.LayoutDir = filepath.FromSlash(this.d.LayoutDir) this.d.RelPath = filepath.FromSlash(this.d.RelPath) this.d.ContainsAny = needsBase this.d.FileExists = fileExists diff --git a/output/layout_test.go b/output/layout_test.go index 3c7fde41a..4b958e9ff 100644 --- a/output/layout_test.go +++ b/output/layout_test.go @@ -57,62 +57,61 @@ func TestLayout(t *testing.T) { for _, this := range []struct { name string d LayoutDescriptor - hasTheme bool layoutOverride string tp Format expect []string expectCount int }{ - {"Home", LayoutDescriptor{Kind: "home"}, true, "", ampType, - []string{"index.amp.html", "theme/index.amp.html", "home.amp.html", "theme/home.amp.html", "list.amp.html", "theme/list.amp.html", "index.html", "theme/index.html", "home.html", "theme/home.html", "list.html", "theme/list.html", "_default/index.amp.html"}, 24}, - {"Home, HTML", LayoutDescriptor{Kind: "home"}, true, "", htmlFormat, + {"Home", LayoutDescriptor{Kind: "home"}, "", ampType, + []string{"index.amp.html", "home.amp.html", "list.amp.html", "index.html", "home.html", "list.html", "_default/index.amp.html"}, 12}, + {"Home, HTML", LayoutDescriptor{Kind: "home"}, "", htmlFormat, // We will eventually get to index.html. This looks stuttery, but makes the lookup logic easy to understand. - []string{"index.html.html", "theme/index.html.html", "home.html.html"}, 24}, - {"Home, french language", LayoutDescriptor{Kind: "home", Lang: "fr"}, true, "", ampType, - []string{"index.fr.amp.html", "theme/index.fr.amp.html"}, - 48}, - {"Home, no ext or delim", LayoutDescriptor{Kind: "home"}, true, "", noExtDelimFormat, - []string{"index.nem", "theme/index.nem", "home.nem", "theme/home.nem", "list.nem"}, 12}, - {"Home, no ext", LayoutDescriptor{Kind: "home"}, true, "", noExt, - []string{"index.nex", "theme/index.nex", "home.nex", "theme/home.nex", "list.nex"}, 12}, - {"Page, no ext or delim", LayoutDescriptor{Kind: "page"}, true, "", noExtDelimFormat, - []string{"_default/single.nem", "theme/_default/single.nem"}, 2}, - {"Section", LayoutDescriptor{Kind: "section", Section: "sect1"}, false, "", ampType, + []string{"index.html.html", "home.html.html"}, 12}, + {"Home, french language", LayoutDescriptor{Kind: "home", Lang: "fr"}, "", ampType, + []string{"index.fr.amp.html"}, + 24}, + {"Home, no ext or delim", LayoutDescriptor{Kind: "home"}, "", noExtDelimFormat, + []string{"index.nem", "home.nem", "list.nem"}, 6}, + {"Home, no ext", LayoutDescriptor{Kind: "home"}, "", noExt, + []string{"index.nex", "home.nex", "list.nex"}, 6}, + {"Page, no ext or delim", LayoutDescriptor{Kind: "page"}, "", noExtDelimFormat, + []string{"_default/single.nem"}, 1}, + {"Section", LayoutDescriptor{Kind: "section", Section: "sect1"}, "", ampType, []string{"sect1/sect1.amp.html", "sect1/section.amp.html", "sect1/list.amp.html", "sect1/sect1.html", "sect1/section.html", "sect1/list.html", "section/sect1.amp.html", "section/section.amp.html"}, 18}, - {"Section with layout", LayoutDescriptor{Kind: "section", Section: "sect1", Layout: "mylayout"}, false, "", ampType, + {"Section with layout", LayoutDescriptor{Kind: "section", Section: "sect1", Layout: "mylayout"}, "", ampType, []string{"sect1/mylayout.amp.html", "sect1/sect1.amp.html", "sect1/section.amp.html", "sect1/list.amp.html", "sect1/mylayout.html", "sect1/sect1.html"}, 24}, - {"Taxonomy", LayoutDescriptor{Kind: "taxonomy", Section: "tag"}, false, "", ampType, + {"Taxonomy", LayoutDescriptor{Kind: "taxonomy", Section: "tag"}, "", ampType, []string{"taxonomy/tag.amp.html", "taxonomy/taxonomy.amp.html", "taxonomy/list.amp.html", "taxonomy/tag.html", "taxonomy/taxonomy.html"}, 18}, - {"Taxonomy term", LayoutDescriptor{Kind: "taxonomyTerm", Section: "categories"}, false, "", ampType, + {"Taxonomy term", LayoutDescriptor{Kind: "taxonomyTerm", Section: "categories"}, "", ampType, []string{"taxonomy/categories.terms.amp.html", "taxonomy/terms.amp.html", "taxonomy/list.amp.html", "taxonomy/categories.terms.html", "taxonomy/terms.html"}, 18}, - {"Page", LayoutDescriptor{Kind: "page"}, true, "", ampType, - []string{"_default/single.amp.html", "theme/_default/single.amp.html", "_default/single.html", "theme/_default/single.html"}, 4}, - {"Page with layout", LayoutDescriptor{Kind: "page", Layout: "mylayout"}, false, "", ampType, + {"Page", LayoutDescriptor{Kind: "page"}, "", ampType, + []string{"_default/single.amp.html", "_default/single.html"}, 2}, + {"Page with layout", LayoutDescriptor{Kind: "page", Layout: "mylayout"}, "", ampType, []string{"_default/mylayout.amp.html", "_default/single.amp.html", "_default/mylayout.html", "_default/single.html"}, 4}, - {"Page with layout and type", LayoutDescriptor{Kind: "page", Layout: "mylayout", Type: "myttype"}, false, "", ampType, + {"Page with layout and type", LayoutDescriptor{Kind: "page", Layout: "mylayout", Type: "myttype"}, "", ampType, []string{"myttype/mylayout.amp.html", "myttype/single.amp.html", "myttype/mylayout.html"}, 8}, - {"Page with layout and type with subtype", LayoutDescriptor{Kind: "page", Layout: "mylayout", Type: "myttype/mysubtype"}, false, "", ampType, + {"Page with layout and type with subtype", LayoutDescriptor{Kind: "page", Layout: "mylayout", Type: "myttype/mysubtype"}, "", ampType, []string{"myttype/mysubtype/mylayout.amp.html", "myttype/mysubtype/single.amp.html", "myttype/mysubtype/mylayout.html"}, 8}, // RSS - {"RSS Home with theme", LayoutDescriptor{Kind: "home"}, true, "", RSSFormat, - []string{"index.rss.xml", "theme/index.rss.xml", "home.rss.xml", "theme/home.rss.xml", "rss.xml"}, 29}, - {"RSS Section", LayoutDescriptor{Kind: "section", Section: "sect1"}, false, "", RSSFormat, + {"RSS Home", LayoutDescriptor{Kind: "home"}, "", RSSFormat, + []string{"index.rss.xml", "home.rss.xml", "rss.xml"}, 15}, + {"RSS Section", LayoutDescriptor{Kind: "section", Section: "sect1"}, "", RSSFormat, []string{"sect1/sect1.rss.xml", "sect1/section.rss.xml", "sect1/rss.xml", "sect1/list.rss.xml", "sect1/sect1.xml", "sect1/section.xml"}, 22}, - {"RSS Taxonomy", LayoutDescriptor{Kind: "taxonomy", Section: "tag"}, false, "", RSSFormat, + {"RSS Taxonomy", LayoutDescriptor{Kind: "taxonomy", Section: "tag"}, "", RSSFormat, []string{"taxonomy/tag.rss.xml", "taxonomy/taxonomy.rss.xml", "taxonomy/rss.xml", "taxonomy/list.rss.xml", "taxonomy/tag.xml", "taxonomy/taxonomy.xml"}, 22}, - {"RSS Taxonomy term", LayoutDescriptor{Kind: "taxonomyTerm", Section: "tag"}, false, "", RSSFormat, + {"RSS Taxonomy term", LayoutDescriptor{Kind: "taxonomyTerm", Section: "tag"}, "", RSSFormat, []string{"taxonomy/tag.terms.rss.xml", "taxonomy/terms.rss.xml", "taxonomy/rss.xml", "taxonomy/list.rss.xml", "taxonomy/tag.terms.xml"}, 22}, - {"Home plain text", LayoutDescriptor{Kind: "home"}, true, "", JSONFormat, - []string{"_text/index.json.json", "_text/theme/index.json.json", "_text/home.json.json", "_text/theme/home.json.json"}, 24}, - {"Page plain text", LayoutDescriptor{Kind: "page"}, true, "", JSONFormat, - []string{"_text/_default/single.json.json", "_text/theme/_default/single.json.json", "_text/_default/single.json", "_text/theme/_default/single.json"}, 4}, - {"Reserved section, shortcodes", LayoutDescriptor{Kind: "section", Section: "shortcodes", Type: "shortcodes"}, true, "", ampType, - []string{"section/shortcodes.amp.html", "theme/section/shortcodes.amp.html"}, 24}, - {"Reserved section, partials", LayoutDescriptor{Kind: "section", Section: "partials", Type: "partials"}, true, "", ampType, - []string{"section/partials.amp.html", "theme/section/partials.amp.html"}, 24}, + {"Home plain text", LayoutDescriptor{Kind: "home"}, "", JSONFormat, + []string{"_text/index.json.json", "_text/home.json.json"}, 12}, + {"Page plain text", LayoutDescriptor{Kind: "page"}, "", JSONFormat, + []string{"_text/_default/single.json.json", "_text/_default/single.json"}, 2}, + {"Reserved section, shortcodes", LayoutDescriptor{Kind: "section", Section: "shortcodes", Type: "shortcodes"}, "", ampType, + []string{"section/shortcodes.amp.html"}, 12}, + {"Reserved section, partials", LayoutDescriptor{Kind: "section", Section: "partials", Type: "partials"}, "", ampType, + []string{"section/partials.amp.html"}, 12}, } { t.Run(this.name, func(t *testing.T) { - l := NewLayoutHandler(this.hasTheme) + l := NewLayoutHandler() layouts, err := l.For(this.d, this.tp) @@ -130,11 +129,6 @@ func TestLayout(t *testing.T) { } - if !this.hasTheme { - for _, layout := range layouts { - require.NotContains(t, layout, "theme") - } - } }) } @@ -142,7 +136,7 @@ func TestLayout(t *testing.T) { func BenchmarkLayout(b *testing.B) { descriptor := LayoutDescriptor{Kind: "taxonomyTerm", Section: "categories"} - l := NewLayoutHandler(false) + l := NewLayoutHandler() for i := 0; i < b.N; i++ { layouts, err := l.For(descriptor, HTMLFormat) |