Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions src/Elastic.ApiExplorer/Landing/ApiPageNavigationItem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Licensed to Elasticsearch B.V under one or more agreements.
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
// See the LICENSE file in the project root for more information

using Elastic.Documentation.Extensions;
using Elastic.Documentation.Navigation;

namespace Elastic.ApiExplorer.Landing;

/// <summary>The sidebar entry of one API page: the members every page entry shares. Each page type decides its URL.</summary>
public abstract class ApiPageNavigationItem<TModel>(
string url,
string navigationTitle,
TModel model,
IRootNavigationItem<INavigationModel, INavigationItem> root,
INodeNavigationItem<INavigationModel, INavigationItem>? parent
) : ILeafNavigationItem<TModel> where TModel : INavigationModel
{
public IRootNavigationItem<INavigationModel, INavigationItem> NavigationRoot { get; } = root;
public string Id { get; } = ShortId.Create(url);
public TModel Model { get; } = model;
public string Url { get; } = url;
public bool Hidden { get; init; }
public string NavigationTitle { get; } = navigationTitle;
public INodeNavigationItem<INavigationModel, INavigationItem>? Parent { get; set; } = parent;
public int NavigationIndex { get; set; }
}
53 changes: 18 additions & 35 deletions src/Elastic.ApiExplorer/Operations/OperationNavigationItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,45 +63,28 @@ public async Task RenderAsync(FileSystemStream stream, ApiRenderContext context,
}
}

public class OperationNavigationItem : ILeafNavigationItem<ApiOperation>, IEndpointOrOperationNavigationItem
public class OperationNavigationItem(
string? urlPathPrefix,
string apiUrlSuffix,
ApiOperation apiOperation,
IRootNavigationItem<IApiGroupingModel, INavigationItem> root,
IApiGroupingNavigationItem<IApiGroupingModel, INavigationItem> parent,
string? moniker = null
) : ApiPageNavigationItem<ApiOperation>(
ApiUrlBuilder.OperationUrl(
urlPathPrefix,
apiUrlSuffix,
moniker ?? ApiUrlBuilder.OperationMoniker(apiOperation.Operation.OperationId, apiOperation.Route)
),
apiOperation.DisplayName,
apiOperation,
root,
parent
), IEndpointOrOperationNavigationItem
{
public OperationNavigationItem(
string? urlPathPrefix,
string apiUrlSuffix,
ApiOperation apiOperation,
IRootNavigationItem<IApiGroupingModel, INavigationItem> root,
IApiGroupingNavigationItem<IApiGroupingModel, INavigationItem> parent,
string? moniker = null
)
{
NavigationRoot = root;
Model = apiOperation;
NavigationTitle = apiOperation.DisplayName;
Parent = parent;
Url = ApiUrlBuilder.OperationUrl(
urlPathPrefix,
apiUrlSuffix,
moniker ?? ApiUrlBuilder.OperationMoniker(apiOperation.Operation.OperationId, apiOperation.Route)
);
Id = ShortId.Create(Url);
}

public IRootNavigationItem<INavigationModel, INavigationItem> NavigationRoot { get; }
//TODO enum to string
public string Id { get; }
public ApiOperation Model { get; }
public string Url { get; }
public bool Hidden { get; set; }

/// <summary>Other operations of the same API collapsed onto this page (other methods and routes).</summary>
public IReadOnlyList<ApiOperation> Siblings { get; init; } = [];

/// <summary>Former per-operation URLs of <see cref="Siblings"/> that now redirect to <see cref="Url"/>.</summary>
public IReadOnlyList<string> AliasUrls { get; init; } = [];

public string NavigationTitle { get; }

public INodeNavigationItem<INavigationModel, INavigationItem>? Parent { get; set; }

public int NavigationIndex { get; set; }
}
29 changes: 8 additions & 21 deletions src/Elastic.ApiExplorer/Structural/ApiStructuralPage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,36 +55,23 @@ public async Task RenderAsync(FileSystemStream stream, ApiRenderContext context,
}
}

