From fb052c261c42b47589fd7e87cd0104b33b6055b8 Mon Sep 17 00:00:00 2001 From: Martijn Laarman Date: Wed, 25 Jun 2025 09:14:36 +0200 Subject: [PATCH 1/5] Include Documentation Group index urls in sitemap --- .../docs-assembler/Building/SitemapBuilder.cs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/tooling/docs-assembler/Building/SitemapBuilder.cs b/src/tooling/docs-assembler/Building/SitemapBuilder.cs index 41ccf1c75..2421a26e4 100644 --- a/src/tooling/docs-assembler/Building/SitemapBuilder.cs +++ b/src/tooling/docs-assembler/Building/SitemapBuilder.cs @@ -21,9 +21,9 @@ public void Generate() { var flattenedNavigationItems = GetNavigationItems(navigationItems); - var doc = new XDocument() + var doc = new XDocument { - Declaration = new XDeclaration("1.0", "utf-8", "yes"), + Declaration = new XDeclaration("1.0", "utf-8", "yes") }; var currentDate = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:sszzz"); @@ -31,8 +31,13 @@ public void Generate() "urlset", new XAttribute("xlmns", "http://www.sitemaps.org/schemas/sitemap/0.9"), flattenedNavigationItems - .OfType() - .Select(n => n.Model.Url) + .Select(n => n switch + { + DocumentationGroup group => (group.Index.Url, NavigationItem: group), + FileNavigationItem file => (file.Model.Url, NavigationItem: file as INavigationItem), + _ => throw new Exception($"Unhandled navigation item type: {n.GetType()}") + }) + .Select(n => n.Url) .Distinct() .Select(u => new Uri(BaseUri, u)) .Select(u => new XElement("url", [ @@ -60,6 +65,8 @@ private static IReadOnlyCollection GetNavigationItems(IReadOnly case DocumentationGroup group: result.AddRange(GetNavigationItems(group.NavigationItems)); break; + default: + throw new Exception($"Unhandled navigation item type: {item.GetType()}"); } } return result; From d76cf185617c03ddb11b5151fef2719b7b78dc4b Mon Sep 17 00:00:00 2001 From: Martijn Laarman Date: Wed, 25 Jun 2025 09:21:01 +0200 Subject: [PATCH 2/5] Include group itself in GetNavigationItems() --- src/tooling/docs-assembler/Building/SitemapBuilder.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tooling/docs-assembler/Building/SitemapBuilder.cs b/src/tooling/docs-assembler/Building/SitemapBuilder.cs index 2421a26e4..fdf46eac1 100644 --- a/src/tooling/docs-assembler/Building/SitemapBuilder.cs +++ b/src/tooling/docs-assembler/Building/SitemapBuilder.cs @@ -64,6 +64,7 @@ private static IReadOnlyCollection GetNavigationItems(IReadOnly break; case DocumentationGroup group: result.AddRange(GetNavigationItems(group.NavigationItems)); + result.Add(group); break; default: throw new Exception($"Unhandled navigation item type: {item.GetType()}"); From acd118bc6a3ca3baea09897a786f6b492c474e72 Mon Sep 17 00:00:00 2001 From: Martijn Laarman Date: Wed, 25 Jun 2025 09:28:02 +0200 Subject: [PATCH 3/5] Skip hidden navigation items in sitemap builder --- .../docs-assembler/Building/SitemapBuilder.cs | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/tooling/docs-assembler/Building/SitemapBuilder.cs b/src/tooling/docs-assembler/Building/SitemapBuilder.cs index fdf46eac1..7a16d49d4 100644 --- a/src/tooling/docs-assembler/Building/SitemapBuilder.cs +++ b/src/tooling/docs-assembler/Building/SitemapBuilder.cs @@ -28,23 +28,23 @@ public void Generate() var currentDate = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:sszzz"); var root = new XElement( - "urlset", - new XAttribute("xlmns", "http://www.sitemaps.org/schemas/sitemap/0.9"), - flattenedNavigationItems - .Select(n => n switch - { - DocumentationGroup group => (group.Index.Url, NavigationItem: group), - FileNavigationItem file => (file.Model.Url, NavigationItem: file as INavigationItem), - _ => throw new Exception($"Unhandled navigation item type: {n.GetType()}") - }) - .Select(n => n.Url) - .Distinct() - .Select(u => new Uri(BaseUri, u)) - .Select(u => new XElement("url", [ - new XElement("loc", u), - new XElement("lastmod", currentDate) - ])) - ); + "urlset", + new XAttribute("xlmns", "http://www.sitemaps.org/schemas/sitemap/0.9"), + flattenedNavigationItems + .Select(n => n switch + { + DocumentationGroup group => (group.Index.Url, NavigationItem: group), + FileNavigationItem file => (file.Model.Url, NavigationItem: file as INavigationItem), + _ => throw new Exception($"Unhandled navigation item type: {n.GetType()}") + }) + .Select(n => n.Url) + .Distinct() + .Select(u => new Uri(BaseUri, u)) + .Select(u => new XElement("url", [ + new XElement("loc", u), + new XElement("lastmod", currentDate) + ])) + ); doc.Add(root); @@ -57,6 +57,9 @@ private static IReadOnlyCollection GetNavigationItems(IReadOnly var result = new List(); foreach (var item in items) { + if (item.Hidden) + continue; + switch (item) { case FileNavigationItem file: @@ -70,6 +73,7 @@ private static IReadOnlyCollection GetNavigationItems(IReadOnly throw new Exception($"Unhandled navigation item type: {item.GetType()}"); } } + return result; } } From 89a07c325e9bd34557432913334d773e1872f2c0 Mon Sep 17 00:00:00 2001 From: Martijn Laarman Date: Wed, 25 Jun 2025 09:35:04 +0200 Subject: [PATCH 4/5] Explicitly include xelements into namespace --- src/tooling/docs-assembler/Building/SitemapBuilder.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/tooling/docs-assembler/Building/SitemapBuilder.cs b/src/tooling/docs-assembler/Building/SitemapBuilder.cs index e067a0180..b7bdfec37 100644 --- a/src/tooling/docs-assembler/Building/SitemapBuilder.cs +++ b/src/tooling/docs-assembler/Building/SitemapBuilder.cs @@ -26,9 +26,11 @@ public void Generate() Declaration = new XDeclaration("1.0", "utf-8", "yes") }; + XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9"; + var currentDate = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:sszzz"); var root = new XElement( - "urlset", + ns + "urlset", new XAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9"), flattenedNavigationItems .Select(n => n switch @@ -40,9 +42,9 @@ public void Generate() .Select(n => n.Url) .Distinct() .Select(u => new Uri(BaseUri, u)) - .Select(u => new XElement("url", [ - new XElement("loc", u), - new XElement("lastmod", currentDate) + .Select(u => new XElement(ns + "url", [ + new XElement(ns + "loc", u), + new XElement(ns + "lastmod", currentDate) ])) ); From e15f0fdd9d2aa48d2348e2c7dfc457fd86e4819f Mon Sep 17 00:00:00 2001 From: Martijn Laarman Date: Wed, 25 Jun 2025 10:19:36 +0200 Subject: [PATCH 5/5] ignore hidden for DetectionRuleFile --- .../IO/Navigation/FileNavigationItem.cs | 3 ++- src/tooling/docs-assembler/Building/SitemapBuilder.cs | 11 ++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Elastic.Markdown/IO/Navigation/FileNavigationItem.cs b/src/Elastic.Markdown/IO/Navigation/FileNavigationItem.cs index a37900b2e..67df3d7a9 100644 --- a/src/Elastic.Markdown/IO/Navigation/FileNavigationItem.cs +++ b/src/Elastic.Markdown/IO/Navigation/FileNavigationItem.cs @@ -8,7 +8,8 @@ namespace Elastic.Markdown.IO.Navigation; [DebuggerDisplay("Current: {Model.RelativePath}")] -public record FileNavigationItem(MarkdownFile Model, DocumentationGroup Group, bool Hidden = false) : ILeafNavigationItem +public record FileNavigationItem(MarkdownFile Model, DocumentationGroup Group, bool Hidden = false) + : ILeafNavigationItem { public INodeNavigationItem? Parent { get; set; } = Group; public IRootNavigationItem NavigationRoot { get; } = Group.NavigationRoot; diff --git a/src/tooling/docs-assembler/Building/SitemapBuilder.cs b/src/tooling/docs-assembler/Building/SitemapBuilder.cs index b7bdfec37..fe51ba057 100644 --- a/src/tooling/docs-assembler/Building/SitemapBuilder.cs +++ b/src/tooling/docs-assembler/Building/SitemapBuilder.cs @@ -5,6 +5,7 @@ using System.IO.Abstractions; using System.Xml.Linq; using Elastic.Documentation.Site.Navigation; +using Elastic.Markdown.Extensions.DetectionRules; using Elastic.Markdown.IO.Navigation; namespace Documentation.Assembler.Building; @@ -59,15 +60,19 @@ private static IReadOnlyCollection GetNavigationItems(IReadOnly var result = new List(); foreach (var item in items) { - if (item.Hidden) - continue; - switch (item) { case FileNavigationItem file: + // these are hidden from the navigation programatically. + // TODO find a cleaner way to model this. + if (item.Hidden && file.Model is not DetectionRuleFile) + continue; result.Add(file); break; case DocumentationGroup group: + if (item.Hidden) + continue; + result.AddRange(GetNavigationItems(group.NavigationItems)); result.Add(group); break;