Post

NLO vs Chirpy: Diff Log

Объективный список отличий темы NLO от оригинального jekyll-theme-chirpy. Пост обновляется по мере миграции и развития темы.

NLO vs Chirpy: Diff Log

Этот пост фиксирует конкретные технические отличия от оригинальной темы. Формат простой: добавляем пункт, когда он реализован и проверен.

Чеклист различий

  • Личная статистика GitHub contribution graph (home + sidebar) с автообновлением через workflow
  • Локальная админка для редактирования контента, основанная на jekyll-admin, с форком UI внутри проекта
  • Быстрый вход в локальную админку через отдельную кнопку в sidebar (только dev)
  • Расширенное брендирование sidebar: разные аватары для light/dark + выбор стиля рамки
  • Мультиязычный режим в lang с переключателем языков и флагами в sidebar
  • Короткие URL-префиксы локалей (/ru/, /fr/) вместо длинных (/ru-RU/, /fr-FR/)
  • Фильтрация контента по языку поста (language/lang во front matter)

1) Личная статистика контрибутов GitHub

Что добавлено:

  • Отображение GitHub contribution chart в двух местах: на главной странице и в sidebar.
  • Отдельные SVG для светлой и темной темы.

Где настраивается:

  • _config.yml -> nlo.github_chart.
  • Ключи:
    • home_image
    • home_image_dark
    • sidebar_image
    • sidebar_image_dark

Как обновляется автоматически:

  • Workflow: .github/workflows/update-githubchart.yml
  • Запуск по расписанию: 0 3 * * * (ежедневно) и вручную через workflow_dispatch.
  • Генерация: tools/generate-githubchart.sh
  • При изменениях коммитятся файлы:
    • assets/img/githubchart.svg
    • assets/img/githubchart-sidebar.svg
    • assets/img/githubchart-dark.svg
    • assets/img/githubchart-sidebar-dark.svg

2) Локальная админка (только для разработки)

На чем основано:

  • Базовый функционал редактирования: гем jekyll-admin.
  • UI форкнут внутрь репозитория в папку admin/ для кастомизации под NLO.

Как это работает:

  • Плагин _plugins/jekyll-admin-fork.rb монтирует:
    • /admin -> локальный UI из admin/
    • /_api -> API от JekyllAdmin::Server
  • Файлы кастомного интерфейса:
    • admin/index.html
    • admin/nlo-admin.css
    • admin/nlo-admin.js

Локальный запуск:

1
bash tools/run.sh --admin

URL:

1
http://127.0.0.1:4000/admin

Почему не в проде:

  • Функция админки предназначена для локального контура разработки.
  • Гем jekyll-admin подключен как development dependency (Gemfile, группа :development).
  • Публичный production-сайт должен оставаться только контентным слоем без открытого editor/API контура.

3) Sidebar и UX-улучшения редактора

Что добавлено:

  • В sidebar добавлена заметная кнопка ADMIN в нижнем блоке навигации (показывается только в development).
  • Блок аватара в sidebar увеличен на ~30% для лучшего визуального баланса.
  • Для аватара используются отдельные источники под светлую и тёмную темы:
    • nlo.branding.avatar_light
    • nlo.branding.avatar_dark
  • Настройка рамки аватара вынесена в конфиг (nlo.branding.avatar_frame) и поддерживает стили:
    • round
    • discord
  • В тёмной теме рамка аватара затемнена под общий тон интерфейса.

Что изменено в админке:

  • Настройки GitHub Chart Palette и Avatar Frame встроены в страницу Configuration как обычные пункты.
  • Оба блока настроек отображаются в одну строку на десктопе (две колонки), а на узких экранах складываются в одну колонку.
  • Для поля author добавлен tooltip-пояснитель:
    • если указать ключ из _data/authors.yml, автор выводится как ссылка на профиль;
    • если ключ не найден, значение author отображается как обычный текст.

4) Мультиязычность и переключатель языка

Что добавлено:

  • lang в _config.yml теперь поддерживает несколько языков через запятую:
    • пример: lang: en, ru-RU, fr-FR
  • Если указан один язык, селектор языка не отображается.
  • Если указано несколько языков:
    • до 3 языков отображаются флаги;
    • при большем количестве автоматически показывается компактный select.
  • Подпись селектора локализуется (Site version) через locale-файлы.
  • Флаги хранятся локально в assets/img/flags/.
  • В title у флагов показывается человекочитаемое имя языка (а не технический код вроде ru-RU).

Технически:

  • Нормализация языков и выбор активного языка вынесены в _includes/lang.html.
  • UI селектора реализован в _includes/lang-switch.html и встроен первым пунктом в sidebar-навигацию (визуально как HOME).
  • Для флагов добавлена мягкая прозрачность (opacity: 0.7) и выделение активного языка (hover/active -> opacity: 1).

5) Языковые URL и видимость контента

Что изменено в URL:

  • Переключение языка теперь использует короткие префиксы:
    • http://127.0.0.1:4000/ru/
    • http://127.0.0.1:4000/fr/
  • Для локализованных home-страниц заданы короткие permalink:
    • ru-RU/index.md -> /ru/
    • fr-FR/index.md -> /fr/
  • Детектор языка в _includes/lang.html теперь понимает и полный код локали, и короткий alias префикса.

Что изменено в контенте:

  • В посты добавлен language во front matter (например language: en, language: ru-RU).
  • Посты показываются только для текущего языка интерфейса.
  • Посты без language/lang считаются контентом default_lang (обратная совместимость).

Где работает фильтрация:

  • Главная (home)
  • Архивы (archives)
  • Списки категорий/тегов (categories, tags)
  • Страницы конкретной категории/тега
  • Боковая панель: последние обновления и trending tags
  • Related posts внутри статьи

Что дальше

Следующие отличия будем добавлять в этот же пост по мере реализации, чтобы сохранять прозрачный и проверяемый список изменений.

This post is licensed under CC BY 4.0 by the author.