Compare commits

...

9 Commits

15 changed files with 109 additions and 42 deletions

View File

@ -11,6 +11,7 @@
} }
@{ @{
ViewData["Title"] = post.Title;
Author author = Model.Author; Author author = Model.Author;
DateTimeOffset published = post.Published; DateTimeOffset published = post.Published;
} }

View File

@ -1,12 +1,12 @@
@page @page
@model OliverBooth.Pages.Blog.Index @model OliverBooth.Pages.Blog.Index
@{
ViewData["Title"] = "Blog";
}
<div id="all-blog-posts"> <div id="all-blog-posts">
<div id="blog-loading-spinner" class="d-flex justify-content-center"> @await Html.PartialAsync("_LoadingSpinner")
<div class="spinner-border text-light" role="status">
<p class="text-center sr-only">Loading...</p>
</div>
</div>
</div> </div>
<script id="blog-post-template" type="text/x-handlebars-template"> <script id="blog-post-template" type="text/x-handlebars-template">

View File

@ -3,7 +3,7 @@
ViewData["Title"] = "Contact"; ViewData["Title"] = "Contact";
} }
<h1 class="display-4" xmlns="http://www.w3.org/1999/html">Contact</h1> <h1 class="display-4">Contact</h1>
<p class="lead">What would you like to talk about?</p> <p class="lead">What would you like to talk about?</p>
<ul class="contact-reasons"> <ul class="contact-reasons">
<li><a asp-page="/contact/jobopportunity">💼 Job opportunity / collaboration</a></li> <li><a asp-page="/contact/jobopportunity">💼 Job opportunity / collaboration</a></li>

View File

@ -3,12 +3,19 @@
ViewData["Title"] = "Contact"; ViewData["Title"] = "Contact";
} }
<h1 class="display-4">Contact</h1> <nav style="--bs-breadcrumb-divider: '>';" aria-label="breadcrumb">
<p class="lead">Job Opportunity</p> <ol class="breadcrumb">
<li class="breadcrumb-item">
<a asp-page="/contact/index">Contact</a>
</li>
<li class="breadcrumb-item active" aria-current="page">Job Opportunity</li>
</ol>
</nav>
<p> <p>
I am always open to hearing about future opportunities. If you have a position you think I could be a good fit for, I am always open to hearing about future opportunities. If you have a position you think I could be a good fit for,
please feel free to contact me using the form below. At this time, I am only open to positions based in South East please feel free to contact me using the form below. At this time, I am only open to positions based in South East
Wales or that are 100% remote. Wales or that are 100% remote.
</p> </p>
<p>I look forward to hearing from you!</p> <p>I look forward to hearing from you!</p>

View File

@ -3,8 +3,15 @@
ViewData["Title"] = "Contact"; ViewData["Title"] = "Contact";
} }
<h1 class="display-4">Contact</h1> <nav style="--bs-breadcrumb-divider: '>';" aria-label="breadcrumb">
<p class="lead">Open Source Contribution</p> <ol class="breadcrumb">
<li class="breadcrumb-item">
<a asp-page="/contact/index">Contact</a>
</li>
<li class="breadcrumb-item active" aria-current="page">Open Source Contribution</li>
</ol>
</nav>
<p> <p>
Thank you for taking the time to consider contributing to one of my open source projects! I am always looking for Thank you for taking the time to consider contributing to one of my open source projects! I am always looking for
ways to improve my code, and I appreciate any and all contributions that I receive. You do not need to contact ways to improve my code, and I appreciate any and all contributions that I receive. You do not need to contact

View File

