Files
dedinit.ru/openspec/changes/series-taxonomy-and-header/design.md
T
estorozhenko 0fbc0f93a4 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
2026-09-20 19:23:06 +00:00

3.3 KiB
Raw Blame History

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:
    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]