Compare commits

...

6 Commits

Author SHA1 Message Date
f949bded9b
Merge branch 'main' into feature/admin
Some checks failed
.NET / Build & Test (push) Failing after 1m39s
2024-02-29 22:38:06 +00:00
18cb6aa806
fix(ci): bump .net sdk to 8.0
Some checks failed
.NET / Build & Test (push) Failing after 1m9s
2024-02-29 20:43:27 +00:00
5846ddaea7
fix(af): unescape © sequence 2024-02-29 19:03:59 +00:00
798b91179e
feat: add april fools styling 2024-02-29 18:59:30 +00:00
900d46115e
refactor(build): make gulp pipeline more modular 2024-02-29 18:15:07 +00:00
166fc72b42
refactor: remove source assets from sln
Adding these files locally under IDE config. They have no need to part of the solution itself
2024-02-29 18:14:40 +00:00
15 changed files with 165 additions and 68 deletions

View File

@ -14,7 +14,7 @@ jobs:
- name: Setup .NET - name: Setup .NET
uses: actions/setup-dotnet@v3 uses: actions/setup-dotnet@v3
with: with:
dotnet-version: 7.0.x dotnet-version: 8.0.x
- name: Add NuGet source - name: Add NuGet source
run: dotnet nuget add source --username oliverbooth --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/oliverbooth/index.json" run: dotnet nuget add source --username oliverbooth --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/oliverbooth/index.json"
- name: Restore dependencies - name: Restore dependencies

View File

@ -17,7 +17,7 @@ jobs:
- name: Setup .NET - name: Setup .NET
uses: actions/setup-dotnet@v3 uses: actions/setup-dotnet@v3
with: with:
dotnet-version: 7.0.x dotnet-version: 8.0.x
- name: Add GitHub NuGet source - name: Add GitHub NuGet source
run: dotnet nuget add source --username oliverbooth --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/oliverbooth/index.json" run: dotnet nuget add source --username oliverbooth --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/oliverbooth/index.json"

View File

@ -17,7 +17,7 @@ jobs:
- name: Setup .NET - name: Setup .NET
uses: actions/setup-dotnet@v3 uses: actions/setup-dotnet@v3
with: with:
dotnet-version: 7.0.x dotnet-version: 8.0.x
- name: Add GitHub NuGet source - name: Add GitHub NuGet source
run: dotnet nuget add source --username oliverbooth --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/oliverbooth/index.json" run: dotnet nuget add source --username oliverbooth --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/oliverbooth/index.json"

View File

@ -1,4 +1,4 @@

Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OliverBooth", "OliverBooth\OliverBooth.csproj", "{A58A6FA3-480C-400B-822A-3786741BF39C}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OliverBooth", "OliverBooth\OliverBooth.csproj", "{A58A6FA3-480C-400B-822A-3786741BF39C}"
EndProject EndProject

View File

