(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);