Skip to content

Commit 72006b9

Browse files
authored
Merge pull request #117 from cloudscribe/bootstrap5
Bootstrap5
2 parents c966b52 + cf3ba4f commit 72006b9

11 files changed

Lines changed: 277 additions & 18 deletions

src/NavigationDemo.Web/Views/Shared/_Layout.cshtml

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
<title>@ViewData["Title"] - NavigationDemo.Web</title>
88

99
<environment names="Development">
10-
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
11-
<link rel="stylesheet" href="~/lib/smartmenus/dist/addons/bootstrap/jquery.smartmenus.bootstrap.css" />
10+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" />
11+
<link rel="stylesheet" href="~/lib/smartmenus/jquery.smartmenus.bootstrap.css" />
1212
<link rel="stylesheet" href="~/css/site.css" />
1313
</environment>
1414
<environment names="Staging,Production">
15-
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/css/bootstrap.min.css"
15+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
1616
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
1717
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
1818
<link rel="stylesheet" href="~/lib/smartmenus/dist/addons/bootstrap/jquery.smartmenus.bootstrap.css" />
@@ -23,24 +23,24 @@
2323
<div class="navbar navbar-inverse navbar-fixed-top">
2424
<div class="container">
2525
<div class="navbar-header">
26-
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
27-
<span class="sr-only">Toggle navigation</span>
28-
<span class="icon-bar"></span>
26+
<button type="button" class="navbar-toggle" data-bs-toggle="collapse" data-bs-target=".navbar-collapse">
27+
<span class="visually-hidden">Toggle navigation</span>
28+
<span class="icon-bar">+</span>
2929
<span class="icon-bar"></span>
3030
<span class="icon-bar"></span>
3131
</button>
3232
<a asp-controller="Home" asp-action="Index" asp-area="" class="navbar-brand">NavigationDemo.Web</a>
3333
</div>
34-
<div class="navbar-collapse collapse">
35-
@await Component.InvokeAsync("Navigation", new { viewName = "Bootstrap4TopNavWithDropdowns", filterName = NamedNavigationFilters.TopNav, startingNodeKey= "" })
34+
<div class="collapse navbar-collapse">
35+
@await Component.InvokeAsync("Navigation", new { viewName = "Bootstrap5TopNavWithDropdowns", filterName = NamedNavigationFilters.TopNav, startingNodeKey= "" })
3636
@await Html.PartialAsync("_LoginPartial")
3737
</div>
3838
</div>
3939
</div>
4040
<div class="container body-content">
4141

4242
<p>------------------- Start breadcrumbs</p>
43-
@await Component.InvokeAsync("Navigation", new { viewName = "Bootstrap4Breadcrumbs", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = "" })
43+
@await Component.InvokeAsync("Navigation", new { viewName = "Bootstrap5Breadcrumbs", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = "" })
4444
<p>-------------------- End breadcrumbs</p>
4545

4646
@RenderBody()
@@ -52,25 +52,24 @@
5252
</div>
5353