@ -3,8 +3,15 @@
ViewData["Title"] = "Contact"; ViewData["Title"] = "Contact";
} }
<h1 class="display-4">Contact</h1> <nav style="--bs-breadcrumb-divider: '>';" aria-label="breadcrumb">
<p class="lead">Other</p> <ol class="breadcrumb">
<li class="breadcrumb-item">
<a asp-page="/contact/index">Contact</a>
</li>
<li class="breadcrumb-item active" aria-current="page">Other</li>
</ol>
</nav>
<p> <p>
Thanks for getting in touch! While I do my best to read to all inquiries, I cannot guarantee that I will be able to Thanks for getting in touch! While I do my best to read to all inquiries, I cannot guarantee that I will be able to
respond to your message. Nevertheless, I appreciate you taking the time to reach out to me and I will respond if I respond to your message. Nevertheless, I appreciate you taking the time to reach out to me and I will respond if I

View File

@ -4,8 +4,15 @@
ViewData["Title"] = "Contact"; ViewData["Title"] = "Contact";
} }
<h1 class="display-4">Contact</h1> <nav style="--bs-breadcrumb-divider: '>';" aria-label="breadcrumb">
<p class="lead">Privacy Policy Concerns</p> <ol class="breadcrumb">
<li class="breadcrumb-item">
<a asp-page="/contact/index">Contact</a>
</li>
<li class="breadcrumb-item active" aria-current="page">Privacy Policy Concerns</li>
</ol>
</nav>
<p> <p>
Thank you for getting in touch. I take your privacy very seriously and will do my best to address any concerns you may have. Thank you for getting in touch. I take your privacy very seriously and will do my best to address any concerns you may have.
Please outline your concerns in the form below, and I will get back to you as soon as possible. Please outline your concerns in the form below, and I will get back to you as soon as possible.

View File

@ -3,8 +3,15 @@
ViewData["Title"] = "Contact"; ViewData["Title"] = "Contact";
} }
<h1 class="display-4">Contact</h1> <nav style="--bs-breadcrumb-divider: '>';" aria-label="breadcrumb">
<p class="lead">Project Idea</p> <ol class="breadcrumb">
<li class="breadcrumb-item">
<a asp-page="/contact/index">Contact</a>
</li>
<li class="breadcrumb-item active" aria-current="page">Project Idea</li>
</ol>
</nav>
<p> <p>
If you have any ideas for a project that you'd like to see me work on, please feel free to contact me using the If you have any ideas for a project that you'd like to see me work on, please feel free to contact me using the
form below. I'm always looking for something new to work on, and I'm open to suggestions! form below. I'm always looking for something new to work on, and I'm open to suggestions!

View File

@ -3,8 +3,15 @@
ViewData["Title"] = "Contact"; ViewData["Title"] = "Contact";
} }
<h1 class="display-4">Contact</h1> <nav style="--bs-breadcrumb-divider: '>';" aria-label="breadcrumb">
<p class="lead">Technical Help</p> <ol class="breadcrumb">
<li class="breadcrumb-item">
<a asp-page="/contact/index">Contact</a>
</li>
<li class="breadcrumb-item active" aria-current="page">Technical Help</li>
</ol>
</nav>
<p> <p>
I'm sorry, but do I not offer help or advice regarding development of any kind outside of my website, and Discord I'm sorry, but do I not offer help or advice regarding development of any kind outside of my website, and Discord
servers of which I'm a member. I'm most active in the <a href="https://discord.gg/brackeys">Brackeys Community</a> servers of which I'm a member. I'm most active in the <a href="https://discord.gg/brackeys">Brackeys Community</a>

View File

