Browse Source

update docs

pull/19419/head
Salih 3 years ago
parent
commit
aaf36a1112
  1. 44
      modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs
  2. 17
      modules/docs/src/Volo.Docs.Web/DocsUiOptions.cs
  3. 82
      modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs

44
modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs

@ -24,6 +24,10 @@ namespace Volo.Docs.Areas.Documents.TagHelpers
private readonly IStringLocalizer<DocsResource> _localizer;
private readonly LinkGenerator _linkGenerator;
private readonly Func<DocsUrlNormalizerContext, string> _urlNormalizer;
private readonly IServiceProvider _serviceProvider;
private const string LiItemTemplateWithLink = @"<li class='{0}'><span class='plus-icon'><i class='fa fa-{1}'></i></span>{2}{3}</li>";
@ -51,11 +55,13 @@ namespace Volo.Docs.Areas.Documents.TagHelpers
[HtmlAttributeName("language")]
public string LanguageCode { get; set; }
public TreeTagHelper(IOptions<DocsUiOptions> urlOptions, IStringLocalizer<DocsResource> localizer, LinkGenerator linkGenerator)
public TreeTagHelper(IOptions<DocsUiOptions> urlOptions, IStringLocalizer<DocsResource> localizer, LinkGenerator linkGenerator, IServiceProvider serviceProvider)
{
_localizer = localizer;
_uiOptions = urlOptions.Value;
_linkGenerator = linkGenerator;
_urlNormalizer = _uiOptions.UrlNormalizer ?? (context => context.Url);
_serviceProvider = serviceProvider;
}
public override void Process(TagHelperContext context, TagHelperOutput output)
@ -168,26 +174,34 @@ namespace Volo.Docs.Areas.Documents.TagHelpers
private string NormalizePath(string path)
{
if (UrlHelper.IsExternalLink(path))
{
return path;
}
var pathWithoutFileExtension = RemoveFileExtensionFromPath(path);
if (string.IsNullOrWhiteSpace(path))
{
return "javascript:;";
}
var routeValues = new Dictionary<string, object> {
{ nameof(IndexModel.LanguageCode), LanguageCode },
{ nameof(IndexModel.Version), Version },
{ nameof(IndexModel.DocumentName), pathWithoutFileExtension },
{ nameof(IndexModel.ProjectName), ProjectName }
};
return _linkGenerator.GetPathByPage("/Documents/Project/Index", values: routeValues);
if (!UrlHelper.IsExternalLink(path))
{
var routeValues = new Dictionary<string, object> {
{ nameof(IndexModel.LanguageCode), LanguageCode },
{ nameof(IndexModel.Version), Version },
{ nameof(IndexModel.DocumentName), pathWithoutFileExtension },
{ nameof(IndexModel.ProjectName), ProjectName }
};
path = _linkGenerator.GetPathByPage("/Documents/Project/Index", values: routeValues);
}
return _urlNormalizer(new DocsUrlNormalizerContext {
Url = path,
Version = Version,
ProjectName = ProjectName,
LanguageCode = LanguageCode,
DocumentName = pathWithoutFileExtension,
ServiceProvider = _serviceProvider
});
}
private string RemoveFileExtensionFromPath(string path)

17
modules/docs/src/Volo.Docs.Web/DocsUiOptions.cs

@ -34,6 +34,8 @@ namespace Volo.Docs
public bool SectionRendering = true;
public SingleProjectModeOptions SingleProjectMode { get; } = new ();
public Func<DocsUrlNormalizerContext, string> UrlNormalizer { get; set; }
private string GetFormattedRoutePrefix()
{
@ -56,4 +58,19 @@ namespace Volo.Docs
public string ProjectName { get; set; }
}
public class DocsUrlNormalizerContext
{
public string ProjectName { get; set; }
public string Version { get; set; }
public string LanguageCode { get; set; }
public string DocumentName { get; set; }
public string Url { get; set; }
public IServiceProvider ServiceProvider { get; set; }
}
}

82
modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs

