');
}
});
if (typeof jQuery.fn.slider === 'undefined') {
jQuery.getScript('catalog/view/javascript/jquery-ui.slider.min.js', function(){
def.resolve();
jQuery('head').append('
');
BrainyFilter.init();
});
} else {
def.resolve();
BrainyFilter.init();
}
}
// Инициализация UI при загрузке
updateVayankaFilterUI();
// Десктопные дропдауны
$('.catalog_filter-title').on('click', function() {
var $parent = $(this).closest('.catalog_filter');
$parent.toggleClass('active');
});
$(document).on('click', function(e) {
if (!$(e.target).closest('.catalog_filter').length) {
$('.catalog_filter').removeClass('active');
}
});
});
BrainyFilter.sliderValues = BrainyFilter.sliderValues || {};
/* --- Vayanka Custom Logic Integration --- */
function triggerBfReset() {
bfIsResetting = true;
BrainyFilter.reset();
}
function parseAndSetCount(productsHtml) {
if (!productsHtml) return;
var $tempHtml = jQuery('
').html(productsHtml);
var pagingText = $tempHtml.find('.results, .col-sm-6.text-right').text();
var countMatch = pagingText.match(/(?:из|of)\s+(\d+)/i);
var finalCount = 0;
if (countMatch && countMatch[1]) {
finalCount = countMatch[1];
} else {
var countItems = $tempHtml.find('.collections_slide').length;
if (countItems === 0) {
countItems = $tempHtml.find('.product-layout, .product-grid-item').length;
}
finalCount = countItems;
}
$('.bf-total-count').text(finalCount);
}
$(document).ajaxSuccess(function(event, xhr, settings) {
if (settings.url.indexOf('extension/module/brainyfilter/ajaxfilter') !== -1) {
var minPrice = $('.bf-range-min').first().val();
var maxPrice = $('.bf-range-max').first().val();
$('.bf-range-min').val(minPrice);
$('.bf-range-max').val(maxPrice);
if (settings.url.indexOf('is_shadow=1') === -1) {
if (xhr.responseJSON && xhr.responseJSON.products) {
parseAndSetCount(xhr.responseJSON.products);
}
if (!bfIsResetting) {
if ($('.filters_inner').hasClass('active') || $('.catalog_filters').hasClass('active')) {
setTimeout(function() {
$('.filters_inner').removeClass('active');
$('.filter_dropdown-overlay').removeClass('active');
$('body').removeClass('lock');
$('.catalog_filters').removeClass('active');
}, 600);
}
$('.catalog_filter').removeClass('active');
} else {
bfIsResetting = false;
}
}
updateVayankaFilterTags();
}
});
// Единый обработчик изменений
$('.bf-form').on('change', 'input', function(e) {
var $changedInput = $(this);
var isDesktop = $changedInput.closest('.bf-desktop-filters').length > 0;
// СИНХРОНИЗАЦИЯ
if ($changedInput.hasClass('bf-sync-input')) {
var name = $changedInput.attr('name');
var $duplicate = $('.bf-form input[name="' + name + '"]').not($changedInput);
if ($duplicate.length) {
$duplicate.prop('checked', $changedInput.is(':checked'));
}
}
// ОБНОВЛЕНИЕ UI (ТЕГИ + СЧЕТЧИКИ ГРУПП)
setTimeout(function() {
updateVayankaFilterTags();
updateDesktopGroupCounters(); // <-- Добавили обновление счетчиков групп
}, 50);
// ЛОГИКА АВТО-ОТПРАВКИ (Desktop)
if (isDesktop) {
if (bfSubmitTimer) {
clearTimeout(bfSubmitTimer);
}
bfSubmitTimer = setTimeout(function() {
BrainyFilter.sendRequest();
}, 800);
}
// ТЕНЕВОЙ ЗАПРОС
if ($changedInput.attr('type') !== 'text') {
var queryParams = BrainyFilter.prepareFilterData(false, 'extension/module/brainyfilter/ajaxfilter');
var requestUrl = window.location.origin + BrainyFilter.baseUrl + 'index.php'
+ queryParams + '&withContent=1&is_shadow=1'
+ '&curRoute=' + BrainyFilter.currentRoute;
$.ajax({
url: requestUrl,
type: 'GET',
dataType: 'json',
success: function(json) {
if (json && json.products) {
parseAndSetCount(json.products);
}
}
});
}
});
// Главная функция обновления интерфейса
function updateVayankaFilterUI() {
updateVayankaFilterTags();
updateDesktopGroupCounters(); // <-- Вызов при загрузке страницы
var text = $('.results, .col-sm-6.text-right').text();
var match = text.match(/(?:из|of)\s+(\d+)/i);
if (match && match[1]) {
$('.bf-total-count').text(match[1]);
} else {
var count = $('.product-layout, .product-grid-item, .collections_slide').length;
$('.bf-total-count').text(count);
}
}
// НОВАЯ ФУНКЦИЯ: Подсчет галочек внутри каждой группы фильтров
function updateDesktopGroupCounters() {
// Проходим по всем десктопным блокам фильтров
$('.bf-desktop-filters .bf-attr-block').each(function() {
var $block = $(this);
var $span = $block.find('.catalog_filter-title span');
// Считаем выбранные чекбоксы внутри этого блока
var checkedCount = $block.find('input[type="checkbox"]:checked').length;
// Если это блок цены, проверяем изменение инпутов
if ($block.hasClass('bf-price-block')) {
var minVal = parseFloat($('.bf-range-min').val());
var maxVal = parseFloat($('.bf-range-max').val());
if (minVal > parseFloat(BrainyFilter.min) || maxVal < parseFloat(BrainyFilter.max)) {
checkedCount = 1;
}
}
if (checkedCount > 0) {
$span.text(checkedCount);
$span.addClass('active'); // Можно стилизовать в CSS, например, сделать жирным
} else {
$span.text(''); // Очищаем, если ничего не выбрано
$span.removeClass('active');
}
});
}
function updateVayankaFilterTags() {
var $wrapper = $('.filters_inner-tegs');
var html = '';
var count = 0;
$('.filters_inner input:checked').each(function() {
var $input = $(this);
var name = $input.attr('name');
if (!name || name.indexOf('bfp_price') > -1 || $input.attr('type') == 'hidden') return;
var labelText = $input.closest('label').find('span').text().trim();
labelText = labelText.replace(/\s*\(\d+\)$/, '');
var inputName = $input.attr('name');
html += '
';
count++;
});
var minVal = parseFloat($('.bf-range-min').val());
var maxVal = parseFloat($('.bf-range-max').val());
var defaultMin = parseFloat(BrainyFilter.min);
var defaultMax = parseFloat(BrainyFilter.max);
if ((minVal > defaultMin) || (maxVal < defaultMax)) {
html += '
';
count++;
}
if (count > 0) {
html += '
';
$wrapper.show();
} else {
$wrapper.hide();
}
$wrapper.html(html);
var $mobileCounter = $('#filter-counter');
if ($mobileCounter.length) {
$mobileCounter.text(count);
}
}
function removeVayankaFilterByName(name) {
if (name) {
var $inputs = $('.bf-form input[name="' + name + '"]');
if ($inputs.length) {
$inputs.prop('checked', false);
$inputs.first().trigger('change');
BrainyFilter.currentSendMethod($inputs.first());
}
}
}
function removeVayankaFilter(id) {
if (id) {
var $input = $('#' + id);
var name = $input.attr('name');
removeVayankaFilterByName(name);
}
}
// Функция для смены сортировки без перезагрузки страницы
function bfChangeSort(sortArg, orderArg) {
// 1. Обновляем скрытые поля внутри формы BrainyFilter
jQuery('#bf-sort').val(sortArg);
jQuery('#bf-order').val(orderArg);
// 2. Отправляем запрос (BrainyFilter сам соберет все галочки + нашу новую сортировку)
BrainyFilter.sendRequest();
}