helpers: Avoid adding language prefix if already present

Fixes #2444
This commit is contained in:
Bjørn Erik Pedersen 2016-09-13 21:37:27 +02:00
parent 8d040c966f
commit f53145b274
2 changed files with 21 additions and 2 deletions

View file

@ -169,8 +169,15 @@ func AbsURL(in string, addLanguage bool) string {
if addLanguage { if addLanguage {
prefix := getLanguagePrefix() 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, "/") addSlash := in == "" || strings.HasSuffix(in, "/")
in = path.Join(prefix, in) in = path.Join(prefix, in)
@ -224,7 +231,15 @@ func RelURL(in string, addLanguage bool) string {
if addLanguage { if addLanguage {
prefix := getLanguagePrefix() 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, "/") hadSlash := strings.HasSuffix(u, "/")
u = path.Join(prefix, u) u = path.Join(prefix, u)

View file

@ -69,12 +69,14 @@ func doTestAbsURL(t *testing.T, defaultInSubDir, addLanguage, multilingual bool,
expected string expected string
}{ }{
{"/test/foo", "http://base/", "http://base/MULTItest/foo"}, {"/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"}, {"", "http://base/ace/", "http://base/ace/MULTI"},
{"/test/2/foo/", "http://base", "http://base/MULTItest/2/foo/"}, {"/test/2/foo/", "http://base", "http://base/MULTItest/2/foo/"},
{"http://abs", "http://base/", "http://abs"}, {"http://abs", "http://base/", "http://abs"},
{"schema://abs", "http://base/", "schema://abs"}, {"schema://abs", "http://base/", "schema://abs"},
{"//schemaless", "http://base/", "//schemaless"}, {"//schemaless", "http://base/", "//schemaless"},
{"test/2/foo/", "http://base/path", "http://base/path/MULTItest/2/foo/"}, {"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/"}, {"/test/2/foo/", "http://base/path", "http://base/MULTItest/2/foo/"},
{"http//foo", "http://base/path", "http://base/path/MULTIhttp/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 expected string
}{ }{
{"/test/foo", "http://base/", false, "MULTI/test/foo"}, {"/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", false, "/subMULTI/test.css"},
{"test.css", "http://base/sub", true, "MULTI/test.css"}, {"test.css", "http://base/sub", true, "MULTI/test.css"},
{"/test/", "http://base/", false, "MULTI/test/"}, {"/test/", "http://base/", false, "MULTI/test/"},