feat: series-таксономия, переключатель темы вправо, соцсети в меню

- hugo.toml: [taxonomies] series = "series"; [params.socialIcons] (github, telegram, rss)
- layouts/partials/series_nav.html: модуль «Серия: N из M» с навигацией prev/next
  (сортировка по series_order), поддержка кириллических названий серий
- layouts/_default/single.html: override темы — подключение series_nav перед контентом
- layouts/partials/extend_footer.html: JS переносит .logo-switches из .logo в конец
  .nav (переключатель темы — справа после меню); server-rendered блок соцсетей
  переносится к меню; иконки — через штатный svg.html темы (github/telegram/rss)
- assets/css/extended/typewriter.css: стили .social-icons-inline, .series-nav;
  .logo-switches после переноса попадает под .nav > .logo-switches (order:2)

Closes openspec change series-taxonomy-and-header
This commit is contained in:
2026-09-20 19:23:06 +00:00
parent 1f58f8ccc7
commit 0fbc0f93a4
9 changed files with 376 additions and 9 deletions
@@ -0,0 +1,50 @@
# Design: Серии постов, переключатель темы справа, соцсети в меню
## Constraints
- Тема `rDedInit` (форк PaperMod) НЕ модифицируется. Все правки — через
штатные хуки: корневой `layouts/partials/extend_footer.html` (JS-инжект),
корневой `layouts/partials/extend_head.html` (CSS), `assets/css/extended/`,
`hugo.toml`.
- OpenSpec: change создаётся до правок.
## 1. Таксономия series
- `hugo.toml`: `[taxonomies] series = "series"` (в дополнение к
`category`/`tag`).
- Новый партиал `layouts/partials/series_nav.html`:
- принимает страницу, читает `.Params.series` (массив) и `.Params.series_order`;
- для первой серии берёт `site.Taxonomies.series` → term → `.Pages`,
сортирует по `series_order`, ищет текущий, выводит блок:
«Серия: НАЗВАНИЕ · № текущий из N» + ссылки «← Пред.» / «След. →»;
- если параметров нет — не выводит ничего.
- Подключение: в корневом `layouts/_default/single.html` (override с
`{{- define "main" }}`? НЕТ — переопределять весь single.html опасно).
Вместо этого: тот же подход, что у PaperMod — вывод БЛОКА серии в начале
`.post-content`. В rDedInit single.html НЕ имеет content-хука. Безопасный
вариант — **JS-инжект невозможен для контента**, поэтому навешиваем через
partial в `single.html`... но это правка темы!
Обход: PaperMod'ы имеют `layouts/partials/extend_head.html` и
`extend_footer.html`, но для контента single.html нет хука. Классический
PaperMod-приём: **`assets/scss/extended/` + margin**, нет.
Реально: тема rDedInit НЕ поддерживает серии. Добавить можно только:
(а) форкнуть single.html в корневой `layouts/_default/single.html`
(переопределение — штатный механизм Hugo, тема не трогается), и вставить
`{{- partial "series_nav.html" . -}}` перед `.post-content`.
Это переопределение будет жить в репозитории сайта и переживёт апдейты темы
(требует ручного обновления при изменении темы — приемлемо, тема
статична).
Решение: **переопределить `layouts/_default/single.html`** в корне сайта,
скопировав из темы (65 строк) и добавив `{{- partial "series_nav.html" . }}`.
## 2. Переключатель темы справа
- `layouts/partials/extend_footer.html` (уже есть) — добавить JS:
```js
const nav = document.querySelector('.nav');
const sw = document.querySelector('.logo .logo-switches');
if (nav && sw && !sw.dataset.moved) {
sw.dataset.moved = '1';
nav.appendChil...[truncated]