diff options
author | spf13 <steve.francia@gmail.com> | 2014-06-03 17:06:32 -0400 |
---|---|---|
committer | spf13 <steve.francia@gmail.com> | 2014-06-03 17:53:00 -0400 |
commit | 640ab3c72e9486ce105091d16c240d413a11a79e (patch) | |
tree | db20d7be98e81ff353193190d01c8df3d44a23c1 | |
parent | e0ea6b995596514266c4a4ba3707df7df126d04a (diff) |
fixed #303. Adding theme support to views
-rw-r--r-- | hugolib/page.go | 12 | ||||
-rw-r--r-- | hugolib/page_test.go | 50 | ||||
-rw-r--r-- | hugolib/path_seperators_test.go | 12 |
3 files changed, 46 insertions, 28 deletions
diff --git a/hugolib/page.go b/hugolib/page.go index 48265ebfc..5b33fc6c5 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -190,11 +190,21 @@ func (page *Page) Layout(l ...string) []string { func layouts(types string, layout string) (layouts []string) { t := strings.Split(types, "/") + + // Add type/layout.html for i := range t { search := t[:len(t)-i] layouts = append(layouts, fmt.Sprintf("%s/%s.html", strings.ToLower(path.Join(search...)), layout)) } - layouts = append(layouts, fmt.Sprintf("%s.html", layout)) + + // Add _default/layout.html + layouts = append(layouts, fmt.Sprintf("_default/%s.html", layout)) + + // Add theme/type/layout.html & theme/_default/layout.html + for _, l := range layouts { + layouts = append(layouts, "theme/"+l) + } + return } diff --git a/hugolib/page_test.go b/hugolib/page_test.go index 5bd812e6e..d5f6cf15d 100644 --- a/hugolib/page_test.go +++ b/hugolib/page_test.go @@ -313,7 +313,7 @@ func TestCreateNewPage(t *testing.T) { checkPageContent(t, p, "<p>Simple Page</p>\n") checkPageSummary(t, p, "Simple Page") checkPageType(t, p, "page") - checkPageLayout(t, p, "page/single.html", "single.html") + checkPageLayout(t, p, "page/single.html", "_default/single.html", "theme/page/single.html", "theme/_default/single.html") checkTruncation(t, p, false, "simple short page") } @@ -328,7 +328,7 @@ func TestPageWithDelimiter(t *testing.T) { checkPageContent(t, p, "<p>Summary Next Line</p>\n\n<p>Some more text</p>\n") checkPageSummary(t, p, "<p>Summary Next Line</p>\n") checkPageType(t, p, "page") - checkPageLayout(t, p, "page/single.html", "single.html") + checkPageLayout(t, p, "page/single.html", "_default/single.html", "theme/page/single.html", "theme/_default/single.html") checkTruncation(t, p, true, "page with summary delimiter") } @@ -343,7 +343,7 @@ func TestPageWithShortCodeInSummary(t *testing.T) { checkPageContent(t, p, "<p>Summary Next Line. {{% img src=“/not/real” %}}.\nMore text here.</p>\n\n<p>Some more text</p>\n") checkPageSummary(t, p, "Summary Next Line. . More text here. Some more text") checkPageType(t, p, "page") - checkPageLayout(t, p, "page/single.html", "single.html") + checkPageLayout(t, p, "page/single.html", "_default/single.html", "theme/page/single.html", "theme/_default/single.html") } func TestPageWithEmbeddedScriptTag(t *testing.T) { @@ -378,7 +378,7 @@ func TestPageWithMoreTag(t *testing.T) { checkPageContent(t, p, "<p>Summary Same Line</p>\n\n<p>Some more text</p>\n") checkPageSummary(t, p, "<p>Summary Same Line</p>\n") checkPageType(t, p, "page") - checkPageLayout(t, p, "page/single.html", "single.html") + checkPageLayout(t, p, "page/single.html", "_default/single.html", "theme/page/single.html", "theme/_default/single.html") } func TestPageWithDate(t *testing.T) { @@ -529,25 +529,25 @@ func TestLayoutOverride(t *testing.T) { path string expectedLayout []string }{ - {SIMPLE_PAGE_NOLAYOUT, path_content_two_dir, L("dub/sub/single.html", "dub/single.html", "single.html")}, - {SIMPLE_PAGE_NOLAYOUT, path_content_one_dir, L("gub/single.html", "single.html")}, - {SIMPLE_PAGE_NOLAYOUT, path_content_no_dir, L("page/single.html", "single.html")}, - {SIMPLE_PAGE_NOLAYOUT, path_one_directory, L("fub/single.html", "single.html")}, - {SIMPLE_PAGE_NOLAYOUT, path_no_directory, L("page/single.html", "single.html")}, - {SIMPLE_PAGE_LAYOUT_FOOBAR, path_content_two_dir, L("dub/sub/foobar.html", "dub/foobar.html", "foobar.html")}, - {SIMPLE_PAGE_LAYOUT_FOOBAR, path_content_one_dir, L("gub/foobar.html", "foobar.html")}, - {SIMPLE_PAGE_LAYOUT_FOOBAR, path_one_directory, L("fub/foobar.html", "foobar.html")}, - {SIMPLE_PAGE_LAYOUT_FOOBAR, path_no_directory, L("page/foobar.html", "foobar.html")}, - {SIMPLE_PAGE_TYPE_FOOBAR, path_content_two_dir, L("foobar/single.html", "single.html")}, - {SIMPLE_PAGE_TYPE_FOOBAR, path_content_one_dir, L("foobar/single.html", "single.html")}, - {SIMPLE_PAGE_TYPE_FOOBAR, path_content_no_dir, L("foobar/single.html", "single.html")}, - {SIMPLE_PAGE_TYPE_FOOBAR, path_one_directory, L("foobar/single.html", "single.html")}, - {SIMPLE_PAGE_TYPE_FOOBAR, path_no_directory, L("foobar/single.html", "single.html")}, - {SIMPLE_PAGE_TYPE_LAYOUT, path_content_two_dir, L("barfoo/buzfoo.html", "buzfoo.html")}, - {SIMPLE_PAGE_TYPE_LAYOUT, path_content_one_dir, L("barfoo/buzfoo.html", "buzfoo.html")}, - {SIMPLE_PAGE_TYPE_LAYOUT, path_content_no_dir, L("barfoo/buzfoo.html", "buzfoo.html")}, - {SIMPLE_PAGE_TYPE_LAYOUT, path_one_directory, L("barfoo/buzfoo.html", "buzfoo.html")}, - {SIMPLE_PAGE_TYPE_LAYOUT, path_no_directory, L("barfoo/buzfoo.html", "buzfoo.html")}, + {SIMPLE_PAGE_NOLAYOUT, path_content_two_dir, L("dub/sub/single.html", "dub/single.html", "_default/single.html")}, + {SIMPLE_PAGE_NOLAYOUT, path_content_one_dir, L("gub/single.html", "_default/single.html")}, + {SIMPLE_PAGE_NOLAYOUT, path_content_no_dir, L("page/single.html", "_default/single.html")}, + {SIMPLE_PAGE_NOLAYOUT, path_one_directory, L("fub/single.html", "_default/single.html")}, + {SIMPLE_PAGE_NOLAYOUT, path_no_directory, L("page/single.html", "_default/single.html")}, + {SIMPLE_PAGE_LAYOUT_FOOBAR, path_content_two_dir, L("dub/sub/foobar.html", "dub/foobar.html", "_default/foobar.html")}, + {SIMPLE_PAGE_LAYOUT_FOOBAR, path_content_one_dir, L("gub/foobar.html", "_default/foobar.html")}, + {SIMPLE_PAGE_LAYOUT_FOOBAR, path_one_directory, L("fub/foobar.html", "_default/foobar.html")}, + {SIMPLE_PAGE_LAYOUT_FOOBAR, path_no_directory, L("page/foobar.html", "_default/foobar.html")}, + {SIMPLE_PAGE_TYPE_FOOBAR, path_content_two_dir, L("foobar/single.html", "_default/single.html")}, + {SIMPLE_PAGE_TYPE_FOOBAR, path_content_one_dir, L("foobar/single.html", "_default/single.html")}, + {SIMPLE_PAGE_TYPE_FOOBAR, path_content_no_dir, L("foobar/single.html", "_default/single.html")}, + {SIMPLE_PAGE_TYPE_FOOBAR, path_one_directory, L("foobar/single.html", "_default/single.html")}, + {SIMPLE_PAGE_TYPE_FOOBAR, path_no_directory, L("foobar/single.html", "_default/single.html")}, + {SIMPLE_PAGE_TYPE_LAYOUT, path_content_two_dir, L("barfoo/buzfoo.html", "_default/buzfoo.html")}, + {SIMPLE_PAGE_TYPE_LAYOUT, path_content_one_dir, L("barfoo/buzfoo.html", "_default/buzfoo.html")}, + {SIMPLE_PAGE_TYPE_LAYOUT, path_content_no_dir, L("barfoo/buzfoo.html", "_default/buzfoo.html")}, + {SIMPLE_PAGE_TYPE_LAYOUT, path_one_directory, L("barfoo/buzfoo.html", "_default/buzfoo.html")}, + {SIMPLE_PAGE_TYPE_LAYOUT, path_no_directory, L("barfoo/buzfoo.html", "_default/buzfoo.html")}, } for _, test := range tests { p, _ := NewPage(test.path) @@ -555,6 +555,10 @@ func TestLayoutOverride(t *testing.T) { if err != nil { t.Fatalf("Unable to parse content:\n%s\n", test.content) } + + for _, y := range test.expectedLayout { + test.expectedLayout = append(test.expectedLayout, "theme/"+y) + } if !listEqual(p.Layout(), test.expectedLayout) { t.Errorf("Layout mismatch. Expected: %s, got: %s", test.expectedLayout, p.Layout()) } diff --git a/hugolib/path_seperators_test.go b/hugolib/path_seperators_test.go index 816769d97..187c155b5 100644 --- a/hugolib/path_seperators_test.go +++ b/hugolib/path_seperators_test.go @@ -28,10 +28,10 @@ func TestNewPageWithFilePath(t *testing.T) { section string layout []string }{ - {path.Join("sub", "foobar.html"), "sub", L("sub/single.html", "single.html")}, - {path.Join("content", "foobar.html"), "", L("page/single.html", "single.html")}, - {path.Join("content", "sub", "foobar.html"), "sub", L("sub/single.html", "single.html")}, - {path.Join("content", "dub", "sub", "foobar.html"), "dub/sub", L("dub/sub/single.html", "dub/single.html", "single.html")}, + {path.Join("sub", "foobar.html"), "sub", L("sub/single.html", "_default/single.html")}, + {path.Join("content", "foobar.html"), "", L("page/single.html", "_default/single.html")}, + {path.Join("content", "sub", "foobar.html"), "sub", L("sub/single.html", "_default/single.html")}, + {path.Join("content", "dub", "sub", "foobar.html"), "dub/sub", L("dub/sub/single.html", "dub/single.html", "_default/single.html")}, } for _, el := range toCheck { @@ -44,6 +44,10 @@ func TestNewPageWithFilePath(t *testing.T) { t.Errorf("Section not set to %s for page %s. Got: %s", el.section, el.input, p.Section) } + for _, y := range el.layout { + el.layout = append(el.layout, "theme/"+y) + } + if !listEqual(p.Layout(), el.layout) { t.Errorf("Layout incorrect. Expected: '%s', Got: '%s'", el.layout, p.Layout()) } |