Browse Source

docsurl refactor

pull/1192/head
Yunus Emre Kalkan 7 years ago
parent
commit
ddf25fde0d
  1. 4
      modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs
  2. 14
      modules/docs/src/Volo.Docs.Web/DocsUrlOptions.cs
  3. 4
      modules/docs/src/Volo.Docs.Web/DocsWebModule.cs
  4. 2
      modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentToHtmlConverter.cs
  5. 21
      modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs
  6. 4
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Index.cshtml.cs
  7. 14
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs

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

@ -142,9 +142,7 @@ namespace Volo.Docs.Areas.Documents.TagHelpers
return "javascript:;"; return "javascript:;";
} }
var prefix = _urlOptions.RoutePrefix.IsNullOrEmpty() var prefix = _urlOptions.GetFormattedRoutePrefix();
? ""
: _urlOptions.RoutePrefix.EnsureEndsWith('/');
return "/" + prefix + LanguageCode + "/" + ProjectName + "/" + Version + "/" + pathWithoutFileExtension; return "/" + prefix + LanguageCode + "/" + ProjectName + "/" + Version + "/" + pathWithoutFileExtension;
} }

14
modules/docs/src/Volo.Docs.Web/DocsUrlOptions.cs

@ -1,4 +1,6 @@
namespace Volo.Docs using System;
namespace Volo.Docs
{ {
public class DocsUrlOptions public class DocsUrlOptions
{ {
@ -6,5 +8,15 @@
/// Default value: "documents"; /// Default value: "documents";
/// </summary> /// </summary>
public string RoutePrefix { get; set; } = "documents"; public string RoutePrefix { get; set; } = "documents";
public string GetFormattedRoutePrefix()
{
if (string.IsNullOrWhiteSpace(RoutePrefix))
{
return "";
}
return RoutePrefix.Trim('/').EnsureEndsWith('/');
}
} }
} }

4
modules/docs/src/Volo.Docs.Web/DocsWebModule.cs

@ -45,9 +45,7 @@ namespace Volo.Docs
.GetRequiredServiceLazy<IOptions<DocsUrlOptions>>() .GetRequiredServiceLazy<IOptions<DocsUrlOptions>>()
.Value; .Value;
var routePrefix = urlOptions.Value.RoutePrefix.IsNullOrEmpty() var routePrefix = urlOptions.Value.GetFormattedRoutePrefix();
? ""
: urlOptions.Value.RoutePrefix.EnsureEndsWith('/');
options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + "{projectName}"); options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + "{projectName}");
options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + "{languageCode}/{projectName}"); options.Conventions.AddPageRoute("/Documents/Project/Index", routePrefix + "{languageCode}/{projectName}");

2
modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentToHtmlConverter.cs

@ -5,6 +5,6 @@ namespace Volo.Docs.HtmlConverting
{ {
public interface IDocumentToHtmlConverter public interface IDocumentToHtmlConverter
{ {
string Convert(ProjectDto project, DocumentWithDetailsDto document,string version); string Convert(ProjectDto project, DocumentWithDetailsDto document, string version, string languageCode);
} }
} }

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

