From 2a543addcee866a661f879180d1963335331458d Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 27 Jan 2020 17:37:06 +0300 Subject: [PATCH 1/6] partial docs --- .../Documents/DocumentPartialTemplatesDto.cs | 9 ++ .../Docs/Documents/DocumentTemplateDto.cs | 15 ++++ .../GetDocumentPartialTemplatesInput.cs | 19 ++++ .../Docs/Documents/IDocumentAppService.cs | 2 + .../Volo/Docs/Documents/DocumentAppService.cs | 27 ++++++ .../Volo/Docs/Projects/ProjectConsts.cs | 1 + .../GitHub/Documents/GithubDocumentStore.cs | 3 +- .../Volo/Docs/Projects/Project.cs | 14 ++- .../DocsDbContextModelBuilderExtensions.cs | 1 + .../Docs/Documents/DocsDocumentController.cs | 5 ++ .../IDocumentSectionRenderer.cs | 15 +++- .../HtmlConverting/PartialTemplateDto.cs | 11 +++ .../ScribanDocumentSectionRenderer.cs | 88 ++++++++++++++++++- .../Pages/Documents/Project/Index.cshtml.cs | 65 +++++++++++++- 14 files changed, 263 insertions(+), 12 deletions(-) create mode 100644 modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplatesDto.cs create mode 100644 modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentTemplateDto.cs create mode 100644 modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/GetDocumentPartialTemplatesInput.cs create mode 100644 modules/docs/src/Volo.Docs.Web/HtmlConverting/PartialTemplateDto.cs diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplatesDto.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplatesDto.cs new file mode 100644 index 0000000000..bafb089bbd --- /dev/null +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplatesDto.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace Volo.Docs.Documents +{ + public class DocumentPartialTemplatesDto + { + public List Templates { get; set; } + } +} diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentTemplateDto.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentTemplateDto.cs new file mode 100644 index 0000000000..37d94b9032 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentTemplateDto.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; + +namespace Volo.Docs.Documents +{ + public class DocumentTemplateDto + { + public string Name { get; set; } + + public string Path { get; set; } + + public List SelfParameters { get; set; } + + public List ParentParameters { get; set; } + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/GetDocumentPartialTemplatesInput.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/GetDocumentPartialTemplatesInput.cs new file mode 100644 index 0000000000..52376c08ee --- /dev/null +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/GetDocumentPartialTemplatesInput.cs @@ -0,0 +1,19 @@ +using System; +using System.ComponentModel.DataAnnotations; +using Volo.Docs.Language; +using Volo.Docs.Projects; + +namespace Volo.Docs.Documents +{ + public class GetDocumentPartialTemplatesInput + { + public Guid ProjectId { get; set; } + + [StringLength(ProjectConsts.MaxVersionNameLength)] + public string Version { get; set; } + + [Required] + [StringLength(LanguageConsts.MaxLanguageCodeLength)] + public string LanguageCode { get; set; } + } +} diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/IDocumentAppService.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/IDocumentAppService.cs index cfc4840824..b73eea16be 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/IDocumentAppService.cs +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/IDocumentAppService.cs @@ -13,6 +13,8 @@ namespace Volo.Docs.Documents Task GetParametersAsync(GetParametersDocumentInput input); + Task GetPartialTemplatesAsync(GetDocumentPartialTemplatesInput input); + Task GetResourceAsync(GetDocumentResourceInput input); } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs index 839c63860b..e120c5e37a 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs +++ b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs @@ -128,6 +128,33 @@ namespace Volo.Docs.Documents } } + public async Task GetPartialTemplatesAsync(GetDocumentPartialTemplatesInput input) + { + var project = await _projectRepository.GetAsync(input.ProjectId); + + try + { + if (string.IsNullOrWhiteSpace(project.PartialTemplatesDocumentName)) + { + return await Task.FromResult(null); + } + + var document = await GetDocumentWithDetailsDtoAsync( + project, + project.PartialTemplatesDocumentName, + input.LanguageCode, + input.Version + ); + + return JsonConvert.DeserializeObject(document.Content); + } + catch (DocumentNotFoundException) + { + Logger.LogWarning($"Partial template list file ({project.PartialTemplatesDocumentName}) not found."); + return new DocumentPartialTemplatesDto(); + } + } + protected virtual async Task GetDocumentWithDetailsDtoAsync( Project project, string documentName, diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Projects/ProjectConsts.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Projects/ProjectConsts.cs index 927a1a4c59..0482ef5306 100644 --- a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Projects/ProjectConsts.cs +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Projects/ProjectConsts.cs @@ -7,6 +7,7 @@ public const int MaxDefaultDocumentNameLength = 128; public const int MaxNavigationDocumentNameLength = 128; public const int MaxParametersDocumentNameLength = 128; + public const int MaxPartialTemplatesDocumentNameLength = 128; public const int MaxLatestVersionBranchNameLength = 128; public const int MaxVersionNameLength = 128; } diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentStore.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentStore.cs index bd399a4f83..ee9caa9621 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentStore.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentStore.cs @@ -37,6 +37,7 @@ namespace Volo.Docs.GitHub.Documents var commitHistoryUrl = project.GetGitHubUrlForCommitHistory() + documentName; var isNavigationDocument = documentName == project.NavigationDocumentName; var isParameterDocument = documentName == project.ParametersDocumentName; + var isPartialTemplatesDocumentName = documentName == project.PartialTemplatesDocumentName; var editLink = rootUrl.ReplaceFirst("/tree/", "/blob/") + languageCode + "/" + documentName; var localDirectory = ""; var fileName = documentName; @@ -57,7 +58,7 @@ namespace Volo.Docs.GitHub.Documents LocalDirectory = localDirectory, FileName = fileName, Contributors = new List(), - //Contributors = !isNavigationDocument && !isParameterDocument ? await GetContributors(commitHistoryUrl, token, userAgent): new List(), + //Contributors = !isNavigationDocument && !isParameterDocument && !isPartialTemplatesDocumentName ? await GetContributors(commitHistoryUrl, token, userAgent): new List(), Version = version, Content = await DownloadWebContentAsStringAsync(rawDocumentUrl, token, userAgent) }; diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Project.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Project.cs index f1cfd0d777..45b5801516 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Project.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Project.cs @@ -39,6 +39,11 @@ namespace Volo.Docs.Projects /// public virtual string ParametersDocumentName { get; protected set; } + /// + /// The document to be used for the partial document templates file (index). + /// + public virtual string PartialTemplatesDocumentName { get; protected set; } + public virtual string MinimumVersion { get; set; } /// @@ -63,7 +68,8 @@ namespace Volo.Docs.Projects [NotNull] string format, [NotNull] string defaultDocumentName = "Index", [NotNull] string navigationDocumentName = "docs-nav.json", - [NotNull] string parametersDocumentName = "docs-params.json") + [NotNull] string parametersDocumentName = "docs-params.json", + [NotNull] string partialTemplatesDocumentName = "docs-templates.json") { Id = id; @@ -74,6 +80,7 @@ namespace Volo.Docs.Projects DefaultDocumentName = Check.NotNullOrWhiteSpace(defaultDocumentName, nameof(defaultDocumentName)); NavigationDocumentName = Check.NotNullOrWhiteSpace(navigationDocumentName, nameof(navigationDocumentName)); ParametersDocumentName = Check.NotNullOrWhiteSpace(parametersDocumentName, nameof(parametersDocumentName)); + PartialTemplatesDocumentName = Check.NotNullOrWhiteSpace(partialTemplatesDocumentName, nameof(partialTemplatesDocumentName)); ExtraProperties = new Dictionary(); } @@ -98,6 +105,11 @@ namespace Volo.Docs.Projects ParametersDocumentName = Check.NotNullOrWhiteSpace(parametersDocumentName, nameof(parametersDocumentName)); } + public void SetPartialTemplatesDocumentName(string partialTemplatesDocumentName) + { + PartialTemplatesDocumentName = Check.NotNullOrWhiteSpace(partialTemplatesDocumentName, nameof(partialTemplatesDocumentName)); + } + public void SetDefaultDocumentName(string defaultDocumentName) { DefaultDocumentName = Check.NotNullOrWhiteSpace(defaultDocumentName, nameof(defaultDocumentName)); diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs index f6a17b68d7..88fc0134eb 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs @@ -34,6 +34,7 @@ namespace Volo.Docs.EntityFrameworkCore b.Property(x => x.DefaultDocumentName).IsRequired().HasMaxLength(ProjectConsts.MaxDefaultDocumentNameLength); b.Property(x => x.NavigationDocumentName).IsRequired().HasMaxLength(ProjectConsts.MaxNavigationDocumentNameLength); b.Property(x => x.ParametersDocumentName).IsRequired().HasMaxLength(ProjectConsts.MaxParametersDocumentNameLength); + b.Property(x => x.PartialTemplatesDocumentName).IsRequired().HasMaxLength(ProjectConsts.MaxPartialTemplatesDocumentNameLength); b.Property(x => x.LatestVersionBranchName).HasMaxLength(ProjectConsts.MaxLatestVersionBranchNameLength); }); } diff --git a/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Documents/DocsDocumentController.cs b/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Documents/DocsDocumentController.cs index 9ff91c8b17..ea2174186a 100644 --- a/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Documents/DocsDocumentController.cs +++ b/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Documents/DocsDocumentController.cs @@ -39,6 +39,11 @@ namespace Volo.Docs.Documents return DocumentAppService.GetNavigationAsync(input); } + public virtual Task GetPartialTemplatesAsync(GetDocumentPartialTemplatesInput input) + { + return DocumentAppService.GetPartialTemplatesAsync(input); + } + [HttpGet] [Route("resource")] public Task GetResourceAsync(GetDocumentResourceInput input) diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentSectionRenderer.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentSectionRenderer.cs index 2d9511d05b..bb6d00015d 100644 --- a/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentSectionRenderer.cs +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentSectionRenderer.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; @@ -8,8 +6,17 @@ namespace Volo.Docs.HtmlConverting { public interface IDocumentSectionRenderer: ITransientDependency { - Task RenderAsync(string doucment, DocumentRenderParameters parameters); + Task RenderAsync(string doucment, DocumentRenderParameters parameters = null, List partialTemplates = null); Task>> GetAvailableParametersAsync(string document); + + Task> GetPartialTemplatesInDocumentAsync(string documentContent); + } + + public class DocumentPartialTemplateContent + { + public string Name { get; set; } + + public string Content { get; set; } } } diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/PartialTemplateDto.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/PartialTemplateDto.cs new file mode 100644 index 0000000000..3b0f3216dd --- /dev/null +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/PartialTemplateDto.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; + +namespace Volo.Docs.HtmlConverting +{ + public class PartialTemplateDto + { + public string Name { get; set; } + + public Dictionary Parameters { get; set; } + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs index df95bf985d..9041c359e8 100644 --- a/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs @@ -1,11 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using Scriban; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Volo.Docs.Documents; namespace Volo.Docs.HtmlConverting { @@ -14,6 +16,7 @@ namespace Volo.Docs.HtmlConverting private const string jsonOpener = "````json"; private const string jsonCloser = "````"; private const string docs_param = "//[doc-params]"; + private const string docs_templates = "//[doc-template]"; public ILogger Logger { get; set; } @@ -22,8 +25,13 @@ namespace Volo.Docs.HtmlConverting Logger = NullLogger.Instance; } - public async Task RenderAsync(string document, DocumentRenderParameters parameters = null) + public async Task RenderAsync(string document, DocumentRenderParameters parameters = null, List partialTemplates = null) { + if (partialTemplates != null && partialTemplates.Any()) + { + document = SetPartialTemplates(document, partialTemplates); + } + var scribanTemplate = Template.Parse(document); if (parameters == null) @@ -99,7 +107,7 @@ namespace Volo.Docs.HtmlConverting if (jsonBeginningIndex < 0) { - return (-1,-1,""); + return (-1, -1, ""); } var jsonEndingIndex = document.Substring(jsonBeginningIndex).IndexOf(jsonCloser, StringComparison.Ordinal) + jsonBeginningIndex; @@ -116,5 +124,81 @@ namespace Volo.Docs.HtmlConverting return (-1, -1, ""); } + + public async Task> GetPartialTemplatesInDocumentAsync(string documentContent) + { + var templates = new List(); + + while (documentContent.Contains(jsonOpener)) + { + var afterJsonOpener = documentContent.Substring( + documentContent.IndexOf(jsonOpener, StringComparison.Ordinal) + jsonOpener.Length); + + var json = afterJsonOpener.Substring(0, + afterJsonOpener.IndexOf(jsonCloser, StringComparison.Ordinal)); + + documentContent = afterJsonOpener.Substring( + afterJsonOpener.IndexOf(jsonCloser, StringComparison.Ordinal) + jsonCloser.Length); + + if (!json.Contains(docs_templates)) + { + continue; + } + + json = json.Substring(json.IndexOf(docs_templates, StringComparison.Ordinal)); + + var template = JsonConvert.DeserializeObject(json); + + + templates.Add(template); + } + + return templates; + } + + private string SetPartialTemplates(string document, List templates) + { + var newDocument = new StringBuilder(); + + while (document.Contains(jsonOpener)) + { + var beforeJson = document.Substring(0, + document.IndexOf(jsonOpener, StringComparison.Ordinal) + jsonOpener.Length); + + var afterJsonOpener = document.Substring( + document.IndexOf(jsonOpener, StringComparison.Ordinal) + jsonOpener.Length); + + var json = afterJsonOpener.Substring(0, + afterJsonOpener.IndexOf(jsonCloser, StringComparison.Ordinal)); + + + if (!json.Contains(docs_templates)) + { + document = afterJsonOpener.Substring( + afterJsonOpener.IndexOf(jsonCloser, StringComparison.Ordinal) + jsonCloser.Length); + newDocument.Append(beforeJson + json + jsonCloser); + continue; + } + + json = json.Substring(json.IndexOf(docs_templates, StringComparison.Ordinal)); + + var templateName = JsonConvert.DeserializeObject(json)?.Name; + + var template = templates.FirstOrDefault(t => t.Name == templateName); + + var beforeTemplate = document.Substring(0, + document.IndexOf(jsonOpener, StringComparison.Ordinal)); + + var afterTemplate = document.Substring(0, + document.IndexOf(jsonCloser, StringComparison.Ordinal) + jsonCloser.Length); + + newDocument.Append(beforeTemplate + template?.Content + jsonCloser); + + document = afterJsonOpener.Substring( + afterJsonOpener.IndexOf(jsonCloser, StringComparison.Ordinal) + jsonCloser.Length); + } + + return newDocument.ToString(); + } } } 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 c653068baa..2572e3bfeb 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 @@ -394,10 +394,9 @@ namespace Volo.Docs.Pages.Documents.Project await SetDocumentPreferencesAsync(); SetUserPreferences(); - UserPreferences.Add("Document_Language_Code", LanguageCode); - UserPreferences.Add("Document_Version", Version); + var partialTemplates = await GetDocumentPartialTemplatesAsync(); - Document.Content = await _documentSectionRenderer.RenderAsync(Document.Content, UserPreferences); + Document.Content = await _documentSectionRenderer.RenderAsync(Document.Content, UserPreferences, partialTemplates); var converter = _documentToHtmlConverterFactory.Create(Document.Format ?? Project.Format); var content = converter.Convert(Project, Document, GetSpecificVersionOrLatest(), LanguageCode); @@ -418,9 +417,65 @@ namespace Volo.Docs.Pages.Documents.Project Document.Content = content; } + private async Task> GetDocumentPartialTemplatesAsync() + { + var contents = new List(); + + var projectPartialTemplates = await _documentAppService.GetPartialTemplatesAsync( + new GetDocumentPartialTemplatesInput() + { + ProjectId = Project.Id, + LanguageCode = LanguageCode, + Version = Version + }); + + if (!projectPartialTemplates?.Templates?.Any() ?? true) + { + return new List(); + } + + var partialTemplatesInDocument = await _documentSectionRenderer.GetPartialTemplatesInDocumentAsync(Document.Content); + + if (!partialTemplatesInDocument?.Any() ?? true) + { + return new List(); + } + + foreach (var partialTemplates in partialTemplatesInDocument) + { + foreach (var parameter in partialTemplates.Parameters) + { + if (!UserPreferences.ContainsKey(parameter.Key)) + { + UserPreferences.Add(parameter.Key, parameter.Value); + } + } + } + + foreach (var partialTemplate in projectPartialTemplates.Templates) + { + contents.Add(new DocumentPartialTemplateContent + { + Name = partialTemplate.Name, + Content = (await _documentAppService.GetAsync(new GetDocumentInput + { + LanguageCode = LanguageCode, + Name = partialTemplate.Path, + ProjectId = Project.Id, + Version = Version + })).Content + }); + } + + return contents; + } + private void SetUserPreferences() { - UserPreferences = new DocumentRenderParameters(); + UserPreferences = new DocumentRenderParameters + { + {"Document_Language_Code", LanguageCode}, {"Document_Version", Version} + }; var cookie = Request.Cookies["AbpDocsPreferences"]; @@ -473,6 +528,7 @@ namespace Volo.Docs.Pages.Documents.Project UserPreferences.Add(parameter.Name + "_Value", parameter.Values.FirstOrDefault().Value); } } + } public async Task SetDocumentPreferencesAsync() @@ -485,6 +541,7 @@ namespace Volo.Docs.Pages.Documents.Project Version = Version }); + if (projectParameters?.Parameters == null) { return; From fc9f8ac7c7ee8005c077ab6ba321fcced9102765 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 28 Jan 2020 10:03:34 +0300 Subject: [PATCH 2/6] Update ScribanDocumentSectionRenderer.cs --- .../HtmlConverting/ScribanDocumentSectionRenderer.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs index 9041c359e8..fedf8406f3 100644 --- a/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs @@ -145,7 +145,7 @@ namespace Volo.Docs.HtmlConverting continue; } - json = json.Substring(json.IndexOf(docs_templates, StringComparison.Ordinal)); + json = json.Substring(json.IndexOf(docs_templates, StringComparison.Ordinal) + docs_templates.Length); var template = JsonConvert.DeserializeObject(json); @@ -171,7 +171,6 @@ namespace Volo.Docs.HtmlConverting var json = afterJsonOpener.Substring(0, afterJsonOpener.IndexOf(jsonCloser, StringComparison.Ordinal)); - if (!json.Contains(docs_templates)) { document = afterJsonOpener.Substring( @@ -180,7 +179,7 @@ namespace Volo.Docs.HtmlConverting continue; } - json = json.Substring(json.IndexOf(docs_templates, StringComparison.Ordinal)); + json = json.Substring(json.IndexOf(docs_templates, StringComparison.Ordinal) + docs_templates.Length); var templateName = JsonConvert.DeserializeObject(json)?.Name; @@ -189,15 +188,14 @@ namespace Volo.Docs.HtmlConverting var beforeTemplate = document.Substring(0, document.IndexOf(jsonOpener, StringComparison.Ordinal)); - var afterTemplate = document.Substring(0, - document.IndexOf(jsonCloser, StringComparison.Ordinal) + jsonCloser.Length); - newDocument.Append(beforeTemplate + template?.Content + jsonCloser); document = afterJsonOpener.Substring( afterJsonOpener.IndexOf(jsonCloser, StringComparison.Ordinal) + jsonCloser.Length); } + newDocument.Append(document); + return newDocument.ToString(); } } From 1bc2b3377f42ca8f54878aec59905262eb3124dc Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 28 Jan 2020 11:28:10 +0300 Subject: [PATCH 3/6] docs partial templates: refactor and fixes --- .../Docs/Documents/DocumentTemplateDto.cs | 4 +--- .../ScribanDocumentSectionRenderer.cs | 15 +++++++------- .../Pages/Documents/Project/Index.cshtml.cs | 20 +++++++++---------- 3 files changed, 18 insertions(+), 21 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentTemplateDto.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentTemplateDto.cs index 37d94b9032..75883375cb 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentTemplateDto.cs +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentTemplateDto.cs @@ -8,8 +8,6 @@ namespace Volo.Docs.Documents public string Path { get; set; } - public List SelfParameters { get; set; } - - public List ParentParameters { get; set; } + public List Parameters { get; set; } } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs index fedf8406f3..344a61e538 100644 --- a/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs @@ -134,22 +134,21 @@ namespace Volo.Docs.HtmlConverting var afterJsonOpener = documentContent.Substring( documentContent.IndexOf(jsonOpener, StringComparison.Ordinal) + jsonOpener.Length); - var json = afterJsonOpener.Substring(0, + var betweenJsonOpenerAndCloser = afterJsonOpener.Substring(0, afterJsonOpener.IndexOf(jsonCloser, StringComparison.Ordinal)); documentContent = afterJsonOpener.Substring( afterJsonOpener.IndexOf(jsonCloser, StringComparison.Ordinal) + jsonCloser.Length); - if (!json.Contains(docs_templates)) + if (!betweenJsonOpenerAndCloser.Contains(docs_templates)) { continue; } - json = json.Substring(json.IndexOf(docs_templates, StringComparison.Ordinal) + docs_templates.Length); + var json = betweenJsonOpenerAndCloser.Substring(betweenJsonOpenerAndCloser.IndexOf(docs_templates, StringComparison.Ordinal) + docs_templates.Length); var template = JsonConvert.DeserializeObject(json); - templates.Add(template); } @@ -168,18 +167,18 @@ namespace Volo.Docs.HtmlConverting var afterJsonOpener = document.Substring( document.IndexOf(jsonOpener, StringComparison.Ordinal) + jsonOpener.Length); - var json = afterJsonOpener.Substring(0, + var betweenJsonOpenerAndCloser = afterJsonOpener.Substring(0, afterJsonOpener.IndexOf(jsonCloser, StringComparison.Ordinal)); - if (!json.Contains(docs_templates)) + if (!betweenJsonOpenerAndCloser.Contains(docs_templates)) { document = afterJsonOpener.Substring( afterJsonOpener.IndexOf(jsonCloser, StringComparison.Ordinal) + jsonCloser.Length); - newDocument.Append(beforeJson + json + jsonCloser); + newDocument.Append(beforeJson + betweenJsonOpenerAndCloser + jsonCloser); continue; } - json = json.Substring(json.IndexOf(docs_templates, StringComparison.Ordinal) + docs_templates.Length); + var json = betweenJsonOpenerAndCloser.Substring(betweenJsonOpenerAndCloser.IndexOf(docs_templates, StringComparison.Ordinal) + docs_templates.Length); var templateName = JsonConvert.DeserializeObject(json)?.Name; 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 2572e3bfeb..2c9162d7c5 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 @@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; +using Volo.Abp; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; using Volo.Abp.Domain.Entities; @@ -60,7 +61,7 @@ namespace Volo.Docs.Pages.Documents.Project public DocumentParametersDto DocumentPreferences { get; set; } - public DocumentRenderParameters UserPreferences { get; set; } + public DocumentRenderParameters UserPreferences { get; set; } = new DocumentRenderParameters(); private readonly IDocumentAppService _documentAppService; private readonly IDocumentToHtmlConverterFactory _documentToHtmlConverterFactory; @@ -419,7 +420,6 @@ namespace Volo.Docs.Pages.Documents.Project private async Task> GetDocumentPartialTemplatesAsync() { - var contents = new List(); var projectPartialTemplates = await _documentAppService.GetPartialTemplatesAsync( new GetDocumentPartialTemplatesInput() @@ -431,14 +431,14 @@ namespace Volo.Docs.Pages.Documents.Project if (!projectPartialTemplates?.Templates?.Any() ?? true) { - return new List(); + return null; } var partialTemplatesInDocument = await _documentSectionRenderer.GetPartialTemplatesInDocumentAsync(Document.Content); - if (!partialTemplatesInDocument?.Any() ?? true) + if (!partialTemplatesInDocument?.Any(t => t.Parameters != null) ?? true) { - return new List(); + return null; } foreach (var partialTemplates in partialTemplatesInDocument) @@ -447,11 +447,13 @@ namespace Volo.Docs.Pages.Documents.Project { if (!UserPreferences.ContainsKey(parameter.Key)) { - UserPreferences.Add(parameter.Key, parameter.Value); + UserPreferences.Add(parameter.Key, parameter.Value); } } } + var contents = new List(); + foreach (var partialTemplate in projectPartialTemplates.Templates) { contents.Add(new DocumentPartialTemplateContent @@ -472,10 +474,8 @@ namespace Volo.Docs.Pages.Documents.Project private void SetUserPreferences() { - UserPreferences = new DocumentRenderParameters - { - {"Document_Language_Code", LanguageCode}, {"Document_Version", Version} - }; + UserPreferences.Add("Document_Language_Code", LanguageCode); + UserPreferences.Add("Document_Version", Version); var cookie = Request.Cookies["AbpDocsPreferences"]; From dc7f3998ae5f13a2245af8845b1e1fe85d30986b Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 28 Jan 2020 11:32:57 +0300 Subject: [PATCH 4/6] rename DocumentTemplateDto to DocumentPartialTemplateDto --- .../{DocumentTemplateDto.cs => DocumentPartialTemplateDto.cs} | 2 +- .../Volo/Docs/Documents/DocumentPartialTemplatesDto.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/{DocumentTemplateDto.cs => DocumentPartialTemplateDto.cs} (82%) diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentTemplateDto.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplateDto.cs similarity index 82% rename from modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentTemplateDto.cs rename to modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplateDto.cs index 75883375cb..3c699e7946 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentTemplateDto.cs +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplateDto.cs @@ -2,7 +2,7 @@ namespace Volo.Docs.Documents { - public class DocumentTemplateDto + public class DocumentPartialTemplateDto { public string Name { get; set; } diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplatesDto.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplatesDto.cs index bafb089bbd..cffb2d2307 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplatesDto.cs +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplatesDto.cs @@ -4,6 +4,6 @@ namespace Volo.Docs.Documents { public class DocumentPartialTemplatesDto { - public List Templates { get; set; } + public List Templates { get; set; } } } From 982d477f63f7dd1c8126fc20d5ff02d0ce6de690 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 28 Jan 2020 11:36:38 +0300 Subject: [PATCH 5/6] PartialTemplateDto renamed to DocumentPartialTemplateWithValuesDto --- ...lateDto.cs => DocumentPartialTemplateWithValuesDto.cs} | 2 +- .../HtmlConverting/IDocumentSectionRenderer.cs | 2 +- .../HtmlConverting/ScribanDocumentSectionRenderer.cs | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) rename modules/docs/src/Volo.Docs.Web/HtmlConverting/{PartialTemplateDto.cs => DocumentPartialTemplateWithValuesDto.cs} (78%) diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/PartialTemplateDto.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentPartialTemplateWithValuesDto.cs similarity index 78% rename from modules/docs/src/Volo.Docs.Web/HtmlConverting/PartialTemplateDto.cs rename to modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentPartialTemplateWithValuesDto.cs index 3b0f3216dd..a6a41f3f08 100644 --- a/modules/docs/src/Volo.Docs.Web/HtmlConverting/PartialTemplateDto.cs +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentPartialTemplateWithValuesDto.cs @@ -2,7 +2,7 @@ namespace Volo.Docs.HtmlConverting { - public class PartialTemplateDto + public class DocumentPartialTemplateWithValuesDto { public string Name { get; set; } diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentSectionRenderer.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentSectionRenderer.cs index bb6d00015d..2892561db2 100644 --- a/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentSectionRenderer.cs +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentSectionRenderer.cs @@ -10,7 +10,7 @@ namespace Volo.Docs.HtmlConverting Task>> GetAvailableParametersAsync(string document); - Task> GetPartialTemplatesInDocumentAsync(string documentContent); + Task> GetPartialTemplatesInDocumentAsync(string documentContent); } public class DocumentPartialTemplateContent diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs index 344a61e538..205598b7f3 100644 --- a/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs @@ -125,9 +125,9 @@ namespace Volo.Docs.HtmlConverting return (-1, -1, ""); } - public async Task> GetPartialTemplatesInDocumentAsync(string documentContent) + public async Task> GetPartialTemplatesInDocumentAsync(string documentContent) { - var templates = new List(); + var templates = new List(); while (documentContent.Contains(jsonOpener)) { @@ -147,7 +147,7 @@ namespace Volo.Docs.HtmlConverting var json = betweenJsonOpenerAndCloser.Substring(betweenJsonOpenerAndCloser.IndexOf(docs_templates, StringComparison.Ordinal) + docs_templates.Length); - var template = JsonConvert.DeserializeObject(json); + var template = JsonConvert.DeserializeObject(json); templates.Add(template); } @@ -180,7 +180,7 @@ namespace Volo.Docs.HtmlConverting var json = betweenJsonOpenerAndCloser.Substring(betweenJsonOpenerAndCloser.IndexOf(docs_templates, StringComparison.Ordinal) + docs_templates.Length); - var templateName = JsonConvert.DeserializeObject(json)?.Name; + var templateName = JsonConvert.DeserializeObject(json)?.Name; var template = templates.FirstOrDefault(t => t.Name == templateName); From fd1596a3cb5c0c90465ed6c06f32680c38cb3566 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 6 Feb 2020 17:19:40 +0300 Subject: [PATCH 6/6] partial docs refactor --- .../Documents/DocumentPartialTemplateDto.cs | 13 ------- .../Documents/DocumentPartialTemplatesDto.cs | 9 ----- .../GetDocumentPartialTemplatesInput.cs | 19 ---------- .../Docs/Documents/IDocumentAppService.cs | 2 - .../Volo/Docs/Documents/DocumentAppService.cs | 27 ------------- .../GitHub/Documents/GithubDocumentStore.cs | 1 - .../Volo/Docs/Projects/Project.cs | 14 +------ .../DocsDbContextModelBuilderExtensions.cs | 1 - .../Docs/Documents/DocsDocumentController.cs | 5 --- .../DocumentPartialTemplateContent.cs | 9 +++++ .../DocumentPartialTemplateWithValuesDto.cs | 2 +- .../IDocumentSectionRenderer.cs | 7 ---- .../ScribanDocumentSectionRenderer.cs | 4 +- .../Pages/Documents/Project/Index.cshtml.cs | 38 ++++++++----------- 14 files changed, 28 insertions(+), 123 deletions(-) delete mode 100644 modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplateDto.cs delete mode 100644 modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplatesDto.cs delete mode 100644 modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/GetDocumentPartialTemplatesInput.cs create mode 100644 modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentPartialTemplateContent.cs diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplateDto.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplateDto.cs deleted file mode 100644 index 3c699e7946..0000000000 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplateDto.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Collections.Generic; - -namespace Volo.Docs.Documents -{ - public class DocumentPartialTemplateDto - { - public string Name { get; set; } - - public string Path { get; set; } - - public List Parameters { get; set; } - } -} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplatesDto.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplatesDto.cs deleted file mode 100644 index cffb2d2307..0000000000 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentPartialTemplatesDto.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections.Generic; - -namespace Volo.Docs.Documents -{ - public class DocumentPartialTemplatesDto - { - public List Templates { get; set; } - } -} diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/GetDocumentPartialTemplatesInput.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/GetDocumentPartialTemplatesInput.cs deleted file mode 100644 index 52376c08ee..0000000000 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/GetDocumentPartialTemplatesInput.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.ComponentModel.DataAnnotations; -using Volo.Docs.Language; -using Volo.Docs.Projects; - -namespace Volo.Docs.Documents -{ - public class GetDocumentPartialTemplatesInput - { - public Guid ProjectId { get; set; } - - [StringLength(ProjectConsts.MaxVersionNameLength)] - public string Version { get; set; } - - [Required] - [StringLength(LanguageConsts.MaxLanguageCodeLength)] - public string LanguageCode { get; set; } - } -} diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/IDocumentAppService.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/IDocumentAppService.cs index b73eea16be..cfc4840824 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/IDocumentAppService.cs +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/IDocumentAppService.cs @@ -13,8 +13,6 @@ namespace Volo.Docs.Documents Task GetParametersAsync(GetParametersDocumentInput input); - Task GetPartialTemplatesAsync(GetDocumentPartialTemplatesInput input); - Task GetResourceAsync(GetDocumentResourceInput input); } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs index e120c5e37a..839c63860b 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs +++ b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs @@ -128,33 +128,6 @@ namespace Volo.Docs.Documents } } - public async Task GetPartialTemplatesAsync(GetDocumentPartialTemplatesInput input) - { - var project = await _projectRepository.GetAsync(input.ProjectId); - - try - { - if (string.IsNullOrWhiteSpace(project.PartialTemplatesDocumentName)) - { - return await Task.FromResult(null); - } - - var document = await GetDocumentWithDetailsDtoAsync( - project, - project.PartialTemplatesDocumentName, - input.LanguageCode, - input.Version - ); - - return JsonConvert.DeserializeObject(document.Content); - } - catch (DocumentNotFoundException) - { - Logger.LogWarning($"Partial template list file ({project.PartialTemplatesDocumentName}) not found."); - return new DocumentPartialTemplatesDto(); - } - } - protected virtual async Task GetDocumentWithDetailsDtoAsync( Project project, string documentName, diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentStore.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentStore.cs index ee9caa9621..c84772ff26 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentStore.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentStore.cs @@ -37,7 +37,6 @@ namespace Volo.Docs.GitHub.Documents var commitHistoryUrl = project.GetGitHubUrlForCommitHistory() + documentName; var isNavigationDocument = documentName == project.NavigationDocumentName; var isParameterDocument = documentName == project.ParametersDocumentName; - var isPartialTemplatesDocumentName = documentName == project.PartialTemplatesDocumentName; var editLink = rootUrl.ReplaceFirst("/tree/", "/blob/") + languageCode + "/" + documentName; var localDirectory = ""; var fileName = documentName; diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Project.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Project.cs index 45b5801516..f1cfd0d777 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Project.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Project.cs @@ -39,11 +39,6 @@ namespace Volo.Docs.Projects /// public virtual string ParametersDocumentName { get; protected set; } - /// - /// The document to be used for the partial document templates file (index). - /// - public virtual string PartialTemplatesDocumentName { get; protected set; } - public virtual string MinimumVersion { get; set; } /// @@ -68,8 +63,7 @@ namespace Volo.Docs.Projects [NotNull] string format, [NotNull] string defaultDocumentName = "Index", [NotNull] string navigationDocumentName = "docs-nav.json", - [NotNull] string parametersDocumentName = "docs-params.json", - [NotNull] string partialTemplatesDocumentName = "docs-templates.json") + [NotNull] string parametersDocumentName = "docs-params.json") { Id = id; @@ -80,7 +74,6 @@ namespace Volo.Docs.Projects DefaultDocumentName = Check.NotNullOrWhiteSpace(defaultDocumentName, nameof(defaultDocumentName)); NavigationDocumentName = Check.NotNullOrWhiteSpace(navigationDocumentName, nameof(navigationDocumentName)); ParametersDocumentName = Check.NotNullOrWhiteSpace(parametersDocumentName, nameof(parametersDocumentName)); - PartialTemplatesDocumentName = Check.NotNullOrWhiteSpace(partialTemplatesDocumentName, nameof(partialTemplatesDocumentName)); ExtraProperties = new Dictionary(); } @@ -105,11 +98,6 @@ namespace Volo.Docs.Projects ParametersDocumentName = Check.NotNullOrWhiteSpace(parametersDocumentName, nameof(parametersDocumentName)); } - public void SetPartialTemplatesDocumentName(string partialTemplatesDocumentName) - { - PartialTemplatesDocumentName = Check.NotNullOrWhiteSpace(partialTemplatesDocumentName, nameof(partialTemplatesDocumentName)); - } - public void SetDefaultDocumentName(string defaultDocumentName) { DefaultDocumentName = Check.NotNullOrWhiteSpace(defaultDocumentName, nameof(defaultDocumentName)); diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs index 88fc0134eb..f6a17b68d7 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs @@ -34,7 +34,6 @@ namespace Volo.Docs.EntityFrameworkCore b.Property(x => x.DefaultDocumentName).IsRequired().HasMaxLength(ProjectConsts.MaxDefaultDocumentNameLength); b.Property(x => x.NavigationDocumentName).IsRequired().HasMaxLength(ProjectConsts.MaxNavigationDocumentNameLength); b.Property(x => x.ParametersDocumentName).IsRequired().HasMaxLength(ProjectConsts.MaxParametersDocumentNameLength); - b.Property(x => x.PartialTemplatesDocumentName).IsRequired().HasMaxLength(ProjectConsts.MaxPartialTemplatesDocumentNameLength); b.Property(x => x.LatestVersionBranchName).HasMaxLength(ProjectConsts.MaxLatestVersionBranchNameLength); }); } diff --git a/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Documents/DocsDocumentController.cs b/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Documents/DocsDocumentController.cs index ea2174186a..9ff91c8b17 100644 --- a/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Documents/DocsDocumentController.cs +++ b/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Documents/DocsDocumentController.cs @@ -39,11 +39,6 @@ namespace Volo.Docs.Documents return DocumentAppService.GetNavigationAsync(input); } - public virtual Task GetPartialTemplatesAsync(GetDocumentPartialTemplatesInput input) - { - return DocumentAppService.GetPartialTemplatesAsync(input); - } - [HttpGet] [Route("resource")] public Task GetResourceAsync(GetDocumentResourceInput input) diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentPartialTemplateContent.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentPartialTemplateContent.cs new file mode 100644 index 0000000000..5db9fc8164 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentPartialTemplateContent.cs @@ -0,0 +1,9 @@ +namespace Volo.Docs.HtmlConverting +{ + public class DocumentPartialTemplateContent + { + public string Path { get; set; } + + public string Content { get; set; } + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentPartialTemplateWithValuesDto.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentPartialTemplateWithValuesDto.cs index a6a41f3f08..d3ea14921c 100644 --- a/modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentPartialTemplateWithValuesDto.cs +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/DocumentPartialTemplateWithValuesDto.cs @@ -4,7 +4,7 @@ namespace Volo.Docs.HtmlConverting { public class DocumentPartialTemplateWithValuesDto { - public string Name { get; set; } + public string Path { get; set; } public Dictionary Parameters { get; set; } } diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentSectionRenderer.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentSectionRenderer.cs index 2892561db2..0738b4fd5c 100644 --- a/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentSectionRenderer.cs +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/IDocumentSectionRenderer.cs @@ -12,11 +12,4 @@ namespace Volo.Docs.HtmlConverting Task> GetPartialTemplatesInDocumentAsync(string documentContent); } - - public class DocumentPartialTemplateContent - { - public string Name { get; set; } - - public string Content { get; set; } - } } diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs index 205598b7f3..4a4f3b2142 100644 --- a/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanDocumentSectionRenderer.cs @@ -180,9 +180,9 @@ namespace Volo.Docs.HtmlConverting var json = betweenJsonOpenerAndCloser.Substring(betweenJsonOpenerAndCloser.IndexOf(docs_templates, StringComparison.Ordinal) + docs_templates.Length); - var templateName = JsonConvert.DeserializeObject(json)?.Name; + var templatePath = JsonConvert.DeserializeObject(json)?.Path; - var template = templates.FirstOrDefault(t => t.Name == templateName); + var template = templates.FirstOrDefault(t => t.Path == templatePath); var beforeTemplate = document.Substring(0, document.IndexOf(jsonOpener, StringComparison.Ordinal)); 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 2c9162d7c5..82b58ad117 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 @@ -420,20 +420,6 @@ namespace Volo.Docs.Pages.Documents.Project private async Task> GetDocumentPartialTemplatesAsync() { - - var projectPartialTemplates = await _documentAppService.GetPartialTemplatesAsync( - new GetDocumentPartialTemplatesInput() - { - ProjectId = Project.Id, - LanguageCode = LanguageCode, - Version = Version - }); - - if (!projectPartialTemplates?.Templates?.Any() ?? true) - { - return null; - } - var partialTemplatesInDocument = await _documentSectionRenderer.GetPartialTemplatesInDocumentAsync(Document.Content); if (!partialTemplatesInDocument?.Any(t => t.Parameters != null) ?? true) @@ -449,23 +435,29 @@ namespace Volo.Docs.Pages.Documents.Project { UserPreferences.Add(parameter.Key, parameter.Value); } + else + { + UserPreferences[parameter.Key] = parameter.Value; + } } } var contents = new List(); - foreach (var partialTemplate in projectPartialTemplates.Templates) + foreach (var partialTemplate in partialTemplatesInDocument) { + var content = (await _documentAppService.GetAsync(new GetDocumentInput + { + LanguageCode = LanguageCode, + Name = partialTemplate.Path, + ProjectId = Project.Id, + Version = Version + })).Content; + contents.Add(new DocumentPartialTemplateContent { - Name = partialTemplate.Name, - Content = (await _documentAppService.GetAsync(new GetDocumentInput - { - LanguageCode = LanguageCode, - Name = partialTemplate.Path, - ProjectId = Project.Id, - Version = Version - })).Content + Path = partialTemplate.Path, + Content = content }); }