Files
anotherreflections-website-v2/src/consts.ts
striker 5f9ec37211 feat: соц-кнопки и кнопка «Наверх» внизу + русская плюрализация
- Под лентой контента появилась панель из трёх pill-кнопок:
  Telegram (t.me/anotherreflections), ВКонтакте (vk.com/anotherreflections)
  и «Наверх» (smooth scroll to top)
- Универсальный plural() в consts.ts — больше нет «8 мира»,
  hero показывает «8 миров / 50 публикаций / 20 лет онлайн»
  с автоматически правильной формой при любом значении
- Уточнено описание Ренессанса: «фантастическими допущениями мира Сумрака»
2026-05-21 01:43:30 +03:00

128 lines
5.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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; чтобы старый
* архив 20092015 не залился в форумы одной волной, отрезаем по 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/' },
];