# Лабораторная работа №4. Отображение и сортировка блюд, добавление в корзину --- Отобразите блюда на странице с помощью JavaScript. Создайте скрипт, позволяющий выбрать блюдо и добавить его в раздел формы "Ваш заказ". Реализуйте подсчет итоговой стоимости. Отсортируйте блюда в алфавитном порядке. ## Порядок выполнения Примерный макет раздела "Ваш заказ": Изначально на странице не должно быть элементов с карточками блюд. Необходимо написать скрипт, который будет перебирать массив с блюдами, динамически создавать соответствующие им HTML-элементы, и при помощи DOM добавлять каждый из них в нужную секцию на странице. 1. Создайте массив объектов, в котором будут храниться все существующие блюда. У каждого объекта должны быть следующие свойства: - keyword (хранит название блюда на латинице, должно быть уникальным для каждого блюда) - name (название блюда) - price (цена) - category (категория на английском, например, "soup") - count (вес/объем) - image (путь к изображению, например "soups/gazpacho") Пример объекта: Массив должен храниться в отдельном js-файле. 2. Реализуйте отображение блюд на страницу с помощью JavaScript. Необходимо написать скрипт, который будет перебирать массив с блюдами и выводить каждое из них в нужную секцию. Секции должны выглядеть также, как при статичном выводе из прошлых лабораторных. * У каждого блока с блюдом должен быть data-атрибут "data-dish", в котором будет храниться название блюда на латинице. Скрипт отображения должен храниться в отдельном js-файле. 3. Создайте скрипт, позволяющий выбрать блюдо и добавить его в форму "Сделать заказ". - При клике на карточку с блюдом, его название и цена должны появляться в разделе формы "Ваш заказ". Блюдо должно отображаться в своей категории. Используйте data-атрибут, чтобы найти блюдо в массиве. Например, пользователь выбрал суп "Гаспачо". Вот как должен выглядеть раздел "Ваш заказ" - Если затем пользователь выбрал другой суп, он должен отобразиться вместо "Гаспачо" - Если блюдо из одной категории добавлено, а из другой нет, в пустой категории должно быть выведено сообщение: "Блюдо не выбрано" (или "Напиток не выбран" для раздела с напитками). Например, пользователь выбрал суп, но не выбрал основное блюдо и напиток - Если еще ничего не было выбрано, в блоке должен отображаться текст "Ничего не выбрано" (названия категорий скрыты) -  Вот как выглядит блок, если были выбраны блюда из каждой категории 4. Реализуйте подсчет итоговой стоимости для всех выбранных позиций меню. - После блоков с выбранными блюдами должен располагаться блок "Стоимость заказа". В блоке отображается итоговая стоимость всех блюд. Например, если был выбран только напиток, отобразится его цена - Так выглядит блок, если выбраны блюда из каждой категории - Если блюда не были выбраны, блок "Стоимость заказа" скрыт также, как и блоки с категориями. 5. Отсортируйте блюда каждой категории в алфавитном порядке. - Используйте метод sort() перед отображением блюд на страницу. Блюда должны быть отсортированы в алфавитном порядке. Данные о выбранных блюдах можно не отправлять при отправке формы (остальные данные формы должны отправляться). ### Материалы для изучения #### HTML [Атрибуты data-* [Doka]](https://doka.guide/html/data-attributes/) [Скрытые поля [MDN]](https://developer.mozilla.org/ru/docs/Web/HTML/Element/input/hidden) #### JS [Современный учебник JavaScript [JS.RU]](https://learn.javascript.ru/) [JavaScript [MDN]](https://developer.mozilla.org/ru/docs/Web/JavaScript) [JavaScript [Doka]](https://doka.guide/js/) [Переменные const, let и var [Doka]](https://doka.guide/js/var-let/) [if...else [Doka]](https://doka.guide/js/if-else/) [forEach() [Doka]](https://doka.guide/js/array-foreach/) [Число [Doka]](https://doka.guide/js/number/) [Строка [Doka]](https://doka.guide/js/string/) [Булев тип [Doka]](https://doka.guide/js/boolean/) [undefined [Doka]](https://doka.guide/js/undefined/) [console.log() [Doka]](https://doka.guide/js/console-log/) [textContent [Doka]](https://doka.guide/js/element-textcontent/) [Массив [Doka]](https://doka.guide/js/arrays/) [Объект [Doka]](https://doka.guide/js/object/) [Введение в DOM [MDN]](https://developer.mozilla.org/ru/docs/Web/API/Document_Object_Model/Introduction) [DOM [Doka]](https://doka.guide/js/dom/) [Using the Document Object Model [MDN]](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Using_the_Document_Object_Model) [querySelector() [Doka]](https://doka.guide/js/query-selector/) [querySelectorAll() [Doka]](https://doka.guide/js/query-selector-all/) [dataset [Doka]](https://doka.guide/js/element-dataset/) [addEventListener() [Doka]](https://doka.guide/js/element-addeventlistener/) [HTMLElement: dataset property [MDN]](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset) [Style display Property [W3Schools]](https://www.w3schools.com/jsref/prop_style_display.asp) [Element.insertAdjacentHTML() [MDN]](https://developer.mozilla.org/ru/docs/Web/API/Element/insertAdjacentHTML) [Браузерное окружение, спецификации [JS.RU]](https://learn.javascript.ru/browser-environment) [sort() [Doka]](https://doka.guide/js/array-sort/)