/mesto

Учебный проект Место Проектная работа 3 - 4 курса, спринты 4-6 по профессии Веб-разработчик образовательной платформы ЯндексПрактикум 16.11.2021

Primary LanguageJavaScript

Учебный проект "Место"

Проектная работа 3 - 4 курса, спринты 4 - 9 по профессии "Веб-разработчик" образовательной платформы ЯндексПрактикум поток №39, группа "Purple" старт обучения по основной программе - 14.11.2021 года

Обзор

  • Описание
  • Использовано
  • Процесс написания

Описание

(Изображения взяты из описаний проектных работ Яндекс.Практикум)

Место

Место - сервис для обмена фотографиями. Пользователи сервиса могут добавлять, удалять фотографии, а так же ставить лайки понравившимся фотографиям.

Страница проекта на GitHub Pages

Использовано:

  1. Браузерные стили сброшены через Normalize.css;
  2. Семантическая верстка;
  3. Файловая структура проекта организована по БЭМ-схеме Nested;
  4. Шрифты в форматах woff и woff2;
  5. Изображения с unsplash (для локальной версии приложения):
  1. Сетка на flex;
  2. Фиксированное (fixed) позиционирование для всплывашки (popup) чтоб не убегала при прокручивании страницы;
  3. Карточки изображений формируются из массива, отрисовка при загрузке страницы;
  4. Карточки располагаются в разметке не сверху - вниз, слева - направо, а снизу - вверх, справа налево, добаленные первыми карточки будут справа внизу, новые - слева вверху;
  5. Адаптивное окно просмотра изображения;
  6. Сведения об открытой для просмотра карточке берутся из разметки нажатой карточки;
  7. Валидация форм добавки места и редактирования профиля, не прошедшие валидацию поля подсвечиваются, под ними отображается ошибка валидации; Место
  8. Всплывающие окна закрываются нажатием на оверлей (затемненную область вокруг окна) или нажатием на кнопку ESC;
  9. Модули:
  • Card.js - создает карточку из массива, устанавливает прослушиватели нажатия на удаление, лайк и нажатие на изображение;
  • FormValidator.js - включение валидации всем формам на странице;
  • Popup.js - конструктор всплывающих окон;
  • PopupWithForm.js - конструктор всплывающих окон с формой;
  • PopupWithImage.js - конструктор всплывающих окон с изображением;
  • Section.js - конструктор секций (контейнеров с однотипными элементами);
  • UserInfo.js - конструктор информации о пользователе - получает данные о пользователе из разметки и обновляет данные в разметке;
  • Api.js - конструктор интерфейса взаимодействия с сервером - получение, сохранение, удаление карточек и получение / обновление информации о пользователе и аватара пользователя;
  • PopupWithConfirmation.js - конструктор всплывающих окон с кнопкой подтверждения;
  1. Настройки для работы с API и параметры для валидатора хранятся в src/utils/const.js и импортируются в index.js;

Получен опыт:

  • семантической HTML-разметки.
  • использования в верстке БЭМ-подхода.
  • кросс-браузерной верстки и использования вендорных CSS-префиксов.
  • работы с системой контроля версий Git и сервисом GitHub.
  • использования CSS-анимаций, фреймов, подключения шрифтов.
  • организации файловой стркутуры проекта по Nested Bem.
  • адаптивной верстки, использования медиа-запросов.
  • работы с макетом в Figma.
  • оптимизации графики
  • публикации проекта на GitHub Pages
  • работы с DOM-событиями
  • работы с DOM-разметкой в JavaScript
  • валидации форм в JavaScript
  • работы с API, использования HTTP-запросов

Планы по доработке:

  1. Вывод ошибок в всплывающие окна;

Пошагово:

Спринт 4 (10.01.2022 - 13.01.2022):

  1. Настройка проекта: gitignore, nojekyll;
  2. Normalize.css. Установка через npm: npm install normalize.css;
  3. Семантическая разметка;
  4. Изображения с Unsplash и из макета Figma;
  5. Параметры текстовых элементов - цвет, размер, междустрочный интервал;
  6. Шапка (header) для больших разрешений;
  7. Шапка (header) для мобильных разрешений;
  8. Профиль (profile) для больших разрешений;
  9. Профиль (profile) для мобильных разрешений;
  10. Галерея (gallery) для больших разрешений;
  11. Общий блок button для изменения прозрачности при наведении на кнопки;
  12. Галерея (gallery) для мобильных разрешений;
  13. Подвал (footer) для больших разрешений;
  14. Подвал (footer) для мобильных разрешений;
  15. Всплывашка (popup);
  16. JS:
  • ф-я открытия всплывашек (с аргументом popup - элемент всплывашки, т.к. их будет несколько);
  • ф-я закрытия всплывашки (без аргументов, универсальная, условие на класс всплывашки, очищает поля ввода у заданных в теле функции);
  • ф-я получения данных пользователя (сейчас - из профиля, в будущем - из сервера);
  • ф-я очистки инпутов (с аргументом popup - элемент всплывашки, т.к. их будет 2 - редактирование профиля и добавление места);
  • ф-я кнопки лайк (сейчас просто переключает класс);
  • ф-я отправки введенных в всплывашку редактирования профиля данных (сейчас просто переписывает значения в профиле);
  1. FIX: название класса меток в всплывашках;
  2. FIX: лого в шапке тегом <img> вместо фонового изображения ссылки;
  3. FIX: карточки в gallery оформлены неупорядоченным списком;

