Skip to content

Commit d5e2778

Browse files
committed
add bootstrap4 views
1 parent d090bb1 commit d5e2778

10 files changed

Lines changed: 251 additions & 8 deletions

src/NavigationDemo.Web/web.config

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<configuration>
3-
43
<!--
54
Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
65
-->
7-
86
<system.webServer>
97
<handlers>
10-
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
8+
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
119
</handlers>
12-
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
10+
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" startupTimeLimit="3600" requestTimeout="23:00:00" />
1311
</system.webServer>
14-
</configuration>
12+
</configuration>

src/cloudscribe.Web.Navigation/ServiceCollectionExtensions.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,21 @@ public static RazorViewEngineOptions AddCloudscribeNavigationBootstrap3Views(thi
7373
return options;
7474
}
7575

76+
/// <summary>
77+
/// both bootstrap 3 and 4 views are included in this library
78+
/// </summary>
79+
/// <param name="options"></param>
80+
/// <returns></returns>
81+
public static RazorViewEngineOptions AddCloudscribeNavigationBootstrap4Views(this RazorViewEngineOptions options)
82+
{
83+
options.FileProviders.Add(new EmbeddedFileProvider(
84+
typeof(NavigationOptions).GetTypeInfo().Assembly,
85+
"cloudscribe.Web.Navigation"
86+
));
87+
88+
return options;
89+
}
90+
7691

7792