5454
<environment names="Development">
55-
<script src="~/lib/jquery/dist/jquery.js"></script>
56-
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
57-
<script src="~/lib/smartmenus/dist/jquery.smartmenus.js"></script>
58-
<script src="~/lib/smartmenus/dist/addons/bootstrap/jquery.smartmenus.bootstrap.js"></script>
59-
55+
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js"></script>
56+
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js"></script>
57+
<script src="~/lib/smartmenus/bs4.smartmenus.min.js"></script>
6058
</environment>
59+
6160
<environment names="Staging,Production">
6261
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js"
6362
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
6463
asp-fallback-test="window.jQuery">
6564
</script>
66-
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/bootstrap.min.js"
65+
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js"
6766
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
6867
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal">
6968
</script>
7069
<script src="~/lib/smartmenus/dist/jquery.smartmenus.min.js"></script>
7170
<script src="~/lib/smartmenus/dist/addons/bootstrap/jquery.min.smartmenus.bootstrap.js"></script>
72-
7371
</environment>
72+
7473
<script>
7574
(function () {
7675
$("#selectLanguage select").change(function () {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
@using cloudscribe.Web.Navigation
2+
@model NavigationViewModel
3+
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
4+
@addTagHelper *, cloudscribe.Web.Navigation
5+
@using Microsoft.Extensions.Localization
6+
@inject IStringLocalizer<cloudscribe.Web.Navigation.MenuResources> sr
7+
@if ((Model.TempNode != null) && (await Model.HasVisibleChildren(Model.TempNode)))
8+
{
9+
<ul class="dropdown-menu" aria-labelledby="dropdown-@Model.TempNode.Value.Key">
10+
@foreach (var childNode in Model.TempNode.Children) {
11+
if (!await Model.ShouldAllowView(childNode)) { continue; }
12+
13+
if (childNode.Value.Text == "Separator") {
14+
<div class="dropdown-divider"></div>
15+
continue;
16+
}
17+
if (!await Model.HasVisibleChildren(childNode)) {
18+
<li class='@Model.GetClass(childNode.Value, "")'><a class="dropdown-item" href="@Url.Content(Model.AdjustUrl(childNode))">@Html.Raw(Model.GetIcon(childNode.Value))@sr[Model.AdjustText(childNode)]</a></li>
19+
}
20+
else {
21+
22+
<li class='@Model.GetClass(childNode.Value, "dropdown ", "active", true)'>
23+
<a class="dropdown-item dropdown-toggle" href="@Url.Content(Model.AdjustUrl(childNode))">@Html.Raw(Model.GetIcon(childNode.Value))@sr[Model.AdjustText(childNode)] </a>
24+
@Model.UpdateTempNode(childNode) <partial name="Bootstrap5NavigationNodeChildDropdownPartial" model="@Model" /> @* recursion *@
25+
</li>
26+
27+
}
28+
}
29+
</ul>
30+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
@using cloudscribe.Web.Navigation
2+
@model NavigationViewModel
3+
@using Microsoft.Extensions.Localization
4+
@inject IStringLocalizer<cloudscribe.Web.Navigation.MenuResources> sr
5+
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
6+
@if ((Model.TempNode != null) && (await Model.HasVisibleChildren(Model.TempNode)))
7+
{
8+
<ul class="list-unstyled ms-4">
9+
@foreach (var childNode in Model.TempNode.Children)
10+
{
11+
if (! await Model.ShouldAllowView(childNode)) { continue; }
12+
13+
if (! await Model.HasVisibleChildren(childNode))
14+
{
15+
<li class='nav-item'><a class="nav-link" href="@Url.Content(Model.AdjustUrl(childNode))">@Html.Raw(Model.GetIcon(childNode.Value))@sr[Model.AdjustText(childNode)]</a></li>
16+
}
17+
else
18+
{
19+
<li class='nav-item'>
20+
<a class="nav-link" href="@Url.Content(Model.AdjustUrl(childNode))">@Html.Raw(Model.GetIcon(childNode.Value))@sr[Model.AdjustText(childNode)]</a>
21+
@Model.UpdateTempNode(childNode) <partial name="Bs5NavigationNodeChildTreePartial" model="@Model" /> @* recursion *@
22+
</li>
23+
}
24+
}
25+
</ul>
26+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
@using cloudscribe.Web.Navigation
2+
@model NavigationViewModel
3+
@using Microsoft.Extensions.Localization
4+
@inject IStringLocalizer<cloudscribe.Web.Navigation.MenuResources> sr
5+
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
6+
@if ((Model.TempNode != null) && (await Model.HasVisibleChildren(Model.TempNode)))
7+
{
8+
<ul class="list-unstyled ms-4 ">
9+
10+
@foreach (var childNode in Model.TempNode.Children)
11+
{
12+
if (! await Model.ShouldAllowView(childNode)) { continue; }
13+
14+
if (! await Model.HasVisibleChildren(childNode))
15+
{
16+
if (childNode.EqualsNode(Model.CurrentNode))
17+
{
18+
<li class="nav-item"><a class="nav-link active" href="@Url.Content(Model.AdjustUrl(childNode))">@Html.Raw(Model.GetIcon(childNode.Value))@sr[childNode.Value.Text]</a></li>
19+
}
20+
else
21+
{
22+
<li class="nav-item"><a class="nav-link" href="@Url.Content(Model.AdjustUrl(childNode))">@Html.Raw(Model.GetIcon(childNode.Value))@sr[childNode.Value.Text]</a></li>
23+
}
24+
}
25+
else
26+
{
27+
if (childNode.EqualsNode(Model.CurrentNode))
28+
{
29+
<li class="nav-item">
30+
<a class="nav-link active" href="@Url.Content(Model.AdjustUrl(childNode))">
31+
@Html.Raw(Model.GetIcon(childNode.Value))@sr[childNode.Value.Text]
32+
</a>
33+
@Model.UpdateTempNode(childNode)
34+
<partial name="Bs5SideNavPartial" model="@Model" /> @* recursion *@
35+
</li>
36+
}
37+
else
38+
{
39+
<li class="nav-item">
40+
<a class="nav-link" href="@Url.Content(Model.AdjustUrl(childNode))">
41+
@Html.Raw(Model.GetIcon(childNode.Value))@sr[childNode.Value.Text]
42+
</a>
43+
@Model.UpdateTempNode(childNode)
44+
<partial name="Bs5SideNavPartial" model="@Model" /> @* recursion *@
45+
</li>
46+
}
47+
}
48+
}
49+
</ul>
50+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
@using cloudscribe.Web.Navigation
2+
@model NavigationViewModel
3+
@using Microsoft.Extensions.Localization
4+
@inject IStringLocalizer<cloudscribe.Web.Navigation.MenuResources> sr
5+
@if (Model.CurrentNode != null && (Model.ParentChain.Count > 1 || (Model.TailCrumbs != null && Model.TailCrumbs.Count > 0)))
6+
{
7+
<nav aria-label="breadcrumb">
8+
<ol class="breadcrumb">
9+
@foreach (var node in Model.ParentChain)
10+
{
11+
if (! await Model.ShouldAllowView(node)) { continue; }
12+
if (node.EqualsNode(Model.CurrentNode))
13+
{
14+
if (Model.TailCrumbs != null)
15+
{
16+
<li class="breadcrumb-item"><a href="@Url.Content(Model.AdjustUrl(node))">@sr[Model.AdjustText(node)]</a></li>
17+
}
18+
else
19+
{
20+
<li class="breadcrumb-item active">@sr[Model.AdjustText(node)]</li>
21+
}
22+
}
23+
else
24+
{
25+
<li class="breadcrumb-item"><a href="@Url.Content(Model.AdjustUrl(node))">@sr[Model.AdjustText(node)]</a></li>
26+
}
27+
}
28+
@if (Model.TailCrumbs != null)
29+
{
30+
foreach (var n in Model.TailCrumbs)
31+
{
32+
<li class="breadcrumb-item active">@sr[n.Text]</li>
33+
}
34+
}
35+
</ol>
36+
</nav>
37+
38+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
@using cloudscribe.Web.Navigation
2+
@using System.Text
3+
@model NavigationViewModel
4+
@using Microsoft.Extensions.Localization
5+
@inject IStringLocalizer<cloudscribe.Web.Navigation.MenuResources> sr
6+
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
7+
@addTagHelper *, cloudscribe.Web.Navigation
8+
9+
<ul class="navbar-nav me-auto" role="menubar">
10+
@if (await Model.ShouldAllowView(Model.RootNode))
11+
{
12+
<li cwn-data-attributes="@Model.RootNode.Value.DataAttributes" class='@Model.GetClass(Model.RootNode.Value, "nav-item")'><a class="nav-link" href="@Url.Content(Model.AdjustUrl(Model.RootNode))">@Html.Raw(Model.GetIcon(Model.RootNode.Value))@sr[Model.AdjustText(Model.RootNode)]</a></li>
13+
}
14+
15+
@if (await Model.HasVisibleChildren(Model.RootNode))
16+
{
17+
@foreach (var node in Model.RootNode.Children)
18+
{
19+
if (!await Model.ShouldAllowView(node)) { continue; }
20+
if (!await Model.HasVisibleChildren(node))
21+
{
22+
<li class='@Model.GetClass(node.Value, "nav-item")' cwn-data-attributes="@node.Value.DataAttributes"><a class="nav-link" href="@Url.Content(Model.AdjustUrl(node))">@Html.Raw(Model.GetIcon(node.Value))@sr[Model.AdjustText(node)]</a></li>
23+
}
24+
else
25+
{
26+
<li class='@Model.GetClass(node.Value, "nav-item dropdown", "active", true)' cwn-data-attributes="@node.Value.DataAttributes">
27+
<a class="nav-link dropdown-toggle" id="dropdown-@node.Value.Key" aria-haspopup="true" aria-expanded="false" href="@Url.Content(Model.AdjustUrl(node))">@Html.Raw(Model.GetIcon(node.Value))@sr[Model.AdjustText(node)] </a>
28+
@Model.UpdateTempNode(node) <partial name="Bootstrap5NavigationNodeChildDropdownPartial" model="@Model" />
29+
</li>
30+
}
31+
}
32+
}
33+
</ul>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
@using cloudscribe.Web.Navigation
2+
@using System.Text
3+
@model NavigationViewModel
4+
@using Microsoft.Extensions.Localization
5+
@inject IStringLocalizer<cloudscribe.Web.Navigation.MenuResources> sr
6+
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
7+
@if (await Model.HasVisibleChildren(Model.CurrentNode))
8+
{
9+
<nav>
10+
<ul class="childtree list-unstyled">
11+
@foreach (var node in Model.CurrentNode.Children)
12+
{
13+
if (! await Model.ShouldAllowView(node)) { continue; }
14+
if (! await Model.HasVisibleChildren(node))
15+
{
16+
<li class='nav-item'><a class='nav-link' href="@Url.Content(Model.AdjustUrl(node))">@Html.Raw(Model.GetIcon(node.Value))@sr[Model.AdjustText(node)]</a></li>
17+
}
18+
else
19+
{
20+
<li class='nav-item'>
21+
<a class="nav-link" href="@Url.Content(Model.AdjustUrl(node))">@Html.Raw(Model.GetIcon(node.Value))@sr[Model.AdjustText(node)]</a>
22+
@Model.UpdateTempNode(node) <partial name="Bs5NavigationNodeChildTreePartial" model="@Model" />
23+
</li>
24+
}
25+
}
26+
</ul>
27+
</nav>
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
@using cloudscribe.Web.Navigation
2+
@using System.Text
3+
@model NavigationViewModel
4+
@using Microsoft.Extensions.Localization
5+
@inject IStringLocalizer<cloudscribe.Web.Navigation.MenuResources> sr
6+
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
7+
@if (await Model.HasVisibleChildren(Model.CurrentNode))
8+
{
9+
<nav>
10+
<ul class="childtree list-unstyled">
11+
@foreach (var node in Model.CurrentNode.Children)
12+
{
13+
if (! await Model.ShouldAllowView(node)) { continue; }
14+
if (! await Model.HasVisibleChildren(node))
15+
{
16+
<li class='nav-item'><a class='nav-link' href="@Url.Content(Model.AdjustUrl(node))">@Html.Raw(Model.GetIcon(node.Value))@sr[Model.AdjustText(node)]</a></li>
17+
}
18+
else
19+
{
20+
<li class='nav-item'>
21+
<a class="nav-link" href="@Url.Content(Model.AdjustUrl(node))">@Html.Raw(Model.GetIcon(node.Value))@sr[Model.AdjustText(node)]</a>
22+
@Model.UpdateTempNode(node) <partial name="Bs5NavigationNodeChildTreePartial" model="@Model" />
23+
</li>
24+
}
25+
}
26+
</ul>
27+
</nav>
28+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
@using cloudscribe.Web.Navigation
2+
@using System.Text
3+
@using Microsoft.Extensions.Localization
4+
@inject IStringLocalizer<cloudscribe.Web.Navigation.MenuResources> sr
5+
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
6+
@model NavigationViewModel
7+
@if (await Model.HasVisibleChildren(Model.StartingNode))
8+
{
9+
<ul class="nav nav-pills flex-column" id="side-menu">
10+
@foreach (var node in Model.StartingNode.Children)
11+
{
12+
if (! await Model.ShouldAllowView(node)) { continue; }
13+
if (! await Model.HasVisibleChildren(node))
14+
{
15+
<li class="nav-item"><a class="nav-link @(node.EqualsNode(Model.CurrentNode) ? "active" : "")" href="@Url.Content(Model.AdjustUrl(node))">@Html.Raw(Model.GetIcon(node.Value))@sr[Model.AdjustText(node)]</a></li>
16+
}
17+
else
18+
{
19+
<li class="nav-item">
20+
<a class="nav-link @(node.EqualsNode(Model.CurrentNode) ? "active" : "")" href="@Url.Content(Model.AdjustUrl(node))">@Html.Raw(Model.GetIcon(node.Value))@sr[Model.AdjustText(node)]</a>
21+
@Model.UpdateTempNode(node)
22+
<partial name="Bs5SideNavPartial" model="@Model" />
23+
</li>
24+
}
25+
}
26+
</ul>
27+
}

src/cloudscribe.Web.Navigation/cloudscribe.Web.Navigation.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<Description>an ASP.NET Core viewcomponent for menus and breadcrumbs</Description>
5-
<Version>5.0.0</Version>
5+
<Version>5.0.1</Version>
66
<TargetFramework>net5.0</TargetFramework>
77
<Authors>Joe Audette</Authors>
88
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>

0 commit comments

Comments
 (0)