From 682fa2af49113c315b223cbdd96c275fdddff43f Mon Sep 17 00:00:00 2001 From: Igor Korovchenko Date: Mon, 26 Aug 2024 15:24:10 +0300 Subject: [PATCH 01/10] =?UTF-8?q?=D0=92=D1=8B=D0=BD=D0=BE=D1=81=D0=B8?= =?UTF-8?q?=D1=82=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8E=20=D0=B2=20?= =?UTF-8?q?=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BC?= =?UTF-8?q?=D0=BE=D0=B4=D1=83=D0=BB=D1=8C=20(#1281)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Выносит функцию в отдельный модуль * Решает с подключением модуля * Поднимает версию web-features до 1.0.0 (#1279) Исправляет импорт из модуля `web-features`. FYI: Начиная с версии 0.10 требуется использовать именованый импорт. см: https://www.npmjs.com/package/web-features/v/0.10.0 https://github.com/web-platform-dx/web-features/releases/tag/v0.10.0 * Подстраивается под особенность слонёнка Дампо не собираться с мыслями в 11ty --------- Co-authored-by: Vitya <9317613+vitya-ne@users.noreply.github.com> --- src/scripts/modules/transform-article-data.js | 15 ++++++++++++ src/views/doc-json.11tydata.js | 13 ++++------ src/views/doc.11tydata.js | 24 ++++--------------- src/views/views.11tydata.js | 17 ++----------- 4 files changed, 26 insertions(+), 43 deletions(-) create mode 100644 src/scripts/modules/transform-article-data.js diff --git a/src/scripts/modules/transform-article-data.js b/src/scripts/modules/transform-article-data.js new file mode 100644 index 00000000..70ba4096 --- /dev/null +++ b/src/scripts/modules/transform-article-data.js @@ -0,0 +1,15 @@ +module.exports = function transformArticleData(article) { + const section = article.filePathStem.split('/')[1] + + return { + title: article.data.title, + cover: article.data.cover ?? {}, + get imageLink() { + return `${this.cover.mobile}` + }, + description: article.data.description, + link: `/${section}/${article.fileSlug}/`, + linkTitle: article.data.title.replace(/`/g, ''), + section, + } +} diff --git a/src/views/doc-json.11tydata.js b/src/views/doc-json.11tydata.js index 7ada128d..fbe20d86 100644 --- a/src/views/doc-json.11tydata.js +++ b/src/views/doc-json.11tydata.js @@ -13,11 +13,8 @@ function hasTag(tags, tag) { return (tags || []).includes(tag) } -// TODO: вынести эту функцию в отдельный файл и переиспользовать в `views.11tydata.js` -function transformArticleData(article) { - const section = article.filePathStem.split('/')[1] - - return `/${section}/${article.fileSlug}/` +function getArticlePath(article) { + return `/${article.filePathStem.split('/')[1]}/${article.fileSlug}/` } function getRandomString(length) { @@ -125,7 +122,7 @@ module.exports = { const articleId = linkedArticles?.[docId]?.next?.id const articleData = docsById[articleId] - return articleData && transformArticleData(articleData) + return articleData && getArticlePath(articleData) }, previousArticle: function (data) { @@ -135,7 +132,7 @@ module.exports = { const articleId = linkedArticles?.[docId]?.previous?.id const articleData = docsById[articleId] - return articleData && transformArticleData(articleData) + return articleData && getArticlePath(articleData) }, relatedArticles: function (data) { @@ -147,7 +144,7 @@ module.exports = { ?.slice(0, 3) ?.map((articleId) => docsById[articleId]) ?.filter(Boolean) - ?.map((articleData) => transformArticleData(articleData)) + ?.map((articleData) => getArticlePath(articleData)) }, linksAndImages: async function (data) { diff --git a/src/views/doc.11tydata.js b/src/views/doc.11tydata.js index 3e138d1b..b589c2d7 100644 --- a/src/views/doc.11tydata.js +++ b/src/views/doc.11tydata.js @@ -2,6 +2,7 @@ const fs = require('fs') const { baseUrl } = require('../../config/constants') const { titleFormatter } = require('../libs/title-formatter/title-formatter') const roleCollection = require('../libs/role-constructor/collection.json') +const transformArticleData = require('../scripts/modules/transform-article-data.js') function getPersons(personGetter) { return function (data) { @@ -24,7 +25,7 @@ function getPopulatedPersons(personKey) { data: { name: personId, }, - } + }, ) } } @@ -40,23 +41,6 @@ function assignGreaterValue(map, item, key) { return map } -// TODO: вынести эту функцию в отдельный файл и переиспользовать в `views.11tydata.js` -function transformArticleData(article) { - const section = article.filePathStem.split('/')[1] - - return { - title: article.data.title, - cover: article.data.cover, - get imageLink() { - return `${this.cover.mobile}` - }, - description: article.data.description, - link: `/${section}/${article.fileSlug}/`, - linkTitle: article.data.title.replace(/`/g, ''), - section, - } -} - const asyncFilter = async (arr, predicate) => { const results = await Promise.all(arr.map(predicate)) return arr.filter((_v, index) => results[index]) @@ -289,7 +273,7 @@ module.exports = { } return map }, - { chrome: 0, edge: 0, firefox: 0, safari: 0 } + { chrome: 0, edge: 0, firefox: 0, safari: 0 }, ) const supported = doc.data.baseline .filter((g) => webFeatures[g.group].is_baseline) @@ -302,7 +286,7 @@ module.exports = { } return map }, - { chrome: true, edge: true, firefox: true, safari: true } + { chrome: true, edge: true, firefox: true, safari: true }, ) const flagged = { chrome: false, edge: false, firefox: false, safari: false } const preview = { chrome: false, edge: false, firefox: false, safari: false } diff --git a/src/views/views.11tydata.js b/src/views/views.11tydata.js index ffdebd91..767cff9f 100644 --- a/src/views/views.11tydata.js +++ b/src/views/views.11tydata.js @@ -6,6 +6,7 @@ const categoryColors = require('../../config/category-colors') const { titleFormatter } = require('../libs/title-formatter/title-formatter') const { setPath } = require('../libs/collection-helpers/set-path') const { isProdEnv } = require('../../config/env.js') +const transformArticleData = require('../scripts/modules/transform-article-data.js') function isExternalURL(url) { return url.startsWith('http://') || url.startsWith('https://') || url.startsWith('//') @@ -96,21 +97,7 @@ module.exports = { .slice(0, featuredArticlesMaxCount) .map((id) => docsById[id]) .filter(Boolean) - .map((article) => { - const section = article.filePathStem.split('/')[1] - - return { - title: article?.data?.title, - cover: article?.data?.cover, - get imageLink() { - return `${this.cover?.mobile}` - }, - description: article?.data?.description, - link: `/${section}/${article?.fileSlug}/`, - linkTitle: article?.data?.title.replace(/`/g, ''), - section, - } - }) + .map((article) => transformArticleData(article)) }, themeColor: function (data) { From 4f92d3d8ec74a33a8019c6a09835439c90849a25 Mon Sep 17 00:00:00 2001 From: Igor Korovchenko Date: Wed, 28 Aug 2024 14:10:05 +0300 Subject: [PATCH 02/10] =?UTF-8?q?=D0=A5=D0=BE=D1=82-=D1=84=D0=B8=D0=BA?= =?UTF-8?q?=D1=81:=20=D1=87=D0=B8=D0=BD=D0=B8=D1=82=20=D0=BA=D0=B0=D1=80?= =?UTF-8?q?=D1=82=D0=B8=D0=BD=D0=BA=D0=B8=20=D0=BD=D0=B0=20=D0=B3=D0=BB?= =?UTF-8?q?=D0=B0=D0=B2=D0=BD=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/includes/blocks/featured-article.njk | 4 +--- src/scripts/modules/transform-article-data.js | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/includes/blocks/featured-article.njk b/src/includes/blocks/featured-article.njk index b2135bbb..43611593 100644 --- a/src/includes/blocks/featured-article.njk +++ b/src/includes/blocks/featured-article.njk @@ -1,8 +1,6 @@ {% macro featuredArticle(article, class, isLazyLoading=false) %} - {% set hasImage = article.cover %} -
- {% if hasImage %} + {% if article.imageLink %} Date: Fri, 30 Aug 2024 00:16:38 +0300 Subject: [PATCH 03/10] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D1=8F=D0=B5=D1=82=20=D0=B1=D0=BB=D0=BE=D0=BA=20=D1=81=20?= =?UTF-8?q?=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=86=D0=B8=D0=B5?= =?UTF-8?q?=D0=B9=20=D0=BE=D0=B1=20=D0=BE=D1=82=D1=81=D1=83=D1=82=D1=81?= =?UTF-8?q?=D1=82=D0=B2=D0=B8=D0=B8=20=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=BF=D1=80=D0=BE=D1=81=20?= =?UTF-8?q?(#1292)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Исправляет ссылку * Изменяет текст и ссылку --- src/includes/questions.njk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/includes/questions.njk b/src/includes/questions.njk index fd681f57..376b0a5a 100644 --- a/src/includes/questions.njk +++ b/src/includes/questions.njk @@ -102,7 +102,7 @@ {% endfor %} {% else %}

- Это вопрос без ответа. Вы можете помочь! Почитайте о том, как контрибьютить в Доку. + Это вопрос без ответа. Вы можете помочь! Чтобы написать ответ, следуйте инструкции.

{% endif %} From d14070227c28a6a15078082923ce867deae86ced Mon Sep 17 00:00:00 2001 From: Vitya <9317613+vitya-ne@users.noreply.github.com> Date: Fri, 30 Aug 2024 00:28:13 +0300 Subject: [PATCH 04/10] =?UTF-8?q?=D0=A3=D0=BF=D1=80=D0=BE=D1=89=D0=B0?= =?UTF-8?q?=D0=B5=D1=82=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=81=D0=B2=D0=BE=D0=B9=D1=81=D1=82=D0=B2=D0=B0=20`article.dat?= =?UTF-8?q?a.cover.mobile`=20(#1291)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Задача: получить поле(строку) `article.data.cover.mobile` Необходимо: - убедиться что `article.data.cover` существует и является объектом - получить значение поля `mobile` и вернуть его - иначе, вернуть `undefined` Для этого можем использовать оператор `?.` `article.data.cover?.mobile` - вернёт `undefined` если: - `cover` не содержит `mobile` - `cover` не является объектом --- src/scripts/modules/transform-article-data.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/modules/transform-article-data.js b/src/scripts/modules/transform-article-data.js index b3ec1020..c6f0ed71 100644 --- a/src/scripts/modules/transform-article-data.js +++ b/src/scripts/modules/transform-article-data.js @@ -5,7 +5,7 @@ module.exports = function transformArticleData(article) { title: article.data.title, cover: article.data.cover ?? {}, get imageLink() { - return Object.keys(this.cover).includes('mobile') ? `${this.cover.mobile}` : undefined + return this.cover?.mobile }, description: article.data.description, link: `/${section}/${article.fileSlug}/`, From dfaf14fdcccc634eed634df41fa70ddc6bed49ab Mon Sep 17 00:00:00 2001 From: Tatiana Fokina Date: Fri, 30 Aug 2024 13:28:03 +0400 Subject: [PATCH 05/10] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BC=D0=B5=D0=BD=D1=8E=20(#1?= =?UTF-8?q?191)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Пытается улучшить разметку * Продолжает исправлять стили * Фиксирует оба меню * Продолжает возиться со стилями * Делает одинаковую высоту у меню * Убирает выпадающее меню под комбобокс * Удаляет ARIA-атрибуты * Задаёт правильную ширину * Удаляет анимацию тени * Удаляет лишние свойства * Наводит порядок в отступах * Борется с гридами * Пытается починить мобилки * Изменяет комментарий * Удаляет лишнее * Изменяет разметку поиска * Разбирается со стилями * Упрощает разметку * Устраняет недостатки * Возится с шорткатами * Продолжает всё ломать * Пытается навести порядок в стилях * Наводит порядок в разметке/стилях гамбургера * Добавляет `aria-controls` к гамбургеру * Комментирует лишнее, правильно фиксирует меню * Скрывает esc на мобилках * Переименовывает класс * Заменяет дивы на спаны в ссылке * Делает шапку материала ниже * Меняет соотношение * Добавляет правильные отступы в дропдауне * Разбирается с gap в списках * Добавляет рамку к лого * Изменяет отступы у списка разделов * Удаляет комментарий * Оставляет комментарии * Добавляет skip link * Правит значение * Переиспользует хедер на странице поиска * Добавляет условия в хедер * Чинит затемнение фона у участников * Начинает переносить анимацию * Комментирует в скрипте ненужное * Продолжает переносить анимацию * package-lock.json * package-lock.json * Раскомментирует, ставит пустую строку * Возится с форматированием и другими мелочами * Переносит ещё больше стилей * Чинит анимацию * Преносит оставшееся в один файл * Изменяет блок с содержанием на мобилках * Чинит отступы в меню разделов * Отступы от меню * Дорабатывает скрипт * Пытается починить отступы в меню * Добавляет нужные классы * Добавляет отступ * Вносит правки * Запрещает копировать шорткаты * Удаляет неактуальные TODO * Чинит рассчёт отступов от хедера * Добавляет поддержку aria-expanded * Разбирается с работой / * Мучает скрипты * Дорабатывает скрипты закрытия/раскрытия меню * Откатывает обратно / * Добавляет isStatic() * Чинит фокус на поиске * Устанавливает фокус на последнем элементе * Окончательно чинит управление фокусом * Не закрывает содержание по клику * Добавляет `aria-keyshortcuts` для поиска * Скрывает рамку хоткея * Исправляет рассчёт scroll-margin * Удаляет лишние комментарии * Верстает содержание правильно * Шлифует поле поиска Придумала назвать горячую клавишу словом клавиша, вау * Улучшает доступность тогла * Возвращает Esc * Явно задаёт высоту поиска Для консистентности с firefox * Выравнивает межбуквенные расстояния между поиском и хлебными крошками * Приводит хоткеи к одному знаменателю Теперь маленькая надпись в рамочке всегда подсказывает, что нажать, а не что будет * Прячет парящие кнопки под затемнение дропдауна * Добавляет `aria-expanded` * Довёрстывает кнопку * Добавляет рамку для стики меню на белых страницах * Возвращает горизонтальные паддинги * Паддинги * Чинит паддинги * Сжимает хедер сразу * Убирает мерцание черты, скрывает когда нужно * Очень криво опять фиксирует хедер * Прячет подписочный попап под затемнение дропдауна 1. На мобильных этот попап закрывает дропдаун, это нехорошо 2. Вызывая какую-то функцию в интерфейсе, пользователь отдаёт ей максимальный приоритет в своём внимании и ждёт, что она будет прямо перед ним. Странно прятать только что вызванное меню под попапом * Микротвикает цвета бэкдропа * Добавляет условие для кнопок * Раскомментирует правило * Округляет высоту подчёркиваний Потому что они сводили меня с ума * Неэлегантно прописывает левый паддинг у разделов в дропдауне (зато ровно) * Скрывает крошки на мобильных * Удаляет метод с последним элементом * Возвращает скип-линк, тюнит его размеры * Изобретает бэкспейс Заменяет иконку с крестиком на иконку с бэкспейсом на странице поиска * Синхронизирует затемнения * Сражается за консистентность шторок с фильтрами * Шебуршит в оглавлении * Одалживает анимацию для кнопки * анимирует оглавление (вжж) * Переименовывает файл с гамбургером * Принимает предложение с высотой хедера * Добавляет формирование правильной ссылки на страницу поиска * Переносит управление фокусом в `header.js` * Дорабатывает события открытия меню и переименовывает класссы * Удаляет TODO * Удаляет ненужные комментарии * Удаляет закоментированный селектор * Удаляет ненужное в стилях * Удаляет ненужное в стилях * Удаляет ненужное в стилях * Обновляет прицельный браузер (#1277) * Допекает пирожки * Подталкивает печеньки на верх * Подталкивает попап наверх * Делает меню невосприимчивым к попапу про подписку и баннеру про печеньки * Запрещает контенту прыгать Прыгает он по ряду разных причин, я прижгла их все в лоб. Когда никто не может решить задачу изящно, кто-то должен взять на себя смелость взять микроскоп и забить пару гвоздей * Задаёт левый паддинг кнопке содержания * Фиксит паддинг в индексе разделов и убирает шальной марджин на сдачу --------- Co-authored-by: Igor Korovchenko Co-authored-by: Alena Batitskaia Co-authored-by: Svetlana Korobtseva --- src/includes/blocks/header.njk | 152 +++++--- src/includes/blocks/linked-article.njk | 5 +- src/includes/blocks/logo.njk | 28 +- src/includes/blocks/nav-list.njk | 2 +- src/includes/blocks/search-category.njk | 2 +- src/includes/blocks/search.njk | 38 +- src/includes/blocks/skip-link.njk | 3 + src/includes/contributors.njk | 4 +- src/scripts/modules/article-nav.js | 13 +- src/scripts/modules/cookie-notification.js | 2 +- src/scripts/modules/header.js | 215 +++++------ src/scripts/modules/logo.js | 9 +- src/scripts/modules/quick-search.js | 26 +- src/scripts/modules/search.js | 37 +- src/styles/blocks/article-heading.css | 8 +- src/styles/blocks/article-image.css | 2 +- src/styles/blocks/article-nav.css | 199 +++++----- src/styles/blocks/article.css | 45 +-- src/styles/blocks/articles-group.css | 14 +- src/styles/blocks/base.css | 15 +- src/styles/blocks/block-code.css | 2 +- src/styles/blocks/breadcrumbs.css | 27 +- src/styles/blocks/callout.css | 4 +- src/styles/blocks/cookie-notification.css | 2 +- src/styles/blocks/details.css | 4 +- src/styles/blocks/filter-group.css | 6 + src/styles/blocks/filter-panel.css | 22 +- src/styles/blocks/float-button.css | 5 +- src/styles/blocks/footer.css | 2 +- src/styles/blocks/header-animation.css | 77 ++++ src/styles/blocks/header-button.css | 114 ++++++ src/styles/blocks/header.css | 420 ++++++++------------- src/styles/blocks/hotkey.css | 18 +- src/styles/blocks/index-block.css | 22 +- src/styles/blocks/index-section.css | 8 +- src/styles/blocks/inline-code.css | 2 +- src/styles/blocks/intro.css | 2 +- src/styles/blocks/link.css | 31 ++ src/styles/blocks/linked-article.css | 1 - src/styles/blocks/logo.css | 57 +-- src/styles/blocks/menu-toggle.css | 77 ---- src/styles/blocks/nav-list.css | 86 +++-- src/styles/blocks/people-page.css | 2 +- src/styles/blocks/person-avatar.css | 2 +- src/styles/blocks/person-badges.css | 2 +- src/styles/blocks/person-page.css | 2 +- src/styles/blocks/search-page.css | 60 +-- src/styles/blocks/search.css | 40 +- src/styles/blocks/standalone-page.css | 2 +- src/styles/blocks/subscribe-page.css | 4 +- src/styles/blocks/table-wrapper.css | 4 +- src/styles/blocks/toc.css | 18 +- src/styles/dark-theme.css | 3 +- src/styles/index.css | 3 +- src/styles/index.sc.css | 3 +- src/styles/light-theme.css | 3 +- src/views/404.njk | 2 +- src/views/article-index.njk | 6 +- src/views/doc.njk | 37 +- src/views/index.njk | 2 +- src/views/offline.njk | 2 +- src/views/page.njk | 2 +- src/views/people.11tydata.js | 2 +- src/views/people.njk | 17 +- src/views/person.njk | 17 +- src/views/search.njk | 94 ++--- src/views/specials.njk | 2 +- src/views/subscribe.njk | 2 +- 68 files changed, 1065 insertions(+), 1076 deletions(-) create mode 100644 src/includes/blocks/skip-link.njk create mode 100644 src/styles/blocks/header-animation.css create mode 100644 src/styles/blocks/header-button.css delete mode 100644 src/styles/blocks/menu-toggle.css diff --git a/src/includes/blocks/header.njk b/src/includes/blocks/header.njk index b13cf4fa..983d6dfa 100644 --- a/src/includes/blocks/header.njk +++ b/src/includes/blocks/header.njk @@ -1,91 +1,137 @@ {% from "blocks/logo.njk" import logo %} -{% macro divider(isLarge) %} - +{% macro devider() %} + {% endmacro %} -{% macro header(pageCategoryId, category, title, link, isLogoContrastColor, hasAccentColor, isMainPage = false, isCategoryVisible = false, isLogoImageHidden = false) %} +{% macro header( + pageCategoryId, + category, + title, + link, + isLogoContrastColor, + hasAccentColor, + isMainPage=false, + isSearchPage=false, + isCategoryVisible=false, + isLogoImageHidden=false) +%} {% set articleIndexes = collections.articleIndexes %} + + {% include "blocks/skip-link.njk" %} +
-
+
-
- -
-
+ {% include "blocks/search.njk" %} -
- + {% if (not isMainPage) and (not isSearchPage) %} +
+ + Клавиша / + + + esc + - {% include "blocks/search.njk" %} - {% include "blocks/nav-list.njk" %} +
{% endif %} + + {% if isSearchPage %} + + {% endif %}
+ + {% if not isSearchPage %} + + {% endif %}
{% endmacro %} diff --git a/src/includes/blocks/linked-article.njk b/src/includes/blocks/linked-article.njk index 2c7942f5..d8da329f 100644 --- a/src/includes/blocks/linked-article.njk +++ b/src/includes/blocks/linked-article.njk @@ -1,7 +1,10 @@ {% macro linkedArticle(article, type = 'previous') %} {% set icon = '←' if type === 'previous' else '→' %} -
+
diff --git a/src/includes/blocks/logo.njk b/src/includes/blocks/logo.njk index efe79c9b..c4739fda 100644 --- a/src/includes/blocks/logo.njk +++ b/src/includes/blocks/logo.njk @@ -1,4 +1,10 @@ -{% macro logo(isLink, isContrastColor, class, letters, isImageHidden=false) %} +{% macro logo( + isLink, + isContrastColor, + class, + letters, + isImageHidden = false) +%} {% set logoWrapper = linkLogo if isLink else simpleLogo %} {% set tag = 'a' if isLink else 'div' %} {% set attrs = 'href=/' if isLink %} @@ -17,15 +23,21 @@ <{{tag}} class="{{ classes }}" {{ attrs }}> {% if (not isImageHidden) %} - + + {% endif %} - + + Дока + {% endmacro %} diff --git a/src/includes/blocks/nav-list.njk b/src/includes/blocks/nav-list.njk index 61e8446a..72102c34 100644 --- a/src/includes/blocks/nav-list.njk +++ b/src/includes/blocks/nav-list.njk @@ -1,4 +1,4 @@ -