7893
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
@using cloudscribe.Web.Navigation
2+
@model NavigationViewModel
3+
@addTagHelper *, cloudscribe.Web.Navigation
4+
@if ((Model.TempNode != null) && (Model.HasVisibleChildren(Model.TempNode)))
5+
{
6+
<ul class="dropdown-menu" aria-labelledby="dropdown-@Model.TempNode.Value.Key">
7+
@foreach (var childNode in Model.TempNode.Children)
8+
{
9+
if (!Model.ShouldAllowView(childNode)) { continue; }
10+
11+
@*if (childNode.Value.Text == "Separator")
12+
{
13+
<li class="divider"></li>
14+
continue;
15+
}*@
16+
if (!Model.HasVisibleChildren(childNode))
17+
{
18+
<li class='@Model.GetClass(childNode.Value, "")'><a class="dropdown-item" href="@Url.Content(Model.AdjustUrl(childNode))">@Html.Raw(Model.GetIcon(childNode.Value))@Model.AdjustText(childNode)</a></li>
19+
}
20+
else
21+
{
22+
23+
<li class='@Model.GetClass(childNode.Value, "dropdown ", "active", true)'>
24+
<a class="dropdown-item dropdown-toggle" href="@Url.Content(Model.AdjustUrl(childNode))">@Html.Raw(Model.GetIcon(childNode.Value))@Model.AdjustText(childNode) </a>
25+
@Model.UpdateTempNode(childNode)@Html.Partial("Bootstrap4NavigationNodeChildDropdownPartial", Model) @* recursion *@
26+
</li>
27+
28+
}
29+
}
30+
</ul>
31+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
@using cloudscribe.Web.Navigation
2+
@model NavigationViewModel
3+
@if ((Model.TempNode != null) && (Model.HasVisibleChildren(Model.TempNode)))
4+
{
5+
<ul class="list-unstyled ml-4">
6+
@foreach (var childNode in Model.TempNode.Children)
7+
{
8+
if (!Model.ShouldAllowView(childNode)) { continue; }
9+
10+
if (!Model.HasVisibleChildren(childNode))
11+
{
12+
<li class='nav-item'><a class="nav-link" href="@Url.Content(Model.AdjustUrl(childNode))">@Html.Raw(Model.GetIcon(childNode.Value))@Model.AdjustText(childNode)</a></li>
13+
}
14+
else
15+
{
16+
<li class='nav-item'>
17+
<a class="nav-link" href="@Url.Content(Model.AdjustUrl(childNode))">@Html.Raw(Model.GetIcon(childNode.Value))@Model.AdjustText(childNode)</a>
18+
@Model.UpdateTempNode(childNode)@Html.Partial("Bs4NavigationNodeChildTreePartial", Model) @* recursion *@
19+
</li>
20+
}
21+
}
22+
</ul>
23+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
@using cloudscribe.Web.Navigation
2+
@model NavigationViewModel
3+
@if ((Model.TempNode != null) && (Model.HasVisibleChildren(Model.TempNode)))
4+
{
5+
<ul class="list-unstyled ml-4 ">
6+
7+
@foreach (var childNode in Model.TempNode.Children)
8+
{
9+
if (!Model.ShouldAllowView(childNode)) { continue; }
10+
11+
if (!Model.HasVisibleChildren(childNode))
12+
{
13+
if (childNode.EqualsNode(Model.CurrentNode))
14+
{
15+
<li class="nav-item"><a class="nav-link active" href="@Url.Content(Model.AdjustUrl(childNode))">@Html.Raw(Model.GetIcon(childNode.Value))@childNode.Value.Text</a></li>
16+
}
17+
else
18+
{
19+
<li class="nav-item"><a class="nav-link" href="@Url.Content(Model.AdjustUrl(childNode))">@Html.Raw(Model.GetIcon(childNode.Value))@childNode.Value.Text</a></li>
20+
}
21+
}
22+
else
23+
{
24+
if (childNode.EqualsNode(Model.CurrentNode))
25+
{
26+
<li class="nav-item">
27+
<a class="nav-link active" href="@Url.Content(Model.AdjustUrl(childNode))">
28+
@Html.Raw(Model.GetIcon(childNode.Value))@childNode.Value.Text
29+
</a>
30+
@Model.UpdateTempNode(childNode)
31+
@Html.Partial("SideNavPartial", Model) @* recursion *@
32+
</li>
33+
}
34+
else
35+
{
36+
<li class="nav-item">
37+
<a class="nav-link" href="@Url.Content(Model.AdjustUrl(childNode))">
38+
@Html.Raw(Model.GetIcon(childNode.Value))@childNode.Value.Text
39+
</a>
40+
@Model.UpdateTempNode(childNode)
41+
@Html.Partial("Bs4SideNavPartial", Model) @* recursion *@
42+
</li>
43+
}
44+
}
45+
}
46+
</ul>
47+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
@using cloudscribe.Web.Navigation
2+
@model NavigationViewModel
3+
@if (Model.CurrentNode != null && (Model.ParentChain.Count > 1 || (Model.TailCrumbs != null && Model.TailCrumbs.Count > 0)))
4+
{
5+
<nav aria-label="breadcrumb">
6+
<ol class="breadcrumb">
7+
@foreach (var node in Model.ParentChain)
8+
{
9+
if (!Model.ShouldAllowView(node)) { continue; }
10+
if (node.EqualsNode(Model.CurrentNode))
11+
{
12+
if (Model.TailCrumbs != null)
13+
{
14+
<li class="breadcrumb-item"><a href="@Url.Content(Model.AdjustUrl(node))">@Model.AdjustText(node)</a></li>
15+
}
16+
else
17+
{
18+
<li class="breadcrumb-item active">@Model.AdjustText(node)</li>
19+
}
20+
}
21+
else
22+
{
23+
<li class="breadcrumb-item"><a href="@Url.Content(Model.AdjustUrl(node))">@Model.AdjustText(node)</a></li>
24+
}
25+
}
26+
@if (Model.TailCrumbs != null)
27+
{
28+
foreach (var n in Model.TailCrumbs)
29+
{
30+
<li class="breadcrumb-item active">@n.Text</li>
31+
}
32+
}
33+
</ol>
34+
</nav>
35+
36+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
@using cloudscribe.Web.Navigation
2+
@using System.Text
3+
@model NavigationViewModel
4+
@addTagHelper *, cloudscribe.Web.Navigation
5+
6+
<ul class="navbar-nav mr-auto" role="menubar">
7+
<li role="presentation" 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))@Model.AdjustText(Model.RootNode)</a></li>
8+
@if (Model.HasVisibleChildren(Model.RootNode))
9+
{
10+
@foreach (var node in Model.RootNode.Children)
11+
{
12+
if (!Model.ShouldAllowView(node)) { continue; }
13+
if (!Model.HasVisibleChildren(node))
14+
{
15+
<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))@Model.AdjustText(node)</a></li>
16+
}
17+
else
18+
{
19+
<li class='@Model.GetClass(node.Value, "nav-item dropdown", "active", true)' cwn-data-attributes="@node.Value.DataAttributes">
20+
<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))@Model.AdjustText(node) </a>
21+
@Model.UpdateTempNode(node)@Html.Partial("Bootstrap4NavigationNodeChildDropdownPartial", Model)
22+
</li>
23+
}
24+
}
25+
}
26+
</ul>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
@using cloudscribe.Web.Navigation
2+
@using System.Text
3+
@model NavigationViewModel
4+
@if (Model.HasVisibleChildren(Model.CurrentNode))
5+
{
6+
<nav>
7+
<ul class="childtree list-unstyled">
8+
@foreach (var node in Model.CurrentNode.Children)
9+
{
10+
if (!Model.ShouldAllowView(node)) { continue; }
11+
if (!Model.HasVisibleChildren(node))
12+
{
13+
<li class='nav-item'><a class='nav-link' href="@Url.Content(Model.AdjustUrl(node))">@Html.Raw(Model.GetIcon(node.Value))@Model.AdjustText(node)</a></li>
14+
}
15+
else
16+
{
17+
<li class='nav-item'>
18+
<a class="nav-link" href="@Url.Content(Model.AdjustUrl(node))">@Html.Raw(Model.GetIcon(node.Value))@Model.AdjustText(node)</a>
19+
@Model.UpdateTempNode(node)@Html.Partial("Bs4NavigationNodeChildTreePartial", Model)
20+
</li>
21+
}
22+
}
23+
</ul>
24+
</nav>
25+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
@using cloudscribe.Web.Navigation
2+
@using System.Text
3+
@model NavigationViewModel
4+
@if (Model.HasVisibleChildren(Model.StartingNode))
5+
{
6+
<ul class="nav nav-pills flex-column" id="side-menu">
7+
@foreach (var node in Model.StartingNode.Children)
8+
{
9+
if (!Model.ShouldAllowView(node)) { continue; }
10+
if (!Model.HasVisibleChildren(node))
11+
{
12+
if (node.EqualsNode(Model.CurrentNode))
13+
{
14+
<li class="nav-item"><a class="nav-link active" href="@Url.Content(Model.AdjustUrl(node))">@Html.Raw(Model.GetIcon(node.Value))@Model.AdjustText(node)</a></li>
15+
}
16+
else
17+
{
18+
<li class="nav-item"><a class="nav-link" href="@Url.Content(Model.AdjustUrl(node))">@Html.Raw(Model.GetIcon(node.Value))@Model.AdjustText(node)</a></li>
19+
}
20+
}
21+
else
22+
{
23+
if (node.EqualsNode(Model.CurrentNode))
24+
{
25+
<li class="nav-item">
26+
<a class="nav-link active" href="@Url.Content(Model.AdjustUrl(node))">@Html.Raw(Model.GetIcon(node.Value))@Model.AdjustText(node)</a>
27+
@Model.UpdateTempNode(node)
28+
@Html.Partial("SideNavPartial", Model)
29+
</li>
30+
}
31+
else
32+
{
33+
<li class="nav-item">
34+
<a class="nav-link" href="@Url.Content(Model.AdjustUrl(node))">@Html.Raw(Model.GetIcon(node.Value))@Model.AdjustText(node)</a>
35+
@Model.UpdateTempNode(node)
36+
@Html.Partial("Bs4SideNavPartial", Model)
37+
</li>
38+
}
39+
}
40+
}
41+
</ul>
42+
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
<PropertyGroup>
44
<Description>an ASP.NET Core viewcomponent for menus and breadcrumbs</Description>
5-
<VersionPrefix>2.0.9</VersionPrefix>
6-
<AssemblyVersion>2.0.9</AssemblyVersion>
5+
<VersionPrefix>2.0.10</VersionPrefix>
6+
<AssemblyVersion>2.0.10</AssemblyVersion>
77
<Authors>Joe Audette</Authors>
88
<TargetFrameworks>netstandard2.0</TargetFrameworks>
99
<AssemblyName>cloudscribe.Web.Navigation</AssemblyName>
@@ -25,7 +25,7 @@
2525
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="2.0.*" />
2626
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.0.*" />
2727
<PackageReference Include="Microsoft.Extensions.Options" Version="2.0.*" />
28-
<PackageReference Include="Newtonsoft.Json" Version="10.0.*" />
28+
<PackageReference Include="Newtonsoft.Json" Version="11.0.*" />
2929
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.0.*" />
3030
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor" Version="2.0.*" />
3131
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="2.0.*" />

0 commit comments

Comments
 (0)