@ -1,5 +1,6 @@
using System; using System;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Docs.Documents; using Volo.Docs.Documents;
using Volo.Docs.HtmlConverting; using Volo.Docs.HtmlConverting;
@ -13,17 +14,21 @@ namespace Volo.Docs.Markdown
public const string Type = "md"; public const string Type = "md";
private readonly IMarkdownConverter _markdownConverter; private readonly IMarkdownConverter _markdownConverter;
private readonly DocsUrlOptions _urlOptions;
public MarkdownDocumentToHtmlConverter(IMarkdownConverter markdownConverter) public MarkdownDocumentToHtmlConverter(IMarkdownConverter markdownConverter,
IOptions<DocsUrlOptions> urlOptions)
{ {
_markdownConverter = markdownConverter; _markdownConverter = markdownConverter;
_urlOptions = urlOptions.Value;
} }
private const string MdLinkFormat = "[{0}](/documents/{1}/{2}{3}/{4})"; private const string MdLinkFormat = "[{0}](/{1}{2}/{3}/{4}{5}/{6})";
private const string MarkdownLinkRegExp = @"\[(.*)\]\((.*\.md)\)"; private const string MarkdownLinkRegExp = @"\[(.*)\]\((.*\.md)\)";
private const string AnchorLinkRegExp = @"<a[^>]+href=\""(.*?)\""[^>]*>(.*)?</a>"; private const string AnchorLinkRegExp = @"<a[^>]+href=\""(.*?)\""[^>]*>(.*)?</a>";
public virtual string Convert(ProjectDto project, DocumentWithDetailsDto document, string version) public virtual string Convert(ProjectDto project, DocumentWithDetailsDto document, string version,
string languageCode)
{ {
if (document.Content.IsNullOrEmpty()) if (document.Content.IsNullOrEmpty())
{ {
@ -34,7 +39,8 @@ namespace Volo.Docs.Markdown
document.Content, document.Content,
project.ShortName, project.ShortName,
version, version,
document.LocalDirectory document.LocalDirectory,
languageCode
); );
return _markdownConverter.ConvertToHtml(content); return _markdownConverter.ConvertToHtml(content);
@ -44,7 +50,8 @@ namespace Volo.Docs.Markdown
string content, string content,
string projectShortName, string projectShortName,
string version, string version,
string documentLocalDirectory) string documentLocalDirectory,
string languageCode)
{ {
var normalized = Regex.Replace(content, MarkdownLinkRegExp, delegate (Match match) var normalized = Regex.Replace(content, MarkdownLinkRegExp, delegate (Match match)
{ {
@ -66,6 +73,8 @@ namespace Volo.Docs.Markdown
return string.Format( return string.Format(
MdLinkFormat, MdLinkFormat,
displayText, displayText,
_urlOptions.GetFormattedRoutePrefix(),
languageCode,
projectShortName, projectShortName,
version, version,
documentLocalDirectoryNormalized, documentLocalDirectoryNormalized,
@ -92,6 +101,8 @@ namespace Volo.Docs.Markdown
return string.Format( return string.Format(
MdLinkFormat, MdLinkFormat,
displayText, displayText,
_urlOptions.GetFormattedRoutePrefix(),
languageCode,
projectShortName, projectShortName,
version, version,
documentLocalDirectoryNormalized, documentLocalDirectoryNormalized,

4
modules/docs/src/Volo.Docs.Web/Pages/Documents/Index.cshtml.cs

@ -27,9 +27,7 @@ namespace Volo.Docs.Pages.Documents
public async Task<IActionResult> OnGetAsync() public async Task<IActionResult> OnGetAsync()
{ {
DocumentsUrlPrefix = _urlOptions.RoutePrefix.IsNullOrEmpty() DocumentsUrlPrefix = _urlOptions.GetFormattedRoutePrefix();
? ""
: _urlOptions.RoutePrefix.EnsureEndsWith('/');
var listResult = await _projectAppService.GetListAsync(); var listResult = await _projectAppService.GetListAsync();

14
modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs

@ -70,9 +70,7 @@ namespace Volo.Docs.Pages.Documents.Project
public async Task<IActionResult> OnGetAsync() public async Task<IActionResult> OnGetAsync()
{ {
DocumentsUrlPrefix = _options.RoutePrefix.IsNullOrEmpty() DocumentsUrlPrefix = _options.GetFormattedRoutePrefix();
? ""
: _options.RoutePrefix.EnsureEndsWith('/');
await SetProjectAsync(); await SetProjectAsync();
await SetProjectsAsync(); await SetProjectsAsync();
@ -92,7 +90,6 @@ namespace Volo.Docs.Pages.Documents.Project
await SetDocumentAsync(); await SetDocumentAsync();
await SetNavigationAsync(); await SetNavigationAsync();
SetLanguageSelectListItems(); SetLanguageSelectListItems();
AddLanguageCodePrefixToLinks();
return Page(); return Page();
} }
@ -234,7 +231,7 @@ namespace Volo.Docs.Pages.Documents.Project
version = DocsAppConsts.Latest; version = DocsAppConsts.Latest;
} }
var link = DocumentsUrlPrefix.EnsureStartsWith('/') + LanguageCode + "/" + ProjectName + "/" + version; var link = DocumentsUrlPrefix + LanguageCode + "/" + ProjectName + "/" + version;
if (documentName != null) if (documentName != null)
{ {
@ -330,7 +327,7 @@ namespace Volo.Docs.Pages.Documents.Project
private void ConvertDocumentContentToHtml() private void ConvertDocumentContentToHtml()
{ {
var converter = _documentToHtmlConverterFactory.Create(Document.Format ?? Project.Format); var converter = _documentToHtmlConverterFactory.Create(Document.Format ?? Project.Format);
var content = converter.Convert(Project, Document, GetSpecificVersionOrLatest()); var content = converter.Convert(Project, Document, GetSpecificVersionOrLatest(), LanguageCode);
content = HtmlNormalizer.ReplaceImageSources( content = HtmlNormalizer.ReplaceImageSources(
content, content,
@ -347,10 +344,5 @@ namespace Volo.Docs.Pages.Documents.Project
Document.Content = content; Document.Content = content;
} }
private void AddLanguageCodePrefixToLinks()
{
Document.Content = Document.Content.Replace("href=\"/documents", "href=\"/" + DocumentsUrlPrefix + LanguageCode);
}
} }
} }
Loading…
Cancel
Save