blob: 003e0bfdf0bcb85f1505234681de0780860a0840 [file] [log] [blame]
/**
* Модальные окна
* см. https://addmorescripts.github.io/hystModal/index_ru.html
*/
if (typeof HystModal !== "undefined") {
var xModal = new HystModal({
linkAttributeName: "data-hystmodal",
waitTransitions: true,
beforeOpen: function(modal){
},
afterClose: function(modal) {
},
});
window.xxModal = xModal;
var menuModal = new HystModal({
linkAttributeName: "data-menumodal",
waitTransitions: true,
backscroll: false,
catchFocus:false,
});
}
/**
* Скрипт GLightbox запуск на элементах с классом .glightbox
* см. https://biati-digital.github.io/glightbox/
*/
if (typeof GLightbox !== "undefined") {
const lightbox = GLightbox({
plyr: {
config: {
ratio: '16:9',
youtube: {
noCookie: true,
rel: 0,
showinfo: 0,
iv_load_policy: 3,
},
}
},
});
}
// window.__forceSmoothScrollPolyfill__ = true;
let submenuItems = Array.prototype.slice.call(document.querySelectorAll(".cmtynavblock__list a"));
let submenuItemsArray = submenuItems.map(el => {
return {
link: el,
href: el.getAttribute('href'),
block: document.querySelector(el.getAttribute('href'))
}
});
//scroll to top button
(function scrollTop() {
const scrollButton = document.querySelector('.scrollTop');
if (!scrollButton) return;
let trigger = false;
function resetTrigger() {
trigger = true;
}
window.addEventListener('scroll', resetTrigger);
let scrollInterval = setInterval(function () {
if (!trigger) return;
trigger = false;
let scrolled = window.pageYOffset || document.documentElement.scrollTop;
scrollActions(scrolled);
}, 150);
scrollButton.addEventListener('click', function (e) {
e.preventDefault();
window.scrollTo({
top: 0,
behavior: 'smooth',
});
});
})();
function universalTopMenu(){
let dropMenu = document.querySelector('.dropmenu');
let dropBack = document.querySelector('.dropmenu__back');
let hdr = document.querySelector('.hdr');
if(!dropMenu) return;
let timeoutMenu;
function openMenuPanel(panelEl){
document.querySelectorAll('.dropmenu__panel').forEach(item => {
item.classList.toggle('active', item.dataset.menupanel === panelEl.dataset.panel);
});
document.querySelectorAll('.hdrmenu--expanded.active').forEach(item => {
item.classList.remove('active');
});
hdr.classList.add('opened');
panelEl.classList.add('active');
dropMenu.classList.add('active');
dropBack.classList.add('active');
dropMenu.style.height = document.querySelector('.dropmenu__panel.active').scrollHeight + "px";
};
function closeAllMenu(){
dropMenu.classList.remove('active');
dropMenu.style.height = "";
dropBack.classList.remove('active');
document.querySelectorAll('.hdrmenu--expanded.active').forEach(el => {
el.classList.remove('active');
});
hdr.classList.remove('opened');
};
//event will run in tablet screen
function clickMenuEvent(e){
const menuLink = e.target.closest('a[data-panel].hdrmenu--expanded');
if (menuLink){
e.preventDefault();
openMenuPanel(menuLink);
};
if(e.target.closest('.dropmenu__back')){
closeAllMenu();
}
}
//event will run in desctop screen
function hoverMenuEvent(e){
e.preventDefault();
let menuLink = e.target.closest('a[data-panel].hdrmenu--expanded');
if(menuLink && menuLink.dataset.panel !== ""){
clearTimeout(timeoutMenu);
timeoutMenu = setTimeout(()=> {
if(!document.querySelector('.hdr__wrap:hover')){
clearTimeout(timeoutMenu);
console.log("Menu is stopped");
return;
}
openMenuPanel(menuLink);
}, 200);
}
let shadow = e.target.closest('.dropmenu__back');
if(!shadow) {
shadow = !(e.target.closest('.dropmenu') || e.target.closest('.js-hasdrop'));
// console.log(shadow);
}
if (shadow) {
closeAllMenu();
}
}
function resizeChanger(){
closeAllMenu();
if(window.innerWidth > 1199){
document.removeEventListener('click', clickMenuEvent);
document.addEventListener('mouseover', hoverMenuEvent);
} else {
document.removeEventListener('mouseover', hoverMenuEvent);
document.addEventListener('click', clickMenuEvent);
}
}
resizeChanger();
window.addEventListener('resize', resizeChanger);
}
universalTopMenu();
let isMenuFloated = false;
let isMenuPinned = false;
function scrollActions(scrolled){
const scrollButton = document.querySelector('.scrollTop');
const stikyHeader = document.querySelector('.hdrfloat');
const menuLine = document.querySelector('.jsHdrLine');
const menuBase = document.querySelector('.jsHdrBase');
const menuFloatBase = document.querySelector('.jsHdrFloatBase');
scrollButton.classList.toggle('active', scrolled >= 100);
if(scrolled >= 600 && !isMenuPinned){
document.documentElement.classList.add('hdr-active');
isMenuPinned = true;
}
if(scrolled < 500 && isMenuPinned){
document.documentElement.classList.remove('hdr-active');
isMenuPinned = false;
}
if(scrolled >= 600 && !isMenuFloated){
// console.log("Переносим меню");
menuFloatBase.append(menuLine);
isMenuFloated = true;
}
if(scrolled < 600 && isMenuFloated){
// console.log("Возвращаем меню обратно");
menuBase.append(menuLine);
isMenuFloated = false;
}
if(submenuItemsArray.length){
reactivateSubmenu(scrolled);
}
}
function reactivateSubmenu(scrolled){
let hdr = document.querySelector('.hdr__wrap');
let menuEl = document.querySelector('.cmtynavblock__list');
let offset = menuEl.scrollHeight + hdr.scrollHeight + 10;
if(!submenuItemsArray.length) return;
submenuItemsArray.forEach((el, index, arr) => {
let blockCoord = el.block.getBoundingClientRect().top + window.scrollY - offset;
let blockCoordNext = Infinity;
if(arr[index + 1]){
blockCoordNext = arr[index + 1].block.getBoundingClientRect().top + window.scrollY - offset;
}
if(scrolled >= blockCoord && scrolled < blockCoordNext){
el.link.classList.add('cmtynavblock__active');
} else {
el.link.classList.remove('cmtynavblock__active');
}
})
// console.log(submenuItemsArray);
}
function mobilemeny() {
const testEl = document.querySelector('.mobmenu__opener');
if(!testEl) return;
document.addEventListener('click', (e) => {
const opener = e.target.closest('.mobmenu__parent');
if(!opener) return;
e.preventDefault();
const listLi = opener.closest('li');
const listUl = listLi.querySelector('ul');
if(listLi.classList.contains('isopen')){
listUl.style.height = '';
listLi.classList.remove('isopen')
return;
}
listUl.style.height = listUl.scrollHeight + 'px';
listLi.classList.add('isopen');
});
};
mobilemeny();
function accordeons(){
let testEl = document.querySelector('[data-hidebox]');
if(!testEl) return;
document.addEventListener('click', function(e) {
let accordLink = e.target.closest('[data-hideopen]');
if(!accordLink) return;
e.preventDefault();
console.log(accordLink);
let accordBox = document.querySelector('[data-hidebox="' + accordLink.dataset.hideopen + '"]');
console.log(accordBox);
if(!accordBox){ console.log("Error: accordion element not found"); return;}
if(!accordBox.style.height){
accordLink.classList.add('isopen');
accordBox.style.height = accordBox.scrollHeight + "px";
if(accordLink.dataset.invis){
accordLink.remove();
}
} else {
accordLink.classList.remove('isopen');
accordBox.style.height = "";
}
});
}
accordeons();
function reActivateMenuClass(elem, selectors, activeClassName) {
document.querySelectorAll(selectors).forEach(el => {
el.classList.toggle(activeClassName, el === elem);
});
}
function submenuScroller(){
let hdr = document.querySelector('.hdr__wrap');
let menuEl = document.querySelector('.cmtynavblock__list');
if(!menuEl) return;
menuEl.addEventListener('click', (e) => {
let link = e.target.closest('.cmtynavblock__list a');
if(!link) return;
e.preventDefault();
scrollToBlock(e, link.getAttribute('href'), (menuEl.scrollHeight + hdr.scrollHeight));
});
}
submenuScroller();
function scrollToBlock(e, selector, offset = 0) {
let elem = document.querySelector(selector);
if(!elem) return;
e.preventDefault();
let coords = elem.getBoundingClientRect().top + window.scrollY - offset;
window.scrollTo({
top: coords,
behavior: 'smooth',
});
}
if(typeof hljs !== 'undefined'){
hljs.highlightAll();
}
function simpleTabs(){
if(!document.querySelector('*[data-tab]')) return;
document.addEventListener('click', (e) => {
let link = e.target.closest('[data-tablink]');
if(!link) return;
e.preventDefault();
let wrap = e.target.closest('.jsTabWrap');
let needTab = document.querySelector('[data-tab="' + link.dataset.tablink + '"]');
if(!needTab){
console.log("Tab - " + link.dataset.tablink + " not found");
return;
}
wrap.querySelectorAll('[data-tablink]').forEach(el => {
el.classList.remove('active');
})
link.classList.add('active');
wrap.querySelectorAll('[data-tab]').forEach(el => {
el.classList.remove('active');
});
needTab.classList.add('active');
});
}
simpleTabs();
function frontpageTabs(){
if(!document.querySelector('*[data-ftab]')) return;
document.addEventListener('click', (e) => {
let link = e.target.closest('[data-ftablink]');
if(!link) return;
e.preventDefault();
let wrap = e.target.closest('.jsTabWrap');
let needTab = document.querySelector('[data-ftab="' + link.dataset.ftablink + '"]');
if(!needTab){
console.log("Tab - " + link.dataset.ftablink + " not found");
return;
}
wrap.querySelectorAll('[data-ftablink]').forEach(el => {
el.classList.remove('active');
})
link.classList.add('active');
wrap.querySelectorAll('[data-ftab]').forEach(el => {
el.classList.remove('active');
});
needTab.classList.add('active');
});
}
frontpageTabs();
/**
* Change Video Block into Iframe with Youtube Video
*/
function youtube_parser(url){
var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/;
var match = url.match(regExp);
return (match&&match[7].length==11)? match[7] : false;
}
document.addEventListener('click', function(e) {
let videoLink = e.target.closest('[data-youtube]');
if(!videoLink) return;
let href = videoLink.getAttribute('href');
console.log(href);
e.preventDefault();
let videoBlock = e.target.closest('.comvideo__box');
videoBlock.innerHTML = "";
let youtId = youtube_parser(href);
let iframeHTML = `<iframe
title=${youtId}
src="https://www.youtube.com/embed/${youtId}?autoplay=1&showinfo=0"
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen>
</iframe>`;
videoBlock.insertAdjacentHTML('beforeend', iframeHTML);
});
/**
* Download Table Save Popup
*/
function downloadPopBlock(){
if(!document.querySelector('.jsDownTablePopUp')) return;
document.addEventListener('click', function(e){
let popup = e.target.closest('.jsDownTablePopUp');
document.querySelectorAll('.jsDownTablePopUp').forEach(el => {
if(el !== popup){
el.querySelector('.downtable__button').classList.remove('active');
}
});
if(!popup) return;
popup.querySelector('.downtable__button').classList.add('active');
});
}
// downloadPopBlock();
/**
* Download change HREF of all link
* === turned OFF ===
*/
function downloadChangeHref() {
let selectBox = document.querySelector('.jsDownloadDomenSelect');
if(!selectBox) return;
let saveButton = document.querySelector('.jsChangeLink');
saveButton.addEventListener('click', (e) => {
let neededHostName = selectBox.value;
let allLinks = document.querySelectorAll('.jsLinksInside a');
allLinks.forEach((link) => {
let linkElem = new URL(link.href);
if(linkElem.hostname == "archive.apache.org") return;
linkElem.hostname = neededHostName;
link.href = linkElem.toString();
});
e.target.innerHTML = "Changed";
e.target.classList.remove('download-choser__button--blue');
// alert('Changed to ' + neededHostName);
e.preventDefault();
});
selectBox.addEventListener('change', (e)=>{
saveButton.innerHTML = "Change";
saveButton.classList.add('download-choser__button--blue');
});
}
// downloadChangeHref();
/**
* Submit form to download.cgi on change soruce button clicked
*/
function chanheDowloadPreferred() {
if (!document.querySelector('.jsChangeLink')) return;
document.addEventListener('click', (e) => {
const button = e.target.closest('.jsChangeLink');
if(!button) return;
e.preventDefault();
const formBox = e.target.closest('form');
if(!formBox) return;
formBox.submit();
});
}
chanheDowloadPreferred();
/**
* FrontPage videos Slider
*/
if (typeof Swiper !== "undefined") {
let jsMainSlider = new Swiper('.jsFrontVideosSwiper', {
autoHeight: false,
loop: true,
spaceBetween: 30,
slidesPerView: 'auto',
pagination: {
el: ".frontstories__pag",
type: "bullets",
clickable: true,
},
navigation: {
prevEl: ".frontstories__sliderwrap .ctrl--prev",
nextEl: ".frontstories__sliderwrap .ctrl--next",
},
breakpoints: {
//when window width is >= 768px
768: {
slidesPerView: 2,
},
1199 : {
slidesPerView: 3,
},
},
});
}
/**
* Subscrube buttons drop-downs
*/
function minidropdowns() {
document.addEventListener('click', (e) => {
let buttonLink = e.target.closest('[data-poplink]');
let dropLink = e.target.closest('.pushup');
document.querySelectorAll('.isopen[data-poplink]').forEach((el) => {
el !== buttonLink ? el.classList.remove('isopen') : null;
})
if (!buttonLink || dropLink) return;
e.preventDefault();
const dropBlock = document.querySelector(`[data-pop="${buttonLink.dataset.poplink}"]`);
if (!dropBlock) { console.log("dropdown not found"); return; }
// console.log(dropBlock);
buttonLink.classList.toggle('isopen');
});
};
minidropdowns();