Skip to content

Commit 6d68c8d

Browse files
authored
Feature sample deployment (#179)
* Packaging of ServerSide Sample for Docker
1 parent 32270af commit 6d68c8d

35 files changed

+1575
-258
lines changed

.dockerignore

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
**/.classpath
2+
**/.dockerignore
3+
**/.env
4+
**/.git
5+
**/.gitignore
6+
**/.project
7+
**/.settings
8+
**/.toolstarget
9+
**/.vs
10+
**/.vscode
11+
**/*.*proj.user
12+
**/*.dbmdl
13+
**/*.jfm
14+
**/azds.yaml
15+
**/bin
16+
**/charts
17+
**/docker-compose*
18+
**/Dockerfile*
19+
**/node_modules
20+
**/npm-debug.log
21+
**/obj
22+
**/secrets.dev.yaml
23+
**/values.dev.yaml
24+
LICENSE
25+
README.md

BlazorMeetsWebForms.sln

Lines changed: 152 additions & 137 deletions
Large diffs are not rendered by default.

global.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"sdk": {
3-
"version": "3.1.100"
3+
"version": "3.1.300"
44
}
55
}

samples/AfterBlazorServerSide/AfterBlazorServerSide.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
<PropertyGroup>
44
<TargetFramework>netcoreapp3.1</TargetFramework>
5+
<UserSecretsId>52f991fe-af6a-4f37-b2a1-d0219aa062e7</UserSecretsId>
6+
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
7+
<DockerfileContext>..\..</DockerfileContext>
58
</PropertyGroup>
69

710
<ItemGroup>
@@ -11,6 +14,7 @@
1114

1215
<ItemGroup>
1316
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.0" />
17+
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.6" />
1418
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.0" />
1519
</ItemGroup>
1620

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
2+
3+
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
4+
WORKDIR /app
5+
EXPOSE 80
6+
EXPOSE 443
7+
8+
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
9+
WORKDIR /src
10+
COPY ["samples/AfterBlazorServerSide/AfterBlazorServerSide.csproj", "samples/AfterBlazorServerSide/"]
11+
COPY ["src/BlazorWebFormsComponents/BlazorWebFormsComponents.csproj", "src/BlazorWebFormsComponents/"]
12+
COPY ["samples/SharedSampleObjects/SharedSampleObjects.csproj", "samples/SharedSampleObjects/"]
13+
RUN dotnet restore "samples/AfterBlazorServerSide/AfterBlazorServerSide.csproj"
14+
COPY . .
15+
WORKDIR "/src/samples/AfterBlazorServerSide"
16+
RUN dotnet build "AfterBlazorServerSide.csproj" -c Release -o /app/build
17+
18+
FROM build AS publish
19+
RUN dotnet publish "AfterBlazorServerSide.csproj" -c Release -o /app/publish
20+
21+
FROM base AS final
22+
WORKDIR /app
23+
COPY --from=publish /app/publish .
24+
ENTRYPOINT ["dotnet", "AfterBlazorServerSide.dll"]

samples/AfterBlazorServerSide/Pages/Index.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@
88
that our Blazor components render appropriately.
99
</p>
1010

11-
<ComponentList></ComponentList>
11+
<ComponentList></ComponentList>

samples/AfterBlazorServerSide/Pages/_Host.cshtml

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,30 @@
1616
<link href="css/site.css" rel="stylesheet" />
1717
</head>
1818
<body>
19-
<app>
20-
<component type="typeof(App)" render-mode="ServerPrerendered" />
21-
</app>
19+
<app>
20+
<component type="typeof(App)" render-mode="ServerPrerendered" />
21+
</app>
2222