@ -8,74 +8,88 @@
@{ @{
ViewData["Title"] = "Blog"; ViewData["Title"] = "Blog";
MastodonStatus latestStatus = MastodonService.GetLatestStatus(); MastodonStatus latestStatus = MastodonService.GetLatestStatus();
bool doAprilFools = DateOnly.FromDateTime(DateTime.UtcNow) == new DateOnly(2024, 04, 01) || Environment.GetEnvironmentVariable("DO_AF") == "1";
} }
<div class="card text-center mastodon-update-card"> @if (doAprilFools)
<div class="card-body"> {
@Html.Raw(latestStatus.Content) <h1>UNDER CONSTRUCTION</h1>
@foreach (MediaAttachment attachment in latestStatus.MediaAttachments) <div style="text-align: center">
{ <img src="~/img/construction_90x85.gif">
switch (attachment.Type) <img src="~/img/underconstruction_323x118.gif">
<img src="~/img/construction_90x85.gif">
<p>Coming soon WATCH THIS SPACE</p>
</div>
}
else
{
<div class="card text-center mastodon-update-card">
<div class="card-body">
@Html.Raw(latestStatus.Content)
@foreach (MediaAttachment attachment in latestStatus.MediaAttachments)
{ {
case AttachmentType.Audio: switch (attachment.Type)
<p><audio controls="controls" src="@attachment.Url"></audio></p> {
break; case AttachmentType.Audio:
<p><audio controls="controls" src="@attachment.Url"></audio></p>
break;
case AttachmentType.Video: case AttachmentType.Video:
<p><video controls="controls" class="figure-img img-fluid" src="@attachment.Url"></video></p> <p><video controls="controls" class="figure-img img-fluid" src="@attachment.Url"></video></p>
break; break;
case AttachmentType.Image: case AttachmentType.Image:
case AttachmentType.GifV: case AttachmentType.GifV:
<p><img class="figure-img img-fluid" src="@attachment.Url"></p> <p><img class="figure-img img-fluid" src="@attachment.Url"></p>
break; break;
}
} }
} </div>
<div class="card-footer text-muted">
<abbr title="@latestStatus.CreatedAt.ToString("F")">@latestStatus.CreatedAt.Humanize()</abbr>
&bull;
<a href="@latestStatus.OriginalUri" target="_blank">View on Mastodon</a>
</div>
</div> </div>
<div class="card-footer text-muted">
<abbr title="@latestStatus.CreatedAt.ToString("F")">@latestStatus.CreatedAt.Humanize()</abbr> <div id="all-blog-posts">
&bull; @await Html.PartialAsync("_LoadingSpinner")
<a href="@latestStatus.OriginalUri" target="_blank">View on Mastodon</a>
</div> </div>
</div>
<div id="all-blog-posts"> <script id="blog-post-template" type="text/x-handlebars-template">
@await Html.PartialAsync("_LoadingSpinner") <div class="card-header">
</div> <span class="text-muted">
<img class="blog-author-icon" src="{{author.avatar}}" alt="{{author.name}}">
<script id="blog-post-template" type="text/x-handlebars-template"> <span>{{author.name}}<span>
<div class="card-header">
<span class="text-muted">
<img class="blog-author-icon" src="{{author.avatar}}" alt="{{author.name}}">
<span>{{author.name}}<span>
<span> &bull; </span>
<abbr title="{{ post.formattedDate }}">{{ post.date_humanized }}</abbr>
{{#if post.enable_comments}}
<span> &bull; </span> <span> &bull; </span>
<a href="{{post.url}}#disqus_thread" data-disqus-identifier="{{post.disqus_identifier}}"> <abbr title="{{ post.formattedDate }}">{{ post.date_humanized }}</abbr>
Loading comment count &hellip; {{#if post.enable_comments}}
</a> <span> &bull; </span>
<a href="{{post.url}}#disqus_thread" data-disqus-identifier="{{post.disqus_identifier}}">
Loading comment count &hellip;
</a>
{{/if}}
</span>
</div>
<div class="card-body">
<h2>
<a href="{{post.url}}"> {{post.title}}</a>
</h2>
<p>{{{post.excerpt}}}</p>
{{#if post.trimmed}}
<p>
<a href="{{post.url}}">
Read more...
</a>
</p>
{{/if}} {{/if}}
</span> </div>
</div> <div class="card-footer">
<div class="card-body"> {{#each post.tags}}
<h2> <a href="?tag={{urlEncode this}}" class="badge text-bg-dark">{{this}}</a>
<a href="{{post.url}}"> {{post.title}}</a> {{/each}}
</h2> </div>
</script>
<p>{{{post.excerpt}}}</p> }
{{#if post.trimmed}}
<p>
<a href="{{post.url}}">
Read more...
</a>
</p>
{{/if}}
</div>
<div class="card-footer">
{{#each post.tags}}
<a href="?tag={{urlEncode this}}" class="badge text-bg-dark">{{this}}</a>
{{/each}}
</div>
</script>

View File

@ -8,6 +8,7 @@
@{ @{
HttpRequest request = Context.Request; HttpRequest request = Context.Request;
var url = new Uri($"{request.Scheme}://{request.Host}{request.Path}{request.QueryString}"); var url = new Uri($"{request.Scheme}://{request.Host}{request.Path}{request.QueryString}");
bool doAprilFools = DateOnly.FromDateTime(DateTime.UtcNow) == new DateOnly(2024, 04, 01) || Environment.GetEnvironmentVariable("DO_AF") == "1";
} }
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" data-bs-theme="dark"> <html lang="en" data-bs-theme="dark">
@ -66,13 +67,29 @@
<link rel="stylesheet" href="~/css/app.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"> <link rel="stylesheet" href="~/css/ribbon.min.css" asp-append-version="true">
@await RenderSectionAsync("Styles", required: false) @await RenderSectionAsync("Styles", required: false)
@if (doAprilFools)
{
<link rel="stylesheet" href="~/css/af-app.min.css" asp-append-version="true">
}
<base href="~/"> <base href="~/">
</head> </head>
<body> <body>
<header class="container" style="margin-top: 20px;"> <header class="container" style="margin-top: 20px;">
<div id="site-title" class="text-center"> <div id="site-title" class="text-center">
<h1> <h1>
<a href="/"><img src="~/img/ob-256x256.png" alt="Oliver Booth" height="128"> Oliver Booth</a> @if (doAprilFools)
{
<marquee>
<a href="/">
<img src="~/img/ob-af-256x256.png" alt="Oliver Booth" height="128">
<img src="~/img/af-oliverbooth-1236x293.png" alt="Oliver Booth" height="128">
</a>
</marquee>
}
else
{
<a href="/"><img src="~/img/ob-256x256.png" alt="Oliver Booth" height="128"> Oliver Booth</a>
}
</h1> </h1>
</div> </div>
</header> </header>
@ -101,7 +118,7 @@
<div style="margin:50px 0;"></div> <div style="margin:50px 0;"></div>
@if (DateTimeOffset.UtcNow < new DateTime(2024, 03, 08)) @if (!doAprilFools && DateTimeOffset.UtcNow < new DateTime(2024, 03, 08))
{ {
<div id="usa-countdown" class="container"> <div id="usa-countdown" class="container">
<div class="row"> <div class="row">
@ -116,6 +133,13 @@
<div style="margin:50px 0;"></div> <div style="margin:50px 0;"></div>
<div class="container"> <div class="container">
@if (doAprilFools)
{
<h1 style="text-decoration: underline; color: #0f0 !important; margin: 20px 0;">
<img src="~/img/af-homepage_500x383.jpg" alt="WELCOME TO MY HOMEPAGE!!!!111SHIFT+1">
</h1>
}
<main role="main" class="pb-3"> <main role="main" class="pb-3">
@RenderBody() @RenderBody()
</main> </main>
@ -133,7 +157,7 @@
</ul> </ul>
<ul class="footer-nav" style="margin-top: 20px;"> <ul class="footer-nav" style="margin-top: 20px;">
<li>&copy; @DateTime.UtcNow.Year</li> <li>@(doAprilFools ? "(C) 2003" : Html.Raw($"&copy; {DateTime.UtcNow.Year}"))</li>
<li><a asp-page="/privacy/index">Privacy</a></li> <li><a asp-page="/privacy/index">Privacy</a></li>
@if (SessionService.TryGetSession(Context.Request, out ISession? session) && @if (SessionService.TryGetSession(Context.Request, out ISession? session) &&
UserService.TryGetUser(session.UserId, out _)) UserService.TryGetUser(session.UserId, out _))

View File

@ -1,6 +1,6 @@
{ {
"sdk": { "sdk": {
"version": "7.0.0", "version": "8.0.0",
"rollForward": "latestMajor", "rollForward": "latestMajor",
"allowPrerelease": false "allowPrerelease": false
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

BIN
src/img/af-oliverbooth.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
src/img/cloud_672x148.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
src/img/ob-af-256x256.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

59
src/scss/af-app.scss Normal file
View File

@ -0,0 +1,59 @@
$font: "Comic Sans MS", cursive !important;
html, body {
background: #c7e7ff url("/img/cloud_672x148.gif") repeat !important;
}
html, body, * {
font-family: serif !important;
color: #f00;
}
h1, h2, h3, h4, h5, h6 {
font-family: $font;
text-transform: uppercase !important;
}
a:link {
color: #00f !important;
text-decoration: underline !important;
}
a:visited {
color: #909 !important;
text-decoration: underline !important;
}
a:hover {
color: #00f !important;
text-decoration: underline !important;
}
a:active {
color: #909 !important;
text-decoration: underline !important;
}
footer, footer *{
color: #000 !important;
}
.rounded-circle {
border-radius: 0 !important;
}
main.container {
background: #ff0 !important;
}
.alert {
border-radius: 0 !important;
}
input.form-control, textarea.form-control {
background: #fff !important;
color: #000 !important;
font-family: $font;
&::placeholder {
color: #9e9e9e !important;
}
}