Kitchen sink:
все компоненты темы
Полигон всех компонентов темы: по одному экземпляру каждого шорткода, коллаута, блока кода, диаграммы и виджета на одной странице — чтобы правки дизайна было на чём проверять, а автору гайдов было что подсмотреть и скопировать.
#Заголовки и якоря
Второго уровня — с решёткой #, третьего — с ##. Инлайн: курсив, жирный,
код, внутренняя ссылка на эталонный гайд.
##Подзаголовок третьего уровня
Проверяем, что render-heading вешает ## и якорь на h3.
#Код
Go подсвечивается сервером (Chroma в цветах палитры):
type Point struct {
X, Y int64
}
func dist(a, b Point) int64 { return (a.X-b.X)*(a.X-b.X) }С подписью файла и подсветкой строки ({label=… hl_lines=[2]}):
func mallocgc(size uintptr) unsafe.Pointer {
c := getMCache() // горячий путь — без блокировок
return c.alloc(size)
}Остальные подсвеченные языки носят те же роли — синий у структурного имени, медный у числа, свой тон у строк, приглушённый курсив у комментария:
{
"items": [
{"price": 123, "shipped": true},
{"price": 101} // хвостовой комментарий допустим
]
}export GODEBUG=schedtrace=1000
go build ./... && ./app --addr "$HOST:8080" # либо всё, либо ничегоГолый забор, text и txt — плоская форма, .nohl: она и нужна выводу
команды:
$ go build ./...
ok taiga/internals 0.312s#Таблица
Markdown-таблица, обёртку .tbl-wrap вешает render-table:
| Тип | Размер | Выравнивание |
|---|---|---|
bool | 1 | 1 |
int64 | 8 | 8 |
[]T | 24 | 8 |
#Коллауты
Главная мысль с дефолтным лейблом. Внутри — markdown и код.
Ловушка с дефолтным лейблом.
Коллаут «под капотом» с переопределённым лейблом.
Историческая сноска — самый тихий тип.
Внимание — самый громкий тип, красный.
#Fold
Сворачиваемая врезка — значок, заголовок и переключатель; панель выезжает по
высоте. title= — инлайновый Markdown, тело — Markdown.
У этого гайда есть также видео-версия. ПодробнееСвернуть
Сначала посмотрите, потом прочитайте для закрепления — что-то нагляднее на экране, что-то лучше усваивается текстом. Ссылка выше открывает видео не сворачивая панель.
Упрощение, сделанное намеренно. ПодробнееСвернуть
На самом деле всё чуть сложнее, но упрощённая модель верна в главном — детали дальше.
Полный листинг, сразу раскрытый. Показать кодСкрыть
func main() { println("hello") }Примерно за полэкрана текста кат сам меняет регистр: заголовок набирается
читательским кеглем, блок получает свой воздух, а панель закрывается явной
кнопкой — длинное отступление можно свернуть там, где кончилось чтение.
size= задаёт регистр принудительно; здесь — чтобы показать секцию, не
вставляя стену текста.
Ликбез: отступление, выросшее в главу РазвернутьСвернуть
Отступление на несколько экранов — уже не сноска, и набирать его двумя кеглями ниже значит наказывать читателя за то, что он открыл: клик — это и есть его согласие читать.
Поэтому раскрытая панель набрана прозой — тем же кеглем и цветом, что статья вокруг, — а «это вставка» говорит структура: строка-заголовок, рельс слева и строка-выход внизу.
Рельс — единственное, что переживает прокрутку. За первым экраном заголовок уже уехал, и линия остаётся единственным признаком того, что вы всё ещё внутри блока, который статья предложила пропустить.
#Термины
Наведи на подчёркнутое слово — определение раскроется карточкой; клик её закрепит, чтобы можно было спокойно читать и уйти по ссылке. Без JavaScript все определения лежат списком в конце страницы, и каждое слово ведёт к своему.
Простейшая форма — слово и определение, тип по умолчанию: у каждого P есть свой mcache, и попадание в него — самый дешёвый путь аллокации.
С ярлыком и цветом типа, и с ссылкой в подвале карточки:
компилятор вставляет барьер записи — и именно поэтому у записи указателя цена выше, чем у записи int.
Тело определения проходит тот же конвейер, что и статья, поэтому листинг внутри карточки подсвечен ровно так же, как был бы в прозе: путь пишется как JSON Pointer, а не как путь через точки.
Слово в тексте склоняется, а шапка карточки — нет; для этого title=:
данные лежат в кэшах ядра, а не в оперативке.
#Диаграммы
Диаграмма памяти и байтовая лента — сырой HTML через {{< raw >}}:
Point{X, Y int64} → 16 байт, ноль воздуха#Виджеты
Форма 1 — пустой mount, оживляет Taiga.widget из widgets.js:
Форма 2 — mount со статик-фолбэком внутри (виден без JS):
Форма 3 — без id, произвольный HTML прямо в figure:
#Карточка
К эталону → Гайд — это папка Большая CTA-карточка: kicker, заголовок, подпись.#Превью ссылок
На точном курсоре наведи на любую ссылку ниже — появится карточка-превью: физика терм-карточки, один поповер, собранный из билд-фрагмента (внутренние ссылки) или из пререндеренной карточки (Telegram, YouTube).
Внутренние ссылки открывают окно в страницу: превью целого гайда, якорь на раздел, который сужает карточку до одного раздела, и оглавление серии со списком частей.
Telegram — пост из авторского канала получает карточку, собранную на билде: пост 409 и пост 410. Несуществующий пост деградирует до карточки канала, а чужой канал получает только значок ✈, без карточки.
YouTube — доклад про планировщик Go открывает видео-карточку с превью-кадром, длительностью и числом просмотров.
Обычная внешняя ссылка несёт только значок ↗.
Википедия — work-stealing планировщик и вытесняющая многозадачность открывают карточку-сводку из REST API Wikimedia, со значком W.
Блог Go — превью области видимости переменной цикла и классический error handling in Go открывают карточку с курсивным значком Go, байлайном и зачином поста.
#Рассылка
Блоки подписки — на сайте, где рассылка включена (params.newsletter.enable,
см. newsletter.md).
За ними в демо нет эндпоинта, поэтому отправка заканчивается состоянием ошибки —
на неё как раз и стоит посмотреть.
Срединный блок, поставленный руками, с крестиком (dismiss=), решение по
которому запоминается по блоку:
Голая форма для страницы, написанной прозой (newsletter-inline) — тот же
компонент, что стоит на странице подписки:
Демо-форма: за ней нет эндпоинта.
Карточка в подвале этой страницы — третий вариант, newsletter-cta; здесь её
вставил автоматически placements.articleEnd.


