summaryrefslogtreecommitdiffstats
path: root/hugolib
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-01-05 12:56:41 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-01-05 19:41:53 +0100
commit196a9df585c4744e3280f37c1c24e469fce14b8c (patch)
tree30a3d06dec5846ad00c22fde5abe11269741511d /hugolib
parent9b6e61464b09ffe3423fb8d7c72bddb7a9ed5b98 (diff)
hugolib: Fix relative .Page.GetPage from bundle
Fixes #6705
Diffstat (limited to 'hugolib')
-rw-r--r--hugolib/hugo_modules_test.go42
-rw-r--r--hugolib/page.go2
-rw-r--r--hugolib/pagecollections.go9
-rw-r--r--hugolib/testhelpers_test.go1
4 files changed, 51 insertions, 3 deletions
diff --git a/hugolib/hugo_modules_test.go b/hugolib/hugo_modules_test.go
index 1c665e6e3..14085e2c0 100644
--- a/hugolib/hugo_modules_test.go
+++ b/hugolib/hugo_modules_test.go
@@ -585,9 +585,19 @@ workingDir = %q
{{ $mypage := .Site.GetPage "/blog/mypage.md" }}
{{ with $mypage }}MYPAGE: {{ .Title }}|Path: {{ path.Join .File.Path }}|FilePath: {{ path.Join .File.FileInfo.Meta.PathFile }}|{{ end }}
+`, "_default/_markup/render-link.html", `
+{{ $link := .Destination }}
+{{ $isRemote := strings.HasPrefix $link "http" }}
+{{- if not $isRemote -}}
+{{ $url := urls.Parse .Destination }}
+{{ $fragment := "" }}
+{{- with $url.Fragment }}{{ $fragment = printf "#%s" . }}{{ end -}}
+{{- with .Page.GetPage $url.Path }}{{ $link = printf "%s%s" .Permalink $fragment }}{{ end }}{{ end -}}
+<a href="{{ $link | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}{{ if $isRemote }} target="_blank"{{ end }}>{{ .Text | safeHTML }}</a>
`)
os.Mkdir(filepath.Join(workingDir, "mycontent"), 0777)
+ os.Mkdir(filepath.Join(workingDir, "mycontent", "mybundle"), 0777)
b.WithSourceFile("README.md", `---
title: "Readme Title"
@@ -600,6 +610,23 @@ Readme Content.
title: "My Page"
---
+
+* [Relative Link From Page](mybundle)
+* [Relative Link From Page, filename](mybundle/index.md)
+* [Link using original path](/mycontent/mybundle/index.md)
+
+
+`, filepath.Join("mycontent", "mybundle", "index.md"), `
+---
+title: "My Bundle"
+---
+
+* [Dot Relative Link From Bundle](../mypage.md)
+* [Link using original path](/mycontent/mypage.md)
+* [Link to Home](/)
+* [Link to Home, README.md](/README.md)
+* [Link to Home, _index.md](/_index.md)
+
`)
b.Build(BuildCfg{})
@@ -610,7 +637,19 @@ README: Readme Title
Readme Content.
MYPAGE: My Page|Path: blog/mypage.md|FilePath: mycontent/mypage.md|
`)
- b.AssertFileContent("public/blog/mypage/index.html", "Single: My Page")
+ b.AssertFileContent("public/blog/mypage/index.html", `
+<a href="https://example.com/blog/mybundle/">Relative Link From Page</a>
+<a href="https://example.com/blog/mybundle/">Relative Link From Page, filename</a>
+<a href="https://example.com/blog/mybundle/">Link using original path</a>
+
+`)
+ b.AssertFileContent("public/blog/mybundle/index.html", `
+<a href="https://example.com/blog/mypage/">Dot Relative Link From Bundle</a>
+<a href="https://example.com/blog/mypage/">Link using original path</a>
+<a href="https://example.com/">Link to Home</a>
+<a href="https://example.com/">Link to Home, README.md</a>
+<a href="https://example.com/">Link to Home, _index.md</a>
+`)
b.EditFiles("README.md", `---
title: "Readme Edit"
@@ -622,6 +661,7 @@ title: "Readme Edit"
b.AssertFileContent("public/index.html", `
Readme Edit
`)
+
}
// https://github.com/gohugoio/hugo/issues/6299
diff --git a/hugolib/page.go b/hugolib/page.go
index f5031332c..8aad8dcc7 100644
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -954,7 +954,7 @@ func (p *pageState) sourceRefs() []string {
path := meta.PathFile()
if path != "" {
- ref := "/" + path
+ ref := "/" + filepath.ToSlash(path)
if ref != refs[0] {
refs = append(refs, ref)
}
diff --git a/hugolib/pagecollections.go b/hugolib/pagecollections.go
index 57878881a..023222bdd 100644
--- a/hugolib/pagecollections.go
+++ b/hugolib/pagecollections.go
@@ -267,7 +267,14 @@ func (c *PageCollections) getPageNew(context page.Page, ref string) (page.Page,
} else if context != nil {
// Try the page-relative path.
- ppath := path.Join("/", strings.ToLower(context.SectionsPath()), ref)
+ var dir string
+ if !context.File().IsZero() {
+ dir = filepath.ToSlash(context.File().Dir())
+ } else {
+ dir = context.SectionsPath()
+ }
+ ppath := path.Join("/", strings.ToLower(dir), ref)
+
p, err := c.getFromCache(ppath)
if err == nil && p != nil {
return p, nil
diff --git a/hugolib/testhelpers_test.go b/hugolib/testhelpers_test.go
index 93ea9477c..44185eadc 100644
--- a/hugolib/testhelpers_test.go
+++ b/hugolib/testhelpers_test.go
@@ -466,6 +466,7 @@ func (s *sitesBuilder) CreateSitesE() error {
for _, dir := range []string{
"content/sect",
"layouts/_default",
+ "layouts/_default/_markup",
"layouts/partials",
"layouts/shortcodes",
"data",