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 @@
-
+ @foreach (var query in Model.AlternativeOptionLinkQueries)
+ {
+
@query
+ }
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);