Oliver Booth
cbfdefae71
This change separates the project logo and details into separate pages and makes the list more visually striking.
134 lines
7.5 KiB
Plaintext
134 lines
7.5 KiB
Plaintext
@using OliverBooth.Data.Blog
|
|
@using OliverBooth.Services
|
|
@inject IBlogPostService BlogPostService
|
|
@{
|
|
HttpRequest request = Context.Request;
|
|
var url = new Uri($"{request.Scheme}://{request.Host}{request.Path}{request.QueryString}");
|
|
}
|
|
<!DOCTYPE html>
|
|
<html lang="en" data-bs-theme="dark">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="color-scheme" content="dark">
|
|
<meta name="theme-color" content="#007EC6">
|
|
<meta property="og:image" content="@Url.Content("~/img/favicon.png")">
|
|
<meta property="twitter:image" content="@Url.Content("~/img/favicon.png")">
|
|
<meta property="og:url" content="@url">
|
|
<meta property="twitter:url" content="@url">
|
|
<meta property="twitter:card" content="summary">
|
|
@if (ViewData["Title"] != null)
|
|
{
|
|
<title>@ViewData["Title"] - Oliver Booth</title>
|
|
}
|
|
else
|
|
{
|
|
<title>Oliver Booth</title>
|
|
}
|
|
@if (ViewData["Post"] is IBlogPost post)
|
|
{
|
|
string excerpt = BlogPostService.RenderExcerpt(post, out bool trimmed);
|
|
<meta name="title" content="@post.Title">
|
|
<meta name="description" content="@excerpt">
|
|
<meta property="og:title" content="@post.Title">
|
|
<meta property="og:description" content="@excerpt">
|
|
<meta property="og:type" content="article">
|
|
<meta property="twitter:title" content="@post.Title">
|
|
<meta property="twitter:creator" content="@post.Author.DisplayName">
|
|
<meta property="twitter:description" content="@excerpt">
|
|
}
|
|
else
|
|
{
|
|
<meta name="title" content="@(ViewData["Title"] != null ? $"{ViewData["Title"]} - Oliver Booth" : "Oliver Booth")">
|
|
<meta name="description" content="Coffee enthusiast and lover of all things tech. Tech enthusiast and lover of all things coffee.">
|
|
<meta property="og:title" content="@(ViewData["Title"] != null ? $"{ViewData["Title"]} - Oliver Booth" : "Oliver Booth")">
|
|
<meta property="og:description" content="Coffee enthusiast and lover of all things tech. Tech enthusiast and lover of all things coffee.">
|
|
<meta property="twitter:title" content="@(ViewData["Title"] != null ? $"{ViewData["Title"]} - Oliver Booth" : "Oliver Booth")">
|
|
<meta property="twitter:description" content="Coffee enthusiast and lover of all things tech. Tech enthusiast and lover of all things coffee.">
|
|
}
|
|
<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/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/animate.css/4.1.1/animate.min.css" integrity="sha512-c42qTSw/wPZ3/5LBzD+Bw5f7bSF2oxou6wEb+I/lqeaKV5FDIfMvvRp772y4jcJLKuGUOpbJMdg/BTl50fJYAw==" crossorigin="anonymous" referrerpolicy="no-referrer">
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<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=Poppins:wght@200;400;700&display=swap" rel="stylesheet">
|
|
<link href="https://fonts.googleapis.com/css2?family=Gabarito:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
|
<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/app.min.css" asp-append-version="true">
|
|
<link rel="stylesheet" href="~/css/ribbon.min.css" asp-append-version="true">
|
|
</head>
|
|
<body>
|
|
<header class="container" style="margin-top: 20px;">
|
|
<div id="site-title" class="text-center">
|
|
<h1>
|
|
<a href="/"><img src="~/img/ob-256x256.png" alt="Oliver Booth" height="128"> Oliver Booth</a>
|
|
</h1>
|
|
</div>
|
|
</header>
|
|
<nav>
|
|
<ul class="site-nav">
|
|
<li>
|
|
<a asp-page="/Index">About</a>
|
|
</li>
|
|
<li>
|
|
<a asp-page="/Blog/Index">Blog</a>
|
|
</li>
|
|
<li>
|
|
<a asp-page="/Tutorials/Index">Tutorials</a>
|
|
</li>
|
|
<li>
|
|
<a asp-page="/Projects/Index">Projects</a>
|
|
</li>
|
|
<li>
|
|
<a asp-page="/Contact/Index">Contact</a>
|
|
</li>
|
|
<li>
|
|
<a asp-page="/Donate">Donate</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
|
|
<div style="margin:50px 0;"></div>
|
|
|
|
<div class="container">
|
|
<main role="main" class="pb-3">
|
|
@RenderBody()
|
|
</main>
|
|
</div>
|
|
|
|
<footer class="footer text-muted">
|
|
<div class="container text-center">
|
|
<hr>
|
|
|
|
<ul class="footer-nav">
|
|
<li><a title="@("@oliver@mastodon.olivr.me")" href="https://mastodon.olivr.me/@@oliver" rel="me" class="brand-mastodon"><i class="fa-brands fa-mastodon"></i></a></li>
|
|
<li><a title="LinkedIn/oliverlukebooth" href="https://www.linkedin.com/in/oliverlukebooth/" class="brand-linkedin"><i class="fa-brands fa-linkedin"></i></a></li>
|
|
<li><a title="Blog RSS Feed" asp-controller="Rss" asp-action="OnGet"><i class="fa-solid fa-rss text-orange"></i></a></li>
|
|
<li><a title="View Source" href="https://git.oliverbooth.dev/oliverbooth/oliverbooth.dev"><i class="fa-solid fa-code"></i></a></li>
|
|
</ul>
|
|
|
|
<ul class="footer-nav" style="margin-top: 20px;">
|
|
<li>© @DateTime.UtcNow.Year</li>
|
|
<li><a asp-page="/privacy/index">Privacy</a></li>
|
|
</ul>
|
|
</div>
|
|
</footer>
|
|
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.1/js/bootstrap.bundle.min.js" integrity="sha512-ToL6UYWePxjhDQKNioSi4AyJ5KkRxY+F1+Fi7Jgh0Hp5Kk2/s8FD7zusJDdonfe5B00Qw+B8taXxF6CFLnqNCw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min.js" integrity="sha512-aoZChv+8imY/U1O7KIHXvO87EOzCuKO0GhFtpD6G2Cyjo/xPeTgdf3/bchB10iB+AojMTDkMHDPLKNxPJVqDcw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/js/all.min.js" integrity="sha512-uKQ39gEGiyUJl4AI6L+ekBdGKpGw4xJ55+xyJG7YFlJokPNYegn9KwQ3P8A7aFQAUtUsAQHep+d/lrGqrbPIDQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.8/handlebars.min.js" integrity="sha512-E1dSFxg+wsfJ4HKjutk/WaCzK7S2wv1POn1RRPGh8ZK+ag9l244Vqxji3r6wgz9YBf6+vhQEYJZpSjqWFPg9gg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
<script src="~/js/prism.min.js" asp-append-version="true" data-manual></script>
|
|
<script src="~/js/app.min.js" asp-append-version="true"></script>
|
|
|
|
<script id="loading-spinner-template" type="text/x-handlebars-template">
|
|
@await Html.PartialAsync("_LoadingSpinner")
|
|
</script>
|
|
|
|
@await RenderSectionAsync("Scripts", required: false)
|
|
</body>
|
|
</html> |