- Под лентой контента появилась панель из трёх pill-кнопок: Telegram (t.me/anotherreflections), ВКонтакте (vk.com/anotherreflections) и «Наверх» (smooth scroll to top) - Универсальный plural() в consts.ts — больше нет «8 мира», hero показывает «8 миров / 50 публикаций / 20 лет онлайн» с автоматически правильной формой при любом значении - Уточнено описание Ренессанса: «фантастическими допущениями мира Сумрака»
128 lines
5.2 KiB
TypeScript
128 lines
5.2 KiB
TypeScript
export const SOCIAL = {
|
||
telegram: { url: 'https://t.me/anotherreflections', label: 'Telegram' },
|
||
vk: { url: 'https://vk.com/anotherreflections', label: 'ВКонтакте' },
|
||
};
|
||
|
||
/** Русская плюрализация: [1, 2-4, 5+]. Пример: plural(8, ['мир', 'мира', 'миров']) → 'миров' */
|
||
export function plural(n: number, forms: [string, string, string]): string {
|
||
const a = Math.abs(n) % 100;
|
||
const b = a % 10;
|
||
if (a > 10 && a < 20) return forms[2];
|
||
if (b > 1 && b < 5) return forms[1];
|
||
if (b === 1) return forms[0];
|
||
return forms[2];
|
||
}
|
||
|
||
export const SITE_TITLE = 'Иные Отражения';
|
||
export const SITE_DESCRIPTION = 'Ролевой проект по современной фантастике. Дозоры С. Лукьяненко, Амбер Р. Желязны, А. Пехов.';
|
||
export const SITE_URL = 'https://anotherreflections.ru';
|
||
export const SITE_AUTHOR = 'Иные Отражения';
|
||
export const SITE_LANG = 'ru-RU';
|
||
export const SITE_FOUNDED = 2006;
|
||
|
||
export const HERO_TAGLINE = 'Открываем двери в миры, где границы реальности тают, а свет встречается с тенью';
|
||
|
||
/**
|
||
* RSS-фид отдаёт только посты с pubDate >= этой даты.
|
||
* Сценарий: фид подключают как источник в IPB RSS Importer; чтобы старый
|
||
* архив 2009–2015 не залился в форумы одной волной, отрезаем по cutover.
|
||
* Изменить дату → перезапустить build.
|
||
*/
|
||
export const RSS_CUTOFF = new Date('2026-05-20T00:00:00+03:00');
|
||
|
||
/** Сколько постов в RSS-фиде максимум (после фильтра cutoff). */
|
||
export const RSS_LIMIT = 30;
|
||
|
||
/**
|
||
* Цвета категорий — для тэгов в ленте и подсветки карточек.
|
||
* Если slug отсутствует в этом мапе, используется --accent по умолчанию.
|
||
*/
|
||
export const CATEGORY_COLORS: Record<string, string> = {
|
||
'obshhie-novosti': 'var(--c-news)',
|
||
'tech_news': 'var(--c-tech)',
|
||
'reklama': 'var(--c-ads)',
|
||
'nashi-druzya': 'var(--c-friends)',
|
||
'rolgames': 'var(--c-roleplay)',
|
||
'nad-bezdnoj': 'var(--c-bezdna)',
|
||
'glubina': 'var(--c-glubina)',
|
||
'fan-art': 'var(--c-fanart)',
|
||
'sumerki-dozorov': 'var(--c-sumerki)',
|
||
'klub-lukyanenko': 'var(--c-lukyanenko)',
|
||
};
|
||
|
||
/** Миры (старые «Форумы и проекты») — карточки на главной с тематикой и цветом. */
|
||
export type World = {
|
||
name: string;
|
||
tag: string;
|
||
desc: string;
|
||
url: string;
|
||
color: string;
|
||
};
|
||
|
||
export const WORLDS: World[] = [
|
||
{
|
||
name: 'Сумерки Дозоров',
|
||
tag: 'Дозоры · С. Лукьяненко',
|
||
desc: 'Главная игровая вселенная проекта. Иные, Свет и Тьма, Договор.',
|
||
url: 'https://sumerki.anotherreflections.ru/',
|
||
color: 'var(--c-sumerki)',
|
||
},
|
||
{
|
||
name: 'Амбер',
|
||
tag: 'Янтарное Королевство · Р. Желязны',
|
||
desc: 'Истинный мир, его Отражения и принцы крови с непростой семейной историей.',
|
||
url: 'https://amber.anotherreflections.ru/',
|
||
color: 'var(--c-amber)',
|
||
},
|
||
{
|
||
name: 'Киндрет',
|
||
tag: 'Кровные братья · А. Пехов',
|
||
desc: 'Современная Москва глазами вампирских домов и их теневой политики.',
|
||
url: 'https://kindret.anotherreflections.ru/',
|
||
color: 'var(--c-kindret)',
|
||
},
|
||
{
|
||
name: 'Ренессанс',
|
||
tag: 'Историческая фантастика',
|
||
desc: 'Эпоха Возрождения с фантастическими допущениями мира Сумрака.',
|
||
url: 'https://renessans.anotherreflections.ru/',
|
||
color: 'var(--c-roleplay)',
|
||
},
|
||
{
|
||
name: 'Над бездной',
|
||
tag: 'Тёмная мистика',
|
||
desc: 'Тонкая грань между обыденным и потусторонним.',
|
||
url: 'https://bezdna.anotherreflections.ru/',
|
||
color: 'var(--c-bezdna)',
|
||
},
|
||
{
|
||
name: 'Глубина',
|
||
tag: 'Дозоры · Глубина',
|
||
desc: 'Параллельный пласт реальности из мира Дозоров.',
|
||
url: 'https://deep.anotherreflections.ru/',
|
||
color: 'var(--c-glubina)',
|
||
},
|
||
{
|
||
name: 'Warhammer 40k',
|
||
tag: 'Сорок первое тысячелетие',
|
||
desc: 'Только война. Игровое сообщество по вселенной Games Workshop.',
|
||
url: 'https://warhammer40k.anotherreflections.ru/',
|
||
color: 'var(--c-roleplay)',
|
||
},
|
||
{
|
||
name: 'Главный форум',
|
||
tag: 'Общая площадка',
|
||
desc: 'Архивный форум проекта со всеми мирами в одном месте.',
|
||
url: 'https://forum.anotherreflections.ru/',
|
||
color: 'var(--c-news)',
|
||
},
|
||
];
|
||
|
||
/** Главное меню. */
|
||
export const MAIN_NAV = [
|
||
{ label: 'Новости', href: '/' },
|
||
{ label: 'О нас', href: '/o-nas/' },
|
||
{ label: 'Миры', href: '/miry/' },
|
||
{ label: 'Друзья', href: '/nashi-druzya/' },
|
||
];
|