Browse Source

Refactor markdown document formatting

pull/625/head
Halil ibrahim Kalkan 8 years ago
parent
commit
afa0fd8829
  1. 2
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentStoreFactory.cs
  2. 7
      modules/docs/src/Volo.Docs.Web/DocsWebModule.cs
  3. 27
      modules/docs/src/Volo.Docs.Web/Formatting/DocumentConverterFactory.cs
  4. 9
      modules/docs/src/Volo.Docs.Web/Formatting/IDocumentConverter.cs
  5. 7
      modules/docs/src/Volo.Docs.Web/Formatting/IDocumentConverterFactory.cs
  6. 33
      modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentToHtmlConverterFactory.cs
  7. 15
      modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentToHtmlConverterOptions.cs
  8. 14
      modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentToHtmlConverter.cs
  9. 7
      modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentToHtmlConverterFactory.cs
  10. 9
      modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs
  11. 10
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs

2
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentStoreFactory.cs

@ -24,7 +24,7 @@ namespace Volo.Docs.Documents
var serviceType = Options.Stores.GetOrDefault(storeType);
if (serviceType == null)
{
throw new ApplicationException($"Undefined document store: {storeType}");
throw new ApplicationException($"Unknown document store: {storeType}");
}
return (IDocumentStore) ServiceProvider.GetRequiredService(serviceType);

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

@ -5,7 +5,9 @@ using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap;
using Volo.Abp.AutoMapper;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;
using Volo.Docs.HtmlConverting;
using Volo.Docs.Localization;
using Volo.Docs.Markdown;
namespace Volo.Docs
{
@ -40,6 +42,11 @@ namespace Volo.Docs
{
options.AddProfile<DocsWebAutoMapperProfile>(validate: true);
});
Configure<DocumentToHtmlConverterOptions>(options =>
{
options.Converters[MarkdownDocumentToHtmlConverter.Type] = typeof(MarkdownDocumentToHtmlConverter);
});
}
}
}

27
modules/docs/src/Volo.Docs.Web/Formatting/DocumentConverterFactory.cs

@ -1,27 +0,0 @@
using System;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.DependencyInjection;
namespace Volo.Docs.Formatting
{
public class DocumentConverterFactory : IDocumentConverterFactory, ITransientDependency
{
private readonly IServiceProvider _serviceProvider;
public DocumentConverterFactory(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public IDocumentConverter Create(string format)
{
switch (format.ToLowerInvariant())
{
case MarkdownDocumentConverter.Type:
return _serviceProvider.GetRequiredService<MarkdownDocumentConverter>();
default:
throw new ApplicationException($"Undefined document formatting: {format}");
}
}
}
}

9
modules/docs/src/Volo.Docs.Web/Formatting/IDocumentConverter.cs

@ -1,9 +0,0 @@
namespace Volo.Docs.Formatting
{
public interface IDocumentConverter
{
string Convert(string content);
string NormalizeLinks(string content, string projectShortName, string version, string documentLocalDirectory);
}
}

7
modules/docs/src/Volo.Docs.Web/Formatting/IDocumentConverterFactory.cs

@ -1,7 +0,0 @@
namespace Volo.Docs.Formatting
{
public interface IDocumentConverterFactory
{
IDocumentConverter Create(string format);
}
}

33
modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentToHtmlConverterFactory.cs

@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
namespace Volo.Docs.HtmlConverting
{
public class DocumentToHtmlConverterFactory : IDocumentToHtmlConverterFactory, ITransientDependency
{
protected DocumentToHtmlConverterOptions Options { get; }
protected IServiceProvider ServiceProvider { get; }
public DocumentToHtmlConverterFactory(
IServiceProvider serviceProvider,
IOptions<DocumentToHtmlConverterOptions> options)
{
ServiceProvider = serviceProvider;
Options = options.Value;
}
public virtual IDocumentToHtmlConverter Create(string format)
{
var serviceType = Options.Converters.GetOrDefault(format);
if (serviceType == null)
{
throw new ApplicationException($"Unknown document format: {format}");
}
return (IDocumentToHtmlConverter)ServiceProvider.GetRequiredService(serviceType);
}
}
}

15
modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentToHtmlConverterOptions.cs

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
namespace Volo.Docs.HtmlConverting
{
public class DocumentToHtmlConverterOptions
{
public Dictionary<string, Type> Converters { get; set; }
public DocumentToHtmlConverterOptions()
{
Converters = new Dictionary<string, Type>();
}
}
}

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

@ -0,0 +1,14 @@
namespace Volo.Docs.HtmlConverting
{
public interface IDocumentToHtmlConverter
{
string Convert(string content);
string NormalizeLinks(
string content,
string projectShortName,
string version,
string documentLocalDirectory
);
}
}

7
modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentToHtmlConverterFactory.cs

@ -0,0 +1,7 @@
namespace Volo.Docs.HtmlConverting
{
public interface IDocumentToHtmlConverterFactory
{
IDocumentToHtmlConverter Create(string format);
}
}

9
modules/docs/src/Volo.Docs.Web/Formatting/MarkdownDocumentConverter.cs → modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs

@ -1,13 +1,14 @@
using CommonMark;
using System;
using System;
using System.Text;
using System.Text.RegularExpressions;
using CommonMark;
using Volo.Abp.DependencyInjection;
using Volo.Docs.HtmlConverting;
using Volo.Docs.Utils;
namespace Volo.Docs.Formatting
namespace Volo.Docs.Markdown
{
public class MarkdownDocumentConverter : IDocumentConverter, ITransientDependency
public class MarkdownDocumentToHtmlConverter : IDocumentToHtmlConverter, ITransientDependency
{
public const string Type = "md";

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

@ -7,7 +7,7 @@ using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
using Volo.Docs.Documents;
using Volo.Docs.Formatting;
using Volo.Docs.HtmlConverting;
using Volo.Docs.Models;
using Volo.Docs.Projects;
@ -41,16 +41,16 @@ namespace Volo.Docs.Pages.Documents.Project
public VersionInfo LatestVersionInfo { get; private set; }
private readonly IDocumentAppService _documentAppService;
private readonly IDocumentConverterFactory _documentConverterFactory;
private readonly IDocumentToHtmlConverterFactory _documentToHtmlConverterFactory;
private readonly IProjectAppService _projectAppService;
public IndexModel(
IDocumentAppService documentAppService,
IDocumentConverterFactory documentConverterFactory,
IDocumentToHtmlConverterFactory documentToHtmlConverterFactory,
IProjectAppService projectAppService)
{
_documentAppService = documentAppService;
_documentConverterFactory = documentConverterFactory;
_documentToHtmlConverterFactory = documentToHtmlConverterFactory;
_projectAppService = projectAppService;
}
@ -206,7 +206,7 @@ namespace Volo.Docs.Pages.Documents.Project
return;
}
var converter = _documentConverterFactory.Create(Document.Format ?? ProjectFormat);
var converter = _documentToHtmlConverterFactory.Create(Document.Format ?? ProjectFormat);
var content = converter.NormalizeLinks(Document.Content, Document.Project.ShortName, GetSpecificVersionOrLatest(), Document.LocalDirectory);
content = converter.Convert(content);

Loading…
Cancel
Save