diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentToHtmlConverter.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentToHtmlConverter.cs index 8948c39942..1ff429510b 100644 --- a/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentToHtmlConverter.cs +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentToHtmlConverter.cs @@ -1,14 +1,10 @@ +using Volo.Docs.Documents; +using Volo.Docs.Projects; + namespace Volo.Docs.HtmlConverting { public interface IDocumentToHtmlConverter { - string Convert(string content); - - string NormalizeLinks( - string content, - string projectShortName, - string version, - string documentLocalDirectory - ); + string Convert(ProjectDto project, DocumentWithDetailsDto document,string version); } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs b/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs index 01d1c92667..522a820c90 100644 --- a/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs +++ b/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs @@ -3,7 +3,9 @@ using System.Text; using System.Text.RegularExpressions; using CommonMark; using Volo.Abp.DependencyInjection; +using Volo.Docs.Documents; using Volo.Docs.HtmlConverting; +using Volo.Docs.Projects; using Volo.Docs.Utils; namespace Volo.Docs.Markdown @@ -13,17 +15,30 @@ namespace Volo.Docs.Markdown public const string Type = "md"; private const string NewLinkFormat = "[{0}](/documents/{1}/{2}{3}/{4})"; - private const string MarkdownLinkRegExp = @"\[([^)]+)\]\(([^)]+." + Type + @")\)"; - private const string AnchorLinkRegExp = @"]+href=\""(.*?)\""[^>]*>(.*)?"; - public string Convert(string content) + public string Convert(ProjectDto project, DocumentWithDetailsDto document, string version) { - return content == null ? null : CommonMarkConverter.Convert(Encoding.UTF8.GetString(Encoding.Default.GetBytes(content))); + if (document.Content.IsNullOrEmpty()) + { + return document.Content; + } + + var content = NormalizeLinks( + document.Content, + project.ShortName, + version, + document.LocalDirectory + ); + + return CommonMarkConverter.Convert(Encoding.UTF8.GetString(Encoding.Default.GetBytes(content))); } - public string NormalizeLinks(string content, string projectShortName, string version, + private string NormalizeLinks( + string content, + string projectShortName, + string version, string documentLocalDirectory) { if (content == null) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml index 961bf4c467..00493c6b23 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml @@ -81,7 +81,7 @@ - @if (Model.Versions.Any()) + @if (Model.VersionSelectItems.Any()) {
diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index 3aa1010c17..f659e86a12 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -29,8 +29,6 @@ namespace Volo.Docs.Pages.Documents.Project public DocumentWithDetailsDto Document { get; private set; } - public List Versions { get; private set; } - public List VersionSelectItems { get; private set; } public NavigationWithDetailsDto Navigation { get; private set; } @@ -58,6 +56,7 @@ namespace Volo.Docs.Pages.Documents.Project SetDocumentNames(); await SetVersionAsync(); await SetDocumentAsync(); + ConvertDocumentContentToHtml(); await SetNavigationAsync(); } @@ -73,13 +72,14 @@ namespace Volo.Docs.Pages.Documents.Project private async Task SetVersionAsync() { - var output = await _projectAppService.GetVersionsAsync(Project.Id); + //TODO: Needs refactoring - Versions = output.Items + var output = await _projectAppService.GetVersionsAsync(Project.Id); + var versions = output.Items .Select(v => new VersionInfoViewModel(v.DisplayName, v.Name)) .ToList(); - LatestVersionInfo = Versions.First(); + LatestVersionInfo = versions.First(); LatestVersionInfo.DisplayText = $"{LatestVersionInfo.DisplayText} ({DocsAppConsts.Latest})"; LatestVersionInfo.Version = LatestVersionInfo.Version; @@ -90,7 +90,7 @@ namespace Volo.Docs.Pages.Documents.Project } else { - var versionFromUrl = Versions.FirstOrDefault(v => v.Version == Version); + var versionFromUrl = versions.FirstOrDefault(v => v.Version == Version); if (versionFromUrl != null) { versionFromUrl.IsSelected = true; @@ -98,12 +98,12 @@ namespace Volo.Docs.Pages.Documents.Project } else { - Versions.First().IsSelected = true; - Version = Versions.First().Version; + versions.First().IsSelected = true; + Version = versions.First().Version; } } - VersionSelectItems = Versions.Select(v => new SelectListItem + VersionSelectItems = versions.Select(v => new SelectListItem { Text = v.DisplayText, Value = CreateLink(LatestVersionInfo, v.Version, DocumentName), @@ -191,16 +191,27 @@ namespace Volo.Docs.Pages.Documents.Project catch (DocumentNotFoundException) { //TODO: Handle it! - return; + throw; } - - var converter = _documentToHtmlConverterFactory.Create(Document.Format ?? Project.Format); - - var content = converter.NormalizeLinks(Document.Content, Document.Project.ShortName, GetSpecificVersionOrLatest(), Document.LocalDirectory); - content = converter.Convert(content); + } - content = HtmlNormalizer.ReplaceImageSources(content, Document.RawRootUrl, Document.LocalDirectory); - content = HtmlNormalizer.ReplaceCodeBlocksLanguage(content, "language-C#", "language-csharp"); //todo find a way to make it on client in prismJS configuration (eg: map C# => csharp) + private void ConvertDocumentContentToHtml() + { + var converter = _documentToHtmlConverterFactory.Create(Document.Format ?? Project.Format); + var content = converter.Convert(Project, Document, GetSpecificVersionOrLatest()); + + content = HtmlNormalizer.ReplaceImageSources( + content, + Document.RawRootUrl, + Document.LocalDirectory + ); + + //todo find a way to make it on client in prismJS configuration (eg: map C# => csharp) + content = HtmlNormalizer.ReplaceCodeBlocksLanguage( + content, + "language-C#", + "language-csharp" + ); Document.Content = content; }