mirror of
https://github.com/StepanovPlaton/AboutMe.git
synced 2026-04-03 20:30:49 +04:00
New page
This commit is contained in:
@@ -155,6 +155,12 @@ collections:
|
|||||||
- { label: "Site URL", name: "siteurl", widget: "string" }
|
- { label: "Site URL", name: "siteurl", widget: "string" }
|
||||||
- { label: "Tags", name: "tags", widget: "list", required: false, default: [] }
|
- { label: "Tags", name: "tags", widget: "list", required: false, default: [] }
|
||||||
|
|
||||||
|
- name: "worth-mentioning"
|
||||||
|
label: "Worth Mentioning"
|
||||||
|
file: "src/content/worth-mentioning.md"
|
||||||
|
fields:
|
||||||
|
- { label: "Body", name: "body", widget: "markdown" }
|
||||||
|
|
||||||
|
|
||||||
editor:
|
editor:
|
||||||
preview: true
|
preview: true
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
@@ -85,6 +86,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="https://unpkg.com/decap-cms@^3.0.0/dist/decap-cms.js"></script>
|
<script src="https://unpkg.com/decap-cms@^3.0.0/dist/decap-cms.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
// Проверка после загрузки
|
// Проверка после загрузки
|
||||||
@@ -94,4 +96,5 @@
|
|||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -9,9 +9,10 @@ interface Props {
|
|||||||
page: Page;
|
page: Page;
|
||||||
class?: string;
|
class?: string;
|
||||||
style?: string;
|
style?: string;
|
||||||
|
basePath?: string; // Базовый путь для генерации URL (например, "/news" для главной страницы)
|
||||||
}
|
}
|
||||||
|
|
||||||
const { page, style } = Astro.props;
|
const { page, style, basePath } = Astro.props;
|
||||||
|
|
||||||
const HIDDEN = -1;
|
const HIDDEN = -1;
|
||||||
|
|
||||||
@@ -48,7 +49,14 @@ if (r === page.lastPage - 2) pages.push(page.lastPage - 1);
|
|||||||
if (r < page.lastPage) pages.push(page.lastPage);
|
if (r < page.lastPage) pages.push(page.lastPage);
|
||||||
|
|
||||||
const getPageUrl = (p: number) => {
|
const getPageUrl = (p: number) => {
|
||||||
if (p === 1) return "/";
|
if (p === 1) {
|
||||||
|
// Первая страница всегда на корне
|
||||||
|
return "/";
|
||||||
|
}
|
||||||
|
// Если указан basePath, используем его для всех страниц кроме первой
|
||||||
|
if (basePath) {
|
||||||
|
return `${basePath}/${p}/`;
|
||||||
|
}
|
||||||
return `/${p}/`;
|
return `/${p}/`;
|
||||||
};
|
};
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ const linkPresetNameMap: Record<string, LinkPreset> = {
|
|||||||
Anime: LinkPreset.Anime,
|
Anime: LinkPreset.Anime,
|
||||||
About: LinkPreset.About,
|
About: LinkPreset.About,
|
||||||
Friends: LinkPreset.Friends,
|
Friends: LinkPreset.Friends,
|
||||||
|
WorthMentioning: LinkPreset.WorthMentioning,
|
||||||
};
|
};
|
||||||
|
|
||||||
const normalizeNavbarLink = (
|
const normalizeNavbarLink = (
|
||||||
|
|||||||
@@ -64,4 +64,10 @@ export const LinkPresets: { [key in LinkPreset]: NavbarLink } = {
|
|||||||
icon: "material-symbols:info",
|
icon: "material-symbols:info",
|
||||||
description: i18n(I18nKey.about),
|
description: i18n(I18nKey.about),
|
||||||
},
|
},
|
||||||
|
[LinkPreset.WorthMentioning]: {
|
||||||
|
name: i18n(I18nKey.worthMentioning),
|
||||||
|
url: "/worth-mentioning/",
|
||||||
|
icon: "material-symbols:star",
|
||||||
|
description: i18n(I18nKey.worthMentioningSubtitle),
|
||||||
|
},
|
||||||
};
|
};
|
||||||
@@ -1,18 +1,19 @@
|
|||||||
# About This Site
|
# Об этом сайте
|
||||||
|
|
||||||
Twilight is a CMS integrated static blog template built with [Astro](https://astro.build) framework.
|
Добро пожаловать на сайт Степанова Платона. Тут много информации обо мне, моих проектах, навыках, увлечениях, мои новости. Я хотел собрать всё это в одном месте, чтобы удобно делиться своим опытом и представляться в интернете.
|
||||||
|
**Пишите, буду рад новым знакомым!**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Достойны упоминания
|
||||||
|
Если вам понравился этот сайт, вы так же можете [посмотреть проекты других людей, которые я считаю достойными упоминания](../worth-mentioning/)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Создать свой сайт
|
||||||
|
Если вам понравился этот сайт и вы хотите создать что-то подобное для себя, то эти репозитории вам помогут:
|
||||||
|
|
||||||
|
**Шаблон для Astro Twilight который лежит в основе моего сайта**
|
||||||
::github{repo="Spr-Aachen/Twilight"}
|
::github{repo="Spr-Aachen/Twilight"}
|
||||||
|
**Исходный код моего сайта**
|
||||||
|
::github{repo="StepanovPlaton/AboutMe"}
|
||||||
## Milestones
|
|
||||||
|
|
||||||
- Integrated content management system in [#1](https://github.com/Spr-Aachen/Twilight/pull/1)
|
|
||||||
- Seamless wallpaper mode switching in [#2](https://github.com/Spr-Aachen/Twilight/pull/2)
|
|
||||||
- Dynamic content container response in [#47](https://github.com/Spr-Aachen/Twilight/pull/47)
|
|
||||||
- Seamless page component loading in [#48](https://github.com/Spr-Aachen/Twilight/pull/48)
|
|
||||||
- Smart music playback handling in [#49](https://github.com/Spr-Aachen/Twilight/pull/49)
|
|
||||||
- Infinite-level navigation system in [#50](https://github.com/Spr-Aachen/Twilight/pull/50)
|
|
||||||
- Comprehensive statistics dashboard in [#51](https://github.com/Spr-Aachen/Twilight/pull/51)
|
|
||||||
- Low-barrier configuration scheme in [#58](https://github.com/Spr-Aachen/Twilight/pull/58)
|
|
||||||
- Dynamic breakpoint handling in [#68](https://github.com/Spr-Aachen/Twilight/pull/68)
|
|
||||||
|
|||||||
111
src/content/worth-mentioning.md
Normal file
111
src/content/worth-mentioning.md
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
# Посмотрите также
|
||||||
|
|
||||||
|
Раз уж у меня появился свой уголок в интернете, я посчитал нужным поделиться с вами классными проектами других людей. Здесь вы найдёте и другие сайты, и книги, и видеоигры, от популярных до нишевых — **всё, что я хочу показать миру**.
|
||||||
|
|
||||||
|
## О дварфах!
|
||||||
|
|
||||||
|
История моей аватарки (стилистики этого сайта, моего сервера и много чего ещё) берёт своё начало с **[легендарной игры DwarfFortress](http://www.bay12games.com/dwarves/)**. Эта игра для меня пример **гениальности, усидчивости и абсурда** в одном лице.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Я не могу советовать её вам (потому что это игра не для всех), но был обязан упомянуть на своём сайте</summary>
|
||||||
|
|
||||||
|
Её движок настолько сложен, что долгое время к нему не могли добавить графику. За **более чем 20 лет разработки** она готова менее чем наполовину, её делают два брата на пожертвования от фанатов, и при всём этом ей вдохновлялись создатели Minecraft и Rimworld, а в 2013 Нью-Йоркский музей современного искусства включил игру в свою коллекцию.
|
||||||
|
|
||||||
|
Это лучший симулятор историй. Обязательно почитайте [историю крепости Боутмёрдед](https://dtf.ru/games/22946-legendy-dwarf-fortress-saga-o-padenii-kreposti-boutmerded) — эти легенды тянут на эпичный фильм от Netflix, но это просто обычная игра в DwarfFortress. Да, здесь можно тренировать дварфов бегать на костылях быстрее, чем на ногах, стреляя в них монетками. Да, на вас может напасть огромная адская автоматически сгенерированная... попа. И да, ваши дварфы могут умереть не только от гоблинов, но и от кошек, безумия, миазмов, одинаковой выпивки и даже сушняка...
|
||||||
|
|
||||||
|
Эта игра не для всех, но я боюсь в неё заходить, потому что потом не могу выйти.
|
||||||
|
|
||||||
|
И помните... Проигрывать весело!
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Карандаш и Самоделкин
|
||||||
|
|
||||||
|
У всякой истории есть начало. Я начал свою историю отсюда: [Блог команды "Карандаш и Самоделкин"](https://karandashsamodelkin.blogspot.com). Передавайте привет маленькому мне и **большое спасибо моему отцу**!
|
||||||
|
|
||||||
|
## Классные сайты
|
||||||
|
|
||||||
|
Интернет огромен, и в нём куча страниц. Некоторые популярны, другие не очень, но эти особенно интересны:
|
||||||
|
|
||||||
|
+ [Онлайн книга Linux From Scratch](https://linuxfromscratch.org) — бесплатное руководство по созданию своей GNU/Linux системы из исходного кода (с нуля). Лучшее развлечение на вечер для админа.
|
||||||
|
+ [Этаж 796](https://floor796.com) — проект русского художника, который объединил на 796 этаже космической станции всех самых знаковых персонажей, гиков, мемов, фильмов, комиксов и сериалов человечества. Тут залип на 2 часа...
|
||||||
|
+ [SCP Foundation](https://scpfoundation.net) — открытая научно-фантастическая онлайн вселенная. Мурашки по коже, невозможно оторваться. Обязательно прочтите [SCP-079 — Старый ИИ](https://scpfoundation.net/scp-079) и [Хаб отдела антимеметики](https://scpfoundation.net/antimemetics-division-hub).
|
||||||
|
+ [CashGo](https://cashgo.ru) — онлайн игра, тренажёр финансового интеллекта. Здесь я успел ухватить кусочек старого интернета с ламповыми форумами. Спасибо за детство, передавайте привет Оксюше, Пингвинатко, Успеху и Лису!
|
||||||
|
+ [Неолурк](https://neolurk.org) — народная википедия.
|
||||||
|
|
||||||
|
## IT
|
||||||
|
|
||||||
|
+ [Brainfuck](https://ru.wikipedia.org/wiki/Brainfuck) — эзотерический язык программирования из 8 команд.
|
||||||
|
+ [KISS](https://ru.wikipedia.org/wiki/KISS_(принцип)) — делай проще, тупица.
|
||||||
|
+ [Быстрый обратный квадратный корень](https://ru.wikipedia.org/wiki/Быстрый_обратный_квадратный_корень) — магическая функция приближённого вычисления $1/\sqrt{x}$ из Quake.
|
||||||
|
+ [В††](https://neolurk.org/wiki/В%2B%2B) — язык программирования русских богатырей.
|
||||||
|
+ [Suckless](https://suckless.org) — эталон минимализма. Обязательно зацените [dwm](https://dwm.suckless.org) и [st](https://st.suckless.org).
|
||||||
|
+ [9600 бод и все-все-все](https://lib.ru/ANEKDOTY/9600.txt) — Винни Пух стал хакером времён FIDONET.
|
||||||
|
+ [Nand2Tetris](https://www.nand2tetris.org) — собираем 16-битный компьютер из логических блоков, пишем компилятор, операционную систему и видеоигры. Курс от MIT.
|
||||||
|
|
||||||
|
## Видеоигры
|
||||||
|
|
||||||
|
+ [DwarfFortress](https://ru.wikipedia.org/wiki/Dwarf_Fortress) — симулятор строительства и управления пьяными дварфами. Лучший генератор историй.
|
||||||
|
+ [Chrono Trigger](https://ru.wikipedia.org/wiki/Chrono_Trigger) — лучшая JRPG из мира ретро-видеоигр. Хочу поделиться этой игрой как дань уважения винтажным видеоиграм и разработчикам, которые их писали (на ассемблере!!). Chrono Trigger — венец творения той эпохи!
|
||||||
|
+ [Doom](https://ru.wikipedia.org/wiki/Doom) - легендарная игра, одна из первых псевдотрёхмерных видеоигр от первого лица.
|
||||||
|
+ [Baldur's Gate III](https://ru.wikipedia.org/wiki/Baldur's_Gate_3) — лучшая RPG от легендарной Larian Studios. Если когда-нибудь пойду в GameDev, то только к ним.
|
||||||
|
+ [Lode Runner](https://ru.wikipedia.org/wiki/Lode_Runner) — люблю эту игру (версию под ZXSpectrum). Одна из тысяч игр той эпохи. Я однажды даже [написал её клон](https://rutracker.org/forum/viewtopic.php?t=5885455). Когда-нибудь я всё же пройду её до конца...
|
||||||
|
+ [Elite](https://ru.wikipedia.org/wiki/Elite) — космический симулятор, который помещался на ленту в 22Кб. 8 галактик по 256 планет в каждой.
|
||||||
|
+ [НЕВЕРьвХУДо](https://ru.wikipedia.org/wiki/The_Neverhood) — приключение-головоломка из пластилина. [Саундтрек обязателен к прослушиванию](https://youtu.be/Wh4WnHlsbvM?si=VMTHX2Itt5Vwxr1b).
|
||||||
|
+ [.kkrieger](https://ru.wikipedia.org/wiki/.kkrieger) — 3D видеоигра размером в 96 килобайт.
|
||||||
|
|
||||||
|
## Кино и сериалы
|
||||||
|
|
||||||
|
+ [Теория большого взрыва](https://www.kinopoisk.ru/series/306084/) — `Всё становится лучше с Bluetooth!`
|
||||||
|
+ [Компьютерщики](https://www.kinopoisk.ru/series/386715/) — `Алло, техподдержка. Вы пробовали выключить и снова включить?`
|
||||||
|
+ [Mr. Freeman](https://www.kinopoisk.ru/series/630080/) — `Большим можно оставаться и будучи маленьким`
|
||||||
|
+ [Масяня](https://www.kinopoisk.ru/series/447446/) — [Как-то один енот жил толстый как барсуууук...](https://www.youtube.com/watch?v=GWpF9LIhXhk)
|
||||||
|
+ [Revolution OS](https://www.youtube.com/watch?v=n1F_MfLRlX0) — история OpenSource и ядра Linux в озвучке Дмитрия Бачило.
|
||||||
|
|
||||||
|
## Книги
|
||||||
|
|
||||||
|
Я не очень люблю читать книги, но просто обожаю слушать их аудиоверсии. Это книги которые кажутся мне классными. Я специально не стал писать их в список, иначе просто не смог бы определить порядок. Некоторые из них полезные, некоторые развлекательные, некоторые известные, другие нет. Может быть ты найдёшь здесь что-то для себя!
|
||||||
|
|
||||||
|
| | | |
|
||||||
|
|---|---|---|
|
||||||
|
| Азимов Айзек — Основание (цикл) | Адамс Дуглас — Автостопом по галактике | Арриан Флавий — Энхиридион (Краткое руководство к нравственной жизни) |
|
||||||
|
| Бабайкин — На пенсию в 35 лет | Богомазов Валентин — 3017 (цикл) | Валерьев Андрей — Фаранг (цикл) |
|
||||||
|
| Вейр Энди — Марсианин | Вейр Энди — Проект «Аве Мария» | Гессе Герман — Сиддхартха |
|
||||||
|
| Дивoв Олег — Лучший экипаж Солнечной | Дивoв Олег — Техподдержка | Дик Филип Киндред — Убик |
|
||||||
|
| Дик Филип Киндред — Мечтают ли андроиды об электроовцах? | Дорофеев Максим — Джедайские техники | Злотников Роман — Руигат (цикл) |
|
||||||
|
| Ильин Владимир — Шериф | Казанцев Сергей — Баг | Каменистый Артем — Исчадие техно (цикл) |
|
||||||
|
| Каменистый Артем — Самый странный нуб (трилогия) | Каменистый Артем — Альфа-ноль (цикл) | Кинг Стивен — Долгая прогулка |
|
||||||
|
| Кинг Стивен — Бегущий человек | Кларк Артур — 2001: Космическая одиссея (цикл) | Клейсон Джордж — Самый богатый человек в Вавилоне |
|
||||||
|
| Кострица Евгений — Рарник (цикл) | Кравец Сергей — Спираль времени (цикл) | Лем Станислав — Сказки роботов |
|
||||||
|
| Лукьяненко Сергей — Линия грёз (цикл) | Лю Цысинь — Задача трех тел (трилогия) | Лю Цысинь — Блуждающая земля |
|
||||||
|
| Марков Алексей — Хулиномика | Марков Алексей — Жлобология | Мэнсон Марк — Всё хреново: книга о надежде |
|
||||||
|
| Мэнсон Марк — Тонкое искусство пофигизма | Мэнсон Марк — Мужские правила | Оруэлл Джордж — 1984 |
|
||||||
|
| Пелевин Виктор — Тайные виды на гору Фудзи | Пелевин Виктор — Омон Ра | Пильюччи Массимо — Как быть стоиком |
|
||||||
|
| Рейнольдс Аластер — Дождь забвения | Ринпоче Йонге Мингьюр — Будда, мозг и нейрофизиология счастья | Ринпоче Йонге Мингьюр — Радостная мудрость |
|
||||||
|
| Рус Дмитрий — Играть, чтобы жить (цикл) | Рэнд Айн — Атлант расправил плечи | Саберхаген Фред — Берсеркер |
|
||||||
|
| Смородинский Георгий — Семнадцатое обновление (цикл) | Смородинский Георгий — Черный барон (цикл) | Смородинский Георгий — Перекресток одиночества |
|
||||||
|
| Стругацкие Аркадий и Борис — Трудно быть богом | Стругацкие Аркадий и Борис — Понедельник начинается в субботу | Стругацкие Аркадий и Борис — Пикник на обочине |
|
||||||
|
| Тармашев Сергей — Ареал (цикл) | Тармашев Сергей — Древний (цикл) | Тармашев Сергей — Каждому своё (цикл) |
|
||||||
|
| Тармашев Сергей — Тьма (цикл) | Франкл Виктор — Сказать жизни «Да!» | Фромм Эрих — Искусство любить |
|
||||||
|
| Хаксли Олдос — О дивный новый мир | Харари Юваль Ной — Sapiens: Краткая история человечества | Харари Юваль Ной — Homo Deus: Краткая история будущего |
|
||||||
|
| Хокинг Стивен — Краткая история времени | Хокинг Стивен — Высший замысел | Шаман Павел — Система дефрагментации (цикл) |
|
||||||
|
| Шаров Кирилл — Проект «Изоляция» (цикл) | Юдковский Элиезер — Гарри Поттер и методы рационального мышления | Юнг Карл Густав — Аналитическая психология: Тавистокские лекции |
|
||||||
|
| Ямамото Цунэтомо — Хагакурэ. Сокрытое в листве | | |
|
||||||
|
|
||||||
|
## Музыка
|
||||||
|
|
||||||
|
+ [ГРОТ](https://grotmusic.ru) - не просто музыка, а текст и глубокий смысл.
|
||||||
|
+ [HTP](https://vk.com/nii_rap) - если вы из IT просто полистайте, это весело.
|
||||||
|
|
||||||
|
## Кумиры
|
||||||
|
|
||||||
|
В той или иной мере меня вдохновляют эти люди:
|
||||||
|
+ [Линус Торвальдс](https://ru.wikipedia.org/wiki/Торвальдс,_Линус) — самый значимый OpenSource проект.
|
||||||
|
+ [Павел Дуров](https://t.me/durov) — Telegram и борьба за свободу в интернете.
|
||||||
|
+ [Тарн и Зак Адамс](https://bay12games.com) - самая амбициозая инди-игра.
|
||||||
|
+ [Глеб Карпов](https://www.youtube.com/@glebprosto) — Просто о сложном и важном.
|
||||||
|
|
||||||
|
## Разное
|
||||||
|
|
||||||
|
Это просто классные вещи, зацените их!
|
||||||
|
|
||||||
|
+ [Цикада 3301](https://habr.com/ru/companies/ruvds/articles/714806/) — одна из самых больших загадок интернета 2010-х.
|
||||||
@@ -188,6 +188,10 @@ enum I18nKey {
|
|||||||
// 友链页面
|
// 友链页面
|
||||||
friends = "friends",
|
friends = "friends",
|
||||||
|
|
||||||
|
// 值得提及的 проекты
|
||||||
|
worthMentioning = "worthMentioning",
|
||||||
|
worthMentioningSubtitle = "worthMentioningSubtitle",
|
||||||
|
|
||||||
// RSS页面
|
// RSS页面
|
||||||
rss = "rss",
|
rss = "rss",
|
||||||
rssDescription = "rssDescription",
|
rssDescription = "rssDescription",
|
||||||
|
|||||||
@@ -111,8 +111,8 @@ export const ru: Translation = {
|
|||||||
[Key.skillLevelAdvanced]: "Продвинутый",
|
[Key.skillLevelAdvanced]: "Продвинутый",
|
||||||
[Key.skillLevelExpert]: "Эксперт",
|
[Key.skillLevelExpert]: "Эксперт",
|
||||||
[Key.skillExperience]: "Опыт",
|
[Key.skillExperience]: "Опыт",
|
||||||
[Key.skillYears]: " г.",
|
[Key.skillYears]: " г",
|
||||||
[Key.skillMonths]: " мес.",
|
[Key.skillMonths]: " мес",
|
||||||
[Key.skillsTotal]: "Всего навыков",
|
[Key.skillsTotal]: "Всего навыков",
|
||||||
[Key.skillsExpert]: "Экспертный уровень",
|
[Key.skillsExpert]: "Экспертный уровень",
|
||||||
[Key.skillsAdvanced]: "Продвинутый",
|
[Key.skillsAdvanced]: "Продвинутый",
|
||||||
@@ -163,8 +163,8 @@ export const ru: Translation = {
|
|||||||
[Key.diaryDaysAgo]: "дней назад",
|
[Key.diaryDaysAgo]: "дней назад",
|
||||||
|
|
||||||
// Страница альбомов
|
// Страница альбомов
|
||||||
[Key.albums]: "Портфолио", //"Альбомы",
|
[Key.albums]: "Медиа", //"Альбомы",
|
||||||
[Key.albumsSubtitle]: "Записывайте прекрасные моменты жизни",
|
[Key.albumsSubtitle]: "Скриншоты моих работ и многое другое",
|
||||||
[Key.albumsEmpty]: "Нет содержимого",
|
[Key.albumsEmpty]: "Нет содержимого",
|
||||||
[Key.albumsEmptyDesc]: "Альбомы ещё не созданы. Добавьте прекрасные воспоминания!",
|
[Key.albumsEmptyDesc]: "Альбомы ещё не созданы. Добавьте прекрасные воспоминания!",
|
||||||
[Key.albumsBackToList]: "Вернуться к альбомам",
|
[Key.albumsBackToList]: "Вернуться к альбомам",
|
||||||
@@ -191,6 +191,10 @@ export const ru: Translation = {
|
|||||||
// Страница друзей
|
// Страница друзей
|
||||||
[Key.friends]: "Друзья",
|
[Key.friends]: "Друзья",
|
||||||
|
|
||||||
|
// Страница проектов достойных упоминания
|
||||||
|
[Key.worthMentioning]: "Посмотрите также",
|
||||||
|
[Key.worthMentioningSubtitle]: "Проекты достойные упоминания",
|
||||||
|
|
||||||
// Страница RSS
|
// Страница RSS
|
||||||
[Key.rss]: "RSS лента",
|
[Key.rss]: "RSS лента",
|
||||||
[Key.rssDescription]: "Подпишитесь, чтобы получать последние обновления",
|
[Key.rssDescription]: "Подпишитесь, чтобы получать последние обновления",
|
||||||
|
|||||||
@@ -7,7 +7,10 @@ import { LinkPresets } from "@constants/link-presets";
|
|||||||
import { url } from "@utils/url";
|
import { url } from "@utils/url";
|
||||||
import GridLayout from "@layouts/grid.astro";
|
import GridLayout from "@layouts/grid.astro";
|
||||||
import { siteConfig } from "@/config";
|
import { siteConfig } from "@/config";
|
||||||
|
import PostPage from "@components/postPage.astro";
|
||||||
|
import { PAGE_SIZE } from "@constants/constants";
|
||||||
|
import { getSortedPosts } from "@utils/content";
|
||||||
|
import Pagination from "@components/pagination.astro";
|
||||||
|
|
||||||
// Получаем все ссылки из navbar, включая основные и с подразделами
|
// Получаем все ссылки из navbar, включая основные и с подразделами
|
||||||
const allLinks: NavbarLink[] = [];
|
const allLinks: NavbarLink[] = [];
|
||||||
@@ -25,23 +28,34 @@ navbarConfig.links.forEach(link => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Добавляем ссылку на новости/ленту постов
|
|
||||||
const newsLink: NavbarLink = {
|
|
||||||
name: "Новости",
|
|
||||||
url: "/news/",
|
|
||||||
icon: "material-symbols:article",
|
|
||||||
description: "Лента постов и статей",
|
|
||||||
};
|
|
||||||
|
|
||||||
// Вставляем ссылку на новости в начало списка
|
|
||||||
allLinks.unshift(newsLink);
|
|
||||||
|
|
||||||
const pageTitle = siteConfig.title;
|
const pageTitle = siteConfig.title;
|
||||||
const pageDescription = siteConfig.subtitle || "";
|
const pageDescription = siteConfig.subtitle || "";
|
||||||
|
|
||||||
|
const allBlogPosts = await getSortedPosts();
|
||||||
|
const firstPagePosts = allBlogPosts.slice(0, PAGE_SIZE);
|
||||||
|
const totalPages = Math.ceil(allBlogPosts.length / PAGE_SIZE);
|
||||||
|
|
||||||
|
const page = {
|
||||||
|
currentPage: 1,
|
||||||
|
lastPage: totalPages,
|
||||||
|
size: PAGE_SIZE,
|
||||||
|
total: allBlogPosts.length,
|
||||||
|
data: firstPagePosts.map((post, index) => ({
|
||||||
|
...post,
|
||||||
|
index: index + 1,
|
||||||
|
})),
|
||||||
|
url: {
|
||||||
|
current: "/",
|
||||||
|
prev: undefined,
|
||||||
|
next: totalPages > 1 ? url("/news/2/") : undefined,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const len = page.data.length;
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<GridLayout title={pageTitle} description={pageDescription}>
|
<GridLayout title={pageTitle} description={pageDescription}>
|
||||||
<div class="flex w-full rounded-(--radius-large) overflow-hidden relative min-h-32">
|
<div class="flex w-full rounded-(--radius-large) overflow-hidden relative min-h-32 mb-3">
|
||||||
<div class="card-base z-10 px-9 py-6 relative w-full">
|
<div class="card-base z-10 px-9 py-6 relative w-full">
|
||||||
<!-- Заголовок -->
|
<!-- Заголовок -->
|
||||||
<header class="mb-8">
|
<header class="mb-8">
|
||||||
@@ -84,6 +98,10 @@ const pageDescription = siteConfig.subtitle || "";
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<PostPage page={page}></PostPage>
|
||||||
|
{totalPages > 1 && (
|
||||||
|
<Pagination class="mx-auto onload-animation-up" page={page} style={`animation-delay: ${(len)*50}ms`} basePath="/news"></Pagination>
|
||||||
|
)}
|
||||||
</GridLayout>
|
</GridLayout>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
@@ -27,10 +27,12 @@ const stats = getProjectStats();
|
|||||||
const featuredProjects = getFeaturedProjects();
|
const featuredProjects = getFeaturedProjects();
|
||||||
const allTechStack = getAllTechStack();
|
const allTechStack = getAllTechStack();
|
||||||
|
|
||||||
// 获取所有分类
|
// 定义分类顺序
|
||||||
const categories = [
|
const categoryOrder = ["actual", "history", "other"];
|
||||||
...new Set(projectsData.map((project) => project.category)),
|
|
||||||
];
|
// 获取所有分类并按指定顺序排序
|
||||||
|
const allCategories = [...new Set(projectsData.map((project) => project.category))];
|
||||||
|
const categories = categoryOrder.filter(cat => allCategories.includes(cat));
|
||||||
|
|
||||||
// 按分类获取项目
|
// 按分类获取项目
|
||||||
const projectsByCategory = categories.reduce(
|
const projectsByCategory = categories.reduce(
|
||||||
|
|||||||
35
src/pages/worth-mentioning.astro
Normal file
35
src/pages/worth-mentioning.astro
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
export const prerender = true;
|
||||||
|
|
||||||
|
|
||||||
|
import { getEntry, render } from "astro:content";
|
||||||
|
|
||||||
|
import { LinkPresets } from "@constants/link-presets";
|
||||||
|
import { LinkPreset } from "@/types/config";
|
||||||
|
import Markdown from "@components/common/markdown.astro";
|
||||||
|
import GridLayout from "@layouts/grid.astro";
|
||||||
|
import BackwardButton from "@components/backwardButton.astro";
|
||||||
|
|
||||||
|
|
||||||
|
const pageTitle = LinkPresets[LinkPreset.WorthMentioning].name;
|
||||||
|
const pageDescription = LinkPresets[LinkPreset.WorthMentioning].description;
|
||||||
|
|
||||||
|
const worthMentioningPost = await getEntry("spec", "worth-mentioning");
|
||||||
|
|
||||||
|
if (!worthMentioningPost) {
|
||||||
|
throw new Error("Worth mentioning page content not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
const { Content } = await render(worthMentioningPost);
|
||||||
|
---
|
||||||
|
|
||||||
|
<GridLayout title={pageTitle} description={pageDescription}>
|
||||||
|
<div class="flex w-full rounded-(--radius-large) overflow-hidden relative min-h-32">
|
||||||
|
<div class="card-base z-10 px-9 py-6 relative w-full ">
|
||||||
|
<BackwardButton currentPath={Astro.url.pathname} />
|
||||||
|
<Markdown class="mt-2">
|
||||||
|
<Content />
|
||||||
|
</Markdown>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</GridLayout>
|
||||||
@@ -210,6 +210,7 @@ export enum LinkPreset {
|
|||||||
Anime = 7,
|
Anime = 7,
|
||||||
About = 8,
|
About = 8,
|
||||||
Friends = 9,
|
Friends = 9,
|
||||||
|
WorthMentioning = 10,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ site:
|
|||||||
kenBurns: true
|
kenBurns: true
|
||||||
banner:
|
banner:
|
||||||
homeText:
|
homeText:
|
||||||
enable: false
|
enable: true
|
||||||
title: "Степанов Платон"
|
title: "Степанов Платон"
|
||||||
subtitle:
|
subtitle:
|
||||||
- "Программный инженер, разработчик"
|
- "Программный инженер, разработчик"
|
||||||
@@ -95,14 +95,10 @@ navbar:
|
|||||||
- "Projects"
|
- "Projects"
|
||||||
- "Skills"
|
- "Skills"
|
||||||
- "Timeline"
|
- "Timeline"
|
||||||
- name: "Разное"
|
# - "Diary"
|
||||||
url: "/exhibition/"
|
|
||||||
icon: "material-symbols:check-box"
|
|
||||||
description: ""
|
|
||||||
children:
|
|
||||||
- "Diary"
|
|
||||||
- "Albums"
|
- "Albums"
|
||||||
- "Friends"
|
# - "Friends"
|
||||||
|
- "WorthMentioning"
|
||||||
- "About"
|
- "About"
|
||||||
|
|
||||||
sidebar:
|
sidebar:
|
||||||
@@ -131,14 +127,17 @@ sidebar:
|
|||||||
profile:
|
profile:
|
||||||
avatar: "/assets/images/avatar.jpg"
|
avatar: "/assets/images/avatar.jpg"
|
||||||
name: "Степанов Платон"
|
name: "Степанов Платон"
|
||||||
bio: ""
|
bio: "Приятно познакомиться!"
|
||||||
links:
|
links:
|
||||||
- name: "GitHub"
|
- name: "Git"
|
||||||
icon: "fa6-brands:github"
|
icon: "fa6-brands:git-alt"
|
||||||
url: "https://git.stepanovplaton.ru"
|
url: "https://git.stepanovplaton.ru"
|
||||||
- name: "Telegram"
|
- name: "Telegram"
|
||||||
icon: "fa6-brands:telegram"
|
icon: "fa6-brands:telegram"
|
||||||
url: "https://t.me/StepanovPlaton"
|
url: "https://t.me/StepanovPlaton"
|
||||||
|
- name: "Email"
|
||||||
|
icon: "material-symbols:mail-outline"
|
||||||
|
url: "mailto:mail2platon@yandex.ru"
|
||||||
|
|
||||||
announcement:
|
announcement:
|
||||||
enable: false
|
enable: false
|
||||||
|
|||||||
Reference in New Issue
Block a user