From c58bc04fcb131280bb663b6628ea3e35b34e79c6 Mon Sep 17 00:00:00 2001 From: Martijn Laarman Date: Tue, 10 Jun 2025 18:40:05 +0200 Subject: [PATCH 1/5] Refactor markdown and layout rendering by decoupling from `GlobalLayoutViewModel`. Streamline layout handling, enhance navigation item visibility logic, and rework documentation file structures for improved maintainability. `Hidden` is a pure navigation property now as its removed from `MarkdownFile`. `GetCurrentNavigation()` is now non nullable --- .../Endpoints/ApiEndpoint.cs | 1 + .../Endpoints/EndpointView.cshtml | 9 -- .../Landing/LandingNavigationItem.cs | 1 + .../Landing/LandingView.cshtml | 9 -- .../Operations/OperationNavigationItem.cs | 1 + .../Operations/OperationView.cshtml | 9 -- .../Layout/_Head.cshtml | 7 -- .../Layout/_SecondaryNav.cshtml | 2 +- .../Navigation/INavigationItem.cs | 2 + .../Navigation/_TocTreeNav.cshtml | 4 + .../_GlobalLayout.cshtml | 42 ++------- src/Elastic.Documentation.Site/_ViewModels.cs | 34 +++----- src/Elastic.Markdown/IO/DocumentationFile.cs | 1 + src/Elastic.Markdown/IO/DocumentationSet.cs | 22 +++-- src/Elastic.Markdown/IO/MarkdownFile.cs | 2 +- .../IO/Navigation/DocumentationGroup.cs | 9 +- .../Myst/FrontMatter/FrontMatterParser.cs | 1 + src/Elastic.Markdown/Slices/HtmlWriter.cs | 2 +- src/Elastic.Markdown/Slices/Index.cshtml | 21 +++-- src/Elastic.Markdown/Slices/IndexViewModel.cs | 3 +- .../Slices}/Layout/_Archive.cshtml | 2 +- .../Slices/Layout/_Breadcrumbs.cshtml | 2 +- .../Slices}/Layout/_LandingPage.cshtml | 2 +- .../Slices}/Layout/_NotFound.cshtml | 2 +- .../Slices/Layout/_PrevNextNav.cshtml | 2 +- .../Slices/Layout/_TableOfContents.cshtml | 2 +- .../Slices}/LayoutName.cs | 2 +- .../Slices/MarkdownLayoutViewModel.cs | 32 +++++++ src/Elastic.Markdown/Slices/_Layout.cshtml | 87 ++++++++++++++----- .../Slices/_ViewImports.cshtml | 1 + .../Navigation/GlobalNavigation.cs | 14 +-- .../docs-builder/Http/DocumentationWebHost.cs | 3 + 32 files changed, 176 insertions(+), 157 deletions(-) rename src/{Elastic.Documentation.Site => Elastic.Markdown/Slices}/Layout/_Archive.cshtml (99%) rename src/{Elastic.Documentation.Site => Elastic.Markdown/Slices}/Layout/_LandingPage.cshtml (99%) rename src/{Elastic.Documentation.Site => Elastic.Markdown/Slices}/Layout/_NotFound.cshtml (88%) rename src/{Elastic.Documentation.Site => Elastic.Markdown/Slices}/LayoutName.cs (91%) create mode 100644 src/Elastic.Markdown/Slices/MarkdownLayoutViewModel.cs diff --git a/src/Elastic.ApiExplorer/Endpoints/ApiEndpoint.cs b/src/Elastic.ApiExplorer/Endpoints/ApiEndpoint.cs index 356e7651c..97244d0c4 100644 --- a/src/Elastic.ApiExplorer/Endpoints/ApiEndpoint.cs +++ b/src/Elastic.ApiExplorer/Endpoints/ApiEndpoint.cs @@ -58,6 +58,7 @@ public EndpointNavigationItem(int depth, string url, ApiEndpoint apiEndpoint, La public ApiEndpoint Index { get; } public string Url { get; } public string NavigationTitle { get; } + public bool Hidden => false; public IReadOnlyCollection NavigationItems { get; set; } = []; diff --git a/src/Elastic.ApiExplorer/Endpoints/EndpointView.cshtml b/src/Elastic.ApiExplorer/Endpoints/EndpointView.cshtml index 023545495..95bc519ec 100644 --- a/src/Elastic.ApiExplorer/Endpoints/EndpointView.cshtml +++ b/src/Elastic.ApiExplorer/Endpoints/EndpointView.cshtml @@ -7,24 +7,15 @@ { DocSetName = "Api Explorer", Description = "", - Layout = null, - PageTocItems = [], CurrentNavigationItem = Model.CurrentNavigationItem, Previous = null, Next = null, NavigationHtml = Model.NavigationHtml, - LegacyPage = null, UrlPathPrefix = null, - GithubEditUrl = null, - ReportIssueUrl = null, AllowIndexing = false, CanonicalBaseUrl = null, GoogleTagManager = new GoogleTagManagerConfiguration(), Features = new FeatureFlags([]), - Parents = - [ - ], - Products = null, StaticFileContentHashProvider = Model.StaticFileContentHashProvider }; } diff --git a/src/Elastic.ApiExplorer/Landing/LandingNavigationItem.cs b/src/Elastic.ApiExplorer/Landing/LandingNavigationItem.cs index 6a1f798a9..0a5b11d0f 100644 --- a/src/Elastic.ApiExplorer/Landing/LandingNavigationItem.cs +++ b/src/Elastic.ApiExplorer/Landing/LandingNavigationItem.cs @@ -36,6 +36,7 @@ public class LandingNavigationItem : INodeNavigationItem? Parent { get; set; } public IReadOnlyCollection NavigationItems { get; set; } = []; public string Url { get; } + public bool Hidden => false; //TODO public string NavigationTitle { get; } = "API Documentation"; diff --git a/src/Elastic.ApiExplorer/Landing/LandingView.cshtml b/src/Elastic.ApiExplorer/Landing/LandingView.cshtml index ac0db7b18..d24553791 100644 --- a/src/Elastic.ApiExplorer/Landing/LandingView.cshtml +++ b/src/Elastic.ApiExplorer/Landing/LandingView.cshtml @@ -7,24 +7,15 @@ { DocSetName = "Api Explorer", Description = "", - Layout = null, - PageTocItems = [], CurrentNavigationItem = Model.CurrentNavigationItem, Previous = null, Next = null, NavigationHtml = Model.NavigationHtml, - LegacyPage = null, UrlPathPrefix = null, - GithubEditUrl = null, - ReportIssueUrl = null, AllowIndexing = false, CanonicalBaseUrl = null, GoogleTagManager = new GoogleTagManagerConfiguration(), Features = new FeatureFlags([]), - Parents = - [ - ], - Products = null, StaticFileContentHashProvider = Model.StaticFileContentHashProvider }; } diff --git a/src/Elastic.ApiExplorer/Operations/OperationNavigationItem.cs b/src/Elastic.ApiExplorer/Operations/OperationNavigationItem.cs index 81c040654..86fa140c3 100644 --- a/src/Elastic.ApiExplorer/Operations/OperationNavigationItem.cs +++ b/src/Elastic.ApiExplorer/Operations/OperationNavigationItem.cs @@ -47,6 +47,7 @@ public OperationNavigationItem(int depth, string url, ApiOperation apiOperation, public int Depth { get; } public ApiOperation Model { get; } public string Url { get; } + public bool Hidden => false; public string NavigationTitle { get; } diff --git a/src/Elastic.ApiExplorer/Operations/OperationView.cshtml b/src/Elastic.ApiExplorer/Operations/OperationView.cshtml index 8404f7fbe..12d821176 100644 --- a/src/Elastic.ApiExplorer/Operations/OperationView.cshtml +++ b/src/Elastic.ApiExplorer/Operations/OperationView.cshtml @@ -7,24 +7,15 @@ { DocSetName = "Api Explorer", Description = "", - Layout = null, - PageTocItems = [], CurrentNavigationItem = Model.CurrentNavigationItem, Previous = null, Next = null, NavigationHtml = Model.NavigationHtml, - LegacyPage = null, UrlPathPrefix = null, - GithubEditUrl = null, - ReportIssueUrl = null, AllowIndexing = false, CanonicalBaseUrl = null, GoogleTagManager = new GoogleTagManagerConfiguration(), Features = new FeatureFlags([]), - Parents = - [ - ], - Products = null, StaticFileContentHashProvider = Model.StaticFileContentHashProvider }; } diff --git a/src/Elastic.Documentation.Site/Layout/_Head.cshtml b/src/Elastic.Documentation.Site/Layout/_Head.cshtml index 0080c521e..ef3904a60 100644 --- a/src/Elastic.Documentation.Site/Layout/_Head.cshtml +++ b/src/Elastic.Documentation.Site/Layout/_Head.cshtml @@ -1,6 +1,5 @@ @inherits RazorSlice @using FontPreloader = Elastic.Documentation.Site.FileProviders.FontPreloader - @Model.Title @@ -35,9 +34,3 @@ { } - @if (!string.IsNullOrEmpty(Model.Products)) - { - - - } - diff --git a/src/Elastic.Documentation.Site/Layout/_SecondaryNav.cshtml b/src/Elastic.Documentation.Site/Layout/_SecondaryNav.cshtml index 60436170d..49ba93c0b 100644 --- a/src/Elastic.Documentation.Site/Layout/_SecondaryNav.cshtml +++ b/src/Elastic.Documentation.Site/Layout/_SecondaryNav.cshtml @@ -2,7 +2,7 @@