23-
<div id="blazor-error-ui">
24-
<environment include="Staging,Production">
25-
An error has occurred. This application may no longer respond until reloaded.
26-
</environment>
27-
<environment include="Development">
28-
An unhandled exception has occurred. See browser dev tools for details.
29-
</environment>
30-
<a href="" class="reload">Reload</a>
31-
<a class="dismiss">🗙</a>
32-
</div>
23+
<div id="blazor-error-ui">
24+
<environment include="Staging,Production">
25+
An error has occurred. This application may no longer respond until reloaded.
26+
</environment>
27+
<environment include="Development">
28+
An unhandled exception has occurred. See browser dev tools for details.
29+
</environment>
30+
<a href="" class="reload">Reload</a>
31+
<a class="dismiss">🗙</a>
32+
</div>
3333

34-
<script src="_framework/blazor.server.js"></script>
34+
<footer>
35+
36+
This site was built with ♥♥ and <a href="https://blazor.net">Blazor</a>, <a href="https://dot.net">Open Source C#</a>, <a href="https://www.asp.net">ASP.NET 3.1</a>, and the <a target="_blank" href="https://github.com/FritzAndFriends/BlazorWebFormsComponents/">BlazorWebFormsComponents</a>
37+
<br />
38+
<strong>BlazorWebFormsComponents @($"v{Startup.ComponentVersion.Major}.{Startup.ComponentVersion.Minor}.{Startup.ComponentVersion.Revision}")</strong>
39+
40+
</footer>
41+
42+
<script src="_framework/blazor.server.js"></script>
3543
<script src="_content/Fritz.BlazorWebFormsComponents/js/Basepage.js"></script>
3644
</body>
3745
</html>
Lines changed: 105 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -1,104 +1,105 @@
1-
@using BlazorWebFormsComponents
2-
@using static BlazorWebFormsComponents.Enums.TreeViewImageSet
3-
4-
<div class="top-row pl-4 navbar navbar-dark">
5-
<a class="navbar-brand" href="">BlazorWebFormsComponents<br/>@Startup.ApplicationName</a>
6-
<button class="navbar-toggler" @onclick="ToggleNavMenu">
7-
<span class="navbar-toggler-icon"></span>
8-
</button>
9-
</div>
10-
11-
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
12-
<TreeView CssClass="nav-item" ImageSet="_Default">
13-
<Nodes>
14-
15-
<TreeNode Text="Home" NavigateUrl="/">
16-
17-
<TreeNode Text="Editor Components">
18-
<TreeNode Text="Button" NavigateUrl="/ControlSamples/Button">
19-
<TreeNode Text="JavaScript Click" NavigateUrl="/ControlSamples/Button/JavaScript" />
20-
</TreeNode>
21-
<TreeNode Text="LinkButton" NavigateUrl="/ControlSamples/LinkButton">
22-
<TreeNode Text="JavaScript Click" NavigateUrl="/ControlSamples/LinkButton/JavaScript" />
23-
</TreeNode>
24-
<TreeNode Text="Literal" NavigateUrl="/ControlSamples/Literal" />
25-
</TreeNode>
26-
<TreeNode Text="Data Components">
27-
28-
<TreeNode Text="DataList" NavigateUrl="/ControlSamples/DataList" Expanded="false">
29-
<TreeNode NavigateUrl="/ControlSamples/DataList" Text="Simple Table" />
30-
<TreeNode NavigateUrl="/ControlSamples/DataList/Flow" Text="Simple Flow" />
31-
<TreeNode NavigateUrl="/ControlSamples/DataList/HeaderStyle" Text="Header Style" />
32-
<TreeNode NavigateUrl="/ControlSamples/DataList/FooterStyle" Text="Footer Style" />
33-
<TreeNode NavigateUrl="/ControlSamples/DataList/ComplexStyle" Text="Complex Style" />
34-
<TreeNode NavigateUrl="/ControlSamples/DataList/RepeatColumns" Text="Repeat Columns" />
35-
</TreeNode>
36-
37-
<TreeNode Text="ListView" NavigateUrl="/ControlSamples/ListView" Expanded="false">
38-
<TreeNode NavigateUrl="/ControlSamples/ListView" Text="Simple List View"></TreeNode>
39-
<TreeNode NavigateUrl="./ControlSamples/ListView/ModelBinding" Text="ModelBinding Sample"></TreeNode>
40-
<TreeNode NavigateUrl="./ControlSamples/ListView/Grouping" Text="Grouping Sample"></TreeNode>
41-
<TreeNode NavigateUrl="./ControlSamples/ListView/LayoutTest" Text="Layout Test"></TreeNode>
42-
</TreeNode>
43-
44-
<TreeNode Text="Repeater" NavigateUrl="/ControlSamples/Repeater" Expanded="false">
45-
46-
</TreeNode>
47-
48-
</TreeNode>
49-
50-
<TreeNode Text="Validation Components">
51-
52-
<TreeNode Text="Custom Validator" NavigateUrl="/ControlSamples/CustomValidator"></TreeNode>
53-
<TreeNode Text="Regular Expression" NavigateUrl="/ControlSamples/RegularExpressionValidator"></TreeNode>
54-
<TreeNode Text="Required Field" NavigateUrl="/ControlSamples/RequiredFieldValidator"></TreeNode>
55-
<TreeNode Text="Compare" NavigateUrl="/ControlSamples/CompareValidator"></TreeNode>
56-
<TreeNode Text="Range" NavigateUrl="/ControlSamples/RangeValidator"></TreeNode>
57-
<TreeNode Text="Validation Summary" NavigateUrl="/ControlSamples/ValidationSummary"></TreeNode>
58-
59-
</TreeNode>
60-
61-
<TreeNode Text="Navigation Components">
62-
63-
<TreeNode Text="TreeView" NavigateUrl="/ControlSamples/TreeView" Expanded="false">
64-
<TreeNode Text="Arrows ImageSet" NavigateUrl="/ControlSamples/TreeView/ArrowsImages"></TreeNode>
65-
<TreeNode Text="Bullets ImageSet" NavigateUrl="/ControlSamples/TreeView/BulletImages"></TreeNode>
66-
<TreeNode Text="Bullets No Expand" NavigateUrl="/ControlSamples/TreeView/BulletsNoExpand"></TreeNode>
67-
<TreeNode Text="Images" NavigateUrl="/ControlSamples/TreeView/Images"></TreeNode>
68-
<TreeNode Text="Show Lines" NavigateUrl="/ControlSamples/TreeView/ShowLines"></TreeNode>
69-
<TreeNode Text="Static TreeView" NavigateUrl="/ControlSamples/TreeView"></TreeNode>
70-
<TreeNode Text="SiteMap Data Source" NavigateUrl="/ControlSamples/TreeView/SiteMapDataSource"></TreeNode>
71-
<TreeNode Text="XML Data Source" NavigateUrl="/ControlSamples/TreeView/XmlDataSource"></TreeNode>
72-
</TreeNode>
73-
74-
</TreeNode>
75-
76-
<TreeNode Text="Login Components">
77-
78-
<TreeNode Text="LoginName" NavigateUrl="/ControlSamples/LoginName"></TreeNode>
79-
<TreeNode Text="Login" NavigateUrl="/ControlSamples/Login"></TreeNode>
80-
<TreeNode Text="LoginStatus" Expanded="false">
81-
82-
<TreeNode Text="Authenticated" NavigateUrl="/ControlSamples/LoginStatusAuthenticated"></TreeNode>
83-
<TreeNode Text="Not Authenticated" NavigateUrl="/ControlSamples/LoginStatusNotAuthenticated"></TreeNode>
84-
85-
</TreeNode>
86-
87-
</TreeNode>
88-
89-
</TreeNode>
90-
91-
</Nodes>
92-
</TreeView>
93-
</div>
94-
95-
@code {
96-
private bool collapseNavMenu = true;
97-
98-
private string NavMenuCssClass => collapseNavMenu ? "collapse" : null;
99-
100-
private void ToggleNavMenu()
101-
{
102-
collapseNavMenu = !collapseNavMenu;
103-
}
104-
}
1+
@using BlazorWebFormsComponents
2+
@using static BlazorWebFormsComponents.Enums.TreeViewImageSet
3+
4+
<div class="top-row pl-4 navbar navbar-dark">
5+
<a class="navbar-brand" href="">BlazorWebFormsComponents<br/>@Startup.ApplicationName</a>
6+
<button class="navbar-toggler" @onclick="ToggleNavMenu">
7+
<span class="navbar-toggler-icon"></span>
8+
</button>
9+
</div>
10+
11+
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
12+
<TreeView CssClass="nav-item" ImageSet="_Default">
13+
<Nodes>
14+
15+
<TreeNode Text="Home" NavigateUrl="/">
16+
17+
<TreeNode Text="Editor Components">
18+
<TreeNode Text="Button" NavigateUrl="/ControlSamples/Button">
19+
<TreeNode Text="JavaScript Click" NavigateUrl="/ControlSamples/Button/JavaScript" />
20+
</TreeNode>
21+
</TreeNode>
22+
<TreeNode Text="Data Components">
23+
24+
<TreeNode Text="DataList" NavigateUrl="/ControlSamples/DataList" Expanded="false">
25+
<TreeNode NavigateUrl="/ControlSamples/DataList" Text="Simple Table" />
26+
<TreeNode NavigateUrl="/ControlSamples/DataList/Flow" Text="Simple Flow" />
27+
<TreeNode NavigateUrl="/ControlSamples/DataList/HeaderStyle" Text="Header Style" />
28+
<TreeNode NavigateUrl="/ControlSamples/DataList/FooterStyle" Text="Footer Style" />
29+
<TreeNode NavigateUrl="/ControlSamples/DataList/ComplexStyle" Text="Complex Style" />
30+
<TreeNode NavigateUrl="/ControlSamples/DataList/RepeatColumns" Text="Repeat Columns" />
31+
</TreeNode>
32+
33+
<TreeNode Text="GridView" NavigateUrl="/ControlSamples/GridView" Expanded="true">
34+
<TreeNode NavigateUrl="/ControlSamples/GridView" Text="Simple GridView" />
35+
<TreeNode NavigateUrl="/ControlSamples/GridView/AutoGeneratedColumns" Text="Autogenerated Columns" />
36+
<TreeNode NavigateUrl="/ControlSamples/GridView/TemplateFields" Text="Template Fields" />
37+
</TreeNode>
38+
<TreeNode Text="ListView" NavigateUrl="/ControlSamples/ListView" Expanded="false">
39+
<TreeNode NavigateUrl="/ControlSamples/ListView" Text="Simple List View"></TreeNode>
40+
<TreeNode NavigateUrl="./ControlSamples/ListView/ModelBinding" Text="ModelBinding Sample"></TreeNode>
41+
<TreeNode NavigateUrl="./ControlSamples/ListView/Grouping" Text="Grouping Sample"></TreeNode>
42+
<TreeNode NavigateUrl="./ControlSamples/ListView/LayoutTest" Text="Layout Test"></TreeNode>
43+
</TreeNode>
44+
45+
<TreeNode Text="Repeater" NavigateUrl="/ControlSamples/Repeater" Expanded="false">
46+
47+
</TreeNode>
48+
49+
</TreeNode>
50+
51+
<TreeNode Text="Validation Components">
52+
53+
<TreeNode Text="Custom Validator" NavigateUrl="/ControlSamples/CustomValidator"></TreeNode>
54+
<TreeNode Text="Regular Expression" NavigateUrl="/ControlSamples/RegularExpressionValidator"></TreeNode>
55+
<TreeNode Text="Required Field" NavigateUrl="/ControlSamples/RequiredFieldValidator"></TreeNode>
56+
<TreeNode Text="Compare" NavigateUrl="/ControlSamples/CompareValidator"></TreeNode>
57+
<TreeNode Text="Range" NavigateUrl="/ControlSamples/RangeValidator"></TreeNode>
58+
<TreeNode Text="Validation Summary" NavigateUrl="/ControlSamples/ValidationSummary"></TreeNode>
59+
60+
</TreeNode>
61+
62+
<TreeNode Text="Navigation Components">
63+
64+
<TreeNode Text="TreeView" NavigateUrl="/ControlSamples/TreeView" Expanded="false">
65+
<TreeNode Text="Arrows ImageSet" NavigateUrl="/ControlSamples/TreeView/ArrowsImages"></TreeNode>
66+
<TreeNode Text="Bullets ImageSet" NavigateUrl="/ControlSamples/TreeView/BulletImages"></TreeNode>
67+
<TreeNode Text="Bullets No Expand" NavigateUrl="/ControlSamples/TreeView/BulletsNoExpand"></TreeNode>
68+
<TreeNode Text="Images" NavigateUrl="/ControlSamples/TreeView/Images"></TreeNode>
69+
<TreeNode Text="Show Lines" NavigateUrl="/ControlSamples/TreeView/ShowLines"></TreeNode>
70+
<TreeNode Text="Static TreeView" NavigateUrl="/ControlSamples/TreeView"></TreeNode>
71+
<TreeNode Text="SiteMap Data Source" NavigateUrl="/ControlSamples/TreeView/SiteMapDataSource"></TreeNode>
72+
<TreeNode Text="XML Data Source" NavigateUrl="/ControlSamples/TreeView/XmlDataSource"></TreeNode>
73+
</TreeNode>
74+
75+
</TreeNode>
76+
77+
<TreeNode Text="Login Components">
78+
79+
<TreeNode Text="LoginName" NavigateUrl="/ControlSamples/LoginName"></TreeNode>
80+
<TreeNode Text="Login" NavigateUrl="/ControlSamples/Login"></TreeNode>
81+
<TreeNode Text="LoginStatus" Expanded="false">
82+
83+
<TreeNode Text="Authenticated" NavigateUrl="/ControlSamples/LoginStatusAuthenticated"></TreeNode>
84+
<TreeNode Text="Not Authenticated" NavigateUrl="/ControlSamples/LoginStatusNotAuthenticated"></TreeNode>
85+
86+
</TreeNode>
87+
88+
</TreeNode>
89+
90+
</TreeNode>
91+
92+
</Nodes>
93+
</TreeView>
94+
</div>
95+
96+
@code {
97+
private bool collapseNavMenu = true;
98+
99+
private string NavMenuCssClass => collapseNavMenu ? "collapse" : null;
100+
101+
private void ToggleNavMenu()
102+
{
103+
collapseNavMenu = !collapseNavMenu;
104+
}
105+
}

samples/AfterBlazorServerSide/Startup.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Threading.Tasks;
5+
using BlazorWebFormsComponents;
56
using Microsoft.AspNetCore.Builder;
67
using Microsoft.AspNetCore.Components;
78
using Microsoft.AspNetCore.Components.Authorization;
@@ -58,5 +59,8 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
5859
endpoints.MapFallbackToPage("/_Host");
5960
});
6061
}
61-
}
62+
63+
public static Version ComponentVersion = typeof(IHasStyle).Assembly.GetName().Version;
64+
65+
}
6266
}

samples/AfterBlazorServerSide/wwwroot/css/site.css

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,22 @@ app {
4040

4141
.main {
4242
flex: 1;
43+
padding-bottom: 50px;
4344
}
4445

46+
footer {
47+
border-top: 1px solid purple;
48+
background-color: #EEE;
49+
font-size: 0.7em;
50+
font-weight: bold;
51+
text-align: center;
52+
position: fixed;
53+
height: auto;
54+
bottom: 0;
55+
width: 100%;
56+
}
57+
58+
4559
.main .top-row {
4660
background-color: #f7f7f7;
4761
border-bottom: 1px solid #d6d5d5;

0 commit comments

Comments
 (0)