@ -4,9 +4,20 @@
} }
<h1 class="display-4">Donate</h1> <h1 class="display-4">Donate</h1>
<p> <p>
If you like what I do and would like to donate money to me and fund my coffee addiction, there are a few options for I believe in free and open exchange of information, and I want to keep my educational content free for everyone to
you! access. I will never put ads on my site, and I don't want to put behind a paywall resources that should be available
to everybody, regardless of their financial situation.
</p>
<p>
However, writing tutorials takes time, and I do have to pay for hosting. While I will never ask you for money, I
will always appreciate it if you do decide to donate. It also helps me to know that people are finding my content
useful, and that I should continue to make more.
</p>
<p>
If you like what I do and are both willing and able to donate money to me and fund all of this, you can do so using
the links below. Thank you for your support!
</p> </p>
<p> <p>
@ -15,9 +26,7 @@
</p> </p>
<p> <p>
<a href="https://www.buymeacoffee.com/oliverbooth" target="_blank"> <script type="text/javascript" src="https://cdnjs.buymeacoffee.com/1.0.0/button.prod.min.js" data-name="bmc-button" data-slug="oliverbooth" data-color="#FFDD00" data-emoji="" data-font="Cookie" data-text="Buy me a coffee" data-outline-color="#000000" data-font-color="#000000" data-coffee-color="#ffffff"></script>
<img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;">
</a>
</p> </p>
<p>I also accept cryptocurrency donations.</p> <p>I also accept cryptocurrency donations.</p>

View File

@ -11,8 +11,9 @@
</p> </p>
<p> <p>
I've also written a few <a asp-page="/tutorials/index">tutorials</a> on various topics, usually involving I've also written a few <a asp-page="/tutorials/index">tutorials</a> on various topics, usually involvin information
information not readily available elsewhere. I hope you find them useful. not readily available elsewhere. I hope you find them useful. On occasion, I also write about other topics that I
find interesting, such as <a asp-page="/blog/index">my thoughts on the state of the world or the tech industry</a>.
</p> </p>
<p> <p>

View File

@ -4,7 +4,14 @@
<meta charset="utf-8"/> <meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta name="color-scheme" content="dark"/> <meta name="color-scheme" content="dark"/>
<title>Oliver Booth</title> @if (ViewData["Title"] != null)
{
<title>@ViewData["Title"] - Oliver Booth</title>
}
else
{
<title>Oliver Booth</title>
}
<link rel="shortcut icon" href="~/img/favicon.png"> <link rel="shortcut icon" href="~/img/favicon.png">
<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">
@ -74,6 +81,10 @@
<script src="~/js/prism.min.js" asp-append-version="true" data-manual></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 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) @await RenderSectionAsync("Scripts", required: false)
</body> </body>
</html> </html>

View File

@ -0,0 +1,5 @@
<div id="blog-loading-spinner" class="d-flex justify-content-center">
<div class="spinner-border text-light" role="status">
<p class="text-center sr-only">Loading...</p>
</div>
</div>

View File

@ -214,25 +214,23 @@ div.alert *:last-child {
#blog-loading-spinner { #blog-loading-spinner {
margin: 20px; margin: 20px;
height: auto;
opacity: 1;
&.removed { &.removed {
animation: spinner-removed 2s ease-in-out; margin: 0;
height: 0;
opacity: 0;
transition: all 0.5s ease-in-out;
} }
} }
@keyframes spinner-removed { a.bmc-btn {
0% { &:link, &:visited, &:active {
transform: scaleY(1); color: #000;
opacity: 1;
} }
50% { &:hover {
transform: scaleY(1); color: #fff;
opacity: 0;
}
100% {
transform: scaleY(0);
opacity: 0;
} }
} }

View File

@ -15,7 +15,7 @@ declare const Prism: any;
greedy: true greedy: true
} }
}); });
let isCtrl = false; let isCtrl = false;
document.addEventListener('keyup', (e) => { document.addEventListener('keyup', (e) => {
if (e.ctrlKey) isCtrl = false; if (e.ctrlKey) isCtrl = false;
@ -54,7 +54,7 @@ declare const Prism: any;
const spinner = document.querySelector("#blog-loading-spinner"); const spinner = document.querySelector("#blog-loading-spinner");
if (spinner) { if (spinner) {
spinner.classList.add("removed"); spinner.classList.add("removed");
setTimeout(() => spinner.remove(), 1100); setTimeout(() => spinner.remove(), 1000);
} }
}); });
} }