From 866ee9a1edb776db13fa2bc0290c711dbbb27e90 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Thu, 27 Sep 2018 11:41:31 +0300 Subject: [PATCH] Implemented mid node selection. --- .../Docs/Documents/ContentWithDetailsDto.cs | 21 ++++++++++-------- .../Helpers/TagHelpers/TreeTagHelper.cs | 22 ++++++++++++++++++- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/ContentWithDetailsDto.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/ContentWithDetailsDto.cs index 7c4dce8022..02ccc06316 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/ContentWithDetailsDto.cs +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/ContentWithDetailsDto.cs @@ -43,7 +43,7 @@ namespace Volo.Docs.Documents public bool HasChildItems => Items != null && Items.Any(); public bool IsEmpty => Text == null && Path == null; - + public bool IsSelected(string documentName) { if (documentName == null) @@ -51,22 +51,25 @@ namespace Volo.Docs.Documents return false; } - if (!HasChildItems) + if (string.Equals(documentName, Path, StringComparison.InvariantCultureIgnoreCase)) { - return documentName == Path; + return true; + } + + if (Items == null) + { + return false; } - var isSelected = false; - foreach (var n in Items) + foreach (var childItem in Items) { - if (n.IsSelected(documentName)) + if (childItem.IsSelected(documentName)) { - isSelected = true; - break; + return true; } } - return isSelected; + return false; } } diff --git a/modules/docs/src/Volo.Docs.Web/Areas/Documents/Helpers/TagHelpers/TreeTagHelper.cs b/modules/docs/src/Volo.Docs.Web/Areas/Documents/Helpers/TagHelpers/TreeTagHelper.cs index 511e8539c6..e79e4acf28 100644 --- a/modules/docs/src/Volo.Docs.Web/Areas/Documents/Helpers/TagHelpers/TreeTagHelper.cs +++ b/modules/docs/src/Volo.Docs.Web/Areas/Documents/Helpers/TagHelpers/TreeTagHelper.cs @@ -54,7 +54,7 @@ namespace Volo.Docs.Areas.Documents.Helpers.TagHelpers { var content = ""; - var isAnyNodeOpenedInThisLevel = node.Items?.Any(n => n.IsSelected(SelectedDocumentName)) ?? false; + var isAnyNodeOpenedInThisLevel = IsAnyNodeOpenedInThisLevel(node); node.Items?.ForEach(innerNode => { @@ -66,6 +66,26 @@ namespace Volo.Docs.Areas.Documents.Helpers.TagHelpers return result; } + private bool IsAnyNodeOpenedInThisLevel(NavigationNode node) + { + if (node.Items == null) + { + return false; + } + + if (node.IsSelected(SelectedDocumentName)) + { + return true; + } + + if (node.Items.Any(n => n.IsSelected(SelectedDocumentName))) + { + return true; + } + + return false; + } + private string GetParentNode(NavigationNode node, bool isOpened) { var output = RenderNodeAsHtml(node);