style: hide empty section for articles with no other parts

This commit is contained in:
Oliver Booth 2024-04-27 17:00:20 +01:00
parent 91249029dc
commit 98c923b07b
Signed by: oliverbooth
GPG Key ID: E60B570D1B7557B5
3 changed files with 43 additions and 28 deletions

View File

@ -31,6 +31,12 @@ public interface ITutorialArticle
/// <value>The ID of the folder.</value>
int Folder { get; }
/// <summary>
/// Gets a value indicating whether this article is part of a multi-part series.
/// </summary>
/// <value><see langword="true" /> if this article has additional parts; otherwise, <see langword="false" />.</value>
bool HasOtherParts { get; }
/// <summary>
/// Gets the ID of this article.
/// </summary>

View File

@ -1,3 +1,5 @@
using System.ComponentModel.DataAnnotations.Schema;
namespace OliverBooth.Data.Web;
/// <summary>
@ -17,6 +19,10 @@ internal sealed class TutorialArticle : IEquatable<TutorialArticle>, ITutorialAr
/// <inheritdoc />
public int Folder { get; private set; }
/// <inheritdoc />
[NotMapped]
public bool HasOtherParts => NextPart is not null || PreviousPart is not null;
/// <inheritdoc />
public int Id { get; private set; }

View File

@ -60,36 +60,39 @@
@Html.Raw(TutorialService.RenderArticle(article))
</article>
<hr>
@if (article.HasOtherParts)
{
<hr>
<div class="row">
<div class="col-sm-12 col-md-6">
@if (article.PreviousPart is { } previousPartId &&
TutorialService.TryGetArticle(previousPartId, out ITutorialArticle? previousPart) &&
previousPart.Visibility == Visibility.Published)
{
<small>Previous Part</small>
<p class="lead">
<a asp-page="Article" asp-route-slug="@TutorialService.GetFullSlug(previousPart)">
@previousPart.Title
</a>
</p>
}
<div class="row">
<div class="col-sm-12 col-md-6">
@if (article.PreviousPart is { } previousPartId &&
TutorialService.TryGetArticle(previousPartId, out ITutorialArticle? previousPart) &&
previousPart.Visibility == Visibility.Published)
{
<small>Previous Part</small>
<p class="lead">
<a asp-page="Article" asp-route-slug="@TutorialService.GetFullSlug(previousPart)">
@previousPart.Title
</a>
</p>
}
</div>
<div class="col-sm-12 col-md-6" style="text-align: right;">
@if (article.NextPart is { } nextPartId &&
TutorialService.TryGetArticle(nextPartId, out ITutorialArticle? nextPart) &&
nextPart.Visibility == Visibility.Published)
{
<small>Next Part</small>
<p class="lead">
<a asp-page="Article" asp-route-slug="@TutorialService.GetFullSlug(nextPart)">
@nextPart.Title
</a>
</p>
}
</div>
</div>
<div class="col-sm-12 col-md-6" style="text-align: right;">
@if (article.NextPart is { } nextPartId &&
TutorialService.TryGetArticle(nextPartId, out ITutorialArticle? nextPart) &&
nextPart.Visibility == Visibility.Published)
{
<small>Next Part</small>
<p class="lead">
<a asp-page="Article" asp-route-slug="@TutorialService.GetFullSlug(nextPart)">
@nextPart.Title
</a>
</p>
}
</div>
</div>
}
<hr/>