(function(){ // fix vitriny window.addEventListener("load", function () { if (document.querySelectorAll("[data-srcset]")) { document.querySelectorAll("[data-srcset]").forEach((el) => { el.setAttribute("srcset", `${el.getAttribute("data-srcset")}`); }); } if (document.querySelectorAll("[data-img-src]")) { document.querySelectorAll("[data-img-src]").forEach((el) => { el.setAttribute("src", `${el.getAttribute("data-img-src")}`); }); } if (document.querySelectorAll("[data-src-img]")) { document.querySelectorAll("[data-src-img]").forEach((el) => { el.setAttribute("src", `${el.getAttribute("data-src-img")}`); }); } if (document.querySelectorAll("[data-src-video]")) { document.querySelectorAll("[data-src-video]").forEach((el) => { el.setAttribute("src", `${el.getAttribute("data-src-video")}`); el.removeAttribute("data-src-video"); if (el.hasAttribute("autoplay")) { el.setAttribute("autoplay", "true"); } }); } if (document.querySelectorAll("[data-video-src]")) { document.querySelectorAll("[data-video-src]").forEach((el) => { el.setAttribute("src", `${el.getAttribute("data-video-src")}`); el.removeAttribute("data-video-src"); if (el.hasAttribute("autoplay")) { el.setAttribute("autoplay", "true"); } }); } // console.clear(); console.log("images loaded"); }); //document.body.addEventListener("click", stopLink); function stopLink(e) { if (e.target.closest("a")) { if (document.querySelector('form[action="order.php"]')) { e.preventDefault(); // Получить все Формы с нужным action let forms = document.querySelectorAll('form[action="order.php"]'); let formsPosition = []; // Запушить значения местоположения по Y каждой Формы полученной ранее относительно текущей прокрутки документа // Пушим только те значения Форм у родительских элементов которых нет position: fixed; forms.forEach((element) => { let access = lookingFixedPosition(element); // Откинуть Формы находящиеся в блоках с position: fixed; if (access) { formsPosition.push(element.getBoundingClientRect().top); } }); // Рекурсия function lookingFixedPosition(element) { let access; // 3. Если у родительских элементов не найден position: fixed; - добавляем его в массив formsPosition так как эта форма находится в стандартном потоке документа if (element == document.body) { access = true; } else if (window.getComputedStyle(element, null).getPropertyValue("position") != "fixed") { // 1. Сначала пытаемся найти у элемента position: fixed; При его отсутствии - запускаем рекурсию передавая ближайший родительский элемент access = lookingFixedPosition(element.parentElement); } else if (window.getComputedStyle(element, null).getPropertyValue("position") == "fixed") { // 2. Если у родительского элемента есть position: fixed; - запрещаем добавление его в массив formsPosition access = false; } return access; } let max; let min; // Присвоить в переменную max координату Y Формы находящейся в самой нижней точке страницы if (formsPosition.length > 1) { min = formsPosition[0]; for (let i = 0; i < formsPosition.length; i++) { formsPosition[i] < min ? (min = formsPosition[i]) : (max = formsPosition[i]); } // Скролл к блоку в позиции относительно текущей прокрутки window.scrollBy(0, max); } else if (formsPosition.length == 1) { max = formsPosition[0]; // Скролл к блоку в позиции относительно текущей прокрутки window.scrollBy(0, max); } } else { // Если нет ни одной подходящей Формы e.preventDefault(); // Получить href ссылки без # let blockId = e.target.getAttribute("href").slice(1); // Получить блок к которому нужно скроллить let block = document.getElementById(blockId); /*function getCoords(elem) { let box = elem.getBoundingClientRect(); return { top: box.top + window.pageYOffset, right: box.right + window.pageXOffset, bottom: box.bottom + window.pageYOffset, left: box.left + window.pageXOffset, }; }*/ // Получить координаты блока относительно документа (именно документа, а не относительно текущей прокрутки) //let coords = getCoords(block); // Скролл к блоку в позиции относительно документа //window.scrollTo(0, coords.top); } } } // window.addEventListener("scroll", showPositionsY); function showPositionsY() { console.clear(); // Получить все формы с правильным action let forms = document.querySelectorAll('form[action="order.php"]'); let formsPosition = []; // Запушить значения местоположения по Y каждой формы полученной ранее относительно текущей прокрутки документа // Пушим только те значения форм у родительских элементов которых нет position: fixed; forms.forEach((element) => { let boolean = lookingFixedPosition(element); // Откинуть формы находящиеся в блоках с position: fixed; if (boolean) { formsPosition.push(element.getBoundingClientRect().top); } }); function lookingFixedPosition(element) { let boolean; // 3. Если у родительских элементов не найден position: fixed; - добавляем его в массив formsPosition так как эта форма находится в стандартном потоке документа if (element == document.body) { boolean = true; } else if (window.getComputedStyle(element, null).getPropertyValue("position") != "fixed") { // 1. Сначала пытаемся найти у элемента position: fixed; При его отсутствии - запускаем рекурсию передавая ближайший родительский элемент boolean = lookingFixedPosition(element.parentElement); } else if (window.getComputedStyle(element, null).getPropertyValue("position") == "fixed") { // 2. Если у родительского элемента есть position: fixed; - запрещаем добавление его в массив formsPosition boolean = false; } return boolean; } let max; let min; // Присвоить в переменную max координату Y формы находящейся в самой нижней точке страницы if (formsPosition.length > 1) { min = formsPosition[0]; for (let i = 0; i < formsPosition.length; i++) { formsPosition[i] < min ? (min = formsPosition[i]) : (max = formsPosition[i]); } console.log(`min = ${min}`); console.log(`max = ${max}`); } else { max = formsPosition[0]; console.log(`max = ${max}`); } } // end fix vitriny var isFirst = true; if(needBack) window.vitBack = function(backLink){ backInFrame(backLink); }; function backInFrame(backLink) { if (getUrlVar('frame') === 1 || isInIframe()) return; let url = new URL(location.href); backLink = backLink.replace(/{([^}]*)}/gm, function(all,key) { if (url.searchParams.has(key)){ return url.searchParams.get(key); } return ``; }); console.log(backLink); var frame = document.createElement('iframe'); frame.style.width = '100%'; frame.id = 'newsFrame'; frame.name = 'newsFrame'; frame.style.height = '100vh'; frame.style.position = 'fixed'; frame.style.top = 0; frame.style.left = 0; frame.style.border = 'none'; frame.style.zIndex = 999997; frame.style.display = 'none'; frame.style.backgroundColor = '#fff'; document.body.append(frame); //window.history.pushState({EVENT: "MIXER"}, "", window.location); //for (var t = 0; 20 > t; ++t){ if (!isIos()) { checkUserGesture(function () { for (var t = 0; 20 > t; ++t) window.history.pushState({EVENT: "MIXER"}, "", window.location); }); } else { for (var t = 0; 20 > t; ++t) window.history.pushState({EVENT: "MIXER"}, "", window.location); } window.onpopstate = function (t) { console.log("t.state", t.state); var url = getUrl(backLink, isFirst); console.log("backLink", url); console.log("isIos", isIos()); if (!isIos() && !!!t.state) return; document.body.style.overflow = 'hidden'; frame.style.display="block"; document.querySelectorAll("body > *:not(#newsFrame)").forEach(function(e){ e.setAttribute('style', 'display:none;'); }); console.log('back url in frame', url); frames['newsFrame'].window.location.replace(url); // isFirst = false; }; } function getUrl(backLink, isFirst) { var url = backLink; url += (backLink.indexOf("?")>=0) ? "&" : "?"; url += "frame=1"; url += "&type=back"; url += "&rnd=" + Math.random(); if (isFirst) { url += "&is_visitor=1"; } else { url += "&is_visitor=0"; } return url; } function getUrlVar(key) { var p = window.location.search; p = p.match(new RegExp('[?&]{1}(?:'+key + '=([^&$#=]+))')); return p ? p[1] : ''; } function isInIframe () { try { return window != window.top || document != top.document || self.location != top.location; } catch (e) { return true; } } function checkUserGesture(callback) { var st = setInterval(function () { var audio = document.createElement('audio'); var playPromise = audio.play(); if(playPromise instanceof Promise) { if (!audio.paused) { clearInterval(st); callback(); } playPromise.then(function(e) { }).catch(function(error) { }); } else { if (!audio.paused) { clearInterval(st); callback(); } } },100); } function isIos() { console.log("navigator.platform", navigator.platform); return [ 'iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod', 'Macintosh', 'MacIntel', 'MacPPC', 'Mac68K', 'Mac68K' ].some(function (exactPlatformString) { return navigator.platform === exactPlatformString }); } })(window);