').find('.geke-filter-item').each(function(){
initFilterItem.call(this);
});
$(filter).each(function(){
initFilter.call(this);
});
// вызываем каждый фильтр
function initFilter() {
var self = this;
filterBlock(self);
}
// вызываем каждый из экземпляров фильтров
function initFilterItem() {
var self = this, // тут запоминаем jQuery-DOM-объект
data = $(this).attr('data'); // и его параметры
data = $.parseJSON(data);
view(self, data);
handler(self, data);
}
}
// блок фильтра
function filterBlock(block) {
console.log(document.URL);
// сбрасываем все настройки
$(block).find('.geke-filter-reset').click(function(event){
event.preventDefault();
//window.location.href = window.location.pathname;
$(block).find('.cancel-button').click();
});
// делаем get-запрос с параметрами
$(block).find('.geke-filter-item_submit_button').click(function(event){
event.preventDefault();
var url = '&';
$(block).find('.geke-values').each(function(){
if ($(this).val() !== '') {
values = $(this).val().split(',');
url = url + 'filter_' + $(this).attr('name') + '=';
for (var i=0; i -1) $(element).find('li:nth-child(' + n + ')').addClass('active');
}
for (var i=0; i -1) $(element).find('li:nth-child(' + n + ')').addClass('active');
}
for (var i=0; i -1) $(element).find('li:nth-child(' + n + ')').addClass('active');
}
for (var i=0; i -1) $(element).find('li:nth-child(' + n + ')').addClass('active');
}
}
// присваиваем элементу фильтра класс, соответствующий типу
$(element).addClass('' + data.type + '');
// для элементов типа list делаем имитацию чекбоксов
if (data.type === 'list') {
$(element).find('li').each(function(){
$(this).html('
' + $(this).text() + '
')
})
}
// слайдер
if (data.type === 'slider') {
// случайный id для слайдера, чтобы не мешать с другими экземплярами слайдеров, требуется для корректной работы jQuery UI Slider
var slider_id = Math.round(Math.random()*(9999999)) + 1;
$(element).find('span:not(.title)').remove();
$(element).append('
');
}
// рисуем кнопку "Применить"
/* $(element).append('
');
*/ // рисуем крестик с отменой
/*$(element).prepend('
');*/
// если есть предыдущие значения, показываем
/*if ($(element).find('.geke-values').val().length > 0) $(element).find('.cancel-button').css('display', 'block');
*/
}
// взаимодействие с фильтрами
function handler(element, data) {
var input = $(element).find('.geke-values'),
inputVal = []; // сюда записываем выбранные значения, ключая из прошлых сессий
if (data.type == 'slider') {
handlerSlider();
} else {
handlerList();
}
// для списка и календаря
function handlerList() {
if ($(input).val().length > 0) {
inputVal = $(input).val().split(',')
}
$(element).find('li').click(function(){
var x = $(this).attr('data-id');
if (!$(this).hasClass('active')) {
inputVal.push(x);
} else {
inputVal.splice(inputVal.indexOf(x), 1)
}
$(this).toggleClass('active');
$(input).val(inputVal.join(','));
/*if (inputVal.length > 0) {
$(element).find('.cancel-button').show();
} else {
$(element).find('.cancel-button').hide();
}*/
});
// нажимаем на крестик
$(element).find('.cancel-button').click(function(event){
event.preventDefault();
$(element).find('li').each(function(){
$(this).removeClass('active');
});
$(input).val('');
inputVal = [];
/* $(this).hide();*/
})
}
// для слайдера
function handlerSlider() {
var slider_id = $(element).find('.slider_id').attr('id').slice(7),
thisSlider = $('#slider_' + slider_id);
if ($(input).val().length > 0) {
inputVal = $(input).val().split(',')
}
var val1 = $('#slider_values_left_' + slider_id),
val2 = $('#slider_values_right_' + slider_id),
slMin = parseInt(data.min),
slMax = parseInt(data.max);
$(thisSlider).slider({
values : [slMin, slMax],
min : slMin,
max : slMax,
animate : true,
range : true,
slide : function(event, ui) {
/*$(val1).text(ui.values[0] + ' руб.');
$(val2).text(ui.values[1] + ' руб.'); */
$(val1).text(ui.values[0]);
$(val2).text(ui.values[1]);
// если установили изначальные значения, тогда оставляем инпут пустым
if (ui.values[0] === slMin && ui.values[1] === slMax) {
$(input).val('');
/* $(element).find('.cancel-button').hide();*/
} else {
$(input).val(ui.values[0] + ',' + ui.values[1]);
/* $(element).find('.cancel-button').show();*/
}
}
});
// восстанавливаем данные слайдера (если есть) после инициализации
(function restoreSlider() {
if (inputVal.length > 1) {
$(thisSlider).slider({
values : [inputVal[0], inputVal[1]]
});
/* $(val1).text(inputVal[0] + ' руб.');
$(val2).text(inputVal[1] + ' руб.');*/
$(val1).text(inputVal[0]);
$(val2).text(inputVal[1]);
} else {
/* $(val1).text(slMin + ' руб.');
$(val2).text(slMax + ' руб.'); */
$(val1).text(slMin);
$(val2).text(slMax);
}
})();
// нажимаем на крестик
$(element).find('.cancel-button').click(function(event){
event.preventDefault();
$(thisSlider).slider({
values : [slMin, slMax]
});
/* $(val1).text(slMin + ' руб.');
$(val2).text(slMax + ' руб.');
*/
$(val1).text(slMin);
$(val2).text(slMax);
$(input).val('');
inputVal = [];
/*$(this).hide();*/
})
}
}
window.onload = function() {
init();
$(".geke-filter-item ul").mCustomScrollbar({
theme:"minimal-dark"
});
}
})();