From e0cb2dbce823b499e7cc539cc62b87be79e217a1 Mon Sep 17 00:00:00 2001 From: Berkan Sasmaz Date: Wed, 7 Jul 2021 11:09:59 +0300 Subject: [PATCH] Use StringBuilder in string operations --- .../Volo/Docs/Documents/DocumentAppService.cs | 26 +++++---- .../Documents/TagHelpers/TreeTagHelper.cs | 28 ++++++---- .../HtmlConverting/HtmlNormalizer.cs | 8 ++- .../Pages/Documents/Project/Index.cshtml.cs | 55 +++++++++++-------- 4 files changed, 73 insertions(+), 44 deletions(-) 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 ebbdd6a9a5..1e459c1f0d 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 @@ -65,8 +65,9 @@ namespace Volo.Docs.Documents { var project = await _projectRepository.GetAsync(input.ProjectId); - input.Version = GetProjectVersionPrefixIfExist(project) + input.Version; - + var inputVersionStringBuilder = new StringBuilder(); + input.Version = inputVersionStringBuilder.Append(GetProjectVersionPrefixIfExist(project)).Append(input.Version).ToString(); + return await GetDocumentWithDetailsDtoAsync( project, input.Name, @@ -79,11 +80,14 @@ namespace Volo.Docs.Documents { var project = await _projectRepository.GetAsync(input.ProjectId); - input.Version = GetProjectVersionPrefixIfExist(project) + input.Version; - + var sb = new StringBuilder(); + input.Version = sb.Append(GetProjectVersionPrefixIfExist(project)).Append(input.Version).ToString(); + + sb.Clear(); + return await GetDocumentWithDetailsDtoAsync( project, - project.DefaultDocumentName + "." + project.Format, + sb.Append(project.DefaultDocumentName).Append(".").Append(project.Format).ToString(), input.LanguageCode, input.Version ); @@ -226,7 +230,7 @@ namespace Volo.Docs.Documents private async Task AddDocumentToUrls(string prefix, Project project, DocumentWithoutDetails document, List documentUrls) { - var navigationNodes = await GetNavigationNodesAsync(prefix, project, document); + var navigationNodes = await GetNavigationNodesAsync(project, document); AddDocumentUrls(prefix, navigationNodes, documentUrls, project, document); } @@ -244,7 +248,7 @@ namespace Volo.Docs.Documents }); } - private async Task> GetNavigationNodesAsync(string prefix, Project project, + private async Task> GetNavigationNodesAsync(Project project, DocumentWithoutDetails document) { var version = GetProjectVersionPrefixIfExist(project) + document.Version; @@ -286,10 +290,12 @@ namespace Volo.Docs.Documents private string NormalizePath(string prefix, string path, string shortName, DocumentWithoutDetails document) { var pathWithoutFileExtension = RemoveFileExtensionFromPath(path, document.Format); - var normalizedPath = prefix + document.LanguageCode + "/" + shortName + "/" + document.Version + "/" + - pathWithoutFileExtension; + + var normalizedPathStringBuilder = new StringBuilder(); + normalizedPathStringBuilder.Append(prefix).Append(document.LanguageCode).Append("/").Append(shortName) + .Append("/").Append(document.Version).Append("/").Append(pathWithoutFileExtension); - return normalizedPath; + return normalizedPathStringBuilder.ToString(); } private string RemoveFileExtensionFromPath(string path, string format) diff --git a/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs b/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs index 726121ab5d..f518d30a29 100644 --- a/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs +++ b/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs @@ -108,6 +108,8 @@ namespace Volo.Docs.Areas.Documents.TagHelpers private string GetLeafNode(NavigationNode node, string content) { + var sb = new StringBuilder(); + var textCss = node.Path.IsNullOrEmpty() ? "tree-toggle" : ""; var isNodeSelected = node.IsSelected(SelectedDocumentName); var listItemCss = node.HasChildItems ? "nav-header" : "last-link"; @@ -123,31 +125,36 @@ namespace Volo.Docs.Areas.Documents.TagHelpers } else { - var badge = ""; + var badgeStringBuilder = new StringBuilder(); if (!node.Path.IsNullOrWhiteSpace() && node.CreationTime.HasValue && node.LastUpdatedTime.HasValue) { if(node.CreationTime + TimeSpan.FromDays(14) > DateTime.Now) { - var newBadge = "" + _localizer["New"] + ""; - badge += newBadge; + var newBadge = sb.Append("").Append(_localizer["New"]).Append("").ToString(); + + badgeStringBuilder.Append(newBadge); } else if (node.LastSignificantUpdateTime != null && node.LastSignificantUpdateTime + TimeSpan.FromDays(14) > DateTime.Now) { - var updBadge = "" + _localizer["Upd"] + ""; - badge += updBadge; + var updBadge = sb.Append(""); + badgeStringBuilder.Append(updBadge); } } + sb.Clear(); + listInnerItem = string.Format(ListItemAnchor, NormalizePath(node.Path), textCss, node.Text.IsNullOrEmpty() ? "?" - : node.Text + badge); + : sb.Append(node.Text).Append(badgeStringBuilder).ToString()); } + sb.Clear(); + return string.Format(LiItemTemplateWithLink, listItemCss, - node.HasChildItems ? "chevron-right" : "long-arrow-right " + (node.Path.IsNullOrEmpty() ? "no-link" : "has-link"), + node.HasChildItems ? "chevron-right" : sb.Append("long-arrow-right ").Append(node.Path.IsNullOrEmpty() ? "no-link" : "has-link").ToString(), listInnerItem, content); } @@ -167,8 +174,9 @@ namespace Volo.Docs.Areas.Documents.TagHelpers } var prefix = _uiOptions.RoutePrefix; - - return prefix + LanguageCode + "/" + ProjectName + "/" + Version + "/" + pathWithoutFileExtension; + + var sb = new StringBuilder(); + return sb.Append(prefix).Append(LanguageCode).Append("/").Append(ProjectName).Append("/").Append(Version).Append("/").Append(pathWithoutFileExtension).ToString(); } private string RemoveFileExtensionFromPath(string path) @@ -183,4 +191,4 @@ namespace Volo.Docs.Areas.Documents.TagHelpers : path; } } -} +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/HtmlNormalizer.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/HtmlNormalizer.cs index 50111ab7e6..adfe196723 100644 --- a/modules/docs/src/Volo.Docs.Web/HtmlConverting/HtmlNormalizer.cs +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/HtmlNormalizer.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Text; using System.Text.RegularExpressions; using Volo.Docs.Utils; @@ -34,7 +35,12 @@ namespace Volo.Docs.HtmlConverting public static string ReplaceCodeBlocksLanguage(string content, string currentLanguage, string newLanguage) { - return Regex.Replace(content, "", "", RegexOptions.IgnoreCase); + var sb = new StringBuilder(); + var pattern = sb.Append("").ToString(); + sb.Clear(); + var replacement = sb.Append("").ToString(); + + return Regex.Replace(content, pattern, replacement, RegexOptions.IgnoreCase); } /// 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 048d1031f7..d50d1b307b 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 @@ -209,11 +209,15 @@ namespace Volo.Docs.Pages.Documents.Project private IActionResult ReloadPageWithCulture() { - var returnUrl = DocumentsUrlPrefix + LanguageCode + "/" + ProjectName + "/" - + (LatestVersionInfo.IsSelected ? DocsAppConsts.Latest : Version) + "/" + - DocumentName; + var sb = new StringBuilder(); - return Redirect("/Abp/Languages/Switch?culture=" + LanguageCode + "&uiCulture=" + LanguageCode + "&returnUrl=" + returnUrl); + var returnUrl = sb.Append(DocumentsUrlPrefix).Append(LanguageCode).Append("/").Append(ProjectName) + .Append("/").Append(LatestVersionInfo.IsSelected ? DocsAppConsts.Latest : Version).Append("/").Append(DocumentName); + + sb.Clear(); + + return Redirect(sb.Append("/Abp/Languages/Switch?culture=").Append(LanguageCode).Append("&uiCulture=") + .Append(LanguageCode).Append("&returnUrl=").Append(returnUrl).ToString()); } private IActionResult RedirectToDefaultLanguage() @@ -242,10 +246,12 @@ namespace Volo.Docs.Pages.Documents.Project { var projects = await _projectAppService.GetListAsync(); + var sb = new StringBuilder(); + ProjectSelectItems = projects.Items.Select(p => new SelectListItem { Text = p.Name, - Value = p.Id != Project.Id ? DocumentsUrlPrefix + LanguageCode + "/" + p.ShortName + "/" + DocsAppConsts.Latest : null, + Value = p.Id != Project.Id ? sb.Append(DocumentsUrlPrefix).Append(LanguageCode).Append("/").Append(p.ShortName).Append("/").Append(DocsAppConsts.Latest).ToString() : null, Selected = p.Id == Project.Id }).ToList(); } @@ -383,14 +389,15 @@ namespace Volo.Docs.Pages.Documents.Project version = DocsAppConsts.Latest; } - var link = DocumentsUrlPrefix + LanguageCode + "/" + ProjectName + "/" + version; + var linkStringBuilder = new StringBuilder(); + linkStringBuilder.Append(DocumentsUrlPrefix).Append(LanguageCode).Append("/").Append(ProjectName).Append("/").Append(version); if (documentName != null) { - link += "/" + DocumentName; + linkStringBuilder.Append("/").Append(DocumentName); } - return link; + return linkStringBuilder.ToString(); } public string GetSpecificVersionOrLatest() @@ -407,7 +414,8 @@ namespace Volo.Docs.Pages.Documents.Project private async Task SetDocumentAsync() { - DocumentNameWithExtension = DocumentName + "." + Project.Format; + var sb = new StringBuilder(); + DocumentNameWithExtension = sb.Append(DocumentName).Append(".").Append(Project.Format).ToString(); try { @@ -435,12 +443,14 @@ namespace Volo.Docs.Pages.Documents.Project { LanguageSelectListItems = new List(); + var sb = new StringBuilder(); + foreach (var language in LanguageConfig.Languages) { LanguageSelectListItems.Add( new SelectListItem( language.DisplayName, - DocumentsUrlPrefix + language.Code + "/" + Project.ShortName + "/" + (LatestVersionInfo.IsSelected ? DocsAppConsts.Latest : Version) + "/" + DocumentName, + sb.Append(DocumentsUrlPrefix).Append(language.Code).Append("/").Append(Project.ShortName).Append("/").Append(LatestVersionInfo.IsSelected ? DocsAppConsts.Latest : Version).Append("/").Append(DocumentName).ToString(), language.Code == LanguageCode ) ); @@ -614,18 +624,17 @@ namespace Volo.Docs.Pages.Documents.Project } ); } - else - { - return await _documentAppService.GetAsync( - new GetDocumentInput - { - ProjectId = Project.Id, - Name = DocumentNameWithExtension, - LanguageCode = languageCode, - Version = Version - } - ); - } + + + return await _documentAppService.GetAsync( + new GetDocumentInput + { + ProjectId = Project.Id, + Name = DocumentNameWithExtension, + LanguageCode = languageCode, + Version = Version + } + ); } private async Task SetDocumentPreferencesAsync() @@ -745,4 +754,4 @@ namespace Volo.Docs.Pages.Documents.Project return description.Truncate(MaxDescriptionMetaTagLength); } } -} +} \ No newline at end of file