Skip to content

feat(web): ссылки на репозитории и Telegram разработчика в футере - #5

Merged
fUS1ONd merged 3 commits into
devfrom
feat/footer-project-links
Jul 29, 2026
Merged

feat(web): ссылки на репозитории и Telegram разработчика в футере#5
fUS1ONd merged 3 commits into
devfrom
feat/footer-project-links

Conversation

@fUS1ONd

@fUS1ONd fUS1ONd commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Что сделано

В футере (виден на всех страницах) появилась группа ссылок:

Ссылка Куда
«Витрина» /hub (внутренняя)
lecturelog-core https://github.com/LectureLog/lecturelog-core
lecturelog-web https://github.com/LectureLog/lecturelog-web
иконка Telegram, без подписи https://t.me/fus1ond

Что стоит посмотреть на ревью

Первый в проекте паттерн внешней ссылки. До этого в разметке не было ни одной внешней ссылки и ни одного target="_blank". Введена обёртка footerExtLink, которая задаёт target/rel в единственном месте, а href принимает выражением — так templ прогоняет его через SafeURL-санитайзер. Тест TestFooter_ExternalLinksSecurity намеренно проверяет все ссылки документа с target="_blank", а не только три новые: он должен ловить регрессию у любой будущей внешней ссылки, которая забудет rel="noopener noreferrer".

Брендовые иконки на заливке — осознанное отклонение. Все иконки проекта контурные (fill="none" stroke="currentColor" stroke-width="2"). iconGithub и iconTelegram — единственные с fill="currentColor": логотипы нарисованы сплошными фигурами, обводка штрихом на 16px даёт кашу. Отклонение зафиксировано комментарием в icons.templ, чтобы не выглядело недосмотром и не копировалось на обычные иконки.

Доступность ссылки-иконки. У Telegram нет видимого текста, а SVG помечен aria-hidden, поэтому доступное имя живёт в aria-label — без него скринридер прочитал бы URL. Область нажатия добита паддингом до 24×24 (WCAG 2.5.8). Прикрыто тестом TestFooter_LinksHaveAccessibleName.

Сокращение подписи. «Витрина публичных лекций» → «Витрина»: с четырьмя ссылками длинная подпись переполняла строку. Маршрут не менялся.

Цвета. Новые классы (.ll-footer-links, .ll-footer-link--ext, .ll-footer-link--icon) не содержат ни одного цвета — наследуют существующий .ll-footer-link, так что запрет на хардкод цветов из tailwind.css не задет.

Тесты

Тестов футера в проекте не было вообще — добавлены с нуля поверх существующих хелперов renderLayout: TestFooter_ProjectLinks, TestFooter_ExternalLinksSecurity, TestFooter_LinksHaveAccessibleName, TestFooter_ShowcaseLink (последний — охранный, проверяет что /hub не потерялась и не открывается в новой вкладке).

Проверено

  • make gate — зелёный
  • make web-gen && git diff --exit-code -- internal/web/ — чисто, сгенерированные *_templ.go и app.css совпадают с закоммиченными
  • Отрендеренный футер просмотрен глазами в светлой и тёмной теме и на узком вьюпорте; геометрия SVG проверена расчётом bbox (оба пути укладываются в viewBox 0 0 24 24)

План: docs/plans/2026-07-29-footer-project-links.md

fUS1ONd added 3 commits July 29, 2026 22:47
Футер получает группу ссылок: витрина, lecturelog-core, lecturelog-web и
Telegram разработчика. Telegram — только иконка, без подписи.

Вводится первый в проекте паттерн внешней ссылки: обёртка footerExtLink
задаёт target/rel в одном месте, href передаётся выражением и потому
проходит через SafeURL-санитайзер templ. Тест на безопасность проверяет
все ссылки с target=_blank, а не только три новые, — чтобы поймать
регрессию у любой будущей внешней ссылки.

iconGithub и iconTelegram — единственные иконки на заливке
(fill=currentColor): брендовые марки нарисованы сплошными фигурами,
обводка штрихом на 16px даёт кашу. Отклонение зафиксировано
комментарием в icons.templ.

Тестов футера в проекте не было — добавлены с нуля, включая проверку
доступного имени: у ссылки-иконки нет видимого текста, поэтому имя
живёт в aria-label.

Подпись «Витрина публичных лекций» сокращена до «Витрина» — с четырьмя
ссылками длинная переполняла строку.
STYLE_GUIDE §6 утверждал, что иконка play — единственная заливная;
после добавления брендовых марок это стало неправдой. Заменено на
закрытый список исключений с причиной и дефолтом «новая иконка
контурная».

README: правило про внешние ссылки только через обёртку — rel в одном
месте, href выражением ради SafeURL, адреса в links.go. Указано, что
правило под тестом, иначе это осталось бы пожеланием.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant