diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-03-31 12:08:15 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-04-02 10:33:15 +0200 |
commit | 5185fb065b0f8a4142c29ee3e3cd917e917280a4 (patch) | |
tree | c4aad127193563eabac21e76cfc4e8e19408b155 | |
parent | 92baa14fd3f45c0917c5988235cd1a0f8692f171 (diff) |
hugolib: Allow relative URLs in front matter
Before this commit you would have to do this in multilingual setups:
```
---
title: "Custom!"
url: "/jp/custom/foo"
---
```
This commit allows for relative URLs, e.g:
```
---
title: "Custom!"
url: "custom/foo"
---
```
Which is obviously easier and more portable.
The meaning of relative may change to include more in the future (e.g. role based access).
Fixes #5704
-rw-r--r-- | hugolib/page_permalink_test.go | 40 | ||||
-rw-r--r-- | hugolib/site_render.go | 4 | ||||
-rw-r--r-- | resources/page/page_paths.go | 5 |
3 files changed, 47 insertions, 2 deletions
diff --git a/hugolib/page_permalink_test.go b/hugolib/page_permalink_test.go index ed6eb11e3..9df10cd53 100644 --- a/hugolib/page_permalink_test.go +++ b/hugolib/page_permalink_test.go @@ -104,3 +104,43 @@ Content } } + +func TestRelativeURLInFrontMatter(t *testing.T) { + + config := ` + +defaultContentLanguage = "en" +defaultContentLanguageInSubdir = false + +[Languages] +[Languages.en] +weight = 10 +contentDir = "content/en" +[Languages.nn] +weight = 20 +contentDir = "content/nn" + +` + + pageTempl := `--- +title: "A page" +url: %q +--- + +Some content. +` + + b := newTestSitesBuilder(t).WithConfigFile("toml", config) + b.WithContent("content/en/blog/page1.md", fmt.Sprintf(pageTempl, "myblog/p1/")) + b.WithContent("content/en/blog/_index.md", fmt.Sprintf(pageTempl, "this-is-my-english-blog")) + b.WithContent("content/nn/blog/page1.md", fmt.Sprintf(pageTempl, "myblog/p1/")) + b.WithContent("content/nn/blog/_index.md", fmt.Sprintf(pageTempl, "this-is-my-blog")) + + b.Build(BuildCfg{}) + + b.AssertFileContent("public/nn/myblog/p1/index.html", "Single: A page|Hello|nn|RelPermalink: /nn/myblog/p1/|") + b.AssertFileContent("public/nn/this-is-my-blog/index.html", "List Page 1|A page|Hello|/nn/this-is-my-blog/|") + b.AssertFileContent("public/this-is-my-english-blog/index.html", "List Page 1|A page|Hello|/this-is-my-english-blog/|") + b.AssertFileContent("public/myblog/p1/index.html", "Single: A page|Hello|en|RelPermalink: /myblog/p1/|Permalink: /myblog/p1/|") + +} diff --git a/hugolib/site_render.go b/hugolib/site_render.go index 3c0897d2e..cf3755b92 100644 --- a/hugolib/site_render.go +++ b/hugolib/site_render.go @@ -208,7 +208,7 @@ func (s *Site) render404() error { s: s, kind: kind404, urlPaths: pagemeta.URLPath{ - URL: path.Join(s.GetURLLanguageBasePath(), "404.html"), + URL: "404.html", }, }, output.HTMLFormat, @@ -271,7 +271,7 @@ func (s *Site) renderRobotsTXT() error { s: s, kind: kindRobotsTXT, urlPaths: pagemeta.URLPath{ - URL: path.Join(s.GetURLLanguageBasePath(), "robots.txt"), + URL: "robots.txt", }, }, output.RobotsTxtFormat) diff --git a/resources/page/page_paths.go b/resources/page/page_paths.go index 160c225b1..89616d421 100644 --- a/resources/page/page_paths.go +++ b/resources/page/page_paths.go @@ -124,6 +124,11 @@ func CreateTargetPaths(d TargetPathDescriptor) (tp TargetPaths) { } + if d.URL != "" && !strings.HasPrefix(d.URL, "/") { + // Treat this as a context relative URL + d.ForcePrefix = true + } + pagePath := slash var ( |