@@ -199,9 +199,15 @@ namespace Docnet
}
else
{
var link = HttpUtility.UrlPathEncode(this.GetTargetURL(pathSpecification));
if (link.EndsWith("index.htm", StringComparison.InvariantCultureIgnoreCase))
{
link = link.Substring(0, link.Length - "index.htm".Length);
}
// just a link
fragments.Add(string.Format("<span class=\"navigationgroup\"><i class=\"fa fa-caret-right\"></i> <a href=\"{0}{1}\">{2}</a></span>",
relativePathToRoot, HttpUtility.UrlPathEncode(this.GetTargetURL(pathSpecification)), this.Name));
relativePathToRoot, link , this.Name));
}
if (!this.IsRoot)
{
@@ -301,9 +307,14 @@ namespace Docnet
{
// no index element, add an artificial one.
var path = string.Empty;
if (this.ParentContainer != null)
// Don't check parents when using relative paths since we need to walk the tree manually
if (pathSpecification == PathSpecification.Full)
{
path = Path.GetDirectoryName(this.ParentContainer.GetTargetURL(pathSpecification));
if (this.ParentContainer != null)
{
path = Path.GetDirectoryName(this.ParentContainer.GetTargetURL(pathSpecification));
}
}
var nameToUse = this.Name.Replace(".", "").Replace('/', '_').Replace("\\", "_").Replace(":", "").Replace(" ", "");
@@ -324,7 +335,7 @@ namespace Docnet
case PathSpecification.RelativeAsFolder:
if (!IsRoot)
{
var preferredPath = value ;
string preferredPath = null ;
// We're making a big assumption here, but we can get the first page and assume it's
// in the right folder.
@@ -335,11 +346,27 @@ namespace Docnet
if (firstSimpleChildPage != null)
{
preferredPath = Path.GetDirectoryName(firstSimpleChildPage.Value);
if (!string.IsNullOrWhiteSpace(preferredPath))
}
else
{
// This is representing an empty folder. Search for first child navigation that has real childs,
// then retrieve the path by going levels up.
var firstChildNavigationLevel = (NavigationLevel)this.Value.FirstOrDefault(x => x is NavigationLevel && ((NavigationLevel)x).Value.Any() && !ReferenceEquals(this, x));
if (firstChildNavigationLevel != null)
{
value = Path.Combine(preferredPath, "index.md");
var targetUrl = firstChildNavigationLevel.Value.First().GetTargetURL(pathSpecification);
// 3 times since we need 2 parents up
preferredPath = Path.GetDirectoryName(targetUrl);
preferredPath = Path.GetDirectoryName(preferredPath);
preferredPath = Path.GetDirectoryName(preferredPath);
}
}
if (!string.IsNullOrWhiteSpace(preferredPath))
{
value = Path.Combine(preferredPath, "index.md");
}
}
break;