public class StructuralNavigationItem : ILeafNavigationItem<ApiStructuralPage>
public class StructuralNavigationItem : ApiPageNavigationItem<ApiStructuralPage>
{
public StructuralNavigationItem(
string? urlPathPrefix,
string apiUrlSuffix,
ApiStructuralPage page,
IRootNavigationItem<IApiGroupingModel, INavigationItem> root,
INodeNavigationItem<INavigationModel, INavigationItem> parent
)
{
NavigationRoot = root;
Model = page;
NavigationTitle = page.Title;
Parent = parent;
Url = page.Kind == ApiStructuralKind.Authentication
) : base(UrlFor(urlPathPrefix, apiUrlSuffix, page.Kind), page.Title, page, root, parent) =>
// Authentication and Servers are still generated so old Bump.sh links keep working; operation pages show both inline.
// An Authentication page written as a topic is prose a reader looks for, so it is listed with the other topics.
Hidden = true;

private static string UrlFor(string? urlPathPrefix, string apiUrlSuffix, ApiStructuralKind kind) =>
kind == ApiStructuralKind.Authentication
? ApiUrlBuilder.AuthenticationUrl(urlPathPrefix, apiUrlSuffix)
: ApiUrlBuilder.ServersUrl(urlPathPrefix, apiUrlSuffix);
Id = ShortId.Create(Url);
}

public IRootNavigationItem<INavigationModel, INavigationItem> NavigationRoot { get; }
public string Id { get; }
public ApiStructuralPage Model { get; }
public string Url { get; }
// Authentication and Servers are still generated so old Bump.sh links keep working; operation pages show both inline.
// An Authentication page written as a topic is prose a reader looks for, so it is listed with the other topics.
public bool Hidden { get; init; } = true;
public string NavigationTitle { get; }
public INodeNavigationItem<INavigationModel, INavigationItem>? Parent { get; set; }
public int NavigationIndex { get; set; }

public static IReadOnlyList<StructuralNavigationItem> Create(
string? urlPathPrefix,
Expand Down
12 changes: 1 addition & 11 deletions src/Elastic.ApiExplorer/Topics/ApiTopicPage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,17 +54,7 @@ public class TopicNavigationItem(
ApiTopicPage page,
IRootNavigationItem<INavigationModel, INavigationItem> root,
INodeNavigationItem<INavigationModel, INavigationItem> parent
) : ILeafNavigationItem<ApiTopicPage>
{
public IRootNavigationItem<INavigationModel, INavigationItem> NavigationRoot { get; } = root;
public string Id { get; } = ShortId.Create(url);
public ApiTopicPage Model { get; } = page;
public string Url { get; } = url;
public bool Hidden => false;
public string NavigationTitle { get; } = page.Title;
public INodeNavigationItem<INavigationModel, INavigationItem>? Parent { get; set; } = parent;
public int NavigationIndex { get; set; }
}
) : ApiPageNavigationItem<ApiTopicPage>(url, page.Title, page, root, parent);

/// <summary>The Topics sidebar heading. It groups the topic pages above the endpoint groups and starts expanded on every page.</summary>
public class TopicsNavigationItem(LandingNavigationItem rootNavigation) : ApiSidebarHeadingNavigationItem(
Expand Down
41 changes: 13 additions & 28 deletions src/Elastic.ApiExplorer/Types/SchemaNavigationItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,34 +33,19 @@ public async Task RenderAsync(FileSystemStream stream, ApiRenderContext context,
}
}

public class SchemaNavigationItem : ILeafNavigationItem<ApiSchema>
{
public SchemaNavigationItem(
string? urlPathPrefix,
string apiUrlSuffix,
ApiSchema apiSchema,
IRootNavigationItem<IApiGroupingModel, INavigationItem> root,
IApiGroupingNavigationItem<IApiGroupingModel, INavigationItem> parent
)
{
NavigationRoot = root;
Model = apiSchema;
NavigationTitle = apiSchema.DisplayName;
Parent = parent;
var moniker = ApiUrlBuilder.SchemaMoniker(apiSchema.SchemaId);
Url = $"{ApiUrlBuilder.ProductRoot(urlPathPrefix, apiUrlSuffix)}/types/{moniker}";
Id = ShortId.Create(Url);
}

public IRootNavigationItem<INavigationModel, INavigationItem> NavigationRoot { get; }
public string Id { get; }
public ApiSchema Model { get; }
public string Url { get; }
public bool Hidden { get; set; }
public string NavigationTitle { get; }
public INodeNavigationItem<INavigationModel, INavigationItem>? Parent { get; set; }
public int NavigationIndex { get; set; }
}
public class SchemaNavigationItem(
string? urlPathPrefix,
string apiUrlSuffix,
ApiSchema apiSchema,
IRootNavigationItem<IApiGroupingModel, INavigationItem> root,
IApiGroupingNavigationItem<IApiGroupingModel, INavigationItem> parent
) : ApiPageNavigationItem<ApiSchema>(
$"{ApiUrlBuilder.ProductRoot(urlPathPrefix, apiUrlSuffix)}/types/{ApiUrlBuilder.SchemaMoniker(apiSchema.SchemaId)}",
apiSchema.DisplayName,
apiSchema,
root,
parent
);

public record SchemaCategory(string Name, string Description) : IApiGroupingModel
{
Expand Down
Loading