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 afbb5fcf5b..a7897eddfe 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 @@ -305,7 +305,10 @@ 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 661c21eb11..9b7daa596a 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 @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Web; @@ -70,6 +71,8 @@ namespace Volo.Docs.Pages.Documents.Project public DocumentRenderParameters UserPreferences { get; set; } = new DocumentRenderParameters(); + public List AlternativeOptionLinkQueries { get; set; } = new List(); + public bool FullSearchEnabled { get; set; } private const int MaxDescriptionMetaTagLength = 200; @@ -441,6 +444,7 @@ namespace Volo.Docs.Pages.Documents.Project if (_uiOptions.SectionRendering) { await SetDocumentPreferencesAsync(); + SetAlternativeOptionLinksAsync(); SetUserPreferences(); var partialTemplates = await GetDocumentPartialTemplatesAsync(); @@ -617,21 +621,21 @@ namespace Volo.Docs.Pages.Documents.Project return; } - var availableparameters = await _documentSectionRenderer.GetAvailableParametersAsync(Document.Content); + var availableParameters = await _documentSectionRenderer.GetAvailableParametersAsync(Document.Content); DocumentPreferences = new DocumentParametersDto { Parameters = new List() }; - if (availableparameters == null || !availableparameters.Any()) + if (availableParameters == null || !availableParameters.Any()) { return; } foreach (var parameter in projectParameters.Parameters) { - var availableParameter = availableparameters.GetOrDefault(parameter.Name); + var availableParameter = availableParameters.GetOrDefault(parameter.Name); if (availableParameter != null) { var newParameter = new DocumentParameterDto @@ -654,6 +658,48 @@ namespace Volo.Docs.Pages.Documents.Project } } + private void SetAlternativeOptionLinksAsync() + { + if (!DocumentPreferences?.Parameters?.Any() ?? true) + { + return; + } + + AlternativeOptionLinkQueries = CollectAlternativeOptionLinksRecursively(); + } + + private List CollectAlternativeOptionLinksRecursively(int index = 0) + { + if (index >= DocumentPreferences.Parameters.Count) + { + return new List(); + } + + var option = DocumentPreferences.Parameters[index]; + var queries = new List(); + + foreach (var key in option.Values.Keys) + { + var linkQuery = new StringBuilder($"{option.Name}={key}"); + + var restOfQueries = CollectAlternativeOptionLinksRecursively(index + 1); + + if (restOfQueries.Any()) + { + foreach (var restOfQuery in restOfQueries) + { + queries.Add($"{linkQuery}&{restOfQuery}"); + } + } + else + { + queries.Add($"{linkQuery}"); + } + } + + return queries; + } + public string GetDescription() { if (Document == null || Document.Content.IsNullOrWhiteSpace()) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js index bbb97b041c..a65251a20e 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js @@ -237,119 +237,6 @@ setQueryString(); }; - var initCrawlerLinks = function () { - var isCrawler = function () { - var crawlers = [ - 'Google', - 'Googlebot', - 'YandexBot', - 'msnbot', - 'Rambler', - 'Yahoo', - 'AbachoBOT', - 'accoona', - 'AcoiRobot', - 'ASPSeek', - 'CrocCrawler', - 'Dumbot', - 'FAST-WebCrawler', - 'GeonaBot', - 'Gigabot', - 'Lycos', - 'MSRBOT', - 'Scooter', - 'AltaVista', - 'IDBot', - 'eStyle', - 'Scrubby', - 'Slurp', - 'DuckDuckBot', - 'Baiduspider', - 'VoilaBot', - 'ExaLead', - 'Search Dog', - 'MSN Bot', - 'BingBot', - ]; - - var agent = navigator.userAgent; - - for (var i = 0; i < crawlers.length; i++) { - if (agent.indexOf(crawlers[i]) >= 0) { - return true; - } - } - - return false; - }; - - if (!isCrawler()) { - return; - } - - var comboboxes = $('.doc-section-combobox'); - - if (comboboxes.length <= 0) { - return; - } - - $('#crawler_link').show(); - - var html = ''; - - var currentUrl = window.location.href.toString(); - - if (currentUrl.indexOf('?') > 0) { - currentUrl = currentUrl.substring(0, currentUrl.indexOf('?')); - } - - var getQueryStringsFromComboboxes = function (x) { - if (x >= comboboxes.length) { - return []; - } - - var key = $(comboboxes[x]).data('key'); - - var queryStrings = getQueryStringsFromComboboxes(x + 1); - var returnList = []; - - $(comboboxes[x]) - .find('option') - .each(function () { - if (queryStrings.length <= 0) { - returnList.push(key + '=' + $(this).val()); - } else { - for (var k = 0; k < queryStrings.length; k++) { - returnList.push( - key + - '=' + - $(this).val() + - '&' + - queryStrings[k] - ); - } - } - }); - - return returnList; - }; - - var queryStrings = getQueryStringsFromComboboxes(0); - - for (var i = 0; i < queryStrings.length; i++) { - html += - '' + - queryStrings[i] + - ' '; - } - - $('#crawler_link').html(html); - }; - initNavigationFilter('sidebar-scroll'); initAnchorTags('.docs-page .docs-body'); @@ -357,7 +244,5 @@ initSocialShareLinks(); initSections(); - - initCrawlerLinks(); }); })(jQuery);