Skip to content

Commit 9fa8bd4

Browse files
committed
stage
1 parent 2140ccd commit 9fa8bd4

File tree

18 files changed

+308
-292
lines changed

18 files changed

+308
-292
lines changed

src/Elastic.ApiExplorer/OpenApiGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ private async Task<IFileInfo> Render<T>(string prefix, INavigationItem current,
299299
if (!outputFile.Directory!.Exists)
300300
outputFile.Directory.Create();
301301

302-
var navigationRenderResult = await navigationRenderer.RenderNavigation(current.NavigationRoot, INavigationHtmlWriter.AllLevels, ctx);
302+
var navigationRenderResult = await navigationRenderer.RenderNavigation(current.NavigationRoot, current, INavigationHtmlWriter.AllLevels, ctx);
303303
renderContext = renderContext with
304304
{
305305
CurrentNavigation = current,

src/Elastic.Documentation.Navigation/Assembler/AssembledNavigation.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ public SiteNavigation(
5353
}
5454
}
5555
UnseenNodes = [.. _nodes.Keys];
56-
5756
// Build NavigationItems from SiteTableOfContentsRef items
5857
var items = new List<INavigationItem>();
5958
var index = 0;
@@ -77,6 +76,18 @@ public SiteNavigation(
7776
_ = this.UpdateNavigationIndex(context);
7877
var count = UnseenNodes.Count;
7978
var unseen = string.Join(", ", UnseenNodes);
79+
foreach (var node in UnseenNodes)
80+
{
81+
// impossible since unseen nodes are build from _nodes
82+
if (!_nodes.TryGetValue(node, out var value))
83+
continue;
84+
if (!DeclaredPhantoms.Contains(node))
85+
context.EmitHint(context.ConfigurationPath, $"Navigation does not explicitly declare: {node} as a phantom");
86+
87+
// ensure the parent of phantom nodes is `SiteNavigation`
88+
value.Parent = this;
89+
}
90+
8091
}
8192

8293
public HashSet<Uri> DeclaredPhantoms { get; }
@@ -203,10 +214,6 @@ void IAssignableChildrenNavigation.SetNavigationItems(IReadOnlyCollection<INavig
203214
return null;
204215
}
205216

206-
if (node.Identifier == new Uri("docs-content://reference/glossary"))
207-
{
208-
}
209-
210217
root ??= node;
211218

212219
_ = UnseenNodes.Remove(tocRef.Source);
@@ -221,7 +228,7 @@ void IAssignableChildrenNavigation.SetNavigationItems(IReadOnlyCollection<INavig
221228
var children = new List<INavigationItem>();
222229

223230
// Always start with the node's existing children and update their HomeProvider
224-
INavigationItem[] nodeChildren = [.. node.NavigationItems, node.Index];
231+
INavigationItem[] nodeChildren = [node.Index, .. node.NavigationItems];
225232
foreach (var nodeChild in nodeChildren)
226233
{
227234
nodeChild.Parent = node;

src/Elastic.Documentation.Navigation/Isolated/DocumentationSetNavigation.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,8 @@ private static IFileInfo ResolveFileInfo(IDocumentationSetContext context, strin
197197
IFileInfo fileInfo,
198198
IFileSystem fileSystem,
199199
IDocumentationSetContext context,
200-
string fullPath)
200+
string fullPath
201+
)
201202
{
202203
var relativePath = Path.GetRelativePath(context.DocumentationSourceDirectory.FullName, fileInfo.FullName);
203204
var documentationFile = _factory.TryCreateDocumentationFile(fileInfo, fileSystem);

src/Elastic.Documentation.Site/Navigation/INavigationHtmlWriter.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ public interface INavigationHtmlWriter
1111
{
1212
const int AllLevels = -1;
1313

14-
Task<NavigationRenderResult> RenderNavigation(IRootNavigationItem<INavigationModel, INavigationItem> currentRootNavigation, int maxLevel, Cancel ctx = default);
14+
Task<NavigationRenderResult> RenderNavigation(
15+
IRootNavigationItem<INavigationModel, INavigationItem> currentRootNavigation,
16+
INavigationItem currentNavigationItem,
17+
int maxLevel,
18+
Cancel ctx = default
19+
);
1520

1621
async Task<string> Render(NavigationViewModel model, Cancel ctx)
1722
{

src/Elastic.Documentation.Site/Navigation/IsolatedBuildNavigationHtmlWriter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ public class IsolatedBuildNavigationHtmlWriter(BuildContext context, IRootNaviga
1414
{
1515
private readonly ConcurrentDictionary<(string, int), string> _renderedNavigationCache = [];
1616

17-
public async Task<NavigationRenderResult> RenderNavigation(IRootNavigationItem<INavigationModel, INavigationItem> currentRootNavigation, int maxLevel, Cancel ctx = default
17+
public async Task<NavigationRenderResult> RenderNavigation(
18+
IRootNavigationItem<INavigationModel, INavigationItem> currentRootNavigation, INavigationItem currentNavigationItem, int maxLevel, Cancel ctx = default
1819
)
1920
{
2021
var navigation = context.Configuration.Features.PrimaryNavEnabled || currentRootNavigation.IsUsingNavigationDropdown

src/Elastic.Documentation/IDocumentationContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,6 @@ public static void EmitError(this IDocumentationContext context, IFileInfo file,
3131
public static void EmitWarning(this IDocumentationContext context, IFileInfo file, string message) =>
3232
context.Collector.EmitWarning(file, message);
3333

34+
public static void EmitHint(this IDocumentationContext context, IFileInfo file, string message) =>
35+
context.Collector.EmitHint(file, message);
3436
}

src/Elastic.Markdown/HtmlWriter.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
// See the LICENSE file in the project root for more information
44

55
using System.IO.Abstractions;
6-
using System.Reflection.Metadata;
76
using System.Text.Json;
87
using Elastic.Documentation;
98
using Elastic.Documentation.Configuration.LegacyUrlMappings;
@@ -65,8 +64,8 @@ private async Task<RenderResult> RenderLayout(MarkdownFile markdown, MarkdownDoc
6564
var root = navigationItem.NavigationRoot;
6665

6766
var navigationHtmlRenderResult = DocumentationSet.Context.Configuration.Features.LazyLoadNavigation
68-
? await NavigationHtmlWriter.RenderNavigation(root, 1, ctx)
69-
: await NavigationHtmlWriter.RenderNavigation(root, INavigationHtmlWriter.AllLevels, ctx);
67+
? await NavigationHtmlWriter.RenderNavigation(root, navigationItem, 1, ctx)
68+
: await NavigationHtmlWriter.RenderNavigation(root, navigationItem, INavigationHtmlWriter.AllLevels, ctx);
7069

7170
var current = PositionalNavigation.GetCurrent(markdown);
7271
var previous = PositionalNavigation.GetPrevious(markdown);
@@ -102,7 +101,7 @@ private async Task<RenderResult> RenderLayout(MarkdownFile markdown, MarkdownDoc
102101
var navigationFileName = $"{navigationHtmlRenderResult.Id}.nav.html";
103102
if (DocumentationSet.Configuration.Features.LazyLoadNavigation)
104103
{
105-
var fullNavigationRenderResult = await NavigationHtmlWriter.RenderNavigation(root, INavigationHtmlWriter.AllLevels, ctx);
104+
var fullNavigationRenderResult = await NavigationHtmlWriter.RenderNavigation(root, navigationItem, INavigationHtmlWriter.AllLevels, ctx);
106105
navigationFileName = $"{fullNavigationRenderResult.Id}.nav.html";
107106

108107
_ = DocumentationSet.NavigationRenderResults.TryAdd(

src/Elastic.Markdown/IO/DocumentationSet.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,24 +128,20 @@ private IReadOnlyCollection<INavigationItem> CreateNavigationLookup(INavigationI
128128
case ILeafNavigationItem<MarkdownFile> markdownLeaf:
129129
var added = MarkdownNavigationLookup.TryAdd(markdownLeaf.Model, markdownLeaf);
130130
if (!added)
131-
Context.EmitWarning(Configuration.SourceFile, $"Duplicate navigation item {markdownLeaf.Model.CrossLink}");
131+
Context.EmitWarning(Configuration.SourceFile, $"1. Duplicate navigation item {markdownLeaf.Model.CrossLink}");
132132
return [markdownLeaf];
133133
case ILeafNavigationItem<INavigationModel> leaf:
134134
return [leaf];
135135
case INodeNavigationItem<MarkdownFile, INavigationItem> node:
136136
var addedNode = MarkdownNavigationLookup.TryAdd(node.Index.Model, node);
137137
if (!addedNode)
138-
Context.EmitWarning(Configuration.SourceFile, $"Duplicate navigation item {node.Index.Model.CrossLink}");
138+
Context.EmitWarning(Configuration.SourceFile, $"2. Duplicate navigation item {node.Index.Model.CrossLink}");
139139
var nodeItems = node.NavigationItems.SelectMany(CreateNavigationLookup);
140140
return nodeItems.Concat([node, node.Index]).ToArray();
141141
case INodeNavigationItem<INavigationModel, INavigationItem> node:
142142
var items = node.NavigationItems.SelectMany(CreateNavigationLookup);
143143
if (node.Index.Model is MarkdownFile md)
144-
{
145-
added = MarkdownNavigationLookup.TryAdd(md, node.Index);
146-
if (!added)
147-
Context.EmitWarning(Configuration.SourceFile, $"Duplicate navigation item {md.CrossLink}");
148-
}
144+
_ = MarkdownNavigationLookup.TryAdd(md, node.Index);
149145

150146
return items.Concat([node, node.Index]).ToArray();
151147
default:

src/services/Elastic.Documentation.Assembler/Navigation/GlobalNavigationHtmlWriter.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,20 @@ public class GlobalNavigationHtmlWriter(ILoggerFactory logFactory, SiteNavigatio
1818

1919
private readonly ConcurrentDictionary<(string, int), string> _renderedNavigationCache = [];
2020

21-
public async Task<NavigationRenderResult> RenderNavigation(IRootNavigationItem<INavigationModel, INavigationItem> currentRootNavigation, int maxLevel, Cancel ctx = default)
21+
public async Task<NavigationRenderResult> RenderNavigation(
22+
IRootNavigationItem<INavigationModel, INavigationItem> currentRootNavigation,
23+
#pragma warning disable IDE0060
24+
INavigationItem currentNavigationItem, // temporary https://github.com/elastic/docs-content/pull/3730
25+
#pragma warning restore IDE0060
26+
int maxLevel,
27+
Cancel ctx = default
28+
)
2229
{
23-
if (currentRootNavigation.Parent is null or not SiteNavigation)
24-
collector.EmitGlobalError($"Passed root is not actually a top level navigation item {currentRootNavigation.NavigationTitle} ({currentRootNavigation.Id}) in {currentRootNavigation.Url}");
30+
if (currentRootNavigation is SiteNavigation)
31+
return NavigationRenderResult.Empty;
2532

26-
if (currentRootNavigation.Parent is not null && currentRootNavigation.Parent.Depth != 0)
27-
collector.EmitGlobalError($"Passed root is not actually a top level navigation item {currentRootNavigation.NavigationTitle} ({currentRootNavigation.Id}) in {currentRootNavigation.Url}");
33+
if (currentRootNavigation.Parent is null or not SiteNavigation)
34+
collector.EmitGlobalError($"Passed root is not actually a top level navigation item {currentRootNavigation.NavigationTitle} ({currentRootNavigation.Id}) in {currentRootNavigation.Url}, trying to render: {currentNavigationItem.Url}");
2835

2936
if (_renderedNavigationCache.TryGetValue((currentRootNavigation.Id, maxLevel), out var html))
3037
return new NavigationRenderResult { Html = html, Id = currentRootNavigation.Id };

tests-integration/Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
77
<UseMicrosoftTestingPlatformRunner>false</UseMicrosoftTestingPlatformRunner>
88
<DisableTestingPlatformServerCapability>true</DisableTestingPlatformServerCapability>
9-
<NoWarn>CA1822</NoWarn>
9+
<NoWarn>CA1822;IDE0058</NoWarn>
1010

1111
<IsPackable>false</IsPackable>
1212
<IsTestProject>true</IsTestProject>

0 commit comments

Comments
 (0)