mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
fixed #303. Adding theme support to views
This commit is contained in:
parent
e0ea6b9955
commit
640ab3c72e
3 changed files with 46 additions and 28 deletions
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue