diff --git a/src/lib/components/BlogCard.svelte b/src/lib/components/BlogCard.svelte index aa704c9..dd02d40 100644 --- a/src/lib/components/BlogCard.svelte +++ b/src/lib/components/BlogCard.svelte @@ -10,9 +10,7 @@ import { BLOG_POST_FRESHNESS_MILLIS, blogPostTypeToIcon, - blogPostTypeToString, - EventStatus, - postEventStatus + blogPostTypeToString } from '$lib/util/Blogs'; import DateWidget from '$lib/components/DateWidget.svelte'; import Icon from '@iconify/svelte'; @@ -22,26 +20,21 @@ post, size = BlogCardSize.Both, fullHeight = false - }: { post: App.BlogPost; size?: BlogCardSize; fullHeight?: boolean } = $props(); + }: { post: App.BlogPost; size: BlogCardSize; fullHeight: boolean } = $props(); const type: App.BlogPostType = post.type ?? 'article'; let isPostNew = $state(false); let isPostUpdated = $state(false); let isPostFresh = $derived(isPostNew || isPostUpdated); - let eventStatus: EventStatus | undefined = $state(undefined); - let isPostEventOfInterest = $derived( - type === 'event' && - (eventStatus === EventStatus.NotStarted || eventStatus === EventStatus.InProgress) - ); - let eventHasStarted = $derived(eventStatus === EventStatus.InProgress); + // TODO: rndtrash: события и их актуальность onMount(() => { + // rndtrash: Выполняем проверки на клиенте, чтобы плашка не скомпилировалась и потом не потеряла актуальность const dateNow = new Date().valueOf(); isPostNew = dateNow - new Date(post.date!).valueOf() <= BLOG_POST_FRESHNESS_MILLIS; isPostUpdated = post.dateChanged != null && dateNow - new Date(post.dateChanged).valueOf() <= BLOG_POST_FRESHNESS_MILLIS; - eventStatus = postEventStatus(post); }); /** @@ -78,15 +71,7 @@ href="/blog/{post.slug}" class="blog-card {fullHeight ? 'min-h-full' : ''} - {isPostEventOfInterest - ? eventHasStarted - ? 'eventOngoing' - : 'eventPreStart' - : isPostUpdated - ? 'updated' - : isPostNew - ? 'new' - : ''} + {isPostUpdated ? 'updated' : isPostNew ? 'new' : ''} {shortClass('flex-col justify-baseline')} {fullClass('flex-row justify-stretch', 'sm:flex-row sm:justify-stretch')}" > @@ -102,15 +87,7 @@ alt={post.thumbnailAlt ?? 'Миниатюра поста'} /> {/if} - {#if isPostEventOfInterest} -
- {#if eventStatus === EventStatus.NotStarted} - СКОРО НАЧАЛО - {:else} - СОБЫТИЕ - {/if} -
- {:else if isPostFresh} + {#if isPostFresh}
{#if isPostUpdated} ОБНОВЛЕНО @@ -122,40 +99,25 @@
- {#if isPostEventOfInterest} + + {#if post.dateChanged} - - {:else} - - {#if post.dateChanged} - - {/if} -
- - - {blogPostTypeToString(type)} - -
{/if} +
+ + + {blogPostTypeToString(type)} + +

{post.title}

@@ -177,7 +139,7 @@ } &.updated { - box-shadow: 0 0 0 calc(var(--spacing) * 1) var(--color-purple-600); + box-shadow: 0 0 0 4px var(--color-purple-600); .toast { @apply bg-purple-600; @@ -185,29 +147,13 @@ } &.new { - box-shadow: 0 0 0 calc(var(--spacing) * 1) var(--color-amber-600); + box-shadow: 0 0 0 4px var(--color-amber-600); .toast { @apply bg-amber-600; } } - &.eventPreStart { - box-shadow: 0 0 0 calc(var(--spacing) * 1) var(--color-rose-600); - - .toast { - @apply bg-rose-600; - } - } - - &.eventOngoing { - box-shadow: 0 0 0 calc(var(--spacing) * 1) var(--color-teal-600); - - .toast { - @apply bg-teal-600; - } - } - img.thumbnail { @apply absolute h-full w-full object-cover transition-transform; diff --git a/src/lib/components/DateWidget.svelte b/src/lib/components/DateWidget.svelte index 90065a3..fd52c69 100644 --- a/src/lib/components/DateWidget.svelte +++ b/src/lib/components/DateWidget.svelte @@ -10,7 +10,7 @@ class: className = '' }: { dateString?: string; - type?: 'published' | 'updated' | 'eventStart' | 'eventFinish'; + type?: 'published' | 'updated'; highlight?: boolean; showTime?: boolean; class?: string; @@ -18,9 +18,7 @@ const typeToIcon = { published: 'material-symbols:calendar-today', - updated: 'material-symbols:update', - eventStart: 'material-symbols:rocket-launch', - eventFinish: 'material-symbols:sports-score' + updated: 'material-symbols:update' }; const icon = type ? typeToIcon[type] : undefined; @@ -30,12 +28,7 @@
{#if icon} diff --git a/src/lib/util/Blogs.ts b/src/lib/util/Blogs.ts index 223ca87..e10d18d 100644 --- a/src/lib/util/Blogs.ts +++ b/src/lib/util/Blogs.ts @@ -8,11 +8,6 @@ export enum EventStatus { IsOver } -export function postIsEventOfInterest(post: App.BlogPost): boolean { - const status = postEventStatus(post); - return status === EventStatus.NotStarted || status === EventStatus.InProgress; -} - export function postEventStatus(post: App.BlogPost): EventStatus { if (post.type !== 'event' || post.dateEventFrom === undefined || post.dateEventTo === undefined) { return EventStatus.NotEvent; @@ -31,21 +26,17 @@ export function postEventStatus(post: App.BlogPost): EventStatus { export type PostComparer = (a: App.BlogPost, b: App.BlogPost) => number; export const sortPostsByPostDate: PostComparer = (a, b) => new Date(b.date!).valueOf() - new Date(a.date!).valueOf(); -export const sortPostsByPostAndUpdateDate: PostComparer = (a, b) => laterDate(b.date!, b.dateChanged) - laterDate(a.date!, a.dateChanged); -function laterDate(a: string, ...dates: (string | undefined)[]): number { +function laterDate(a: string, b?: string): number { const dateA = new Date(a).valueOf(); - if (dates.length <= 0) return dateA; + if (!b) return dateA; - let max = dateA; - for (const d of dates) { - if (!d) continue; - const date = new Date(d).valueOf(); - max = Math.max(max, date); - }; - return max; + const dateB = new Date(b).valueOf(); + return Math.max(dateA, dateB); } +export const sortPostsByPostAndUpdateDate: PostComparer = (a, b) => laterDate(b.date!, b.dateChanged) - laterDate(a.date!, a.dateChanged); + export async function fetchPostsSorted(postComparer?: PostComparer) { const allPosts = await fetchPosts(); diff --git a/src/pages/index.md b/src/pages/index.md index ae91af5..e206d50 100644 --- a/src/pages/index.md +++ b/src/pages/index.md @@ -36,7 +36,4 @@ __Tea Sanctuary__ — это также и сообщество едином Общие вопросы можно задавать в [сообществе Tea Sanctuary](https://teasanctuary.ru/discord). Там же можете написать личное сообщение администраторам. -Есть и другие способы следить за нашими новостями — например, [канал в Telegram](https://t.me/tea_sanctuary), -с комментариями и отдельным чатом. - Наши соцсети и почту для более важных обращений можно найти на странице [Контакты](/contact). diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index f6024d4..e617887 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,24 +1,11 @@ @@ -101,11 +88,9 @@

ПОСЛЕДНИЕ ПОСТЫ

- {#each posts as post, i} + {#each page.data.posts as post, i}
- {#key post} - - {/key} +
{/each}
diff --git a/src/routes/+page.ts b/src/routes/+page.ts index a94c88b..e430cc1 100644 --- a/src/routes/+page.ts +++ b/src/routes/+page.ts @@ -1,6 +1,6 @@ import { fetchPostsSorted, sortPostsByPostAndUpdateDate } from "$src/lib/util/Blogs"; -const LATEST_POSTS_COUNT = 5; +const LATEST_POSTS_COUNT = 3; export async function load() { let md: any diff --git a/src/routes/blog/+page.server.ts b/src/routes/blog/+page.server.ts index 916e748..c5653b5 100644 --- a/src/routes/blog/+page.server.ts +++ b/src/routes/blog/+page.server.ts @@ -1,4 +1,4 @@ -import { fetchPostsSorted } from "$lib/util/Blogs"; +import { fetchPostsSorted } from "$src/lib/util/Blogs"; export async function load() { return { title: "Блог", description: "Новости и заметки проектов Tea Sanctuary", posts: await fetchPostsSorted() }; diff --git a/src/routes/blog/+page.svelte b/src/routes/blog/+page.svelte index 3eed89a..da243da 100644 --- a/src/routes/blog/+page.svelte +++ b/src/routes/blog/+page.svelte @@ -1,10 +1,8 @@
@@ -54,20 +39,6 @@ пропускать новые посты! -{#if !!eventPosts && eventPosts.length > 0} -
-

АКТУАЛЬНЫЕ СОБЫТИЯ

- -
- {#each eventPosts as post, i} -
- -
- {/each} -
-
-{/if} -
{#each groupedPosts.entries() as [monthYear, postsInMonthYear]}

{/each} -

+
\ No newline at end of file