summaryrefslogtreecommitdiffstats
path: root/output
diff options
context:
space:
mode:
Diffstat (limited to 'output')
-rw-r--r--output/docshelper.go1
-rw-r--r--output/layout.go84
-rw-r--r--output/layout_test.go2
3 files changed, 59 insertions, 28 deletions
diff --git a/output/docshelper.go b/output/docshelper.go
index 1df45726c..c45e956e6 100644
--- a/output/docshelper.go
+++ b/output/docshelper.go
@@ -44,6 +44,7 @@ func createLayoutExamples() interface{} {
f Format
}{
{`AMP home, with theme "demoTheme".`, LayoutDescriptor{Kind: "home"}, true, "", AMPFormat},
+ {`AMP home, French language".`, LayoutDescriptor{Kind: "home", Lang: "fr"}, false, "", AMPFormat},
{"JSON home, no theme.", LayoutDescriptor{Kind: "home"}, false, "", JSONFormat},
{fmt.Sprintf(`CSV regular, "layout: %s" in front matter.`, demoLayout), LayoutDescriptor{Kind: "page", Layout: demoLayout}, false, "", CSVFormat},
{fmt.Sprintf(`JSON regular, "type: %s" in front matter.`, demoType), LayoutDescriptor{Kind: "page", Type: demoType}, false, "", JSONFormat},
diff --git a/output/layout.go b/output/layout.go
index cacb92b80..6c054b6c4 100644
--- a/output/layout.go
+++ b/output/layout.go
@@ -26,6 +26,7 @@ type LayoutDescriptor struct {
Type string
Section string
Kind string
+ Lang string
Layout string
}
@@ -55,31 +56,33 @@ func NewLayoutHandler(hasTheme bool) *LayoutHandler {
const (
+ // TODO(bep) variations reduce to 1 "."
+
// The RSS templates doesn't map easily into the regular pages.
- layoutsRSSHome = `NAME.SUFFIX _default/NAME.SUFFIX _internal/_default/rss.xml`
- layoutsRSSSection = `section/SECTION.NAME.SUFFIX _default/NAME.SUFFIX NAME.SUFFIX _internal/_default/rss.xml`
- layoutsRSSTaxonomy = `taxonomy/SECTION.NAME.SUFFIX _default/NAME.SUFFIX NAME.SUFFIX _internal/_default/rss.xml`
- layoutsRSSTaxonomyTerm = `taxonomy/SECTION.terms.NAME.SUFFIX _default/NAME.SUFFIX NAME.SUFFIX _internal/_default/rss.xml`
+ layoutsRSSHome = `VARIATIONS _default/VARIATIONS _internal/_default/rss.xml`
+ layoutsRSSSection = `section/SECTION.VARIATIONS _default/VARIATIONS VARIATIONS _internal/_default/rss.xml`
+ layoutsRSSTaxonomy = `taxonomy/SECTION.VARIATIONS _default/VARIATIONS VARIATIONS _internal/_default/rss.xml`
+ layoutsRSSTaxonomyTerm = `taxonomy/SECTION.terms.VARIATIONS _default/VARIATIONS VARIATIONS _internal/_default/rss.xml`
- layoutsHome = "index.NAME.SUFFIX index.SUFFIX _default/list.NAME.SUFFIX _default/list.SUFFIX"
+ layoutsHome = "index.VARIATIONS _default/list.VARIATIONS"
layoutsSection = `
-section/SECTION.NAME.SUFFIX section/SECTION.SUFFIX
-SECTION/list.NAME.SUFFIX SECTION/list.SUFFIX
-_default/section.NAME.SUFFIX _default/section.SUFFIX
-_default/list.NAME.SUFFIX _default/list.SUFFIX
-indexes/SECTION.NAME.SUFFIX indexes/SECTION.SUFFIX
-_default/indexes.NAME.SUFFIX _default/indexes.SUFFIX
+section/SECTION.VARIATIONS
+SECTION/list.VARIATIONS
+_default/section.VARIATIONS
+_default/list.VARIATIONS
+indexes/SECTION.VARIATIONS
+_default/indexes.VARIATIONS
`
layoutsTaxonomy = `
-taxonomy/SECTION.NAME.SUFFIX taxonomy/SECTION.SUFFIX
-indexes/SECTION.NAME.SUFFIX indexes/SECTION.SUFFIX
-_default/taxonomy.NAME.SUFFIX _default/taxonomy.SUFFIX
-_default/list.NAME.SUFFIX _default/list.SUFFIX
+taxonomy/SECTION.VARIATIONS
+indexes/SECTION.VARIATIONS
+_default/taxonomy.VARIATIONS
+_default/list.VARIATIONS
`
layoutsTaxonomyTerm = `
-taxonomy/SECTION.terms.NAME.SUFFIX taxonomy/SECTION.terms.SUFFIX
-_default/terms.NAME.SUFFIX _default/terms.SUFFIX
-indexes/indexes.NAME.SUFFIX indexes/indexes.SUFFIX
+taxonomy/SECTION.terms.VARIATIONS
+_default/terms.VARIATIONS
+indexes/indexes.VARIATIONS
`
)
@@ -185,14 +188,41 @@ func resolveListTemplate(d LayoutDescriptor, f Format,
}
func resolveTemplate(templ string, d LayoutDescriptor, f Format) []string {
- delim := "."
- if f.MediaType.Delimiter == "" {
- delim = ""
+
+ // VARIATIONS will be replaced with
+ // .lang.name.suffix
+ // .name.suffix
+ // .lang.suffix
+ // .suffix
+ var replacementValues []string
+
+ name := strings.ToLower(f.Name)
+
+ if d.Lang != "" {
+ replacementValues = append(replacementValues, fmt.Sprintf("%s.%s.%s", d.Lang, name, f.MediaType.Suffix))
+ }
+
+ replacementValues = append(replacementValues, fmt.Sprintf("%s.%s", name, f.MediaType.Suffix))
+
+ if d.Lang != "" {
+ replacementValues = append(replacementValues, fmt.Sprintf("%s.%s", d.Lang, f.MediaType.Suffix))
+ }
+
+ isRSS := f.Name == RSSFormat.Name
+
+ if !isRSS {
+ replacementValues = append(replacementValues, f.MediaType.Suffix)
+ }
+
+ var layouts []string
+
+ templFields := strings.Fields(templ)
+
+ for _, field := range templFields {
+ for _, replacements := range replacementValues {
+ layouts = append(layouts, replaceKeyValues(field, "VARIATIONS", replacements, "SECTION", d.Section))
+ }
}
- layouts := strings.Fields(replaceKeyValues(templ,
- ".SUFFIX", delim+f.MediaType.Suffix,
- "NAME", strings.ToLower(f.Name),
- "SECTION", d.Section))
return filterDotLess(layouts)
}
@@ -201,9 +231,7 @@ func filterDotLess(layouts []string) []string {
var filteredLayouts []string
for _, l := range layouts {
- // This may be constructed, but media types can be suffix-less, but can contain
- // a delimiter.
- l = strings.TrimSuffix(l, ".")
+ l = strings.Trim(l, ".")
// If media type has no suffix, we have "index" type of layouts in this list, which
// doesn't make much sense.
if strings.Contains(l, ".") {
diff --git a/output/layout_test.go b/output/layout_test.go
index 9d4d2f6d5..6fb958c9d 100644
--- a/output/layout_test.go
+++ b/output/layout_test.go
@@ -59,6 +59,8 @@ func TestLayout(t *testing.T) {
}{
{"Home", LayoutDescriptor{Kind: "home"}, true, "", ampType,
[]string{"index.amp.html", "index.html", "_default/list.amp.html", "_default/list.html", "theme/index.amp.html", "theme/index.html"}},
+ {"Home, french language", LayoutDescriptor{Kind: "home", Lang: "fr"}, true, "", ampType,
+ []string{"index.fr.amp.html", "index.amp.html", "index.fr.html", "index.html", "_default/list.fr.amp.html", "_default/list.amp.html", "_default/list.fr.html", "_default/list.html", "theme/index.fr.amp.html", "theme/index.amp.html", "theme/index.fr.html"}},
{"Home, no ext or delim", LayoutDescriptor{Kind: "home"}, true, "", noExtDelimFormat,
[]string{"index.nem", "_default/list.nem"}},
{"Home, no ext", LayoutDescriptor{Kind: "home"}, true, "", noExt,