# Лабораторная работа №6. Проверка данных на стороне клиента. Уведомления --- Добавьте блок с доступными для заказа вариантами ланча. Создайте скрипт, проверяющий состав ланча при отправке формы. Реализуйте показ уведомлений для пользователей. ## Порядок выполнения Примерные макеты представлены ниже. * Макет блока с доступными для заказа вариантами * Макет уведомления [Полный макет](https://lms.mospolytech.ru/pluginfile.php/1314144/mod_assign/intro/mockupfull.png "Полный макет") страницы: 1. Создайте блок с доступными для заказа вариантами ланча. Структура блока: - Заголовок - Блок с вариантами (grid-контейнер, с 3 колонками на каждой строке) - Блок каждого варианта ланча (flex-контейнер) - Блок каждого блюда (flex-контейнер, направление главной оси - сверху вниз) - Изображение блюда - Подпись Изображения с блюдами можно скачать [здесь](https://lms.mospolytech.ru/pluginfile.php/1314144/mod_assign/intro/icons.zip?time=1730060948701 "здесь"). Доступные для заказа варианты: |1|2|3|4|5| |---|---|---|---|---| |Суп
Главное блюдо
Салат
Напиток|Суп
Главное блюдо
Напиток|Суп
Салат
Напиток|Главное блюдо
Салат
Напиток|Главное блюдо
Напиток| В отдельном блоке необходимо разместить информацию о десертах. Их можно добавлять в любой вид ланча. Эту информацию нужно также отобразить на странице (поместить ниже подписи; шрифт меньше, чем у подписи на 2 пункта). Измените свойства для изображений данного блока при наведении на них курсора. Используйте для этого transform с функциями трансформации translateY и scale. На видео продемонстрирована работа transform: 2. Создайте скрипт, который будет проверять все ли необходимые блюда добавил пользователь. Скрипт должен запускаться, когда пользователь отправляет форму. Пользователь может добавлять в заказ произвольные блюда. В итоге у него должен получиться один из вариантов ланчей, описанных выше. Если перечень выбранных блюд не соответствует ни одному из возможных вариантов (комбо), у пользователя не должно быть возможности оформить заказ (форма не должна отправляться), и на странице должно быть выведено уведомление с информацией о недостающих блюдах. Существует 5 видов уведомлений: |Текст уведомления|Когда выводится|Изображение| |---|---|---| |«Ничего не выбрано. Выберите блюда для заказа»|Не добавлено ни одно блюдо|![Ничего не выбрано](https://lms.mospolytech.ru/pluginfile.php/1314144/mod_assign/intro/mockup3.png)| |«Выберите напиток»|Выбраны все необходимые блюда, кроме напитка|![Выберите напиток](https://lms.mospolytech.ru/pluginfile.php/1314144/mod_assign/intro/mockup4.png)| |«Выберите главное блюдо/салат/стартер»|Выбран суп, но не выбраны главное блюдо/салат/стартер|![Выберите главное блюдо/салат/стартер](https://lms.mospolytech.ru/pluginfile.php/1314144/mod_assign/intro/mockup5.png)| |«Выберите суп или главное блюдо»|Выбран салат/стартер, но не выбраны суп/главное блюдо|![Выберите суп или главное блюдо](https://lms.mospolytech.ru/pluginfile.php/1314144/mod_assign/intro/mockup6.png)| |«Выберите главное блюдо»|Выбран напиток/десерт|![Выберите главное блюдо](https://lms.mospolytech.ru/pluginfile.php/1314144/mod_assign/intro/mockup7.png)| Уведомление должно создаваться динамически каждый раз, когда при попытке отправить форму скрипт обнаруживает, что какое-то блюдо не добавлено. Оно должно отображаться поверх остальных элементов на странице и не менять положение при прокрутке. Также, его нужно отцентровать по вертикали и горизонтали. При наведении на кнопку "Окей", изменяется цвет фона и текста кнопки. При нажатии на кнопку, уведомление исчезает и удаляется со страницы. На видео продемонстрирована работа уведомления: ### Материалы для изучения #### CSS [transform [Doka]](https://doka.guide/css/transform/) [translateX() [MDN]](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/translateX) [translateY() [MDN]](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/translateY)  [scale() [MDN]](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/scale) [position [Doka]](https://doka.guide/css/position/) [top, left, right, bottom [Doka]](https://doka.guide/css/top-left-right-bottom/)[](https://lms.mospolytech.ru/mod/assign/view.php?id=540007&forceview=1) #### JS [Отправка формы: событие и метод submit [JS.RU]](https://learn.javascript.ru/forms-submit) [submit [Doka]](https://doka.guide/js/event-submit/) [preventDefault() [Doka]](https://doka.guide/js/event-prevent-default/) [preventDefault() [MDN]](https://developer.mozilla.org/ru/docs/Web/API/Event/preventDefault) [Изменение документа [JS.RU]](https://learn.javascript.ru/modifying-document) [document.createElement [MDN]](https://developer.mozilla.org/ru/docs/Web/API/Document/createElement) [Создание элемента [JS.RU]](https://learn.javascript.ru/modifying-document#sozdanie-elementa [Element.append() [MDN]](https://developer.mozilla.org/ru/docs/Web/API/Element/append) [before() [MDN]](https://developer.mozilla.org/en-US/docs/Web/API/Element/before) [after() [MDN]](https://developer.mozilla.org/en-US/docs/Web/API/Element/after) [Методы вставки [JS.RU]](https://learn.javascript.ru/modifying-document#metody-vstavki) [Element.remove() [MDN]](https://developer.mozilla.org/ru/docs/Web/API/Element/remove) [Удаление узлов [JS.RU]](https://learn.javascript.ru/modifying-document#udalenie-uzlov) #### Другое [Юникод, внутреннее устройство строк](https://learn.javascript.ru/unicode) [Emoji юникод](https://symbl.cc/ru/emoji/)