feat(web): ссылки на репозитории и Telegram разработчика в футере - #5
Merged
Conversation
Футер получает группу ссылок: витрина, 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. Указано, что правило под тестом, иначе это осталось бы пожеланием.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Что сделано
В футере (виден на всех страницах) появилась группа ссылок:
/hub(внутренняя)lecturelog-corelecturelog-webЧто стоит посмотреть на ревью
Первый в проекте паттерн внешней ссылки. До этого в разметке не было ни одной внешней ссылки и ни одного
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совпадают с закоммиченнымиviewBox 0 0 24 24)План:
docs/plans/2026-07-29-footer-project-links.md