Browse Source

multi language on docs refactor

pull/1180/head
Yunus Emre Kalkan 7 years ago
parent
commit
77fef984b8
  1. 2
      modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/ContentWithDetailsDto.cs
  2. 2
      modules/docs/src/Volo.Docs.Application/Volo/Docs/DocsApplicationAutoMapperProfile.cs
  3. 9
      modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs
  4. 6
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/LanguageConfig.cs
  5. 2
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/LanguageInfo.cs
  6. 9
      modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs
  7. 25
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml
  8. 5
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs
  9. 13
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js

2
modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/ContentWithDetailsDto.cs

@ -25,6 +25,8 @@ namespace Volo.Docs.Documents
public string FileName { get; set; } public string FileName { get; set; }
public string CurrentLanguageCode { get; set; }
public ProjectDto Project { get; set; } public ProjectDto Project { get; set; }
public List<DocumentContributorDto> Contributors { get; set; } public List<DocumentContributorDto> Contributors { get; set; }

2
modules/docs/src/Volo.Docs.Application/Volo/Docs/DocsApplicationAutoMapperProfile.cs

@ -12,7 +12,7 @@ namespace Volo.Docs
CreateMap<Project, ProjectDto>().Ignore(x=>x.Languages); CreateMap<Project, ProjectDto>().Ignore(x=>x.Languages);
CreateMap<VersionInfo, VersionInfoDto>(); CreateMap<VersionInfo, VersionInfoDto>();
CreateMap<Document, DocumentWithDetailsDto>() CreateMap<Document, DocumentWithDetailsDto>()
.Ignore(x => x.Project).Ignore(x => x.Contributors); .Ignore(x => x.Project).Ignore(x => x.Contributors).Ignore(x => x.CurrentLanguageCode);
CreateMap<DocumentContributor, DocumentContributorDto>(); CreateMap<DocumentContributor, DocumentContributorDto>();
CreateMap<DocumentResource, DocumentResourceDto>(); CreateMap<DocumentResource, DocumentResourceDto>();
} }

9
modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs

@ -115,7 +115,7 @@ namespace Volo.Docs.Documents
var language = GetLanguageByCode(languages, languageCode); var language = GetLanguageByCode(languages, languageCode);
var document = await store.GetDocumentAsync(project, documentName, language.Code, version); var document = await store.GetDocumentAsync(project, documentName, language.Code, version);
Logger.LogInformation($"Document retrieved: {documentName}"); Logger.LogInformation($"Document retrieved: {documentName}");
return CreateDocumentWithDetailsDto(project, document, languages); return CreateDocumentWithDetailsDto(project, document, languages, language.Code);
} }
if (Debugger.IsAttached) if (Debugger.IsAttached)
@ -135,7 +135,7 @@ namespace Volo.Docs.Documents
); );
} }
protected virtual LanguageConfigElement GetLanguageByCode(LanguageConfig languageCodes, string languageCode) protected virtual LanguageInfo GetLanguageByCode(LanguageConfig languageCodes, string languageCode)
{ {
var language = languageCodes.Languages.FirstOrDefault(l => l.Code == languageCode); var language = languageCodes.Languages.FirstOrDefault(l => l.Code == languageCode);
@ -159,16 +159,19 @@ namespace Volo.Docs.Documents
); );
} }
protected virtual DocumentWithDetailsDto CreateDocumentWithDetailsDto(Project project, Document document, LanguageConfig languages) protected virtual DocumentWithDetailsDto CreateDocumentWithDetailsDto(Project project, Document document, LanguageConfig languages, string languageCode)
{ {
var documentDto = ObjectMapper.Map<Document, DocumentWithDetailsDto>(document); var documentDto = ObjectMapper.Map<Document, DocumentWithDetailsDto>(document);
documentDto.Project = ObjectMapper.Map<Project, ProjectDto>(project); documentDto.Project = ObjectMapper.Map<Project, ProjectDto>(project);
documentDto.Contributors = ObjectMapper.Map<List<DocumentContributor>, List<DocumentContributorDto>>(document.Contributors); documentDto.Contributors = ObjectMapper.Map<List<DocumentContributor>, List<DocumentContributorDto>>(document.Contributors);
documentDto.Project.Languages = new Dictionary<string, string>(); documentDto.Project.Languages = new Dictionary<string, string>();
foreach (var language in languages.Languages) foreach (var language in languages.Languages)
{ {
documentDto.Project.Languages.Add(language.Code,language.DisplayName); documentDto.Project.Languages.Add(language.Code,language.DisplayName);
} }
documentDto.CurrentLanguageCode = languageCode;
return documentDto; return documentDto;
} }
} }

6
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/LanguageConfig.cs

@ -1,11 +1,9 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using System.Text;
namespace Volo.Docs.Documents namespace Volo.Docs.Documents
{ {
public class LanguageConfig public class LanguageConfig
{ {
public List<LanguageConfigElement> Languages { get; set; } public List<LanguageInfo> Languages { get; set; }
} }
} }

2
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/LanguageConfigElement.cs → modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/LanguageInfo.cs

