85 lines
2.0 KiB
Svelte
85 lines
2.0 KiB
Svelte
<script lang="ts">
|
|
import { page } from '$app/stores';
|
|
import { resolve } from '$app/paths';
|
|
import type { PageData } from './$types';
|
|
let { data }: { data: PageData } = $props();
|
|
|
|
function formatDate(value: string) {
|
|
return new Date(value).toLocaleDateString();
|
|
}
|
|
</script>
|
|
|
|
<svelte:head>
|
|
<title>{data.series.name} - {$page.data.site?.title || 'BlogFlare'}</title>
|
|
</svelte:head>
|
|
|
|
<main id="pjax-container">
|
|
<div class="wrapper container narrow contents-wrap">
|
|
<article class="article-detail yue">
|
|
<div class="banner-title">
|
|
<h1 class="post-title">{data.series.name}</h1>
|
|
<span class="post-meta">{data.posts.length} 篇文章</span>
|
|
</div>
|
|
|
|
<ol class="series-posts">
|
|
{#each data.posts as post, index (post.id)}
|
|
<li>
|
|
<span class="series-order">{post.series_weight ?? index + 1}</span>
|
|
<a href={resolve('/posts/[slug]', { slug: post.slug })}>{post.title}</a>
|
|
<time>{formatDate(post.published_at)}</time>
|
|
</li>
|
|
{:else}
|
|
<li class="empty-state">这个系列还没有文章</li>
|
|
{/each}
|
|
</ol>
|
|
</article>
|
|
</div>
|
|
</main>
|
|
|
|
<style>
|
|
.series-posts {
|
|
list-style: none;
|
|
margin: 0;
|
|
padding: 0;
|
|
border-top: 2px solid var(--text-color);
|
|
}
|
|
.series-posts li {
|
|
display: grid;
|
|
grid-template-columns: 3rem 1fr auto;
|
|
gap: 1rem;
|
|
align-items: baseline;
|
|
padding: 1rem 0;
|
|
border-bottom: 1px dashed var(--border-color, rgba(0, 0, 0, 0.15));
|
|
}
|
|
.series-order {
|
|
font-family: monospace;
|
|
color: var(--text-muted);
|
|
text-align: center;
|
|
}
|
|
.series-posts a {
|
|
color: var(--text-color);
|
|
text-decoration: none;
|
|
font-size: 1.1rem;
|
|
}
|
|
.series-posts a:hover {
|
|
color: var(--accent-color, #419b38);
|
|
}
|
|
.series-posts time {
|
|
color: var(--text-muted);
|
|
font-size: 0.9rem;
|
|
}
|
|
.empty-state {
|
|
display: block !important;
|
|
text-align: center;
|
|
color: var(--text-muted);
|
|
}
|
|
@media (max-width: 640px) {
|
|
.series-posts li {
|
|
grid-template-columns: 2rem 1fr;
|
|
}
|
|
.series-posts time {
|
|
grid-column: 2;
|
|
}
|
|
}
|
|
</style>
|