diff --git a/helpers/path.go b/helpers/path.go index c994cce7c..e70304c5e 100644 --- a/helpers/path.go +++ b/helpers/path.go @@ -209,36 +209,37 @@ func GetRelativePath(path, base string) (final string, err error) { } // Given a source path, determine the section +// A section is the part between the root slash and the second slash or before the first slash func GuessSection(in string) string { parts := strings.Split(in, "/") + // This will include an empty entry before and after paths with leading and trailing slashes + // eg... /sect/one/ -> ["", "sect", "one", ""] - if len(parts) == 0 { + // Needs to have at least a value and a slash + if len(parts) < 2 { return "" } - // trim filename - if !strings.HasSuffix(in, "/") { - parts = parts[:len(parts)-1] + // If it doesn't have a leading slash and value and file or trailing slash, then return "" + if parts[0] == "" && len(parts) < 3 { + return "" } - if len(parts) == 0 { - return "" + // strip leading slash + if parts[0] == "" { + parts = parts[1:] } // if first directory is "content", return second directory - section := "" - - if parts[0] == "content" && len(parts) > 1 { - section = parts[1] - } else { - section = parts[0] + if parts[0] == "content" { + if len(parts) > 2 { + return parts[1] + } else { + return "" + } } - if section == "." { - return "" - } - - return section + return parts[0] } func PathPrep(ugly bool, in string) string { diff --git a/helpers/path_test.go b/helpers/path_test.go index 607918581..bab1786e2 100644 --- a/helpers/path_test.go +++ b/helpers/path_test.go @@ -423,17 +423,20 @@ func TestGuessSection(t *testing.T) { {"", ""}, {"/content", ""}, {"content/", ""}, - {"/content/", "content"}, + {"/content/", ""}, // /content/ is a special case. It will never be the section {"/blog", ""}, {"/blog/", "blog"}, {"blog", ""}, {"content/blog", ""}, {"/content/blog/", "blog"}, - {"/content/blog", "blog"}, - {"content/blog/", ""}, + {"/content/blog", ""}, // Lack of trailing slash indicates 'blog' is not a directory. + {"content/blog/", "blog"}, {"/contents/myblog/", "contents"}, {"/contents/yourblog", "contents"}, {"/contents/ourblog/", "contents"}, + {"/content/myblog/", "myblog"}, + {"/content/yourblog", ""}, + {"/content/ourblog/", "ourblog"}, } for i, d := range data {