@ -19,13 +19,18 @@ namespace Volo.Docs.Markdown
private readonly IMarkdownConverter _markdownConverter;
private readonly DocsUiOptions _uiOptions;
private readonly LinkGenerator _linkGenerator;
private readonly IServiceProvider _serviceProvider;
private readonly Func<DocsUrlNormalizerContext, string> _urlNormalizer;
public MarkdownDocumentToHtmlConverter(IMarkdownConverter markdownConverter,
IOptions<DocsUiOptions> urlOptions, LinkGenerator linkGenerator)
IOptions<DocsUiOptions> urlOptions, LinkGenerator linkGenerator,
IServiceProvider serviceProvider)
{
_markdownConverter = markdownConverter;
_linkGenerator = linkGenerator;
_serviceProvider = serviceProvider;
_uiOptions = urlOptions.Value;
_urlNormalizer = _uiOptions.UrlNormalizer ?? (context => context.Url);
}
private const string MdLinkFormat = "[{0}]({1})";
@ -78,28 +83,27 @@ namespace Volo.Docs.Markdown
return Regex.Replace(content, MarkdownLinkRegExp, delegate (Match match)
{
var link = match.Groups[3].Value;
var displayText = match.Groups[1].Value;
var hashPart = "";
var linkPart = link;
if (link.Contains("#"))
{
var linkSplitted = link.Split("#");
link = linkSplitted[0];
linkPart = linkSplitted[0];
hashPart = linkSplitted[1];
}
var documentName = RemoveFileExtension(linkPart);
if (UrlHelper.IsExternalLink(link))
{
return match.Value;
}
if (!link.EndsWith(".md"))
if (UrlHelper.IsExternalLink(link) || !linkPart.EndsWith(".md"))
{
return match.Value;
return NormalizeLink(displayText, MdLinkFormat, link, projectShortName,
version,
documentName,
languageCode);
}
var displayText = match.Groups[1].Value;
var documentName = RemoveFileExtension(link);
var hasUrlParameter = match.Groups.Count > 3 && !match.Groups[4].Value.IsNullOrEmpty();
if (hasUrlParameter)
@ -117,11 +121,15 @@ namespace Volo.Docs.Markdown
{
documentName += $"#{hashPart}";
}
return string.Format(
MdLinkFormat,
return NormalizeLink(
displayText,
GenerateUrl(languageCode, $"{version}{documentLocalDirectoryNormalized}", documentName, projectShortName)
MdLinkFormat,
GenerateUrl(languageCode, $"{version}{documentLocalDirectoryNormalized}", documentName, projectShortName),
projectShortName,
version,
documentName,
languageCode
);
});
}
@ -132,26 +140,38 @@ namespace Volo.Docs.Markdown
return Regex.Replace(normalized, AnchorLinkRegExp, delegate (Match match)
{
var link = match.Groups[1].Value;
if (UrlHelper.IsExternalLink(link))
{
return match.Value;
}
var displayText = match.Groups[2].Value;
var documentName = RemoveFileExtension(link);
var documentLocalDirectoryNormalized = documentLocalDirectory.TrimStart('/').TrimEnd('/');
if (!string.IsNullOrWhiteSpace(documentLocalDirectoryNormalized))
if (UrlHelper.IsExternalLink(link))
{
documentLocalDirectoryNormalized = "/" + documentLocalDirectoryNormalized;
}
var documentLocalDirectoryNormalized = documentLocalDirectory.TrimStart('/').TrimEnd('/');
if (!string.IsNullOrWhiteSpace(documentLocalDirectoryNormalized))
{
documentLocalDirectoryNormalized = "/" + documentLocalDirectoryNormalized;
}
return string.Format(
MdLinkFormat,
displayText,
GenerateUrl(languageCode, $"{version}{documentLocalDirectoryNormalized}", documentName, projectShortName)
);
link = GenerateUrl(languageCode, $"{version}{documentLocalDirectoryNormalized}", documentName, projectShortName);
}
return NormalizeLink(displayText, MdLinkFormat, link,projectShortName,
version,
documentName,
languageCode);
});
}
private string NormalizeLink(string displayText, string linkFormat, string link, string projectName, string version, string documentName, string languageCode)
{
return string.Format(linkFormat, displayText, _urlNormalizer(new DocsUrlNormalizerContext {
Url = link,
ProjectName = projectName,
Version = version,
DocumentName = documentName,
LanguageCode = languageCode,
ServiceProvider = _serviceProvider
}));
}
private static string RemoveFileExtension(string documentName)
{

Loading…
Cancel
Save