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;
}