gallery.badmanners.xyz/src/layouts/GameLayout.astro

75 lines
2.7 KiB
Text

---
import { type CollectionEntry, getEntry, getEntries } from "astro:content";
import PublishedContentLayout from "./PublishedContentLayout.astro";
import { t } from "../i18n";
import Authors from "../components/Authors.astro";
import Prose from "../components/Prose.astro";
import UserComponent from "../components/UserComponent.astro";
type Props = CollectionEntry<"games">["data"];
const { props } = Astro;
const prev = props.prev && (await getEntry(props.prev));
const next = props.next && (await getEntry(props.next));
const series = props.series && (await getEntry(props.series));
const authorsList = await getEntries(props.authors);
const relatedStories = (await getEntries(props.relatedStories)).filter((story) => !story.data.isDraft);
const relatedGames = (await getEntries(props.relatedGames)).filter((game) => !game.data.isDraft);
---
<PublishedContentLayout
publishedContentType="game"
title={props.title}
lang={props.lang}
isDraft={props.isDraft}
pubDate={props.pubDate}
description={props.description}
summary={undefined}
tags={props.tags}
thumbnail={props.thumbnail}
thumbnailWidth={props.thumbnailWidth}
thumbnailHeight={props.thumbnailHeight}
copyrightedCharacters={props.copyrightedCharacters}
series={series}
prev={prev && !prev.data.isDraft
? { link: `/games/${prev.slug}`, title: t(props.lang, "game/previous_game", prev.data.title) }
: undefined}
next={next && !next.data.isDraft
? { link: `/games/${next.slug}`, title: t(props.lang, "game/next_game", next.data.title) }
: undefined}
relatedStories={relatedStories}
relatedGames={relatedGames}
posts={props.posts}
labelReturnTo={{ title: t(props.lang, "game/return_to_games"), link: "/games" }}
labelPreviousContent={t(props.lang, "game/previous_game_aria_label")}
labelNextContent={t(props.lang, "game/next_game_aria_label")}
labelTitleSection={t(props.lang, "game/title_aria_label")}
labelInformationSection={t(props.lang, "game/information_aria_label")}
labelArticleSection={t(props.lang, "game/article_aria_label")}
>
<meta
slot="head"
property="og:description"
content={t(props.lang, "game/warnings", props.platforms, props.contentWarning)}
/>
<Fragment slot="section-information">
<Authors lang={props.lang}>
{
authorsList.map((author) => (
<UserComponent rel="author nofollow" class="p-author" user={author} lang={props.lang} />
))
}
</Authors>
<div id="platforms">
<p>{t(props.lang, "game/platforms", props.platforms)}</p>
</div>
</Fragment>
<div slot="section-content-warning" id="content-warning">
<p>{props.contentWarning}</p>
</div>
<Fragment slot="section-article">
<Prose>
<slot />
</Prose>
</Fragment>
</PublishedContentLayout>