Спринт 5 (25.01.2022 - 30.01.2022):

  1. Добавлена всплывашка добавления места;
  2. Функция закрытия всплывашки теперь проверяет всплывашку и сбрасывает поля ввода, если нужно;
  3. Добавлена всплывашка просмотра изображения;
  4. Всплывашки плавно исчезают при открытии/закрытии;
  5. Функция, создающая массив карточек при загрузке страницы, добавлении/удалении карточки;
  6. Функция удаления карточки по индексу элемента DOM карточки, удаляет из массива, после чего карточки заново отрисовываются;
  7. Функция добавления карточки, добавляет в конец массива, но так как элементы идут в обратном порядке в разметке, то новая карточка будет первой;
  8. Правки js: карточка по шаблону template, flex-shrink для кнопки лайк, при удалении карточки она удаляется из разметки, добавляется так же прямо в разметку, галерея вернулась к grid, не используется innerHTML, инпуты в форме сбрасываются методом reset;
  9. Правки js: удаляется весь li карточки, а не карточка, галерея все-таки флексом, иначе при удалении карточки будут дырки

Спринт 6 (31.01.2022 - 06.02.2022):

  1. Добавлено заблокированное состояние кнопки отправки формы;
  2. Добавлены в разметку заготовки для текстов ошибок;
  3. Все группы поля ввода/тексты ошибок обернуты в label;
  4. JS-библиотека для валидации форм: принимает настройки через объект, подсвечивает непрошедшие проверку поля, показывает сообщения об ошибках для каждого поля, блокирует кнопку отправки формы, если в форме не прошел валидацию хоть одно поле, валидация полей происходит во время ввода текста;
  5. Добавлено в основной JS-скрипт: в ф-ю открытия всплывашки добавлено создание прослушивателя нажатия на ESC, в ф-ю закрытия - его удаление, в ф-ю сброса значений полей ввода формы в всплывашке, добавлена проверка наличия полей ввода, чтобы не выполнять проверку в других местах, добавлена ф-я закрывающая открытую всплывашку по нажатию ESC, добавлен прослушиватель нажатия на оверлей всплывашки, закрывающий ее;
  6. Мелкие украшалки проекта: фав-иконки, тема для мобильных устройств;
  7. FIX: JSDoc для комментариев и описания в js-файлах;
  8. FIX: Отдельные функции для закрытия всплывашек;
  9. FIX: Общая функция для прослушивателей нажатия на оверлей попапа и кнопку закрытия попапа;
  10. FIX: Отдельные функции для включения и выключения ошибок валидируемых инпутов;
  11. FIX: Массив с карточками вынесен в отдельный файл;
  12. FIX: Для тайм-аута очистки полей отдельная константа;
  13. FIX: Исправлено: addPlaceButton -> buttonAddPlace, cardTeplate -> cardTemplate, прослушиватель keydown нажатия кнопки ESC установлен на document вместо window;
  14. FIX: Для функций likePhoto, getImage и deletePhoto вместо элемента аргументом передается событие evt;
  15. FIX: В константе исключен лишний поиск cardElement, content уже есть в константе cardTemplate;
  16. FIX: Упрощены прослушиватели нажатия на лайк, нажатия на изображение карточки и нажатия на кнопку удаления карточки;
  17. FIX: Исправлено: константа clearInputsTimeout -> CLEAR_INPUTS_TIMEOUT;

Спринт 7 (02.03.2022 - 07.03.2022):

  1. JS рефакторинг - модули, классы Card и FormValidator;
  2. FIX: классу Card добавлены методы _likePhoto и _deletePhoto, исправлена прозрачность оверлея всплывашки просмотра изобажения карточки, исправлены курсоры интерактивных элементов, класс FormValidator в конструктор принимает элемент формы, которую нужно валидировать;
  3. FIX: в классе Card поправлены методы _likePhoto и _deletePhoto на классовые переменные;
  4. FIX: отдельные экземпляры класса FormValidator для каждой формы - добавления карточки и редактирования пользователя;
  5. FIX: валидация формы при открытии попапа (после сохранения / закрытия), клонирование шаблона карточки от тега
  6. ;

Спринт 8 (19.03.2022 - 20.03.2022):

  1. Установлены webpack, webpack-cli и webpack-dev-server, настроены сборки build и dev, настроена минификация и транспиляция JS Babel, настроена минификация CSS и автоматическое добавление вендорных префиксов, настроена обработка изображений и шрифтов;
  2. Классы Popup, PopupWithForm, PopupWithImage, Section, UserInfo;

Спринт 9 (30.03.2022 - ...):

  1. Добавлена библиотека gh-pages, автоматически размещающая проект на GitHub Pages, в package.json добавлен скрипт deploy, запускающий сборку (нужен SSH ключ для Git);
  2. Добавлена разметка всплывашки удаления карточки с кнопкой подтверждения;
  3. В разметку добавлена всплывашка редактирования аватара пользователя, а так же кнопка редактирования аватара, отображающаяся при наведении курсора на аватар;
  4. Для кнопок без текстовых значений добавлены артибуты aria-label для улучшения доступности;
  5. Добавлен класс Api для работы с сервером;
  6. Карточки загружаются с сервера;
  7. Добавлен класс PopupWithConfirmation.js для всплывашек с кнопкой подтверждения;
  8. Изменен шаблон карточки - добавлен счетчик лайков;
  9. Карточки добавляются / удаляются через API;
  10. Кол-во лайков берется из свойств карточки полученных от сервера, если в поставленных лайках есть id текущего пользователя, то лайк на карточке будет активным;
  11. Аватар берется из ответа сервера, сохраняет на сервере новый, в разметке исправлено object-fit для аватара (для не квадратных аватаров);
  12. В разметке все изображения, которые подгружаются с сервера, заменены на битовое изображение с черным фоном, текстовые значения данных пользователя заменены на заглушки;
  13. При отправке данных на сервер (аватар, инфо пользователя, карточка) надпись на кнопке меняется на "Сохранение...";
  14. Настройки валидации перенесены в src/utils/const.js;