feat: share wwwroot assets
This commit is contained in:
parent
0b7218b11a
commit
86bbf803b5
|
@ -1,2 +0,0 @@
|
||||||
@namespace OliverBooth.Blog.Pages
|
|
||||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
|
|
@ -1,3 +0,0 @@
|
||||||
@{
|
|
||||||
Layout = "_Layout";
|
|
||||||
}
|
|
|
@ -1,11 +1,13 @@
|
||||||
using OliverBooth.Blog.Data;
|
using OliverBooth.Blog.Data;
|
||||||
using OliverBooth.Blog.Middleware;
|
using OliverBooth.Blog.Middleware;
|
||||||
using OliverBooth.Blog.Services;
|
using OliverBooth.Blog.Services;
|
||||||
|
using OliverBooth.Common;
|
||||||
using OliverBooth.Common.Extensions;
|
using OliverBooth.Common.Extensions;
|
||||||
|
|
||||||
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
|
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
|
||||||
builder.Configuration.AddTomlFile("data/config.toml", true, true);
|
builder.Configuration.AddTomlFile("data/config.toml", true, true);
|
||||||
|
|
||||||
|
builder.Services.ConfigureOptions<OliverBoothConfigureOptions>();
|
||||||
builder.Services.AddDbContextFactory<BlogContext>();
|
builder.Services.AddDbContextFactory<BlogContext>();
|
||||||
builder.Services.AddSingleton<IBlogPostService, BlogPostService>();
|
builder.Services.AddSingleton<IBlogPostService, BlogPostService>();
|
||||||
builder.Services.AddSingleton<IUserService, UserService>();
|
builder.Services.AddSingleton<IUserService, UserService>();
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
|
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
|
||||||
|
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -17,6 +18,11 @@
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="7.0.10"/>
|
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="7.0.10"/>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="7.0.10"/>
|
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="7.0.10"/>
|
||||||
<PackageReference Include="Markdig" Version="0.32.0"/>
|
<PackageReference Include="Markdig" Version="0.32.0"/>
|
||||||
|
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="7.0.10"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="wwwroot\**\*"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
using Microsoft.AspNetCore.Builder;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.AspNetCore.StaticFiles;
|
||||||
|
using Microsoft.Extensions.FileProviders;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
|
||||||
|
namespace OliverBooth.Common;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Represents the middleware to configure static file options.
|
||||||
|
/// </summary>
|
||||||
|
public sealed class OliverBoothConfigureOptions : IPostConfigureOptions<StaticFileOptions>
|
||||||
|
{
|
||||||
|
private readonly IWebHostEnvironment _environment;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="OliverBoothConfigureOptions" /> class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="environment">The <see cref="IWebHostEnvironment" />.</param>
|
||||||
|
public OliverBoothConfigureOptions(IWebHostEnvironment environment)
|
||||||
|
{
|
||||||
|
_environment = environment;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public void PostConfigure(string? name, StaticFileOptions options)
|
||||||
|
{
|
||||||
|
// ReSharper disable once NullCoalescingConditionIsAlwaysNotNullAccordingToAPIContract
|
||||||
|
options.ContentTypeProvider ??= new FileExtensionContentTypeProvider();
|
||||||
|
|
||||||
|
if (options.FileProvider == null && _environment.WebRootFileProvider == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Missing FileProvider.");
|
||||||
|
}
|
||||||
|
|
||||||
|
options.FileProvider ??= _environment.WebRootFileProvider;
|
||||||
|
|
||||||
|
var filesProvider = new ManifestEmbeddedFileProvider(GetType().Assembly, "wwwroot");
|
||||||
|
options.FileProvider = new CompositeFileProvider(options.FileProvider, filesProvider);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,6 @@
|
||||||
|
@{
|
||||||
|
string rootUrl = Environment.GetEnvironmentVariable("ROOT_URL") ?? "https://oliverbooth.dev";
|
||||||
|
}
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en" data-bs-theme="dark">
|
<html lang="en" data-bs-theme="dark">
|
||||||
<head>
|
<head>
|
||||||
|
@ -12,7 +15,7 @@
|
||||||
{
|
{
|
||||||
<title>Oliver Booth</title>
|
<title>Oliver Booth</title>
|
||||||
}
|
}
|
||||||
<link rel="shortcut icon" href="~/img/favicon.png">
|
<link rel="shortcut icon" href="/img/favicon.png" asp-append-version="true">
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.1/css/bootstrap.min.css" integrity="sha512-Z/def5z5u2aR89OuzYcxmDJ0Bnd5V1cKqBEbvLOiUNWdg9PQeXVvXLI90SE4QOHGlfLqUnDNVAYyZi8UwUTmWQ==" crossorigin="anonymous" referrerpolicy="no-referrer">
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.1/css/bootstrap.min.css" integrity="sha512-Z/def5z5u2aR89OuzYcxmDJ0Bnd5V1cKqBEbvLOiUNWdg9PQeXVvXLI90SE4QOHGlfLqUnDNVAYyZi8UwUTmWQ==" crossorigin="anonymous" referrerpolicy="no-referrer">
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min.css" integrity="sha512-7nTa5CnxbzfQgjQrNmHXB7bxGTUVO/DcYX6rpgt06MkzM0rVXP3EYCv/Ojxg5H0dKbY7llbbYaqgfZjnGOAWGA==" crossorigin="anonymous" referrerpolicy="no-referrer">
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min.css" integrity="sha512-7nTa5CnxbzfQgjQrNmHXB7bxGTUVO/DcYX6rpgt06MkzM0rVXP3EYCv/Ojxg5H0dKbY7llbbYaqgfZjnGOAWGA==" crossorigin="anonymous" referrerpolicy="no-referrer">
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" integrity="sha512-z3gLpd7yknf1YoNbCzqRKc4qyor8gaKU1qmn+CShxbuBusANI9QpRohGBreCFkKxLhei6S9CQXFEbbKuqLg0DA==" crossorigin="anonymous" referrerpolicy="no-referrer">
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" integrity="sha512-z3gLpd7yknf1YoNbCzqRKc4qyor8gaKU1qmn+CShxbuBusANI9QpRohGBreCFkKxLhei6S9CQXFEbbKuqLg0DA==" crossorigin="anonymous" referrerpolicy="no-referrer">
|
||||||
|
@ -21,9 +24,9 @@
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@100;400;700&display=swap" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@100;400;700&display=swap" rel="stylesheet">
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@200;400;700&display=swap" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@200;400;700&display=swap" rel="stylesheet">
|
||||||
<link rel="stylesheet" href="~/css/prism.min.css" asp-append-version="true"/>
|
<link rel="stylesheet" href="~/css/prism.min.css" asp-append-version="true">
|
||||||
<link rel="stylesheet" href="~/css/prism.vs.min.css" asp-append-version="true">
|
<link rel="stylesheet" href="~/css/prism.vs.min.css" asp-append-version="true">
|
||||||
<link rel="stylesheet" href="~/css/app.min.css" asp-append-version="true"/>
|
<link rel="stylesheet" href="~/css/app.min.css" asp-append-version="true">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header class="container" style="margin-top: 20px;">
|
<header class="container" style="margin-top: 20px;">
|
||||||
|
@ -36,22 +39,22 @@
|
||||||
<nav>
|
<nav>
|
||||||
<ul class="site-nav">
|
<ul class="site-nav">
|
||||||
<li>
|
<li>
|
||||||
<a asp-area="" asp-page="/index">About</a>
|
<a href="@rootUrl">About</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a asp-area="blog" asp-page="/index">Blog</a>
|
<a asp-page="/index">Blog</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a asp-area="" asp-page="/tutorials/index">Tutorials</a>
|
<a href="@rootUrl/tutorials">Tutorials</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a asp-area="" asp-page="/projects/index">Projects</a>
|
<a href="@rootUrl/projects">Projects</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a asp-area="" asp-page="/contact/index">Contact</a>
|
<a href="@rootUrl/contact">Contact</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a asp-area="" asp-page="/donate">Donate</a>
|
<a href="@rootUrl/donate">Donate</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
|
@ -0,0 +1,2 @@
|
||||||
|
@namespace OliverBooth.Common.Pages
|
||||||
|
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
|
@ -24,7 +24,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\OliverBooth.Common\OliverBooth.Common.csproj" />
|
<ProjectReference Include="..\OliverBooth.Common\OliverBooth.Common.csproj"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
|
|
||||||
for details on configuring this project to bundle and minify static web assets. */
|
|
||||||
|
|
||||||
a.navbar-brand {
|
|
||||||
white-space: normal;
|
|
||||||
text-align: center;
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #0077cc;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-primary {
|
|
||||||
color: #fff;
|
|
||||||
background-color: #1b6ec2;
|
|
||||||
border-color: #1861ac;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
|
|
||||||
color: #fff;
|
|
||||||
background-color: #1b6ec2;
|
|
||||||
border-color: #1861ac;
|
|
||||||
}
|
|
||||||
|
|
||||||
.border-top {
|
|
||||||
border-top: 1px solid #e5e5e5;
|
|
||||||
}
|
|
||||||
.border-bottom {
|
|
||||||
border-bottom: 1px solid #e5e5e5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.box-shadow {
|
|
||||||
box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
|
|
||||||
}
|
|
||||||
|
|
||||||
button.accept-policy {
|
|
||||||
font-size: 1rem;
|
|
||||||
line-height: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
width: 100%;
|
|
||||||
white-space: nowrap;
|
|
||||||
line-height: 60px;
|
|
||||||
}
|
|
Loading…
Reference in New Issue