diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2016-09-13 21:37:27 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2016-09-13 21:37:27 +0200 |
commit | f53145b2748067a9d50ab57efc6423d7568c237c (patch) | |
tree | d8b00c6aaafe0269877e541e4ed1f5305b55ba9d /helpers | |
parent | 8d040c966f777a3fc462d0fb24775cb865519991 (diff) |
helpers: Avoid adding language prefix if already present
Fixes #2444
Diffstat (limited to 'helpers')
-rw-r--r-- | helpers/url.go | 19 | ||||
-rw-r--r-- | helpers/url_test.go | 4 |
2 files changed, 21 insertions, 2 deletions
diff --git a/helpers/url.go b/helpers/url.go index 1d87cf89f..1bc6042e6 100644 --- a/helpers/url.go +++ b/helpers/url.go @@ -169,8 +169,15 @@ func AbsURL(in string, addLanguage bool) string { if addLanguage { prefix := getLanguagePrefix() + hasPrefix := false + // avoid adding language prefix if already present + if strings.HasPrefix(in, "/") { + hasPrefix = strings.HasPrefix(in[1:], prefix) + } else { + hasPrefix = strings.HasPrefix(in, prefix) + } - if prefix != "" { + if prefix != "" && !hasPrefix { addSlash := in == "" || strings.HasSuffix(in, "/") in = path.Join(prefix, in) @@ -224,7 +231,15 @@ func RelURL(in string, addLanguage bool) string { if addLanguage { prefix := getLanguagePrefix() - if prefix != "" { + hasPrefix := false + // avoid adding language prefix if already present + if strings.HasPrefix(in, "/") { + hasPrefix = strings.HasPrefix(in[1:], prefix) + } else { + hasPrefix = strings.HasPrefix(in, prefix) + } + + if prefix != "" && !hasPrefix { hadSlash := strings.HasSuffix(u, "/") u = path.Join(prefix, u) diff --git a/helpers/url_test.go b/helpers/url_test.go index d1fadb252..2cf93b859 100644 --- a/helpers/url_test.go +++ b/helpers/url_test.go @@ -69,12 +69,14 @@ func doTestAbsURL(t *testing.T, defaultInSubDir, addLanguage, multilingual bool, expected string }{ {"/test/foo", "http://base/", "http://base/MULTItest/foo"}, + {"/" + lang + "/test/foo", "http://base/", "http://base/" + lang + "/test/foo"}, {"", "http://base/ace/", "http://base/ace/MULTI"}, {"/test/2/foo/", "http://base", "http://base/MULTItest/2/foo/"}, {"http://abs", "http://base/", "http://abs"}, {"schema://abs", "http://base/", "schema://abs"}, {"//schemaless", "http://base/", "//schemaless"}, {"test/2/foo/", "http://base/path", "http://base/path/MULTItest/2/foo/"}, + {lang + "/test/2/foo/", "http://base/path", "http://base/path/" + lang + "/test/2/foo/"}, {"/test/2/foo/", "http://base/path", "http://base/MULTItest/2/foo/"}, {"http//foo", "http://base/path", "http://base/path/MULTIhttp/foo"}, } @@ -141,6 +143,8 @@ func doTestRelURL(t *testing.T, defaultInSubDir, addLanguage, multilingual bool, expected string }{ {"/test/foo", "http://base/", false, "MULTI/test/foo"}, + {"/" + lang + "/test/foo", "http://base/", false, "/" + lang + "/test/foo"}, + {lang + "/test/foo", "http://base/", false, "/" + lang + "/test/foo"}, {"test.css", "http://base/sub", false, "/subMULTI/test.css"}, {"test.css", "http://base/sub", true, "MULTI/test.css"}, {"/test/", "http://base/", false, "MULTI/test/"}, |