feat!: multiple notes per subject, build-time math, and self-hosted assets - #9
Merged
Conversation
…alert, custom-search-input)
…extract shared RU pluralization helper
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.
Что здесь
Три больших изменения и много мелкой уборки.
1. Несколько конспектов на один предмет
Раньше курс = папка = один преподаватель. Теперь папка описывает вариант: преподаватель + автор конспекта + учебный год. Варианты склеиваются ключом
subject:На главной это одна карточка, раскрывается списком вариантов. Внутри курса — переключатель, выбор запоминается в
localStorage.Если у того же преподавателя есть запись за более свежий год, старая помечается приглушённой плашкой, а на её странице появляется ссылка на новую. Сравнение строго внутри преподавателя — разные лекторы друг друга не «устаревают».
Курсы без
subjectпродолжают работать как раньше: папка становится группой из одного варианта, вёрстка не меняется.2. Формулы считаются на сборке
MathJax убран, вместо него
transform.ToMath(KaTeX внутри Hugo). Формулы приезжают уже в HTML — никакого JS и никакого рывка через полсекунды после текста.Требуется Hugo ≥ 0.132 и блок
passthroughвhugo.toml.3. Ничего критичного с CDN
Шрифты, KaTeX и иконки переехали в репозиторий. Ionicons как веб-компонент заменён на инлайн-SVG на сборке. Alpine.js удалён — на нём держались только шорткоды
tabs/tab, которых больше нет.Цифры
Что ушло с сетевого пути (gzip, по проводу):
Иконок на странице курса — 11. Раньше это было 11 отдельных HTTP-запросов после загрузки рантайма, теперь ноль: SVG инлайнятся, в среднем ~470 байт каждый, и почти целиком съедаются gzip.
Шрифты с Google стоили не столько байт, сколько последовательности: браузер сначала тянет CSS с
fonts.googleapis.com, парсит, и только потом узнаёт URL шрифта наfonts.gstatic.com— два RTT до чужого домена до первой отрисовки текста. Со своим доменом иpreload— ноль.В репозиторий добавилось: 248 КБ текстовых шрифтов, 254 КБ шрифтов KaTeX, 15 КБ иконок. Браузер из этого качает единицы файлов —
unicode-rangeу текстовых шрифтов и подмножества глифов у KaTeX.Цена для CI, замер на тестовом сайте:
Около 0,085 мс на формулу. На фоне
npm ciи Tailwind это шум.Побочно:
fonts.googleapis.comотдаёт IP посетителя третьей стороне — со своими шрифтами вопрос снимается.Что ещё
data-cn-tipна любом элементе.noteType) с моделью и источником в подсказке.accent, наследуется внутрь вместо случайного выбора по хешу.site.Data→.Data,site.Language.LanguageCode→.Language.Locale.Что сломается у контрибьюторов
subject. Внутри одной папки развести преподавателей больше нельзя.cover_styleбольше ни на что не влияет — цвет обложек приходит отaccentкурса.$остаётся инлайн-разделителем, но теперь строгий парсер. Пара обычных долларов в абзаце (цена 5$ и 10$) покрасится в красный — экранируйте\$.scripts/vendor-assets.sh, иначе на её месте будет пусто и warning в логе сборки.Подробности — в обновлённом CONTRIBUTING.md.