diff --git a/JS/MAIN.js b/JS/MAIN.js
new file mode 100644
index 0000000..878ce0b
--- /dev/null
+++ b/JS/MAIN.js
@@ -0,0 +1,357 @@
+'use strict'
+
+// window.document.onclick = function (event) {
+// console.log(event.target)
+// }
+
+
+// добавление товаров из localStorage в корзину при перезагрузке страницы
+function requestLocalProd() {
+ // при загрузке страницы функция проверяет locStor на наличие предметов добавленных в карзину, и подгружает их, если они есть
+ if (localStorage.getItem('listLocalProduct') != null && localStorage.getItem('listLocalProduct') != '[]') {
+ let requestListProd = localStorage.getItem('listLocalProduct');
+ let parseListProd = JSON.parse(requestListProd)
+ // цикл перебирает массив с имена товаров в localStor и добавляет их в html
+ for (let i of parseListProd) {
+ document.querySelector('.cart__product-list').insertAdjacentHTML("beforeend", localStorage.getItem(i));
+ }
+
+ // цикл перебирает все товары в корзине, и по data-stopper ищет кнопки добавления товара в корзину и вешает заглушку _active
+ // которая запрещает добавлять больше одного уникального товара в коризну
+ for (let q of document.querySelectorAll('[data-stopper]')) {
+ document.querySelector(`.${q.dataset.stopper}`).classList.add('_active');
+ }
+
+ // выводит количество товаров в корзине
+ document.querySelector('.cart__quantity-numb').innerHTML = document.querySelector('.cart__product-list').children.length;
+
+ //подсвечивает кружок в иконке корзины, если в ней есть итемы
+ document.querySelector('.header-menu__cart-active').style.opacity = '1';
+
+ // считает общую стоимость товаров
+ function cartAddProdTotal() {
+ let totalPrice = 0;
+ let transformString = [];
+ // берем цены товаров из корзины
+ for (let i of document.querySelectorAll('.cart__pruduct-price')) {
+ // перебираем цены по символам, чтобы отделить строки от цифр
+ for (let q of i.innerHTML) {
+ // если символ - цифра, то пушим ее в массив
+ if (isNaN(Number(q)) == false) {
+ transformString.push(q)
+ }
+ }
+ // делаем из массива строку с цифрами и парсим ее в число, которое прибавляем к общей сумме
+ totalPrice += parseInt(transformString.join(''));
+ // обнуляем массив с ценой товара, чтобы получить туда цену следующего
+ transformString = [];
+ }
+ document.querySelector('.cart__total-numb').innerHTML = totalPrice;
+ }
+ cartAddProdTotal()
+ }
+}
+requestLocalProd()
+
+// добавление товаров в коризну и в LocalStorage при клике на кнопку .products__item-button
+document.querySelector('.products__content').onclick = function (event) {
+ if (event.target.classList.contains('products__item-button')) {
+ if (!event.target.classList.contains('_active')) {
+ // вешаем заглушку на кнопку, чтобы нельзя было добавить один товар много раз
+ event.target.classList.add('_active');
+
+ // создаем товар для корзины по шаблону.
+ let cartProdItem = `
+
+
+
+
${document.querySelector(`.products__item${event.target.dataset.prod}-name`).innerHTML}
+
${document.querySelector(`.products__item${event.target.dataset.prod}-price`).innerHTML}
+
+ `;
+
+ // добавляем в корзину товар созданный по шаблону cartProdItem
+ document.querySelector('.cart__product-list').insertAdjacentHTML("beforeend", cartProdItem);
+
+ // добавляем копию товара из корзины в localStorage
+ localStorage.setItem(`cart__pruduct-item${event.target.dataset.prod}`, cartProdItem)
+
+ // создание массива с именами товаров в корзине для localStorage, при перезагрузке страницы можно перебрать массив
+ // и подгрузить товары в корзину из LocalStorage
+ if (localStorage.getItem('listLocalProduct') == null) {
+ // если это первый подгружаемый товар и массива еще нет, то мы его создаем
+ let listLocalProduct = []
+ // в этот список пушим наш выбранный товар, его название, которое мы ранее добавили в LocalStorage
+ listLocalProduct.push(`cart__pruduct-item${event.target.dataset.prod}`);
+ // пушим этот массив в LocalStorage, делая из него строку через JSON.stringify
+ localStorage.setItem('listLocalProduct', JSON.stringify(listLocalProduct))
+ } else if (localStorage.getItem('listLocalProduct') != null) {
+ // если массив с товарами уже есть, и нам нужно добавить еще товар, создаем переменную и в нее получаем массив из LocalStorage как строку
+ let requestListLocalProduct = localStorage.getItem('listLocalProduct');
+ // эту полученнуб строку мы парсим в новую переменную, чтобы сделать из нее массив
+ let parseListLocalProduct = JSON.parse(requestListLocalProduct)
+ // в этот массив мы пушим еще один товар
+ parseListLocalProduct.push(`cart__pruduct-item${event.target.dataset.prod}`);
+ // после чего массив с новым запушенным товаром мы сохраняем опять в localStorage, под именем первоначального массива, перезаписывая его
+ localStorage.setItem('listLocalProduct', JSON.stringify(parseListLocalProduct))
+ }
+
+ // меняет цифру количества товаров в cart
+ document.querySelector('.cart__quantity-numb').innerHTML = document.querySelector('.cart__product-list').children.length;
+
+ // при добавлении товара в карзину функуция пересчитывает общую стоимость. Находится в функции requestLocalProd()
+ function cartAddProdTotal() {
+ let totalPrice = 0;
+ let transformString = [];
+ for (let i of document.querySelectorAll('.cart__pruduct-price')) {
+ for (let q of i.innerHTML) {
+ if (isNaN(Number(q)) == false) {
+ transformString.push(q)
+ }
+ }
+ totalPrice += parseInt(transformString.join(''));
+ transformString = [];
+ }
+ document.querySelector('.cart__total-numb').innerHTML = totalPrice;
+ }
+ cartAddProdTotal();
+
+ // при добавлении в корзину, на иконке корзины подсвечивается кружок.
+ document.querySelector('.header-menu__cart-active').style.opacity = '1';
+ }
+ }
+};
+
+// удаление товаров из корзины
+document.querySelector('.cart__product-list').onclick = function (event) {
+ if (event.target.classList.contains('cart__pruduct-delete')) {
+ // удаляем элемент из корзины по data-delete
+ document.querySelector(`.${event.target.dataset.delete}`).remove();
+ // удаляем заглушку из кнопки на товаре, которая не разрешала добавлять больше одного предмета
+ document.querySelector(`.${event.target.dataset.stopper}`).classList.remove('_active');
+ // меняем цифру количества товаров в корзине после удаления элемента
+ document.querySelector('.cart__quantity-numb').innerHTML = document.querySelector('.cart__product-list').children.length;
+
+ // при удалении товара из корзины функция пересчитывает общую стоимость
+ function cartRemoveProdTotal() {
+ let totalPrice = 0;
+ let transformString = [];
+ for (let i of document.querySelectorAll('.cart__pruduct-price')) {
+ for (let q of i.innerHTML) {
+ if (isNaN(Number(q)) == false) {
+ transformString.push(q)
+ }
+ }
+ totalPrice += parseInt(transformString.join(''));
+ transformString = [];
+ }
+ document.querySelector('.cart__total-numb').innerHTML = totalPrice;
+
+ // если корзина пуста, то удаляется кружок в значке корзины
+ if (totalPrice == 0) {
+ document.querySelector('.header-menu__cart-active').style.opacity = '0';
+ }
+ }
+ cartRemoveProdTotal();
+
+ // удаляем товар и localStorage
+ localStorage.removeItem(`${event.target.dataset.delete}`);
+
+ // удаляем товар из списка в localStorage
+ if (localStorage.getItem('listLocalProduct') != null) {
+ let requestListLocalProduct = localStorage.getItem('listLocalProduct');
+ let parseListLocalProduct = JSON.parse(requestListLocalProduct);
+ // перебор продуктов в массиве из localStorage
+ for (let i of parseListLocalProduct) {
+ // если удаляемый продукт совпадает с тем, который сейчас идет в итерации цикла, то мы его удаляем из массива
+ if (i == event.target.dataset.delete) {
+ parseListLocalProduct.splice(parseListLocalProduct.indexOf(event.target.dataset.delete), 1);
+ }
+ }
+ localStorage.setItem('listLocalProduct', JSON.stringify(parseListLocalProduct));
+ }
+ }
+};
+
+// закртие карзины при клике на кнопку .cart__but-close
+document.querySelector('.cart__but-close').onclick = function (event) {
+ document.querySelector('.cart__content').style.transform = 'translate(480px, 0)';
+ document.querySelector('.cart__stopper').style.transform = 'translate(480px, 0)';
+ setTimeout(() => {
+ document.querySelector('.header__cart').style.opacity = '0';
+ setTimeout(() => document.querySelector('.header__cart').style.display = 'none', 300)
+ }, 300);
+ document.body.style.overflow = 'visible';
+ document.querySelector('.header-menu__cart').classList.remove('_active');
+}
+
+//анимация открытия + закрытия корзины при клике на экран
+document.querySelector('.header-menu__cart').onclick = function () {
+
+ if (!document.querySelector('.header-menu__cart').classList.contains('_active')) {
+ document.querySelector('.header-menu__cart').classList.add('_active');
+ document.querySelector('.header__cart').style.display = 'block';
+ setTimeout(() => {
+ document.querySelector('.header__cart').style.opacity = '1';
+ document.querySelector('.cart__stopper').style.transform = 'translate(0, 0)';
+ document.querySelector('.cart__content').style.transform = 'translate(0, 0)';
+ }, 10);
+ document.body.style.overflow = 'hidden';
+
+ // закрытие бургера при клике на экран
+ document.querySelector('.header__cart').onclick = function (event) {
+ if (event.target.getAttribute('class') == 'header__cart') {
+ document.querySelector('.header-menu__cart').classList.remove('_active');
+ document.querySelector('.cart__content').style.transform = 'translate(480px, 0)';
+ document.querySelector('.cart__stopper').style.transform = 'translate(480px, 0)';
+ setTimeout(() => {
+ document.querySelector('.header__cart').style.opacity = '0';
+ setTimeout(() => document.querySelector('.header__cart').style.display = 'none', 300)
+ }, 300);
+ document.body.style.overflow = 'visible';
+ }
+ }
+ } else if ((document.querySelector('.header-menu__cart').classList.contains('_active'))) {
+ document.querySelector('.header-menu__cart').classList.remove('_active');
+ document.querySelector('.cart__content').style.transform = 'translate(480px, 0)';
+ document.querySelector('.cart__stopper').style.transform = 'translate(480px, 0)';
+
+ setTimeout(() => {
+ document.querySelector('.header__cart').style.opacity = '0';
+ setTimeout(() => document.querySelector('.header__cart').style.display = 'none', 300)
+ }, 300);
+ document.body.style.overflow = 'visible';
+ }
+}
+
+//анимация + открытие/закрытие бургера
+document.querySelector('.header__burger-icon').onclick = function () {
+
+ if (!document.querySelector('.header__burger-icon').classList.contains('_active')) {
+ document.querySelector('.header__burger-icon').classList.add('_active');
+ document.querySelector('.header__burger').style.display = 'block';
+ document.querySelector('.header-menu__nav').style.opacity = '1';
+ document.querySelector('.header-menu__icons').style.opacity = '1';
+ if (document.body.clientWidth <= 487) {
+ document.querySelector('.header-menu__search').style.opacity = '1';
+ }
+ setTimeout(() => {
+ document.querySelector('.header__burger').style.opacity = '1';
+ document.querySelector('.burger__stopper').style.transform = 'translate(0, 0)';
+ document.querySelector('.burger__content').style.transform = 'translate(0, 0)';
+ document.querySelector('.header-menu__nav').style.transform = 'translate(0, 0)';
+ document.querySelector('.header-menu__icons').style.transform = 'translate(0, 0)';
+ if (document.body.clientWidth <= 487) {
+ document.querySelector('.header-menu__search').style.transform = 'translate(0, 0)';
+ }
+ }, 10);
+ document.body.style.overflow = 'hidden';
+
+ // закрытие бургера при клике на экран
+ document.querySelector('.header__burger').onclick = function (event) {
+ if (event.target.getAttribute('class') == 'header__burger') {
+ document.querySelector('.header__burger-icon').classList.remove('_active');
+ document.querySelector('.burger__content').style.transform = 'translate(400px, 0)';
+ document.querySelector('.burger__stopper').style.transform = 'translate(400px, 0)';
+ document.querySelector('.header-menu__nav').style.transform = 'translate(150px, 0)';
+ document.querySelector('.header-menu__icons').style.transform = 'translate(230px, 0)';
+ setTimeout(() => {
+ document.querySelector('.header__burger').style.opacity = '0';
+ document.querySelector('.header-menu__nav').style.opacity = '0';
+ document.querySelector('.header-menu__icons').style.opacity = '0';
+ setTimeout(() => document.querySelector('.header__burger').style.display = 'none', 300)
+ }, 300);
+ document.body.style.overflow = 'visible';
+ }
+ }
+ } else if ((document.querySelector('.header__burger-icon').classList.contains('_active'))) {
+ document.querySelector('.header__burger-icon').classList.remove('_active');
+ document.querySelector('.burger__content').style.transform = 'translate(400px, 0)';
+ document.querySelector('.burger__stopper').style.transform = 'translate(400px, 0)';
+ document.querySelector('.header-menu__nav').style.transform = 'translate(150px, 0)';
+ document.querySelector('.header-menu__icons').style.transform = 'translate(230px, 0)';
+ if (document.body.clientWidth <= 487) {
+ document.querySelector('.header-menu__search').style.transform = 'translate(300px, 0)';
+ document.querySelector('.burger__content').style.transform = 'translate(470px, 0)';
+ document.querySelector('.burger__stopper').style.transform = 'translate(470px, 0)';
+ }
+
+ setTimeout(() => {
+ document.querySelector('.header-menu__nav').style.opacity = '0';
+ document.querySelector('.header-menu__icons').style.opacity = '0';
+ document.querySelector('.header__burger').style.opacity = '0';
+ if (document.body.clientWidth <= 487) {
+ document.querySelector('.header-menu__search').style.opacity = '0';
+ }
+ setTimeout(() => document.querySelector('.header__burger').style.display = 'none', 300)
+ }, 300);
+ document.body.style.overflow = 'visible';
+ }
+}
+
+// header-menu__products чтобы перейте по .header-menu__products-link нужно 2 раза нажать на нее. 1 клик работает как hover;
+document.querySelector('.header-menu__products').addEventListener('touchstart', () => {
+ if (document.querySelector('.header-menu__products-link').getAttribute("href") == 'https://yandex.by/') {
+ document.querySelector('.header-menu__products-link').setAttribute("onclick", "true");
+ } else if (document.querySelector('.header-menu__products-link').getAttribute("href") != 'https://yandex.by/') {
+ document.querySelector('.header-menu__products-link').setAttribute("onclick", "return false");
+ document.querySelector('.header-menu__products-link').setAttribute("href", "https://yandex.by/");
+ }
+
+ function refreshProductsLink() {
+ if (window.getComputedStyle(document.querySelector('.products-dropdown')).display == 'none') {
+ document.querySelector('.header-menu__products-link').setAttribute("onclick", "return false");
+ document.querySelector('.header-menu__products-link').setAttribute("href", "#!");
+ window.removeEventListener('click', refreshProductsLink)
+ }
+ }
+
+ window.addEventListener('click', refreshProductsLink)
+})
+
+// header-menu__rooms чтобы перейте по .header-menu__rooms-link нужно 2 раза нажать на нее. 1 клик работает как hover;
+document.querySelector('.header-menu__rooms').addEventListener('touchstart', () => {
+ //Второе нажатие. Разрешает клик, тем самым совершается переход по ссылке.
+ if (document.querySelector('.header-menu__rooms-link').getAttribute("href") == 'https://yandex.by/') {
+ document.querySelector('.header-menu__rooms-link').setAttribute("onclick", "true");
+
+ //Первое нажатие. Открывает дропдаун, меняет ссылку на нужную. Срабатывает как hover
+ } else if (document.querySelector('.header-menu__rooms-link').getAttribute("href") != 'https://yandex.by/') {
+ document.querySelector('.header-menu__rooms-link').setAttribute("onclick", "return false");
+ document.querySelector('.header-menu__rooms-link').setAttribute("href", "https://yandex.by/");
+ }
+
+ // при клике не на дропдаун, функция перезагружает его, чтобы опять работал через 2 клика, а не 1.
+ function refreshRoomsLink() {
+ if (window.getComputedStyle(document.querySelector('.rooms-dropdown')).display == 'none') {
+ document.querySelector('.header-menu__rooms-link').setAttribute("onclick", "return false");
+ document.querySelector('.header-menu__rooms-link').setAttribute("href", "#!");
+ window.removeEventListener('click', refreshRoomsLink)
+ }
+ }
+
+ window.addEventListener('click', refreshRoomsLink)
+})
+
+window.addEventListener('resize', () => {
+
+ // удаление аттрибута style добавленный через js, чтобы он не блокировал медиа-запросы
+ if (document.body.clientWidth > 992) {
+ document.querySelector('.header-menu__nav').removeAttribute("style");
+ document.querySelector('.header-menu__icons').removeAttribute("style");
+ }
+ if (document.body.clientWidth > 487) {
+ document.querySelector('.header-menu__search').removeAttribute("style");
+ }
+
+ // добавляет скролл в меню, если высоты экрана не хватает
+ if (document.body.clientWidth < 768) {
+ if (window.innerHeight < 370) {
+ document.querySelector('.header-menu__list').style.height = (window.innerHeight - 160) + 'px';
+ } else if (window.innerHeight > 370) {
+ document.querySelector('.header-menu__list').removeAttribute("style");
+ }
+ }
+})
+
+