@ -1,6 +1,6 @@
namespace Volo.Docs.Documents namespace Volo.Docs.Documents
{ {
public class LanguageConfigElement public class LanguageInfo
{ {
public string DisplayName { get; set; } public string DisplayName { get; set; }

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

@ -35,6 +35,9 @@ namespace Volo.Docs.Areas.Documents.TagHelpers
[HtmlAttributeName("project-format")] [HtmlAttributeName("project-format")]
public string ProjectFormat { get; set; } public string ProjectFormat { get; set; }
[HtmlAttributeName("language")]
public string LanguageCode { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output) public override void Process(TagHelperContext context, TagHelperOutput output)
{ {
var content = new StringBuilder(); var content = new StringBuilder();
@ -107,7 +110,7 @@ namespace Volo.Docs.Areas.Documents.TagHelpers
} }
else else
{ {
listInnerItem = string.Format(ListItemAnchor, NormalizePath(node.Path, node.HasChildItems), textCss, node.Text.IsNullOrEmpty() ? "?" : node.Text); listInnerItem = string.Format(ListItemAnchor, NormalizePath(node.Path), textCss, node.Text.IsNullOrEmpty() ? "?" : node.Text);
} }
return string.Format(LiItemTemplateWithLink, return string.Format(LiItemTemplateWithLink,
@ -117,7 +120,7 @@ namespace Volo.Docs.Areas.Documents.TagHelpers
content); content);
} }
private string NormalizePath(string path, bool hasChildItems) private string NormalizePath(string path)
{ {
if (UrlHelper.IsExternalLink(path)) if (UrlHelper.IsExternalLink(path))
{ {
@ -131,7 +134,7 @@ namespace Volo.Docs.Areas.Documents.TagHelpers
return "javascript:;"; return "javascript:;";
} }
return "/documents/" + ProjectName + "/" + Version + "/" + pathWithoutFileExtension; return "/documents/" + LanguageCode + "/" + ProjectName + "/" + Version + "/" + pathWithoutFileExtension;
} }
private string RemoveFileExtensionFromPath(string path) private string RemoveFileExtensionFromPath(string path)

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

@ -107,7 +107,7 @@
</div> </div>
} }
<div class="docs-version"> <div class="docs-version">
<div class="version-select"> <div class="version-select">
<div class="input-group"> <div class="input-group">
<div class="input-group-prepend"> <div class="input-group-prepend">
@ -116,7 +116,7 @@
<input class="form-control" type="search" placeholder="Filter topics" aria-label="Filter"> <input class="form-control" type="search" placeholder="Filter topics" aria-label="Filter">
</div> </div>
</div> </div>
</div> </div>
@if (Model.Navigation == null || Model.Navigation.Content.IsNullOrEmpty()) @if (Model.Navigation == null || Model.Navigation.Content.IsNullOrEmpty())
@ -132,6 +132,7 @@
project-name="@Model.ProjectName" project-name="@Model.ProjectName"
project-format="@Model.Project.Format" project-format="@Model.Project.Format"
selected-document-name="@Model.DocumentNameWithExtension" selected-document-name="@Model.DocumentNameWithExtension"
language="@Model.LanguageCode"
id="sidebar-scroll" id="sidebar-scroll"
class="nav nav-list"></ul> class="nav nav-list"></ul>
} }
@ -158,15 +159,17 @@
</a> </a>
</div> </div>
@if (Model.LanguageSelectListItems.Count > 1) <div class="float-right">
{ @if (Model.LanguageSelectListItems.Count > 1)
<select asp-items="Model.LanguageSelectListItems" class="form-control" onchange="window.location.replace(this.value)"></select> {
} <select asp-items="Model.LanguageSelectListItems" class="mr-2" onchange="window.location.replace(this.value)"></select>
}
@if (!string.IsNullOrEmpty(Model.Document.EditLink)) @if (!string.IsNullOrEmpty(Model.Document.EditLink))
{ {
<a href="@Model.Document.EditLink" target="_blank"> <i class="fa fa-edit"></i> @L["Edit"]</a> <a href="@Model.Document.EditLink" target="_blank"> <i class="fa fa-edit"></i> @L["Edit"]</a>
} }
</div>
</div> </div>
<div class="docs-content-field"> <div class="docs-content-field">
@ -227,4 +230,4 @@
</div> </div>
</div> </div>
<input hidden id="LanguageCode" value="@Model.LanguageCode"/> <input hidden id="LanguageCode" value="@Model.LanguageCode" />

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

@ -153,6 +153,8 @@ namespace Volo.Docs.Pages.Documents.Project
return; return;
} }
LanguageCode = Document.CurrentLanguageCode;
Navigation.ConvertItems(); Navigation.ConvertItems();
} }
@ -219,6 +221,7 @@ namespace Volo.Docs.Pages.Documents.Project
} }
); );
} }
} }
catch (DocumentNotFoundException) catch (DocumentNotFoundException)
{ {
@ -232,6 +235,8 @@ namespace Volo.Docs.Pages.Documents.Project
); );
} }
LanguageCode = Document.CurrentLanguageCode;
ConvertDocumentContentToHtml(); ConvertDocumentContentToHtml();
} }

13
modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js

@ -1,17 +1,6 @@
(function ($) { (function ($) {
$(function () { $(function () {
var addLanguageCodePrefixToLinks = function () {
var anchors = $('#sidebar-scroll a');
for (var i = 0; i < anchors.length; i++) {
var anchor = $(anchors[i]);
var newhref = anchor.attr('href').replace("/documents", "/documents/" + $('#LanguageCode').val());
anchor.attr('href', newhref);
}
};
var initNavigationFilter = function (navigationContainerId) { var initNavigationFilter = function (navigationContainerId) {
var $navigation = $("#" + navigationContainerId); var $navigation = $("#" + navigationContainerId);
@ -119,8 +108,6 @@
initSocialShareLinks(); initSocialShareLinks();
addLanguageCodePrefixToLinks();
}); });
})(jQuery); })(jQuery);

Loading…
Cancel
Save