if(typeof window.firstLoad === 'undefined') {
// индикатор первой загрузки скриптов
window.categoryJsScripts_FirstLoad = false
}
// скрипты страницы категории
window.categoryJsScripts = () => {
/* Скрытие/показ списка сортировок при клике на бабл сортировки */
let tabsWrapSelector = '.filters-n__bubles-wrap';
/* Слайдер баблов */
function scrollHorizontally(e) {
e = window.event || e;
var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
document.querySelector(tabsWrapSelector).scrollLeft -= (delta*40); // Multiplied by 40
e.preventDefault();
}
if(document.querySelector(tabsWrapSelector)) {
if (document.querySelector(tabsWrapSelector).addEventListener) {
// IE9, Chrome, Safari, Opera
document.querySelector(tabsWrapSelector).addEventListener("mousewheel", scrollHorizontally, false);
// Firefox
document.querySelector(tabsWrapSelector).addEventListener("DOMMouseScroll", scrollHorizontally, false);
} else {
// IE 6/7/8
document.querySelector(tabsWrapSelector).attachEvent("onmousewheel", scrollHorizontally);
}
}
function tabsArrowInit(el) {
var items = $(el).find('.filters-n__bubles-item--active');
if(items.length > 0) {
var outerLeft = $(el).offset().left;
var innerLeft = items.offset().left;
var outerRight = $(el).offset().left + $(el).width();
var innerRight = items.offset().left + items.width();
var arrowLeft = $(el).find('.filters-n__bubles-arrow-left');
var arrowRight = $(el).find('.filters-n__bubles-arrow-right');
if((outerLeft - innerLeft) > 30) {
arrowLeft.css('display', 'flex');
} else {
arrowLeft.hide();
}
if(parseInt(innerRight - outerRight) > 0) {
arrowRight.css('display', 'flex');
} else {
arrowRight.hide();
}
}
//console.log(`innerLeft: ${ innerLeft }`)
}
var tabsWrap = $(tabsWrapSelector);
if(tabsWrap.length > 0) {
$(window).on('load resize', function() {
tabsArrowInit(tabsWrap);
});
tabsWrap.on('scroll', function (event) {
tabsArrowInit(this);
});
}
$('.filters-n__bubles-arrow').click(function () {
let wrap = $(this).closest('.filters-n__bubles-wrap');
let items = wrap.find('.filters-n__bubles-items');
let startPosition = wrap.offset().left;
let position = Math.abs(items.offset().left - startPosition);
let start, end;
let delta = 200;
if($(this).hasClass('filters-n__bubles-arrow-left')) {
start = position;
end = position - delta;
}
if($(this).hasClass('filters-n__bubles-arrow-right')) {
start = position;
end = position + delta;
}
$({ numberValue: start }).animate({ numberValue: end }, {
duration: 200,
easing: "swing",
step: function(val) {
document.querySelector('.filters-n__bubles-wrap').scrollLeft = val;
}
});
});
/*
Высчитывание положения ползунка при прокрутке баблов
*/
let bublesWrapper = document.querySelector('.filters-n__bubles-wrap')
function setScrollRunner(scrollLeft = 0) {
let bublesWrapper = document.querySelector('.filters-n__bubles-wrap')
let bublesItems = document.querySelector('.filters-n__bubles-item--active')
let scrollRunner = document.querySelector('.filters-n__scroll-runner')
// отношение ширины видимой области к прокручиваемой
if(!bublesItems) {
return;
}
var coef = bublesWrapper.clientWidth / bublesItems.clientWidth
var left = coef * bublesWrapper.scrollLeft
var right = (bublesItems.clientWidth - bublesWrapper.clientWidth - scrollLeft) * coef
left = parseInt(left)
right = parseInt(right)
scrollRunner.style.left = left + 'px';
scrollRunner.style.right = right + 'px';
}
setScrollRunner();
bublesWrapper.addEventListener('scroll', function() {
setScrollRunner(this.scrollLeft)
});
window.addEventListener('resize', function(event) {
setScrollRunner();
}, true);
// загрузка данных со страницы категории по заданному урлу
function loadAjaxResults(url) {
if(window.location.search) {
let urlParams = window.getAllUrlParams(url + window.location.search)
try {
// удаление ненужных параметров при запросе страницы
urlParams = window.deleteUrlParam(urlParams, 'page')
urlParams = window.deleteUrlParam(urlParams, 'query')
let urlParamsString = window.joinUrlParams(urlParams)
if(urlParamsString) {
url = url + '?' + urlParamsString
}
} catch (err) {
console.log(err)
}
}
// блок с результатами mSearch2
let mse2ResultsJquery = $('#mse2_results')
if(mse2ResultsJquery?.length === 0) {
return;
}
// добавляем прозрачность
prodpage.style.opacity = 0.5
//mse2ResultsJquery.css('opacity', 0.5)
// загрузка страницы категории по урлу
axios({
method: 'get',
url: url,
responseType: 'text',
//data: params
}).then((response) => {
// подставляем урл в строку браузера
window.history.pushState( {} , '', url);
if(response?.data) {
// поиск кода с title страницы
var regex = /
(.+?)<\/title>/ms;
var match = regex.exec(response.data);
if(match?.[1]) {
$('title').html(match[1])
}
// поиск кода с карточками результатов
var regex = /(.+)/ms;
var match = regex.exec(response.data);
if(match?.[1]) {
mse2ResultsJquery.html(match[1])
} else {
mse2ResultsJquery.html('')
}
// поиск кода с количеством результатов
var regex = /(.+)/ms;
var match = regex.exec(response.data);
if(match?.[1]) {
totalResults.innerHTML = match[1].trim()
}
// поиск кода с классами карточек товаров
var regex = /(.+)/ms;
var match = regex.exec(response.data);
// выставление классов размеров карточек товаров
if(match?.[1] && productCategoryWrapper) {
var classes = match[1]
classes = classes.split(/\s+/)
if(classes && classes.length > 0) {
let productCategoryWrapper_defaultClasses = productCategoryWrapper.getAttribute('data-default-classes')
productCategoryWrapper.setAttribute('class', productCategoryWrapper_defaultClasses);
classes.forEach((cssClass) => {
if(cssClass.trim()) {
productCategoryWrapper.classList.add(cssClass.trim())
}
})
}
}
// поиск кода с заголовком
var regex = /(.+)/ms;
var match = regex.exec(response.data);
if(match?.[1]) {
resourceTitle.innerHTML = match[1].trim()
}
// поиск кода с хлебными крошками
var regex = /(.+)/ms;
var match = regex.exec(response.data);
if(match?.[1]) {
breadCrumbs.innerHTML = match[1].trim()
}
// поиск кода с пагинацией
let paginationJquery = $('.mse2_pagination')
if(paginationJquery) {
var regex = /(.+)/ms;
var match = regex.exec(response.data);
if(match?.[1]) {
paginationJquery.html(match[1])
paginationJquery.css('opacity', 1)
}
}
// поиск кода с конфигом mSearch2
var regex = /mse2Config\s*=\s*(\{.+?\})/ms;
var match = regex.exec(response.data);
if(match?.[1]) {
mse2Config = JSON.parse(match[1])
}
if(searchInput) {
// очистка строки поиска
searchInput.value = ''
}
// поиск кода с контентом низа страницы категории
let bottomContent = $('.category-page-bottom')
if(bottomContent) {
var regex = /(.+)/ms;
var match = regex.exec(response.data);
if(match?.[1]) {
bottomContent.html(match[1])
}
}
window.lazyLoadUpdate();
tabsArrowInit(tabsWrap);
}
// добавляем прозрачность
//mse2ResultsJquery.css('opacity', 1)
prodpage.style.opacity = 1
//console.log(response.data);
}).catch(function (error) {
//alert('Возникли проблемы с интернетом');
console.log(error);
});
}
// активность блока баблов
function bublesActivity(filters) {
let catActive = filters.querySelector('.filters-n__cats-item--active')
let catIdx = ''
if(catActive) {
catIdx = catActive.getAttribute('data-idx')
} else {
return;
}
// устанавливаем активный бабл
let activeBuble = filters.querySelector('.filters-n__bubles-item[data-idx="'+ catIdx +'"]')
if(activeBuble) {
if(activeBuble.innerHTML?.trim()) {
filters.classList.add('filters-n__bubles-show')
activeBuble.classList.add('filters-n__bubles-item--active')
}
}
setScrollRunner()
}
/* Обработка клика по категориям */
let prodpage = document.getElementById('pdopage')
let filters = prodpage.querySelector('.filters-n')
let circleCats = filters?.querySelectorAll('.filters-n__cats-item')
let bubles = filters?.querySelectorAll('.filters-n__buble')
let totalResults = filters.querySelector('.filters-n__sort-total')
let resourceTitle = filters.querySelector('.title-n__title-h1')
let breadCrumbs = prodpage.querySelector('.breadcrumbs-n')
let productCategoryWrapper = prodpage.querySelector('.product-n--category-wrapper')
let searchInput = filters?.querySelector('.filters-n__search-form input[name="query"]')
if(circleCats) {
circleCats.forEach((cat) => {
cat.addEventListener('click', (event) => {
// разделяем клик для перехода в категории, и клик для прокручивание области (см. elements/chunks/shop/category_new/filters/circle_cats/circle_cats.tpl)
let scrollByMouse = cat.closest('.scrollByMouse--active')
if(scrollByMouse) {
// только для десктопа
if(window.innerWidth > 1199) {
return;
}
}
let ajaxOff = cat.getAttribute('data-ajax-off')
if(ajaxOff) {
return;
}
// категория уже активна - сбрасываем до корневой
if(cat.classList.contains('filters-n__cats-item--active')) {
var resetUrl;
if(resetUrl = cat.getAttribute('data-reset-url')) {
//console.log('resetUrl', resetUrl)
cat.classList.remove('filters-n__cats-item--active')
deactivateBubles()
loadAjaxResults(resetUrl)
}
return;
}
cat.setAttribute('onclick', 'return false;')
event.preventDefault();
deactivateBubles()
let currentActiveCat = filters.querySelector('.filters-n__cats-item--active')
if(currentActiveCat) {
currentActiveCat.classList.remove('filters-n__cats-item--active')
}
cat.classList.add('filters-n__cats-item--active')
bublesActivity(filters)
// блокируем переход по ссылке и обновляем результаты аяксом
let href = cat.getAttribute('href')
if(href) {
loadAjaxResults(href)
}
});
})
}
// деактивация всех баблов
function deactivateBubles() {
// отменяем активность у всех баблов
let lastActiveBubles = filters.querySelectorAll('.filters-n__buble--active')
lastActiveBubles.forEach((activeBuble) => {
activeBuble.classList.remove('filters-n__buble--active')
})
// отменяем активность у текущего активного списка баблов
let currentActiveBubles = filters.querySelectorAll('.filters-n__bubles-item--active')
currentActiveBubles.forEach((activeBubles) => {
activeBubles.classList.remove('filters-n__bubles-item--active')
})
// отменяем показ баблов
let bublesShow = filters.parentNode.querySelector('.filters-n__bubles-show')
if(bublesShow) {
bublesShow.classList.remove('filters-n__bubles-show')
}
setScrollRunner()
}
if(bubles) {
bubles.forEach((buble) => {
buble.addEventListener('click', (event) => {
// разделяем клик для перехода в категории, и клик для прокручивание области (см. elements/chunks/shop/category_new/filters/circle_cats/circle_cats.tpl)
let scrollByMouse = buble.closest('.scrollByMouse--active')
if(scrollByMouse) {
// только для десктопа
if(window.innerWidth > 1199) {
return;
}
}
if(buble.classList.contains('filters-n__buble--active')) {
let parentUrl = buble.getAttribute('data-parent-url')
if(parentUrl) {
buble.classList.remove('filters-n__buble--active')
loadAjaxResults(parentUrl)
}
} else {
let href = buble.getAttribute('href');
if(href) {
deactivateBubles();
bublesActivity(filters);
buble.classList.add('filters-n__buble--active');
loadAjaxResults(href);
}
}
})
})
}
/* Тултип */
let cats = document.querySelectorAll('.filters-n__cats-item')
if(cats) {
cats.forEach((cat) => {
cat.addEventListener('mouseover', (event) => {
let idx = cat.getAttribute('data-idx')
let selector = '.filters-n__cats-tooltipe-' + idx;
let tt = document.querySelector(selector)
if(tt) {
let ttText = tt.getAttribute('data-text')
if(ttText) {
const tipyInstance = tippy('.filters-n__cats-item[data-idx="'+ idx +'"]', {
allowHTML: true,
placement: 'bottom',
delay: [700, 0],
theme: 'dark',
trigger: 'mouseenter',
content: function (reference) {
return ttText
},
});
}
}
}, { once: true })
})
}
}
document.addEventListener("DOMContentLoaded", function(event) {
window.categoryJsScripts()
window.categoryJsScripts_FirstLoad = true
})
if(typeof window.categoryJsScripts_FirstLoad !== 'undefined' && window.categoryJsScripts_FirstLoad) {
window.categoryJsScripts()
}
/**
* Сортировка
*/
/* Скрытие/показ списка сортировок при клике на бабл сортировки */
document.addEventListener("DOMContentLoaded", function(event) {
let filters = document.querySelector('.filters-n__sort-list')
if(filters) {
filters.onclick = () => {
if(filters.classList.contains('filters-n__sort-list--active')) {
filters.classList.remove('filters-n__sort-list--translate')
setTimeout(() => {
filters.classList.remove('filters-n__sort-list--active')
}, 200)
} else {
filters.classList.add('filters-n__sort-list--active')
setTimeout(() => {
filters.classList.add('filters-n__sort-list--translate')
}, 100)
}
}
}
/* Подстановка заголовка списка сортировки */
$(document).on('mse2_load', function (e, data) {
var active = $('.filters-n__sort-list-item.active')
var titleEl = $('.filters-n__sort-header-title')
var titleDefault = titleEl.attr('title-default')
var title = titleDefault
if(typeof active !== 'undefined' && active.length > 0) {
title = active.attr('title-short')
}
titleEl.text(title)
});
})
/* Скрытие списка при клике на остальной части документа вне бабла сортировки */
document.addEventListener('click', (e) => {
if (!e.target.closest('.filters-n__sort-list')) {
let filtersList = document.querySelector('.filters-n__sort-list--active')
if(filtersList) {
filtersList.classList.remove('filters-n__sort-list--translate')
setTimeout(() => {
filtersList.classList.remove('filters-n__sort-list--active')
}, 200)
}
}
});
document.addEventListener('DOMContentLoaded', () => {
/*
Визуализация прокрутки фильтов
*/
setTimeout(() => {
let filtersEl = document.querySelector('.filters-n__cats-items')
filtersEl.scrollBy({
left: 150,
behavior: 'smooth'
})
setTimeout(() => {
// Прокрутка вправо
filtersEl.scrollBy({
left: -150,
behavior: 'smooth'
});
}, 1000); // 1 секунду ожидания перед прокруткой вправо
})
/*
Раскрытие поля поиска по клику на иконку поиска
*/
setTimeout(() => {
function searchExpand(status) {
let filtersEl = $('.filters-n');
let filtersSearchEl = $('.filters-n__search')
if(status) {
setTimeout(() => {
filtersSearchEl.find('input').focus();
}, 100); // 100 миллисекунд задержки
filtersEl.addClass('filters-n--search-focus')
filtersSearchEl.removeClass('filters-n__search--category')
} else {
filtersEl.removeClass('filters-n--search-focus')
filtersSearchEl.addClass('filters-n__search--category')
}
}
// $('.filters-n__search-form input').focusin(() => {
// searchExpand(true)
// })
$('.filters-n__search--category-page .filters-n__search-form input').focusout(() => {
searchExpand(false)
})
$('.filters-n__search-icon').click(() => {
searchExpand(true)
})
})
});