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
17 changes: 17 additions & 0 deletions config/navigation-v2.yml
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,23 @@ nav:
page: docs-content://reference/ingestion-tools/index.md
children:
- toc: opentelemetry://reference
children:
- page: docs-content://solutions/observability/get-started/opentelemetry/quickstart/index.md
title: Quickstarts
- page: opentelemetry://reference/architecture/index.md
title: Reference Architecture
- page: docs-content://solutions/observability/get-started/opentelemetry/use-cases/index.md
title: Use cases
- page: opentelemetry://reference/compatibility/index.md
title: Compatibility and support
- page: opentelemetry://reference/data-streams.md
title: Data streams
- page: opentelemetry://reference/central-configuration.md
title: Central configuration
- toc: opentelemetry://reference/motlp
- toc: opentelemetry://reference/edot-cloud-forwarder
- toc: elastic-agent://reference/edot-collector
- toc: opentelemetry://reference/edot-sdks
- toc: docs-content://reference/fleet
- toc: integration-docs://reference
- toc: elasticsearch://reference/search-connectors
Expand Down
39 changes: 21 additions & 18 deletions config/navigation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -474,24 +474,27 @@ toc:
path_prefix: reference/opentelemetry/edot-cloud-forwarder/gcp
- toc: elastic-agent://reference/edot-collector
path_prefix: reference/edot-collector
- toc: apm-agent-android://reference/edot-android
path_prefix: reference/opentelemetry/edot-sdks/android
- toc: elastic-otel-dotnet://reference/edot-dotnet
path_prefix: reference/opentelemetry/edot-sdks/dotnet
- toc: apm-agent-ios://reference/edot-ios
path_prefix: reference/opentelemetry/edot-sdks/ios
- toc: elastic-otel-java://reference/edot-java
path_prefix: reference/opentelemetry/edot-sdks/java
- toc: elastic-otel-node://reference/edot-node
path_prefix: reference/opentelemetry/edot-sdks/node
- toc: elastic-otel-php://reference/edot-php
path_prefix: reference/opentelemetry/edot-sdks/php
- toc: elastic-otel-python://reference/edot-python
path_prefix: reference/opentelemetry/edot-sdks/python
# EDOT Browser (RUM)
# https://github.com/elastic/elastic-otel-rum-js/blob/main/docs/reference/edot-browser/toc.yml
- toc: elastic-otel-rum-js://reference/edot-browser
path_prefix: reference/opentelemetry/edot-sdks/browser
- toc: opentelemetry://reference/edot-sdks
path_prefix: reference/opentelemetry/edot-sdks
children:
- toc: apm-agent-android://reference/edot-android
path_prefix: reference/opentelemetry/edot-sdks/android
- toc: elastic-otel-dotnet://reference/edot-dotnet
path_prefix: reference/opentelemetry/edot-sdks/dotnet
- toc: apm-agent-ios://reference/edot-ios
path_prefix: reference/opentelemetry/edot-sdks/ios
- toc: elastic-otel-java://reference/edot-java
path_prefix: reference/opentelemetry/edot-sdks/java
- toc: elastic-otel-node://reference/edot-node
path_prefix: reference/opentelemetry/edot-sdks/node
- toc: elastic-otel-php://reference/edot-php
path_prefix: reference/opentelemetry/edot-sdks/php
- toc: elastic-otel-python://reference/edot-python
path_prefix: reference/opentelemetry/edot-sdks/python
# EDOT Browser (RUM)
# https://github.com/elastic/elastic-otel-rum-js/blob/main/docs/reference/edot-browser/toc.yml
- toc: elastic-otel-rum-js://reference/edot-browser
path_prefix: reference/opentelemetry/edot-sdks/browser

# Elastic Integrations
# https://github.com/elastic/integration-docs/blob/main/docs/reference/toc.yml
Expand Down
40 changes: 39 additions & 1 deletion src/Elastic.Documentation.Navigation/V2/SiteNavigationV2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,50 @@ string sitePrefix
{
LabelNavV2Item label => CreateLabel(label, nodes, parent, sitePrefix),
GroupNavV2Item group => CreateGroup(group, nodes, parent, sitePrefix),
TocNavV2Item toc => nodes.TryGetValue(toc.Source, out var node) ? node : null,
TocNavV2Item toc => CreateToc(toc, nodes, parent, sitePrefix),
PageNavV2Item { Page: null, Title: var title } => new PlaceholderNavigationLeaf(title ?? "Untitled", sitePrefix, parent),
PageNavV2Item { Page: var page, Title: var title } => new PageCrossLinkLeaf(page, title ?? page.ToString(), sitePrefix, parent),
_ => null
};

private static INavigationItem? CreateToc(
TocNavV2Item toc,
IReadOnlyDictionary<Uri, IRootNavigationItem<IDocumentationFile, INavigationItem>> nodes,
INodeNavigationItem<INavigationModel, INavigationItem> parent,
string sitePrefix
)
{
if (!nodes.TryGetValue(toc.Source, out var node))
return null;
if (toc.Children.Count == 0)
return node;
var children = BuildV2Items(toc.Children, nodes, parent, sitePrefix);
return new TocOverrideNode(node, children, parent.NavigationRoot, parent);
}

/// <summary>
/// Wraps an existing toc node but replaces its children with a V2-specified subset.
/// Used when a <c>toc:</c> entry in <c>navigation-v2.yml</c> declares explicit children,
/// so we can show fewer items without mutating the shared V1 node.
/// </summary>
private sealed class TocOverrideNode(
IRootNavigationItem<IDocumentationFile, INavigationItem> source,
IReadOnlyList<INavigationItem> children,
IRootNavigationItem<INavigationModel, INavigationItem> navigationRoot,
INodeNavigationItem<INavigationModel, INavigationItem> parent
) : INodeNavigationItem<INavigationModel, INavigationItem>
{
public string Id => source.Id;
public string Url => source.Url;
public string NavigationTitle => source.NavigationTitle;
public IRootNavigationItem<INavigationModel, INavigationItem> NavigationRoot => navigationRoot;
public INodeNavigationItem<INavigationModel, INavigationItem>? Parent { get; set; } = parent;
public bool Hidden => source.Hidden;
public int NavigationIndex { get; set; }
public ILeafNavigationItem<INavigationModel> Index => source.Index;
public IReadOnlyCollection<INavigationItem> NavigationItems => children;
}

private static LabelNavigationNode CreateLabel(
LabelNavV2Item label,
IReadOnlyDictionary<Uri, IRootNavigationItem<IDocumentationFile, INavigationItem>> nodes,
Expand Down
Loading