let config = {"active":"1","button_font_size":"13","button_font_color":"#181717","button_bg_color":"#4fcaa0","widget_font_color":"#111111","widget_borders":"0","widget_border_color":"#d8d8d8","widget_border_thickness":"1","button_position":"200","widget_button_width":"30","widget_button_height":"100","widget_bg_color":"#82eedb","widget_type":"1","atr_show":"1","show_moreless_buttons":"1","moreless_buttons_color":"#fb5642","desktop_active":"1","desktop_atr_show":"0","desktop_multimode":"0","desktop_multimode-button_size":"0","desktop_multimode-button_color":"#000000","desktop_multimode-button_background":"#000000","desktop_multimode-showCategoryFilter":"0","desktop_reset-button_show":"0","desktop_reset-button_size":"0","desktop_reset-button_color":"#000000","desktop_reset-button_background":"#000000","mobile_active":"1","mobile_multimode":"0","mobile_multimode-button_size":"0","mobile_multimode-button_color":"#000000","mobile_multimode-button_background":"#000000","mobile_multimode-showCategoryFilter":"0","mobile_reset-button_show":"0","mobile_reset-button_size":"0","mobile_reset-button_color":"#000000","mobile_reset-button_background":"#000000","mobile_container":"","mobile_sort":"1","mobile_sort-button_size":"12","mobile_sort-button_color":"#ffffff","mobile_sort-button_background":"#000000","__translatable_fields":[]};
let translations = {"widget_text":{"__default":"Filtry","pl_PL":"Filtry"},"more_button":{"__default":"wi\u0119cej","pl_PL":"wi\u0119cej"},"less_button":{"__default":"mniej","pl_PL":"mniej"},"mobile_sort-button_text":{"__default":"Sortowanie","pl_PL":"Sortowanie"},"multimode-button_text":{"__default":"Filtruj","pl_PL":"Filtruj"},"reset-button_text":{"__default":"Wyczy\u015b\u0107 filtry","pl_PL":"Wyczy\u015b\u0107 filtry"}};
var css_assets = document.createElement("style");
css_assets.type = "text/css";
css_assets.id = "appZaawansowaneFiltry";
css_assets.textContent = `.app-filters {
background: #4fcaa0;
}
.app-filters .boxhead {
margin-bottom: 0;
padding: 4px 15px;
border-bottom: 1px solid #d8d8d8;
}
.app-filters .boxhead span {
font-size: 14px;
color: #181717;
margin-top: 0;
}
.app-filters .innerbox .mx-filter {
margin-bottom: 0;
background: #4fcaa0;
width: 100%;
}
.app-filters .innerbox .mx-filter.multimode-active li a img {
display: none;
}
.app-filters .innerbox .mx-filter.border {
border-bottom: 1px solid #d8d8d8;
}
.app-filters .innerbox .mx-filter.border:last-child {
border-bottom: none;
padding-bottom: 4px;
}
.app-filters .innerbox .mx-filter .mx-filter-head {
width: 100%;
display: grid;
grid-template-columns: 1fr 10px;
grid-gap: 0 10px;
padding: 11px 15px;
}
.app-filters .innerbox .mx-filter.expandable .mx-filter-head {
cursor: pointer;
}
.app-filters .innerbox .mx-filter .mx-filter-head h5 {
margin-top: 0;
font-size: 14px;
color: #181717;
}
.app-filters .innerbox .mx-filter .mx-filter-head span.expand {
font-size: 18px;
font-weight: 600;
color: #181717;
}
.app-filters .innerbox .mx-filter > ul {
display: grid;
padding: 0 15px 11px 15px !important;
}
.app-filters .innerbox .mx-filter > ul.all-visible li.none {
display: list-item !important;
}
.app-filters .innerbox .mx-filter > ul.all-visible li.showmore {
display: none !important;
}
.app-filters .innerbox .mx-filter.expandable > ul {
display: none;
grid-gap: 0 10px;
box-sizing: content-box !important;
}
.column-2 {
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}
.column-3 {
grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
}
.column-4 {
grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
}
.column-5 {
grid-template-columns: repeat(5, minmax(0, 1fr)) !important;
}
.column-6 {
grid-template-columns: repeat(6, minmax(0, 1fr)) !important;
}
.column-7 {
grid-template-columns: repeat(7, minmax(0, 1fr)) !important;
}
.column-8 {
grid-template-columns: repeat(8, minmax(0, 1fr)) !important;
}
.column-9 {
grid-template-columns: repeat(9, minmax(0, 1fr)) !important;
}
.app-filters.multimode .innerbox .mx-filter ul li::before {
display: none;
}
.app-filters .innerbox .mx-filter ul li {
margin-top: 5px;
background: #4fcaa0 !important;
}
.app-filters .innerbox .mx-filter ul li.showmore {
grid-column: 1/-1;
border-top: none !important;
margin-top: 0 !important;
color: #fb5642;
padding-left: 5px;
}
.app-filters .innerbox .mx-filter ul li.really-hidden {
display: list-item !important;
}
.app-filters .innerbox .mx-filter ul li a {
background: #4fcaa0;
color: #181717;
font-size: 13px;
display: inline-block;
}
.app-filters .innerbox .mx-filter ul li a:focus {
outline: none;
}
.app-filters .innerbox .mx-filter ul li a img {
margin: 0 5px 0 5px !important;
}
.app-filters .innerbox .mx-filter#filter_rate ul li {
margin-top: 10px;
}
.app-filters .innerbox .mx-filter#filter_rate ul li a {
display: grid;
grid-template-columns: repeat(7, 1fr);
justify-content: center;
align-items: center;
grid-gap: 5px;
}
.app-filters .innerbox .mx-filter#filter_rate ul li a img.px1 {
grid-row: 1;
grid-column: 1;
margin: 0 !important;
justify-self: center;
}
.app-filters .innerbox .mx-filter#filter_rate ul li a em {
text-align: center;
}
.app-filters .innerbox .mx-filter#filter_rate ul li a span {
display: none;
}
.app-filters .innerbox .mx-filter ul {
grid-template-columns: 100%;
}
.app-filters .innerbox .mx-filter ul li.priceinput {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
grid-gap: 10px;
padding-top: 0 !important;
}
.app-filters .innerbox .mx-filter ul li.priceinput input {
margin-bottom: 0 !important;
width: 100%;
padding: 0 15px;
}
.app-filters .innerbox .mx-filter ul li.priceinput span.fromto {
display: none !important;
}
.app-filters .innerbox .mx-filter ul li.priceinput .bottombuttons {
margin-top: 0;
grid-column: 1/3;
}
.app-filters .innerbox .mx-filter ul li.priceinput button.btn {
border: none;
width: 100%;
padding: 5px 15px;
margin: 0 !important;
background: #000000;
box-sizing: border-box;
}
.app-filters .innerbox .mx-filter ul li.priceinput button.btn span {
text-transform: initial;
font-size: 13px;
color: #181717;
}
.app-filters .mx-buttons {
display: grid;
grid-template-columns: repeat(2, minmax(120px, 1fr));
grid-gap: 10px;
padding: 10px;
}
.app-filters .mx-buttons.one-grid {
grid-template-columns: 100%;
}
.app-filters .mx-buttons button {
transition: 0.5;
}
.app-filters .mx-buttons button span {
text-transform: initial;
}
.app-filters .mx-buttons button.multimode-button {
background: #000000;
border-color: #000000;
}
.app-filters .mx-buttons button.multimode-button span {
color: #000000;
font-size: 0px;
}
.app-filters .mx-buttons button.reset-button {
background: #000000;
border-color: #000000;
}
.app-filters .mx-buttons button.reset-button.inactive {
cursor: default;
opacity: 0.7;
}
.app-filters .mx-buttons button.reset-button span {
color: #000000;
font-size: 0px;
}
@media (min-width: 768px) {
.leftcol #box_filter.app-filters {
display: block !important;
}
.centercol #box_filter.app-filters {
display: none !important;
}
}
@media (max-width: 767px) {
.leftcol #box_filter.app-filters {
display: none !important;
}
.centercol #box_filter.app-filters {
display: block !important;
}
.centercol .app-filters {
margin-top: 35px;
}
.app-filters {
background: #4fcaa0;
margin-bottom: 0;
}
.app-filters:not(.mx-widget) {
background: none;
}
.app-filters .boxhead {
display: none;
}
.app-filters .innerbox .mx-filter {
flex-basis: 100% !important;
}
.app-filters .mx-filter-list_container {
width: 100%;
}
.app-filters button.mx-button {
border: none;
border-bottom: 1px solid;
width: 100%;
padding: 11px 15px;
}
.app-filters.mx-widget button.mx-button.show-sort {
border: none;
}
.app-filters.mx-widget button.mx-button.show-sort h5 {
text-align: left;
}
.app-filters .mx-sort-list_container {
width: 100%;
margin-bottom: 15px;
}
.app-filters .mx-sort-list_container button.mx-button.show-sort {
background: #000000;
border-color: #ffffff;
color: #ffffff;
cursor: default;
}
.app-filters .mx-sort-list_container.expandable button.mx-button.show-sort {
display: grid;
grid-template-columns: 1fr 10px;
grid-gap: 0 10px;
cursor: pointer;
}
.app-filters .mx-sort-list_container button.mx-button.show-sort h5,
.app-filters .mx-sort-list_container button.mx-button.show-sort span.expand {
color: #ffffff;
font-size: 12px;
text-transform: initial;
}
.app-filters .mx-sort-list_container button.mx-button.show-sort h5 {
margin-top: 0;
}
.app-filters .mx-sort-list_container button.mx-button.show-sort span.expand {
font-size: 18px;
font-weight: 600;
line-height: 21px;
}
.app-filters .mx-sort-list_container .sort-list {
display: none;
border: 1px solid #000000;
background: #000000;
border-top: none;
padding: 5px 0;
}
.app-filters .mx-sort-list_container:not(.expandable) .sort-list {
display: block !important;
}
.app-filters .mx-sort-list_container .sort-list a.mx-sort {
display: block;
padding: 5px 15px;
color: #ffffff;
font-size: 12px;
}
.app-filters .mx-sort-list_container .sort-list a.mx-sort:focus {
outline: none;
}
.app-filters .mx-sort-list_container .sort-list a.mx-sort.active {
font-weight: 600;
}
.app-filters .mx-filter-list_container button.mx-button.show-filters {
background: #4fcaa0;
border-color: #181717;
color: #181717;
display: grid;
grid-template-columns: 1fr 10px;
grid-gap: 0 10px;
}
.app-filters .mx-filter-list_container button.mx-button.show-filters h5,
.app-filters .mx-filter-list_container button.mx-button.show-filters span.expand {
color: #181717;
font-size: 13px;
text-transform: initial;
margin-top: 0;
}
.app-filters .mx-filter-list_container button.mx-button.show-filters span.expand {
font-size: 18px;
font-weight: 600;
line-height: 21px;
}
.app-filters:not(.mx-widget) .mx-filter-list_container .filter-list {
display: none;
background: #4fcaa0;
}
.app-filters.mx-widget {
position: fixed;
width: 80%;
top: 0;
height: 100%;
margin-top: 0 !important;
z-index: 9999999999;
background-color: #4fcaa0;
}
.app-filters.mx-widget.widget-left {
left: -80%;
border-right: 2px solid #4fcaa0;
transition: 0.5s left;
}
.app-filters.mx-widget.widget-left.widget-opened {
left: 0 !important;
}
.app-filters.mx-widget.widget-right {
right: -80%;
border-left: 2px solid #4fcaa0;
transition: 0.5s right;
}
.app-filters.mx-widget.widget-right.widget-opened {
right: 0 !important;
}
.app-filters.mx-widget button.show-filters {
position: absolute;
text-align: right;
top: 200px;
display: flex;
align-items: center;
justify-content: center;
width: 100px;
height: 30px;
border: 1px solid #d8d8d8;
background: #4fcaa0;
}
.app-filters.mx-widget.widget-left button.show-filters {
right: calc(-2px - 100px);
border-top-right-radius: 20px;
border-bottom-right-radius: 20px;
}
.app-filters.mx-widget.widget-right button.show-filters {
left: calc(-2px - 100px);
border-top-left-radius: 20px;
border-bottom-left-radius: 20px;
}
.app-filters.mx-widget button.show-filters span {
color: #181717;
font-size: 13px;
text-transform: initial;
}
.app-filters.mx-widget.widget-left button.show-filters span {
writing-mode: vertical-lr;
}
.app-filters.mx-widget.widget-right button.show-filters span {
writing-mode: vertical-lr;
rotate: 180deg;
}
.app-filters.mx-widget .mx-filter-list_container {
height: 100%;
overflow: auto;
}
.app-filters.mx-widget .mx-filter-list_container::-webkit-scrollbar {
background: #4fcaa0;
width: 3px;
}
.app-filters.mx-widget .mx-filter-list_container::-webkit-scrollbar-thumb {
background: #181717;
}
.app-filters.mx-widget .mx-sort-list_container {
background: #000000;
}
.app-filters.mx-widget .mx-sort-list_container .mx-filter-head h5 {
font-size: 12px;
color: #ffffff;
}
.app-filters.mx-widget .mx-sort-list_container .mx-filter-head span.expand {
color: #ffffff;
}
.app-filters.mx-widget .mx-sort-list_container ul.sort-list a {
font-size: 12px;
color: #ffffff;
}
}`;
document.getElementsByTagName("head")[0].appendChild(css_assets);
jQuery(function($) {
$.fn.extend({ //skrypcik podmieniający tekst A na B i odwrotnie
toggleText: function(a, b){
return this.text(this.text() == b ? a : b);
}
});
let appFilters = {
checkIfModulePresent: function() //sprawdzacz czy moduł opcji przeglądania jest obecny w widoku
{
if ($("#box_filter").length)
{
return true;
}
return false;
},
getCurrentDevice: function() //sprawdzacz czy to desktop czy mobile
{
let width = window.innerWidth;
if (width <= 767)
{
return "mobile";
}
else
{
return "desktop";
}
},
checkIfCurrentDeviceActive: function(current_device) //sprawdzacz czy desktop/mobile są aktywne w configu
{
let searched_value = current_device + "_active";
if (parseInt(config[searched_value]))
{
return true;
}
return false;
},
generateAppForCurrentDevice: function(current_device, filter_module) //główna funkcja generująca
{
let helpers = this.helpers;
let generateForDesktop = (module_code, parent_container, module_index) => {
helpers.generateFilterHeads(module_code, parseInt(config.desktop_atr_show));
if (parseInt(config.desktop_multimode))
{
module_code.addClass('multimode');
helpers.enableMultimode(module_code, current_device);
module_code.find('#filter_price .bottombuttons').remove();
}
else
{
helpers.showSelectedOnFilterClick(module_code);
}
if (parseInt(config['desktop_reset-button_show']))
{
helpers.enableReset(module_code, current_device);
}
helpers.countButtons(module_code);
module_code.insertAfter(parent_container.find(`> *:nth-child(${module_index})`));
if (!parseInt(config.desktop_atr_show))
{
helpers.applyGrids();
}
};
let generateForMobile = (module_code) => {
let widget_type = parseInt(config.widget_type);
helpers.generateFilterHeads(module_code, parseInt(config.atr_show));
helpers.wrapWithWidgetOrList(module_code, widget_type);
if (parseInt(config.mobile_sort))
{
helpers.enableSorting(module_code, widget_type);
}
if (parseInt(config.mobile_multimode))
{
module_code.addClass('multimode');
helpers.enableMultimode(module_code);
module_code.find('#filter_price .bottombuttons').remove();
}
else
{
helpers.showSelectedOnFilterClick(module_code);
}
if (parseInt(config['mobile_reset-button_show']))
{
helpers.enableReset(module_code);
}
helpers.countButtons(module_code);
let localization = helpers.getMobileLocalization();
localization.prepend(module_code);
if (!parseInt(config.atr_show))
{
helpers.applyGrids();
}
};
var filter_module_clone = filter_module.clone(true, false);
var filter_module_index = filter_module.index();
var filter_parent_container = filter_module.parents("div[class*='s-grid']");
filter_module_clone.addClass('app-filters');
if (filter_module_clone.find('.multiselect').length)
{
helpers.convertFromMultiselect(filter_module_clone);
}
else
{
filter_module_clone.find('.group-filter').addClass('mx-filter');
}
if (filter_module_clone.find('#filter_price').length)
{
helpers.remakePriceInputs(filter_module_clone);
}
if (current_device == 'desktop')
{
generateForDesktop(filter_module_clone, filter_parent_container, filter_module_index);
}
else if (current_device == 'mobile')
{
generateForMobile(filter_module_clone);
}
else
{
console.warn("[Zaawansowane filtry mobile + desktop] Nieznane urządzenie!");
}
helpers.manageMoreLessButtons(filter_module_clone);
if (parseInt(config.widget_borders))
{
filter_module_clone.find('.mx-filter').addClass('border');
}
},
helpers: { //funkcje do generatora
convertFromMultiselect: function(object) //usuwacz selectów
{
object.find('.multiselect').each(function()
{
$(this).off();
$(this).removeClass('multiselect').addClass('group group-filter mx-filter');
let group_name = $(this).find("> span").text().split(":")[0].trim();
$(this).prepend(`
${group_name}
`).find('> span').remove();
});
},
generateFilterHeads: function(object, flag_show_tabs) //generator nagłówka filtry i rozwijanych zakładek
{
object.find('.mx-filter').each(function()
{
let currentFilter = $(this);
currentFilter.find('h5').wrap('');
if (!flag_show_tabs)
{
return true;
}
currentFilter.find('.mx-filter-head').append('+');
currentFilter.addClass('expandable').on('click', '.mx-filter-head', function()
{
currentFilter.find('> ul').toggleClass('expanded');
currentFilter.find('span.expand').toggleText("+", "−");
if (currentFilter.find('> ul').is(':visible'))
{
currentFilter.find('> ul').slideUp(500);
}
else
{
currentFilter.find('> ul').slideDown({
start: function() {
$(this).css('display', 'grid');
}
}, 500);
}
});
});
},
remakePriceInputs: function(object, flag_enable_rangeSlider = false) //ulepszacz inputów ceny; flag_enable_rangeSlider - zmienna na przyszłe aktualizacje do wdrożenia slidera ceny
{
let priceFrom_text = object.find('li.priceinput span.fromto')[0].innerHTML.trim();
let priceTo_text = object.find('li.priceinput span.fromto')[1].innerHTML.trim();
object.find('li.priceinput span.fromto, li.priceinput br').remove();
object.find('li.priceinput input').slice(0, 1).addClass('price-input mx-from').attr('placeholder', priceFrom_text);
object.find('li.priceinput input').slice(1, 2).addClass('price-input mx-to').attr('placeholder', priceTo_text);
object.find('li.priceinput').on('click', 'button.btn', function()
{
let priceFrom = parseInt(object.find('li.priceinput input').slice(0, 1).val());
let priceTo = parseInt(object.find('li.priceinput input').slice(1, 2).val());
let old_module = $("#box_filter:not(.app-filters)");
if (!isNaN(priceFrom) || !isNaN(priceTo))
{
if (!isNaN(priceFrom))
{
old_module.find('li.priceinput input').slice(0, 1).val(priceFrom).trigger('change');
}
if (!isNaN(priceTo))
{
old_module.find('li.priceinput input').slice(1, 2).val(priceTo).trigger('change');
}
old_module.find('li.priceinput button.btn').trigger('click');
}
});
if (flag_enable_rangeSlider)
{
//slider
}
},
manageMoreLessButtons: function(object) { //ogarniacz przycisków więcej/mniej
if (!parseInt(config.show_moreless_buttons))
{
$(".mx-filter ul").addClass('all-visible');
return;
}
let show_less_text = this.getTranslation("less_button");
let show_more_text = this.getTranslation("more_button");
$(".mx-filter").each(function()
{
let currentFilter = $(this);
currentFilter.find('li.showmore').on('click', function()
{
currentFilter.find('li.none').toggleClass('really-hidden');
$(this).toggleText(show_more_text, show_less_text);
});
});
},
determineCurrentSortType: function(url = window.location.href) //sprawdza które sortowanie jest aktywne (/default/1, /default/2 itd.)
{
let url_part = url.split('/1/default/')[1];
if (typeof url_part === "undefined") //brak parametrów w URL - zwróć domyślne sortowanie
{
return 1;
}
let sort_id = url_part.slice(0, 1);
return sort_id;
},
getBaseURL: function(mode = "no_sort") //zwraca URL pełny URL kategorii bez filtrów; mode 'sort' = zwraca pełny URL z aktywnym sortowaniem
{
let sort_id = this.determineCurrentSortType();
let current_url = window.location.href.split(`/1/default/${sort_id}`);
if (mode === "sort")
{
return `${current_url[0]}/1/default/${sort_id}`;
}
return current_url[0];
},
getBaseURLParameters: function() //zwraca tablicę filtrów w URLu
{
let params_array = [];
let sort_id = this.determineCurrentSortType();
let current_url = window.location.href.split(`/1/default/${sort_id}/`);
if (current_url.length == 1)
{
return [];
}
let present_filters = current_url[1].split('/');
for (let param_index in present_filters)
{
param_index = parseInt(param_index);
let param = present_filters[param_index];
if (param.length == 1 || !isNaN(param)) //
{
continue;
}
if (param.includes('news') || param.includes('promotion')) //obsługa nowości i promocji
{
params_array.push(`${param}/0`);
}
else if (param.includes('priceto') || param.includes('pricefrom')) //obsługa cen - wyciąganie kolejnego indeksu z tablicy; końcowa forma: priceto/x/ i pricefrom/x
{
let price_value = present_filters[param_index + 1];
params_array.push(`${param}/${price_value}`); //wyciąganie kolejnych indeksów z tablicy; końcowa forma: priceto/x/pricefrom/x
}
else
{
params_array.push(`${param}/1`);
}
}
return params_array;
},
enableMultimode: function(object, current_device = "mobile") //funkcja włączająca multiwybór filtrów bez refresha strony
{
let checkIfInArray = (array = [], attribute) => { //sprawdacz czy w tablicy filtrów do wygenerowania ten już jest i zwracający tablicę aktywnych filtrów dla danej grupy; jak tak - usuń z tablicy; jak nie - dodaj doń
console.log(attribute);
if (typeof attribute === 'undefined')
{
return array;
}
if (attribute.includes('pricefrom') || attribute.includes('priceto')) //wyjątek dla cen - zastąp stary atrybut pricefrom/priceto nowym zamiast dodawania nowego
{
let attribute_name = attribute.split('/')[0];
let attribute_index = array.findIndex(element => element.includes(attribute_name));
if (attribute_index !== -1) //atrybut o tym ID istnieje - usuń lub nadpisz
{
if (attribute == array[attribute_index]) //atrybut i jego wartość są takie same jak obecne w tablicy - usuń
{
array.splice(attribute_index, 1);
}
else //atrybut o tym ID już istnieje ale ma inną wartość - nadpisz
{
array[attribute_index] = attribute;
}
}
else //atrybut o tym ID nie istnieje - dodaj
{
array.push(attribute);
}
}
else if (array.includes(attribute))
{
array.splice(array.indexOf(attribute), 1);
}
else
{
array.push(attribute);
}
return array;
};
let generateURL = (selected_filters) => { //generator URLu na podstawie zaznaczonych filtrów
let sort_id = this.determineCurrentSortType();
let new_url = this.getBaseURL() + `/1/default/${sort_id}/`;
for (let filter_id in selected_filters)
{
let filter_values = selected_filters[filter_id];
for (let filter of filter_values)
{
new_url += `${filter}/`;
}
}
return new_url;
};
let config_optionName = `${current_device}_multimode-showCategoryFilter`;
if (parseInt(config[config_optionName])) //obsługa filtra kategorii
{
object.find('.mx-filter#filter, .mx-filter[id*=filter_category]').addClass('multimode-active');
}
else
{
object.find('.mx-filter#filter, .mx-filter[id*=filter_category]').hide();
}
let selectedFilters = {};
object.find('.mx-filter:not(#filter, [id*=filter_category])').each(function()
{
let currentFilterGroup = $(this);
let currentFilterGroup_id = currentFilterGroup.attr('id');
if (!currentFilterGroup.find('ul').children().length) //pomiń jeżeli nie ma żadnego filtra
{
return true;
}
if ($(this).find('li.selected').length)
{
$(this).find(".mx-filter-head span.expand").toggleText("+", "−");
$(this).find('ul').addClass('expanded').css('display', 'grid');
}
selectedFilters[currentFilterGroup_id] = [];
currentFilterGroup.find("ul > li").each(function()
{
let currentFilter = $(this);
let filter_link_part = currentFilter.find('a').attr('data-link-part');
if (currentFilter.hasClass('selected'))
{
if (currentFilterGroup_id === 'filter_price' && (filter_link_part.includes('pricefrom') && filter_link_part.includes('priceto'))) //wyjątek dla cen - rozbij link na 2 fragmenty jeżeli jest i pricefrom i priceto
{
let new_filter_link_part = filter_link_part.split('/');
checkIfInArray(selectedFilters[currentFilterGroup_id], `${new_filter_link_part[0]}/${new_filter_link_part[1]}`);
checkIfInArray(selectedFilters[currentFilterGroup_id], `${new_filter_link_part[2]}/${new_filter_link_part[3]}`);
}
else
{
selectedFilters[currentFilterGroup_id] = checkIfInArray(selectedFilters[currentFilterGroup_id], filter_link_part);
}
}
currentFilter.on('click', 'a', function(event) //obsługa logiki przełączania aktywnych filtrów
{
event.preventDefault();
currentFilter.toggleClass('selected');
if (filter_link_part.includes('pricefrom') && filter_link_part.includes('priceto')) //wyjątek dla pełnego zakresu cen
{
filter_link_part_array = filter_link_part.split('/');
let prices = [];
prices.push(`${filter_link_part_array[0]}/${filter_link_part_array[1]}`); //pricefrom
prices.push(`${filter_link_part_array[2]}/${filter_link_part_array[3]}`); //priceto
for (let price of prices)
{
selectedFilters[currentFilterGroup_id] = checkIfInArray(selectedFilters[currentFilterGroup_id], price);
}
return true;
}
selectedFilters[currentFilterGroup_id] = checkIfInArray(selectedFilters[currentFilterGroup_id], filter_link_part);
});
if (currentFilterGroup_id === 'filter_price') //wyjątek dla inputów cenowych
{
currentFilterGroup.off('change');
currentFilterGroup.on('change', 'input.price-input', function()
{
let name = '';
if ($(this).hasClass('mx-from'))
{
name = 'pricefrom';
}
else if ($(this).hasClass('mx-to'))
{
name = 'priceto';
}
let value = parseInt($(this).val());
selectedFilters[currentFilterGroup_id] = checkIfInArray(selectedFilters[currentFilterGroup_id], `${name}/${value}`);
});
}
});
});
if (!object.find('.mx-buttons').length)
{
if (current_device == "mobile")
{
object.find('.mx-filter-list_container .filter-list').append("");
}
else
{
object.append("");
}
}
let multimode_button_text = this.getTranslation('multimode-button_text');
object.find('.mx-buttons').append(`
`).on('click', 'button.multimode-button', function()
{
window.location.href = generateURL(selectedFilters);
});
},
showSelectedOnFilterClick: function(object) { //po kliknięciu na filtr daje mu klase "selected" coby checkbox był zaznaczony
object.find('.mx-filter li').each(function()
{
let currentFilter = $(this);
currentFilter.on('click', 'a', function()
{
currentFilter.toggleClass('selected');
});
});
},
enableReset: function(object, current_device = "mobile") { //włączacz przycisku resetowania aktywnych filtrów
let $this = this;
if (!object.find('.mx-buttons').length)
{
if (current_device == "mobile")
{
object.find('.mx-filter-list_container .filter-list').append("
");
}
else
{
object.append("
`).on('click', 'button.show-filters', function()
{
$(this).find('span.expand').toggleText("+", "−");
$(".filter-list").slideToggle(500);
});
}
else if (widget_type == 2 || widget_type == 3) //widget wysuwany
{
let widget_side = "left";
if (widget_type == 3)
{
widget_side = "right";
}
object.addClass(`mx-widget widget-${widget_side}`).find('> div').wrapAll("
");
object.append(`
`).on('click', 'button.show-filters', function()
{
object.toggleClass('widget-opened');
});
}
},
enableSorting: function(object, widget_type) //włącza możliwość sortowania produktów na mobile
{
let $this = this;
if (!$(".sort-and-view select.gotourl").length)
{
console.warn("[Zaawansowane filtry mobile + desktop] Moduł sortowania wyłączony, pomijanie generowania listy.");
return;
}
let sort_list = {};
$(".sort-and-view select.gotourl option").each(function()
{
let filter_name = $(this).text();
let url = $(this).attr('value').split('/1/default/');
if (url.length == 1) //domyślny tryb sortowania
{
sort_list[filter_name] = '/1/default/1';
}
else
{
if (url[1].length > 1) //adres url z aktywnymi filtrami
{
let filter_parameter = url[1].split('/')[0];
sort_list[filter_name] = (`/1/default/${filter_parameter}`);
}
else
{
sort_list[filter_name] = `/1/default/${url[1]}`;
}
}
});
if (Object.keys(sort_list).length <= 1)
{
console.warn("[Zaawansowane filtry mobile + desktop] Brak innych opcji sortowania, pomijanie generowania listy.");
return;
}
let currentSortIsActive = (sort_url) => {
let current_sort_id = parseInt(sort_url[sort_url.length - 1]);
let url_sort_id = parseInt($this.determineCurrentSortType());
if (current_sort_id == url_sort_id)
{
return true;
}
return false;
}
let mobile_sort_button_text = this.getTranslation('mobile_sort-button_text');
let base_url = $this.getBaseURL("sort");
let url_parameters = $this.getBaseURLParameters();
let sort_html = "";
let prepend_location = "";
if (widget_type == 1 || widget_type == 4) //lista
{
sort_html = `
`;
}
else if (widget_type == 2 || widget_type == 3) //widget wysuwany
{
prepend_location = ".innerbox";
sort_html = `
`;
}
if (prepend_location.length)
{
object.find(prepend_location).prepend(sort_html);
}
else
{
object.prepend(sort_html);
}
object.find('.mx-sort-list_container.expandable').on('click', 'button.show-sort', function()
{
$(this).find('span.expand').toggleText("+", "−");
object.find('.sort-list').slideToggle(500);
});
let target_node = object.find('.mx-sort-list_container .sort-list');
for (let sort_name in sort_list)
{
let sort_url = sort_list[sort_name];
let current_sort_url;
if (url_parameters.length == 0 && !base_url.includes('1/default')) //jeśli url nie ma żadnych aktywnych filtrów i sortowania
{
current_sort_url = `${base_url}${sort_url}`;
if (sort_url.includes('/default/1'))
{
target_node.append(`
${sort_name}`);
}
else
{
target_node.append(`
${sort_name}`);
}
}
else if (url_parameters.length == 0 && base_url.includes('1/default')) //jeśli url nie ma żadnych aktywnych filtrów ale ma włączenie sortowanie
{
let mod_base_url = base_url.split('/1/default/')[0];
current_sort_url = `${mod_base_url}${sort_url}`;
target_node.append(`
${sort_name}`);
}
else if (url_parameters.length > 0) //url ma aktywne filtry = włączone sortowanie
{
current_sort_url = `${base_url}${sort_url}/${url_parameters.join('/')}`;
target_node.append(`
${sort_name}`);
}
}
},
getMobileLocalization: function() //sprawdza ustawiony typ widgetu i zwraca lokalizację do appenda
{
if (parseInt(config.widget_type) == 4)
{
if ($(config.mobile_container).length)
{
return $(config.mobile_container);
}
else
{
console.warn("[Zaawansowane filtry mobile + desktop] Wskazany selektor kontenera nie został znaleziony! Umieszczanie modułu filtrów w domyślnej lokalizacji.");
return $(".s-row .centercol");
}
}
return $(".s-row .centercol");
},
applyGrids: function() //inteligetny gridowacz to on
{
var filter_width = $(".mx-filter-list_container").width();
if ($(".app-filters .filter-list").css('display') === 'none' && (parseInt(config.widget_type) == 1 || parseInt(config.widget_type) == 4))
{
$(".app-filters .filter-list").show();
}
$(".app-filters").find('.mx-filter').each(function()
{
let currentFilter = $(this);
let biggest_attribute_width = 0;
currentFilter.find('ul li:not(.showmore)').each(function()
{
let current_attribute_width = $(this).find('a').outerWidth() + 10; //grid-gap uwzględniony
if (current_attribute_width > biggest_attribute_width)
{
biggest_attribute_width = current_attribute_width;
}
});
let max_columns = filter_width / biggest_attribute_width | 0;
let attribute_count = currentFilter.find('ul li:not(.showmore)').length;
if (max_columns > attribute_count) //jeżeli jest mniej elementów niż może się pomieścić w jednym rzędzie to po co je tak ściskać?
{
max_columns = attribute_count
}
currentFilter.find('ul').addClass(`column-${max_columns}`);
});
if ($(".app-filters .filter-list").css('display') !== 'none' && (parseInt(config.widget_type) == 1 || parseInt(config.widget_type) == 4))
{
$(".app-filters .filter-list").hide();
}
}
},
init: function() //włączacz apki
{
var $this = this;
if (!$this.checkIfModulePresent())
{
//console.warn("[Zaawansowane filtry mobile + desktop] Moduł Opcji Przeglądania nieobecny na tej stronie; wstrzymywanie działania aplikacji.");
return false;
}
let initialized_views = {
'desktop': false,
'mobile': false
};
var filter_module = $("#box_filter:not(.app-filters)");
filter_module.hide();
$(window).on('resize', function()
{
let current_device = $this.getCurrentDevice();
if ($this.checkIfCurrentDeviceActive(current_device) && !initialized_views[current_device])
{
initialized_views[current_device] = true;
$this.generateAppForCurrentDevice(current_device, filter_module);
}
else if (!$this.checkIfCurrentDeviceActive(current_device))
{
filter_module.removeAttr('style');
}
if (initialized_views.desktop && initialized_views.mobile)
{
filter_module.remove();
}
}).trigger('resize');
}
};
appFilters.init();
});