PageSourceSearch

https://paparoblo.ru/wp-content/plugins/woofilter-pro/woofilterpro…frontend.woofilters.pro.js?ver=6e158672453c

js paparoblo.ru collected 2026-10-08 12:46:26 UTC 51,166 bytes, 1,262 lines download raw bytes

1(function ($, app) {
2"use strict";
3	$(document).ready(function() {
4		var WpfFrontendPage = window.wpfFrontendPage;
5
6		function wpfEventsFrontendPro() {
7			//Mark selected
8			jQuery('.wpfFilterWrapper input').on('change', function(e) {
9				var $input = jQuery(this);
10				WpfFrontendPage.styleCheckboxSelected($input.closest('.wpfFilterWrapper'));
11
12				if (!$input.is('input:checked')) {
13					WpfFrontendPage.autoUnfoldByCheck($input);
14				}
15			});
16			//Price Filter
17			jQuery('.wpfFilterWrapper[data-filter-type="wpfPrice"]').each(function () {
18				WpfFrontendPage.initIonSlider(jQuery(this));
19			});
20			jQuery('.wpfPriceRangeCustom input').on('change', function(e) {
21				e.preventDefault();
22				var li = jQuery(this).closest('li');
23				li.attr('data-range', li.find('input[name="wpf_custom_min"]').val() + ',' + li.find('input[name="wpf_custom_max"]').val());
24			});
25			jQuery('.wpfPriceRangeCustom i').on('click', function(e) {
26				e.preventDefault();
27				var $this = jQuery(this),
28					wrapper = $this.closest('.wpfFilterWrapper'),
29					input = wrapper.find('.wpfFilterContent .wpfCheckbox input');
30				
31				if (typeof wpfFrontendPage.setCurrentLocation == 'function') wpfFrontendPage.setCurrentLocation();
32
33				input.prop('checked', false);
34				$this.closest('li').find('.wpfCheckbox input').prop('checked', true);
35				if (typeof WpfFrontendPage.moveCheckedToTop != 'undefined') {
36					WpfFrontendPage.moveCheckedToTop($this.closest('li').find('.wpfCheckbox input'));
37				}
38				wrapper.removeClass('wpfNotActive');
39				WpfFrontendPage.setSelectedParamsPro(wrapper);
40
41				WpfFrontendPage.filtering($this.closest('.wpfMainWrapper'));
42			});
43			jQuery('.wpfFilterWrapper .wpfSearchWrapper button').on('click', function (e) {
44				e.preventDefault();
45				var wrapper = jQuery(this).closest('.wpfFilterWrapper');
46				if (typeof wpfFrontendPage.setCurrentLocation == 'function') wpfFrontendPage.setCurrentLocation();
47
48				if (wrapper.find('.wpfSearchFieldsFilter').val() == '') {
49					WpfFrontendPage.clearFilters(wrapper);
50				} else {
51					wrapper.removeClass('wpfNotActive');
52					wrapper.find('.wpfFilterContent li:not(.wpfSearchHidden) .wpfCheckbox input').prop('checked', true);
53					WpfFrontendPage.setSelectedParamsPro(wrapper);
54				}
55				WpfFrontendPage.filtering(wrapper.closest('.wpfMainWrapper'));
56			});
57
58			//Category Filter
59			jQuery('.wpfFilterWrapper[data-collapsible="1"]').each(function() {
60				var categoryFilter = jQuery(this);
61				categoryFilter.find('.wpfCollapsible').on('click', function (e) {
62					e.preventDefault();
63					let $this = $(this),
64						parentLi = $this.closest('li');
65
66					setTimeout(function () {
67						let $icon = $this.find('i.fa, svg');
68
69						if ($icon.length) {
70							WpfFrontendPage.collapsibleToggle($icon, WpfFrontendPage.getIcons($icon), parentLi);
71						}
72					}, 100);
73
74					return;
75				});
76				categoryFilter.find('.wpfCollapsible').each(function() {
77					if ($(this).closest('li').find('ul input:checked').length) {
78						$(this).trigger('click');
79					}
80				});
81			});
82
83			//Rating Filter
84			if(jQuery('.wpfFilterWrapper .wpfStarsRating').length) {
85				var starFilter = jQuery('.wpfFilterWrapper .wpfStarsRating');
86				if(starFilter.attr('data-display-type') == 'linestars') {
87					var	starColor = starFilter.attr('data-star-color'),
88						leerColor = starFilter.attr('data-leer-color'),
89						addText = starFilter.attr('data-add-text'),
90						addText5 = starFilter.attr('data-add-text5'),
91						exactValues = starFilter.attr('data-exact-values') || 0;
92					starFilter.find('input.wpfStarInput').on('change',function() {
93						var checkedItem = starFilter.find('input.wpfStarInput:checked');
94						starFilter.find('.wpfStarsAdditional').text(!exactValues ? ( checkedItem.length && checkedItem.attr('id') == 'wpfLineStar5' ? addText5 : addText ) : checkedItem.data('label'));
95					});
96
97				} else {
98					starFilter.find('input.wpfStarInput').on('change',function() {
99						starFilter.find('.wpfStarsRatingBlock').removeClass('wpfLineChecked');
100						starFilter.find('input.wpfStarInput:checked').closest('.wpfStarsRatingBlock').addClass('wpfLineChecked');
101					});
102				}
103				starFilter.show();
104			}
105
106			//SearchText Filter
107			var searchTextFilter = jQuery('.wpfFilterWrapper[data-filter-type="wpfSearchText"]');
108			if(searchTextFilter) {
109				var autoComplete = parseInt(searchTextFilter.attr('data-autocomplete'));
110				if(!isNaN(autoComplete) && autoComplete > 0) {
111					var input = searchTextFilter.find('input'),
112						filterId = searchTextFilter.closest('.wpfMainWrapper').data('filter'),
113						oneField = autoComplete == 1;
114
115					input.autocomplete({
116						source: function (request, response) {
117							var autocomleate = [];
118							jQuery.sendFormWpf({
119								data: {
120									mod: 'woofilterpro',
121									action: 'autocompliteSearchText',
122									keyword: input.val(),
123									filterId: filterId
124								},
125								onSuccess: function(result) {
126									if(!result.error && result.data && result.data.autocompleteData) {
127										var data = result.data.autocompleteData;
128
129										for(var option in data) {
130											for(var optionName in data[option]) {
131												var keyword = data[option][optionName];
132												autocomleate.push({label: (oneField ? keyword : optionName + ': ' + keyword), value: keyword});
133											}
134										}
135									}
136									response(autocomleate);
137								}
138							});
139						},
140						select: function(event, ui) {
141							input.val(ui.item.value);
142							WpfFrontendPage.eventChangeFilter(event);
143						},
144						minLength: 2,
145						delay: 10
146					});
147
148				}
149
150				searchTextFilter.find('input').focusout(function (e) {
151					var _this = jQuery(e.target),
152						mainWrapper = _this.closest('.wpfMainWrapper'),
153						filterWrapper = _this.closest('.wpfFilterWrapper'),
154						disable_autofiltering = WpfFrontendPage.getFilterParam('f_disable_autofiltering', mainWrapper, filterWrapper);
155					if (!disable_autofiltering) {
156						WpfFrontendPage.eventChangeFilter(e);
157					}
158				});
159			}
160
161			//Attribute Filter
162			jQuery('.wpfFilterWrapper .wpfColorsFilterHor label.icon').tooltipster().attr('title', '');
163			jQuery('.wpfFilterWrapper .wpfColorsFilter label.icon').each(function(){
164					jQuery(this).css('color', wpfGetColorText(jQuery(this).data('color')));
165			});
166			jQuery('.wpfFilterWrapper[data-filter-type="wpfAttribute"][data-display-type="slider"]').each(function () {
167				var skin = jQuery(this).attr('data-price-skin');
168				if (skin === 'default') {
169					// deprecated functionality
170					WpfFrontendPage.initDefaultSlider(jQuery(this), 'attr');
171				} else {
172					WpfFrontendPage.initIonSlider(jQuery(this), 'attr');
173				}
174			});
175
176			// Buttons/text-type filters
177			jQuery('.wpfButtonsFilter input, .wpfTextFilter input').on('change', function(e){
178				var input = jQuery(this),
179					wrapper = input.closest('li'),
180					filterWrapper = input.closest('.wpfFilterWrapper'),
181					type = filterWrapper.data('display-type');
182				if(input.is(':checked')) {
183					if ( type == 'buttons' ) {
184						input.closest('li').addClass('wpfTermChecked');
185					}
186					input.closest('label').find('.wpfValue').addClass('wpfTermChecked');
187				} else {
188					if ( type == 'buttons' ) {
189						input.closest('li').removeClass('wpfTermChecked');
190					}
191					input.closest('label').find('.wpfValue').removeClass('wpfTermChecked');
192				}
193			});
194			jQuery('.wpfButtonsFilter li').on('click', function(e){
195				if(jQuery(this).hasClass('wpfOptionDisabled')) return false;
196				var input = jQuery(this).find('input'),
197					mainWrapper = input.closest('.wpfMainWrapper'),
198					filterWrapper = input.closest('.wpfFilterWrapper'),
199					isMuulti = WpfFrontendPage.getFilterParam('f_buttons_multiselect', mainWrapper, filterWrapper);
200
201				if (isMuulti) {
202					input.prop('checked', !input.is(':checked')).trigger('change');
203				} else {
204					filterWrapper.find('input').each(function() {
205						if (jQuery(this).is(':checked')) {
206							jQuery(this).prop('checked', false).trigger('change');
207						}
208					});
209					input.prop('checked', !input.is(':checked')).trigger('change');
210				}
211			});
212			jQuery('.wpfTextFilter input:checked').each(function(){
213				jQuery(this).closest('label').find('.wpfValue').addClass('wpfTermChecked');
214			});
215
216			jQuery('.wpfMainWrapper').each(function () {
217				var mainWrapper = jQuery(this),
218					settings = WpfFrontendPage.getFilterMainSettings(mainWrapper),
219					hideButton = mainWrapper.find('.wfpHideButton');
220				// Selected Parameters
221				if(settings && settings.settings.display_selected_params === '1') {
222					var id = mainWrapper.data('viewid').split('_')[0],
223						wrapper = jQuery('<div class="wpfSelectedParameters"></div>'),
224						wrapperExternal = jQuery('.wpfSelectedParameters[data-filter="' + id + '"]');
225					if (wrapperExternal.length) {
226						wrapper = wrapperExternal;
227					}
228
229					WpfFrontendPage.selectedParamsColor = wpfLightenDarkenColor
229(mainWrapper.css('background-color'), -10);
230					mainWrapper.find('.wpfFilterWrapper:not(.wpfNotActive):not(.wpfHidden)').each(function () {
231						var filter = jQuery(this),
232							filterType = filter.attr('data-filter-type'),
233							filterName = filter.attr('data-get-attribute'),
234							filterLogic = filter.attr('data-query-logic'),
235							params = WpfFrontendPage.getFilterOptionsByType(filter, filterType);
236							params = WpfFrontendPage.filterParamByParentPro(settings, params);
237						WpfFrontendPage.addSelectedParamsPro(wrapper, params, filterType, filterName, filterLogic);
238					});
239
240					if (settings.settings.selected_params_clear === '1') {
241						var word = wpfTraslate.ClearAll ? wpfTraslate.ClearAll : settings.settings.selected_clean_word;
242						wrapper.append(jQuery('<div class="wpfSelectedParametersClear">' + (word ? word : 'Clear All') + '</div>'));
243					}
244
245					if (wrapper.find('.wpfSelectedParameter').length == 0) {
246						wrapper.addClass('wpfHidden');
247					} else {
248						wrapper.removeClass('wpfHidden');
249					}
250
251					if (!wrapperExternal.length) {
252						if (settings.settings.selected_params_position === 'bottom') {
253							mainWrapper.append(wrapper);
254						} else if (hideButton.length) {
255							wrapper.insertAfter(hideButton);
256						} else {
257							mainWrapper.prepend(wrapper);
258						}
259					}
260				}
261				mainWrapper.find('.wpfFilterWrapper').each(function() {
262					var wrapper = jQuery(this);
263
264					//ABC index
265					if(wrapper.attr('data-abc') == '1') {
266						wrapper.find('.wpfFilterVerScroll').each(function() {
267							var abc = '',
268								verBlock = jQuery(this);
269							verBlock.children('li[data-parent="0"]').each(function(){
270								var li = jQuery(this),
271									name = li.find('.wpfValue .wpfFilterTaxNameWrapper').html(),
272									letter = name.substr((name.substring(0, 1) == '<' ? name.indexOf('>') + 1 : 0), 1).toUpperCase();
273
274								if(abc.indexOf(letter) == -1) {
275									jQuery('<li class="wpfAbcLetter" data-letter="'+letter+'">'+letter+'</li>').insertBefore(li);
276									abc += '<div class="wpfAbcLink" data-letter="'+letter+'">'+letter+'</div>';
277								}
278								li.attr('data-letter', letter);
279							});
280							if(abc != '') jQuery('<div class="wpfAbcToggle">'+(wpfTraslate.AlphabeticalIndex || 'Alphabetical index')+'</div><div class="wpfAbcLinks wpfHidden">'+abc+'</div>').insertBefore(verBlock);
281						});
282						WpfFrontendPage.wpfShowHideFiltersAttsPro(wrapper);
283					}
284
285					WpfFrontendPage.styleCheckboxSelected(wrapper);
286
287					// Show More 
288					setTimeout(function() {
289						wrapper.find('.wpfFilterVerScroll').each(function () {
290							WpfFrontendPage.initShowMore(jQuery(this));
291						});
292					}, 100);
293				});
294				if(hideButton.length && hideButton.attr('data-is-open') === '0') {
295					hideButton.siblings('div:not(.wpfPreviewLoader):not(.wpfLoaderLayout)').addClass('wpfHideFilter');
296				} 
297
298				WpfFrontendPage.getHideButtons(mainWrapper, settings);
299				var width = $( window ).width(),
300					height = $( window ).height();
301				jQuery( window ).resize(function() {
302					if ( width !== $( window ).width() || height !== $( window ).height()) {
303						WpfFrontendPage.getHideButtons(mainWrapper, settings);
304					}
305				});
306			});
307			jQuery('.wpfMainWrapper .wpfAbcToggle').on('click', function(e){
308				e.preventDefault();
309				var wrapper = jQuery(this).closest('.wpfFilterWrapper').find('.wpfAbcLinks');
310				if(wrapper.hasClass('wpfHidden')) wrapper.removeClass('wpfHidden');
311				else wrapper.addClass('wpfHidden');
312			});
313			jQuery('.wpfMainWrapper .wpfAbcLink').on('click', function(e){
314				e.preventDefault();
315				var link = jQuery(this),
316					wrapper = link.closest('.wpfFilterWrapper').find('.wpfFilterVerScroll'),
317					letter = wrapper.find('.wpfAbcLetter[data-letter="'+link.attr('data-letter')+'"]:first');
318				if(letter.hasClass('wpfMoreHidden')) wrapper.find('.wpfShowMoreWrapper').trigger('click');
319				//wrapper.find('.wpfAbcLetter[data-letter="'+link.attr('data-letter')+'"]').get(0).scrollIntoView(true);
320				//wrapper.scrollTo(wrapper.find('.wpfAbcLetter[data-letter="'+link.attr('data-letter')+'"]'));
321				wrapper.stop().animate({
322					scrollTop: wrapper.find('.wpfAbcLetter[data-letter="'+link.attr('data-letter')+'"]:first').offset().top-wrapper.find('li:first').offset().top
323				}, 500);
324				//wrapper.scrollTo('.wpfAbcLetter[data-letter="'+link.attr('data-letter')+'"]', 1000);
325			});
326
327			jQuery('body').off('click', '.wpfShowMoreWrapper').on('click', '.wpfShowMoreWrapper', function() {
328				var more = jQuery(this),
329					block = more.closest('.wpfFilterVerScroll').attr('data-open-more', 1);
330				if (more.attr('data-full-opening') == '1') block.css({'maxHeight': 'none'});
331
332				block.find('li').removeClass('wpfMoreHidden');
333				more.remove();
334				block.append(jQuery('<li class="wpfShowFewerWrapper"> - ' + wpfTraslate.ShowFewer + ' </li>'));
335			});
336			jQuery('body').off('click', '.wpfShowFewerWrapper').on('click', '.wpfShowFewerWrapper', function() {
337				WpfFrontendPage.initShowMore(jQuery(this).closest('.wpfFilterVerScroll').attr('data-open-more', 0));
338			});
339
340			jQuery('body').off('click', '.wpfSelectedParameters .wpfSelectedDelete').on('click', '.wpfSelectedParameters .wpfSelectedDelete',  function(e){
341				e.preventDefault();
342				var param = jQuery(this).closest('.wpfSelectedParameter'),
343					filterId = param.closest('.wpfSelectedParameters').data('filter'),
344					paramName = param.attr('data-filter-name'),
345					paramType = param.attr('data-filter-type'),
346					mainWrapper = filterId ? jQuery('.wpfMainWrapper[data-filter="' + filterId + '"]') : param.closest('.wpfMainWrapper');
347				if (typeof wpfFrontendPage.setCurrentLocation == 'function') wpfFrontendPage.setCurrentLocation();
348				if(param.attr('data-is-one') == '1') {
349					WpfFrontendPage.clearFilters(mainWrapper.find('.wpfFilterWrapper[data-filter-type="'+paramType+'"]'));
350					WpfFrontendPage.filtering(mainWrapper);
351				} else {
352					mainWrapper.find('.wpfFilterWrapper[data-filter-type="'+paramType+'"][data-get-attribute="'+paramName+'"]').each(function() {
353						var filter = jQuery(this);
354						if(filter.attr('data-display-type') == 'mul_dropdown') {
355							filter.find('option[data-term-id="'+param.attr('data-key')+'"]').removeAttr('selected').trigger('change');
356							filter.find('select.jqmsLoaded').multiselect('reload');
357						} else {
358							var input = filter.find('[data-term-id="'+param.attr('data-key')+'"]');
359							if(input.length && !input.is('input')) input = input.find('input');
360							if(input.length) input.prop('checked', false).trigger('change');
361						}
362					});
363				}
364			});
365			jQuery('body').off('click', '.wpfSelectedParameters .wpfSelectedParametersClear').on('click', '.wpfSelectedParameters .wpfSelectedParametersClear',  function(e){
366				e.preventDefault();
367				var filterId = jQuery(this).closest('.wpfSelectedParameters').data('filter'),
368					$filterWrapper = filterId ? jQuery('.wpfMainWrapper[data-filter="' + filterId + '"]') : jQuery(this).closest('.wpfMainWrapper');
369				if (typeof wpfFrontendPage.setCurrentLocation == 'function') wpfFrontendPage.setCurrentLocation();
370				WpfFrontendPage.clearFilters($filterWrapper.find('.wpfFilterWrapper'), true);
371				WpfFrontendPage.filtering($filterWrapper);
372			});
373
374			// Hide button
375			var hideButtonEvent = document.createEvent('Event');
376			hideButtonEvent.initEvent('wpfHideButtonClick', false, true); 
377			jQuery('body').off('click', '.wfpHideButton').on('click', '.wfpHideButton',  function(e) {
378				e.preventDefault();
379				var button = jQuery(this),
380					icon = button.find('i.fa, svg'),
381					up = 'fa-chevron-up',
382					down = 'fa-chevron-down',
383					mainWrapper = button.closest('.wpfMainWrapper');
384
385				if (mainWrapper.length) {
386					$('html,body').animate({'scrollTop': mainWrapper.offset().top - 30}, 500);
387				}
388
389				if (icon.length) {
390					if (icon.hasClass(up)) {
391						var toggle = 'up';
392					} else {
393						var toggle = 'down';
394					}
395					WpfFrontendPage.toggleHideFiltersButton(button, toggle);
396				}
397			});
398
399			// add skin css to attribute and price slider type filter
400			jQuery('.wpfFilterWrapper[data-skin-css]').each(function() {
401				var css = jQuery(this).attr('data-skin-css'),
402					filterBlockId = jQuery(this).closest('.wpfMainWrapper').attr('data-filter'),
403					filterId = jQuery(this).attr('id'),
404					styleBlockId = '#' + filterId + '_style';
405
406					if (filterBlockId && filterId) {
407						var selector = '.wpfMainWrapper[data-filter="' + filterBlockId + '"] #' + filterId;
408						// we user it for override after action
409						var selectorAction = 'div.wpfMainWrapper[data-filter="' + filterBlockId + '"] #' + filterId;
410
411						css = css.split('filter_admin_area_id_placeholder').join(selectorAction);
412
413						jQuery(styleBlockId).html(css);
414					}
415			});
416
417			document.dispatchEvent(hideButtonEvent);
418
419			//change slider filters
420			jQuery('.wpfFilterWrapper[data-filter-type="wpfAttribute"][data-display-type="slider"]').on('wpfAttrSliderChange', function(event, sliderData) {
421				var filter = jQuery(this),
422					wrapper = sliderData.input.closest('.wpfFilterWrapper');
423
424				filter.removeClass('wpfNotActive');
425				wrapper.find('#wpfMinAttrNum').val(sliderData.from_value);
426				wrapper.find('#wpfMaxAttrNum').val(sliderData.to_value);
427				wrapper.find('#wpfMinAttrNum').attr('data-min-numeric-value', sliderData.from);
428				wrapper.find('#wpfMaxAttrNum').attr('data-max-numeric-value', sliderData.to);
429			});
430
431			jQuery('body').on('click', '.wpfFilterTitle', function(e){
432				var curTitle = jQuery(this);
433				setTimeout(function () {
434					let $icon = curTitle.find('i.fa, svg');
435					if ($icon.length) {
436						let icons = WpfFrontendPage.getIcons($icon);
437						if (!icons.collapsed) {
438							var wrapper = curTitle.closest('.wpfMainWrapper'),
439								settings = WpfFrontendPage.getFilterMainSettings(wrapper);
440							if (settings.settings.only_one_filter_open === '1') {
441								var curBlockId = curTitle.closest('.wpfFilterWrapper').attr('id');
442								wrapper.find('.wpfFilterTitle .' + icons.minusIcon).each(function () {
443									var _this = jQuery(this),
444										block = _this.closest('.wpfFilterWrapper');
445									if (block.attr('id') != curBlockId) {
446										WpfFrontendPage.closeFilterToggle(_this, block.find('.wpfFilterContent'), true, icons);
447									}
448								});
449							}
450						}
451					}
452				}, 100);
453			});
454
455			// display perfect brand description
456			var brandDescription = jQuery('.wpfFilterWrapper .data-brand-description').html();
457			if (typeof brandDescription !== 'undefined') {
458				var loopContainer = jQuery('ul.products');
459				loopContainer.before('<div class="brand-description">' + brandDescription + '</div>');
460			}
461
462
463			jQuery('.wpfFilterWrapper[data-filter-type="wpfPrice"]').on('wpfPriceChange', function () {
464				setCurrentOrderKey(jQuery(this));
465			});
466
467			jQuery('.wpfFilterWrapper').on('change', function () {
468				setCurrentOrderKey(jQuery(this));
469			});
470
471			document.addEventListener('wpfAjaxSuccess', function () {
472
473				jQuery('.wpfMainWrapper').each(function () {
474					var mainWrapper = jQuery(this),
475						settings = WpfFrontendPage.getFilterMainSettings(mainWrapper).settings;
476
477					if (settings.open_one_by_one === '1') {
478						var currentOrderKey = mainWrapper.data('current-order-key');
479
480						if (typeof currentOrderKey !== 'undefined') {
481							var next = jQuery('.wpfFilterWrapper[data-order-key=' + currentOrderKey + ']', mainWrapper).next('.hideUntilPrevSelected');
482
483							if (next.length) {
484								var worked = false;
485
486								jQuery('.hideUntilPrevSelected', mainWrapper).each(function () {
487
488									if (worked) {
489										return;
490									}
491
492									jQuery(this).removeClass('hideUntilPrevSelected');
493
494									if (jQuery(this).css('display') === 'block') {
495										worked = true;
496									}
497
498								});
499
500							}
501
502							mainWrapper.removeData('current-order-key');
503						}
504
505					}
506
507				});
508
509			});
510		}
511
512		function setCurrentOrderKey(_this) {
513			var mainWrapper = _this.closest('.wpfMainWrapper'),
514				settings = WpfFrontendPage.getFilterMainSettings(mainWrapper).settings;
515			if (settings.open_one_by_one === '1') {
516				mainWrapper.data('current-order-key', _this.data('order-key'));
517			}
518		}
519
520		WpfFrontendPage.constructor.prototype.collapsibleToggle = (function($icon, icons, parentLi) {
521			var filterWrapper = parentLi.closest('.wpfFilterWrapper');
522			if (icons.collapsed) {
523				if (filterWrapper.data('autounfold-all-levels') === 1) {
524					parentLi.find('ul').each(function () {
525						var ul = jQuery(this);
526						ul.removeClass('wpfHidden');
527						ul.find('i.fa, svg').addClass(icons.minusIcon).removeClass(icons.plusIcon);
528					});
529				} else {
530					parentLi.children('ul').removeClass('wpfHidden');
531				}
532				$icon.addClass(icons.minusIcon).removeClass(icons.plusIcon);
533			} else {
534				var uls = parentLi.find('ul');
535				uls.addClass('wpfHidden');
536				parentLi.find('.wpfCollapsible').find('i.fa, svg').addClass(icons.plusIcon).removeClass(icons.minusIcon);
537
538				// automatically collapses the parent if all child categories collapse
539				var _thisObj = this.$obj,
540					mainWrapper = parentLi.closest('.wpfMainWrapper');
541				if (_thisObj.getFilterParam('f_multi_auto_collapses_parent', mainWrapper, filterWrapper)) {
542					if (parentLi.siblings('li').find('.wpfCollapsible i').hasClass('fa-minus') === false) {
543						var parentUL = parentLi.closest('ul');
544						if (!parentUL.hasClass('wpfFilterVerScroll')) {
545							parentUL.addClass('wpfHidden');
546							parentUL.closest('li').find('.wpfCollapsible').find('i.fa, svg').addClass(icons.plusIcon).removeClass(icons.minusIcon);
547						}
548					}
549				}
550			}
551		});
552
553		WpfFrontendPage.constructor.prototype.styleCheckboxSelected = (function ($filter) {
554			if ($filter.length) {
555				$filter.find('.wpfDisplay').removeClass('selected');
556				$filter.find('input:checked').each(function () {
557					var input = jQuery(this);
558
559					input.closest('.wpfLiLabel').find('.wpfDisplay').addClass('selected');
560					WpfFrontendPage.autoUnfoldByCheck(input);
561
562					if ($filter.data('display-type') === 'list') {
563						var parentUL = input.closest('ul');
564						if (parentUL.hasClass('wpfFilterVerScroll')) {
565							$filter.find('.wpfFilterVerScroll > li').each(function () {
566								var li = jQuery(this);
567								li.find('ul').addClass('wpfHidden');
568								li.find('i.fa, svg').each(function () {
569									var $icon = jQuery(this),
570										icons = WpfFrontendPage.getIcons($icon);
571									$icon.addClass(icons.plusIcon).removeClass(icons.minusIcon);
572								});
573							});
574						}
575					}
576
577				});
578			}
579		});
580
581		WpfFrontendPage.constructor.prototype.getAttributeFilterOptionsPro = (function ( $filter, data ) {
582			var filterType = $filter.attr('data-display-type'),
583				isACF = ($filter.data('get-attribute').indexOf('acf-') === 0);
584
585			if (filterType === 'colors'){
586				$filter.find('input:checked').each(function () {
587					var input = jQuery(this),
588						id = input.attr('data-term-id');
589
590					data.options[data.i] = id;
591					data.frontendOptions[data.i] = (isACF) ? id : input.attr('data-term-slug');
592					data.selectedOptions['list'][id] = input.parent().find('label.icon').attr('data-term-name');
593					data.i++;
594				});
595			} else if (filterType === 'slider') {
596				var values = $filter.find('.wpfAttrNumFilterRange').attr('data-values').split(','),
597					slugs = $filter.find('.wpfAttrNumFilterRange').attr('data-slugs').split(','),
598					termIds = $filter.find('.wpfAttrNumFilterRange').attr('data-term-ids').split(','),
599					minAttrNum = $filter.find('#wpfMinAttrNum').attr('data-min-numeric-value'),
600					maxAttrNum = $filter.find('#wpfMaxAttrNum').attr('data-max-numeric-value'),
601					forceNumeric = $filter.find('.ion-range-slider').data('force-numeric') ? $filter.find('.ion-range-slider').data('force-numeric') : 0,
602					minAttVal = $filter.find('#wpfMinAttrNum').val(),
603					maxAttVal = $filter.find('#wpfMaxAttrNum').val(),
604					selectedOptions = {'is_one': true, 'list': [minAttVal + ' - ' + maxAttVal]};
605
606				slugs.forEach(function(slug, index){
607					var value = forceNumeric ? parseFloat(values[index]) : values[index];
608
609					if ( index >= minAttrNum && index <= maxAttrNum ) {
610						data.options[data.i] = termIds[index];
611						data.frontendOptions[data.i] = slug;
612						data.selectedOptions = selectedOptions;
613						data.i++;
614					}
615				});
616			}
617
618			return data;
619		});
620
621		WpfFrontendPage.constructor.prototype.eventsFrontendPro = (function () {
622			wpfEventsFrontendPro();
623		});
624
625		WpfFrontendPage.constructor.prototype.initIonSlider = (function (filter, type) {
626			var mainWrapper = filter.closest('.wpfMainWrapper'),
627				autoFilteringEnable = (mainWrapper.find('.wpfFilterButton').length == 0),
628				decimal = filter.attr('data-decimal'),
629				step = filter.attr('data-step'),
630				minInputId = '#wpfMinPrice',
631				maxInputId = '#wpfMaxPrice',
632				triggerName = 'wpfPriceChange',
633				filterType = typeof type !== 'undefined' ? type : 'price';
634			
635			if (filterType === 'attr') {
636				minInputId = '#wpfMinAttrNum';
637				maxInputId = '#wpfMaxAttrNum';
638				triggerName = 'wpfAttrSliderChange';
639			}
640			
641			if(filter.find('.ion-range-slider').length) {
642				var sliderCurBefore = (filter.attr('data-slider-currency-before') != undefined) ? filter.attr('data-slider-currency-before') : '';
643				var sliderCurAfter = (filter.attr('data-slider-currency-after') != undefined) ? filter.attr('data-slider-currency-after') : '';
644				
645				filter.find('.ion-range-slider').ionRangeSlider({
646					prefix: sliderCurBefore,
647					postfix: sliderCurAfter,
648					onStart: function (data) {
649						var irsGrid = data.input.siblings('.irs').find('.irs-grid'),
650							irsGridTexts = irsGrid.find('.irs-grid-text'),
651							forceNumeric = data.input.data('force-numeric') ? data.input.data('force-numeric') : 1,
652							wrapper = data.input.closest('.wpfFilterWrapper');
653
654						if ( !forceNumeric ) {
655							irsGridTexts.each(function () {
656								var tVal = parseFloat(jQuery(this).text()).toFixed(decimal);
657								jQuery(this).text(tVal);
658							});
659						}
660
661						wrapper.find('#wpfMinAttrNum').val(data.from_value);
662						wrapper.find('#wpfMaxAttrNum').val(data.to_value);
663						wrapper.find('#wpfMinAttrNum').attr('data-min-numeric-value', data.from);
664						wrapper.find('#wpfMaxAttrNum').attr('data-max-numeric-value', data.to);
665					},
666					onChange:  function (data) {
667						filter.find(minInputId).val(data.from.toFixed(decimal));
668						filter.find(maxInputId).val(data.to.toFixed(decimal));
669						data.step = Number(step);
670						filter.trigger(triggerName, data);
671					},
672					onFinish: function (data) {
673						filter.removeClass('wpfNotActive');
674						if(autoFilteringEnable){
675							if (typeof wpfFrontendPage.setCurrentLocation == 'function') wpfFrontendPage.setCurrentLocation();
676							WpfFrontendPage.filtering(mainWrapper);
677						}
678						data.step = Number(step);
679						filter.trigger(triggerName, data);
680					}
681				});
682
683
684				// attrubute slider
685				filter.find('input#wpfMinAttrNum, input#wpfMaxAttrNum').on('blur', function (e) {
686					var	parent 		 = jQuery(this).closest('.wpfFilterContent'),
687						minAttrValue = parent.find('#wpfMinAttrNum').val().toLowerCase(),
688						maxAttrValue = parent.find('#wpfMaxAttrNum').val().toLowerCase(),
689						slider       = parent.find('.ion-range-slider'),
690						valueList    = slider.attr('data-values').toLowerCase().split(','),
691						sliderData   = parent.find('.ion-range-slider').data('ionRangeSlider');
692
693					if (slider.attr('data-force-numeric') === "1") {
694
695						var minAttrValueCut = jQuery.grep(valueList, function (val) {
696							if (parseFloat(val) <= parseFloat(minAttrValue)) {
697								return true;
698							}
699						});
700						minAttrValue = (minAttrValueCut.length <= 1) ? 0 : minAttrValueCut.length - 1;
701
702						var maxAttrValueCut = jQuery.grep(valueList, function (val) {
703							if (parseFloat(val) >= parseFloat(maxAttrValue)) {
704								return true;
705							}
706						});
707						maxAttrValue = (maxAttrValueCut.length === 0) ? valueList.length : valueList.indexOf(maxAttrValueCut[0]);
708
709					} else {
710
711						if (valueList.indexOf(minAttrValue) !== -1) {
712							minAttrValue = valueList.indexOf(minAttrValue);
713						} else {
714							minAttrValue = 0;
715						}
716						if (valueList.indexOf(maxAttrValue) !== -1) {
717							maxAttrValue = valueList.indexOf(maxAttrValue);
718						} else {
719							maxAttrValue = valueList.length;
720						}
721					}
722
723					if (maxAttrValue < minAttrValue) {
724						minAttrValue = 0;
725						maxAttrValue = valueList.length;
726					}
727
728					parent.find('#wpfMinAttrNum').attr('data-min-numeric-value', minAttrValue);
729					parent.find('#wpfMaxAttrNum').attr('data-max-numeric-value', maxAttrValue);
730
731					sliderData.update({from: minAttrValue, to: maxAttrValue});
732				});
733
734				// price slider
735				filter.find('input#wpfPriceRangeField').on('blur', function (e) {
736					var parent 	   = jQuery(this).closest('.wpfFilterContent'),
737						sliderData = parent.find('.ion-range-slider').data('ionRangeSlider');
738					sliderData.update({from: filter.find(minInputId).val(), to: filter.find(maxInputId).val()});
739				});
740			}
741		});
742
743		WpfFrontendPage.constructor.prototype.initShowMore = (function(verBlock) {
744			if (verBlock.length == 0) return;
745			var isOpen = verBlock.attr('data-open-more');
746			if (isOpen == '1') return;
747
748			var settings = WpfFrontendPage.getFilterMainSettings(verBlock.closest('.wpfMainWrapper'));
749			if(settings && settings.settings.display_view_more === '1' && !settings.settings.display_items_in_a_row) {
750				verBlock.attr('data-open-more', 0);
751				verBlock.css({'maxHeight': ''}).find('li').removeClass('wpfMoreHidden');
752				verBlock.find('.wpfShowMoreWrapper').remove();
753				verBlock.find('.wpfShowFewerWrapper').remove();
754				
755				verBlock.scrollTop(0);
756				var verObj = verBlock.get(0),
757					maxShowMore = verBlock.closest('.wpfFilterWrapper').attr('data-max-showmore') || 0;
758				if(verObj.scrollHeight > verObj.clientHeight || (maxShowMore > 0 && verBlock.find('li:visible').length > maxShowMore)) {
759					var viewHeigth = verObj.clientHeight,
760						rectBlock = verObj.getBoundingClientRect(),
761						findHidden = false,
762						lastVisible = false,
763						cnt = 0;
764					verBlock.find('li').each(function () {
765						var li = jQuery(this),
766							rect = this.getBoundingClientRect();
767
768						if(rect.height > 0) {
769							var mTop = parseInt(li.css('margin-top')),
770								mBottom = parseInt(li.css('margin-bottom'));
771							if(lastVisible && (findHidden || (maxShowMore > 0 && maxShowMore < cnt) || rect.top - (mTop < 0 ? mTop : 0) < rectBlock.top || rect.bottom - (mBottom < 0 ? mBottom : 0) > rectBlock.bottom)) {
772								li.addClass('wpfMoreHidden');
773								findHidden = true;
774							} else if (!findHidden) {
775								lastVisible = li;
776								cnt++;
777							}
778						}
779					});
780					if(lastVisible && (findHidden || (maxShowMore > 0 && maxShowMore < cnt))) {
781						var more = jQuery('<li class="wpfShowMoreWrapper"> + ' + wpfTraslate.ShowMore + '</li>');
782						if(settings.settings.view_more_full == '1') {
783							more.attr('data-full-opening', 1);
784						}
785						more.insertBefore(lastVisible);
786						lastVisible.addClass('wpfMoreHidden');
787					}
788				}
789			}
790		});
791
792		WpfFrontendPage.constructor.prototype.addSelectedParamsPro = (function (wrapper, params, filterType, filterName, filterLogic) {
793			if(!wrapper || !('selected' in params)) return;
794
795			var selected = params['selected'],
796				isOne = 'is_one' in selected && selected['is_one'] ? 1 : 0,
797				current = wrapper.find('.wpfSelectedParameter[data-filter-type="'+filterType+'"][data-filter-name="'+filterName+'"]'),
798				clear = wrapper.find('.wpfSelectedParametersClear'),
799				list = 'list' in selected && selected['list'],
800				curLen = current.length;
801			if(curLen) {
802				if((isOne && curLen > 1) || list.length == 0) {
803					current.remove();
804					current = [];
805				}
806				else current.attr('data-delete', 1);
807			}
808
809			for(var key in list) {
810				var found = current.length ? current.filter('[data-key="'+key+'"]') : false,
811					strSelected = list[key].replace(/(<?)(h[1234])(>?)/g, '$1div$3');
812				if(found && found.length) {
813					found.find('.wpfSelectedTitle').html(strSelected);
814					found.removeAttr('data-delete');
815				} else {
816					var obj = jQuery(
817						'<div class="wpfSelectedParameter" data-filter-type="'+ filterType +
818						'" data-filter-name="' + filterName +
819						'" data-query-logic="' + filterLogic +
820						'" data-is-one="' + isOne +
821						'" data-key="' + key +
822						'"></div>');
823					obj.append(jQuery('<div class="wpfSelectedDelete">x</div>'));
824					obj.append(jQuery('<div class="wpfSelectedTitle">' + strSelected + '</div>'));
825					obj.css('background-color', WpfFrontendPage.selectedParamsColor);
826
827					if (clear.length) {
828						obj.insertBefore(clear);
829					} else {
830						wrapper.append(obj);
831					}
832				}
833			}
834			if (current.length) current.filter('[data-delete]').remove();
835
836			if (wrapper.find('.wpfSelectedParameter').length == 0) {
837				wrapper.addClass('wpfHidden');
838			} else {
839				wrapper.removeClass('wpfHidden');
840			}
841		});
842
843		WpfFrontendPage.constructor.prototype.setSelectedParamsPro = (function (filter, settings) {
844			if(!filter.hasClass('wpfFilterWrapper')) filter = filter.closest('.wpfFilterWrapper');
845			if(filter.length == 0) return;
846
847			if(typeof settings == 'undefined') settings = WpfFrontendPage.getFilterMainSettings(filter.closest('.wpfMainWrapper'));
848
849			if(!settings || settings.settings.display_selected_params !== '1') return;
850
851			var filterType = filter.attr('data-filter-type'),
852				filterName = filter.attr('data-get-attribute'),
853				filterLogic = filter.attr('data-query-logic'),
854				params = filter.hasClass('wpfNotActive') || filter.hasClass('wpfHidden') ? {'selected': {'is_one': true, 'list': []}} : WpfFrontendPage.getFilterOptionsByType(filter, filterType),
855				filterId = filter.closest('.wpfMainWrapper').data('filter'),
856				wrapper = jQuery('.wpfSelectedParameters[data-filter="' + filterId + '"]').length ? jQuery('.wpfSelectedParameters[data-filter="' + filterId + '"]') : filter.closest('.wpfMainWrapper').find('.wpfSelectedParameters');
857				params = WpfFrontendPage.filterParamByParentPro(settings, params);
858
859			WpfFrontendPage.addSelectedParamsPro(wrapper, params, filterType, filterName, filterLogic);
860		});
861
862		WpfFrontendPage.constructor.prototype.eventChangeFilterPro = (function (filter, settings) {
863			WpfFrontendPage.setSelectedParamsPro(filter, settings);
864		});
865
866		WpfFrontendPage.constructor.prototype.autoUnfoldByCheck = (function (filter) {
867			if (filter.closest('.wpfFilterWrapper').data('autounfold') != '1') return;
868			if (filter.is('input:checked')) {
869				filter.closest('li').find('input:checked').each(function() {
870					var $collapsible = jQuery(this).closest('.wpfLiLabel').find('.wpfCollapsible');
871					if ($collapsible.length) {
872						var $icon = $collapsible.find('i.fa, svg');
873						if ($icon.length) {
874							var icons = WpfFrontendPage.getIcons($icon);
875							if (icons.collapsed) {
876								setTimeout(function () {
877									WpfFrontendPage.collapsibleToggle($icon, icons, $collapsible.closest('li'));
878								}, 100);
879							}
880						}
881					}
882				});
883			} else {
884				if (filter.closest('li').find('ul input:checked').length == 0) {
885					var $collapsible = filter.closest('.wpfLiLabel').find('.wpfCollapsible');
886					if ($collapsible.length) {
887						var $icon = $collapsible.find('i.fa, svg');
888						if ($icon.length) {
889							var icons = WpfFrontendPage.getIcons($icon);
890							if (!icons.collapsed) {
891								setTimeout(function () {
892									WpfFrontendPage.collapsibleToggle($icon, icons, $collapsible.closest('li'));
893								}, 100);
894							}
895						}
896					}
897				}
898			}
899		});
900		
901		WpfFrontendPage.constructor.prototype.scrollToProductsPro = (function (settings) {
902			var _thisObj = this.$obj;
903			if (settings && settings.scroll_after_filtration == 1) {
904				var speed = settings.scroll_after_filtration_speed || 1500,
905					retreat = settings.scroll_after_filtration_retreat || 30,
906					listSelector = _thisObj.currentProductBlock ? _thisObj.currentProductBlock : _thisObj.defaultProductSelector;
907				if (typeof listSelector != 'undefined' && listSelector != '') {
908					jQuery(document).on('wpfAjaxSuccess', function(e){
909						e.preventDefault();
910						jQuery('html,body').animate({'scrollTop': jQuery('body').find(listSelector).eq(0).offset().top - retreat}, speed);
911	   					return false;
912
913					});
914					jQuery('body,html').bind('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function(e){
915		            	jQuery('body,html').stop();
916	    	    	});
917	    	    }
918			}
919		});
920
921		WpfFrontendPage.constructor.prototype.changeUrlByFilterParamsPro = (function ($filtersDataFrontend, noWooPage, filterWrapper) {
922			var _thisObj = this.$obj;
923			switch ($filtersDataFrontend['id']) {
924				case 'wpfSearchText':
925					var value = $filtersDataFrontend['settings']['value'],
926						attr = $filtersDataFrontend['settings']['attribute'];
927					if (typeof value !== 'undefined' && value.length > 0 ) {
928						_thisObj.QStringWork(attr, encodeURIComponent(value), noWooPage, filterWrapper, 'change');
929					}else{
930						_thisObj.QStringWork(attr, '', noWooPage, filterWrapper, 'remove');
931					}
932					break;
933				case 'wpfBrand':
934					var product_brand = $filtersDataFrontend['settings']['settings'],
935						name = $filtersDataFrontend['name'];
936
937					product_brand = product_brand.join(',');
938					if (typeof product_brand !== 'undefined' && product_brand.length > 0) {
939						_thisObj.QStringWork(name, product_brand, noWooPage, filterWrapper, 'change');
940					}else{
941						_thisObj.QStringWork(name, '', noWooPage, filterWrapper, 'remove');
942					}
943					break;
944				case 'wpfVendors':
945					var vendorsVal = $filtersDataFrontend['settings']['settings'],
946						name = $filtersDataFrontend['name'],
947						delim = $filtersDataFrontend['delim'];
948						vendorsVal = vendorsVal.join(delim ? delim : '|');
949					if (typeof vendorsVal !== 'undefined' && vendorsVal.length > 0) {
950						_thisObj.QStringWork('vendors', vendorsVal, noWooPage, filterWrapper, 'change');
951					}else{
952						_thisObj.QStringWork('vendors', '', noWooPage, filterWrapper, 'remove');
953					}
954					break;
955				default:
956					break;
957			}
958
959			return;
960		});
961
962		WpfFrontendPage.constructor.prototype.clearFiltersPro = (function ($filter) {
963			var _thisObj = this.$obj;
964			if($filter.find('.ion-range-slider').length) {
965				var slider = $filter.find('.ion-range-slider').data('ionRangeSlider');
966
967				if($filter.attr('data-display-type') == 'slider') {
968
969					var min = $filter.attr('data-minvalue-without-filtering'),
970						max = $filter.attr('data-maxvalue-without-filtering'),
971						slugs = $filter.attr('data-slugs-without-filtering'),
972						values = $filter.attr('data-values-without-filtering'),
973						ids = $filter.attr('data-ids-without-filtering'),
974						valuesArray = values.split(',');
975
976					$filter.find('#wpfMinAttrNum').val(min);
977					$filter.find('#wpfMaxAttrNum').val(max);
978
979					$filter.find('.ion-range-slider').attr('data-slugs', slugs);
980					$filter.find('.ion-range-slider').attr('data-values', values);
981					$filter.find('.ion-range-slider').attr('value', values);
982					$filter.find('.ion-range-slider').attr('data-term-ids', ids);
983					$filter.find('.ion-range-slider').attr('data-min', min);
984					$filter.find('.ion-range-slider').attr('data-max', max);
985					$filter.find('#wpfMinAttrNum').attr('data-min-numeric-value', 0);
986					$filter.find('#wpfMaxAttrNum').attr('data-max-numeric-value', valuesArray.length - 1);
987					slider.update({
988						from: 0,
989						to: valuesArray.length - 1,
990						values: valuesArray
991					});
992				}
993			}
994			if($filter.attr('data-display-type') == 'linestars') {
995				$filter.find('.wpfStarsAdditional').text($filter.find('.wpfStarsRating').attr('data-add-text'));
996			} else {
997				$filter.find('.wpfStarsRatingBlock').removeClass('wpfLineChecked');
998			}
999			$filter.find('.wpfTermChecked').removeClass('wpfTermChecked');
1000			$filter.find('.wpfPriceRangeCustom input').val('');
1001			$filter.find('.wpfPriceRangeCustom').closest('li').attr('data-range', '');
1002			_thisObj.styleCheckboxSelected($filter);
1003			return;
1004		});
1005
1006		WpfFrontendPage.constructor.prototype.getSearchTextFilterOptions = (function ($filter) {
1007			var optionsArray = [],
1008				value = $filter.find('input').val(),
1009				options = {
1010					attribute: $filter.attr('data-get-attribute'),
1011					value: value,
1012					fullword: $filter.attr('data-full-word'),
1013					excluded: JSON.parse($filter.attr('data-excluded'))
1014				};
1015
1016			//options for backend (filtering)
1017			optionsArray['backend'] = options;
1018
1019			//options for frontend(change url)
1020			optionsArray['frontend'] = options;
1021			optionsArray['selected'] = {'is_one': true, 'list': (value == '' ? [] : [value])};
1022			return optionsArray;
1023		});
1024
1025		WpfFrontendPage.constructor.prototype.getBrandFilterOptions = (function ($filter) {
1026			var _thisObj = this.$obj,
1027				optionsArray = [],
1028				frontendOptions = [],
1029				options = [],
1030				filterType = $filter.attr('data-display-type'),
1031				selectedOptions = {'is_one': (filterType != 'mul_dropdown'), 'list': []},
1032				withCount = $filter.hasClass('wpfShowCount'),
1033				i = 0;
1034
1035			//options for backend (filtering)
1036			if(filterType === 'list' || filterType === 'multi'){
1037				$filter.find('input:checked').each(function () {
1038					var li = jQuery(this).closest('li'),
1039						id = li.attr('data-term-id');
1040					options[i] = id;
1041					frontendOptions[i] = li.attr('data-term-slug');
1042					selectedOptions['list'][id] = li.find('.wpfValue').html();
1043					i++;
1044				});
1045			}else if(filterType === 'dropdown'){
1046				var option = $filter.find(":selected"),
1047					value = option.val();
1048				options[i] = value;
1049				if(value != '') {
1050					frontendOptions[i] = option.attr('data-slug');
1051					selectedOptions['list'][option.attr('data-term-id')] = _thisObj.getClearLabel(option.html(), withCount);
1052				}
1053			}else if(filterType === 'mul_dropdown'){
1054				$filter.find(':selected').each(function () {
1055					var option = jQuery(this);
1056					options[i] = option.val();
1057					frontendOptions[i] = option.attr('data-slug');
1058					selectedOptions['list'][option.attr('data-term-id')] = _thisObj.getClearLabel(option.html(), withCount);
1059					i++;
1060				});
1061			}
1062			optionsArray['backend'] = options;
1063
1064			//options for frontend(change url)
1065			var getParams = $filter.attr('data-get-attribute');
1066
1067			optionsArray['frontend'] = [];
1068			optionsArray['frontend']['taxonomy'] = getParams;
1069			optionsArray['frontend']['settings'] = frontendOptions;
1070			optionsArray['selected'] = selectedOptions;
1071
1072			return optionsArray;
1073		});
1074		
1075		WpfFrontendPage.constructor.prototype.getVendorsFilterOptions = (function ($filter) {
1076			var optionsArray = [],
1077				 _thisObj = this.$obj,
1078				options = [],
1079				frontendOptions = [],
1080				filterType = $filter.attr('data-display-type'),
1081				selectedOptions = {'is_one': (filterType == 'dropdown'), 'list': []},
1082				i = 0;
1083
1084			//options for backend (filtering)
1085			if (filterType === 'list') {
1086				$filter.find('input:checked').each(function () {
1087					var li = jQuery(this).closest('li'),
1088						id = li.attr('data-term-id');
1089					options[i] = id;
1090					frontendOptions[i] = li.attr('data-term-slug');
1091					selectedOptions['list'][id] = li.find('.wpfValue').html();
1092					i++;
1093				});
1094			} else if (filterType === 'dropdown') {
1095				var option = $filter.find(":selected"),
1096					value = option.val();
1097				options[i] = value;
1098				if(value != '') {
1099					frontendOptions[i] = option.attr('data-slug');
1100					selectedOptions['list'][option.attr('data-term-id')] = option.html();
1101				}
1102			} else if (filterType === 'mul_dropdown') {
1103				$filter.find(':selected').each(function () {
1104					var option = jQuery(this);
1105					options[i] = option.val();
1106					frontendOptions[i] = option.attr('data-slug');
1107					selectedOptions['list'][option.attr('data-term-id')] = _thisObj.getClearLabel(option.html());
1108					i++;
1109				});
1110			}
1111			optionsArray['backend'] = options;
1112
1113			//options for frontend(change url)
1114			var getParams = $filter.attr('data-get-attribute');
1115			
1116			optionsArray['frontend'] = [];
1117			optionsArray['frontend']['taxonomy'] = getParams;
1118			optionsArray['frontend']['settings'] = frontendOptions;
1119			optionsArray['selected'] = selectedOptions;
1120			
1121			return optionsArray;
1122		});
1123
1124		WpfFrontendPage.constructor.prototype.wpfShowHideFiltersAttsPro = (function(filter) {
1125			filter.find('li').removeClass('wpfMoreHidden');
1126			var links = filter.find('.wpfAbcLink');
1127			if(links.length) {
1128				links.each(function(){
1129					var link = jQuery(this),
1130						letter = link.attr('data-letter'),
1131						anchor = filter.find('.wpfAbcLetter[data-letter="'+letter+'"]');
1132					if(filter.find('li[data-term-id][data-letter="'+letter+'"]:visible').length) {
1133						link.removeClass('wpfHidden');
1134						anchor.removeClass('wpfHidden');
1135					}
1136					else {
1137						link.addClass('wpfHidden');
1138						anchor.addClass('wpfHidden');
1139					}
1140				});
1141				links.removeClass('wpfAbcLinkFirst').filter(':not(.wpfHidden):first').addClass('wpfAbcLinkFirst');
1142			}
1143			filter.find('.wpfFilterVerScroll').each(function () {
1144				WpfFrontendPage.initShowMore(jQuery(this));
1145			});
1146		});
1147
1148		WpfFrontendPage.constructor.prototype.filterParamByParentPro = (function(settings, params) {
1149
1150			if (settings.settings.expand_selected_to_child === '0') {
1151				if (typeof params.selected.removeSelected !== 'undefined' && typeof params.selected.list !== 'undefined') {
1152					var selectedList = params.selected.list,
1153						removeSelected = params.selected.removeSelected;
1154
1155					for (var selectedtId in selectedList) {
1156						if ( removeSelected.indexOf(parseInt(selectedtId)) !== -1 ) {
1157							delete selectedList[selectedtId];
1158						}
1159					}
1160
1161					params.selected.list = selectedList;
1162				}
1163			}
1164
1165			return params;
1166		});
1167
1168		WpfFrontendPage.constructor.prototype.getHideButtons = (function (mainWrapper, settings) {
1169			var isMobile = false,
1170				screenSize = jQuery(window).width();
1171			if (settings.settings !== undefined) {
1172				var isMobileBreakpoin = settings.settings.desctop_mobile_breakpoint_switcher,
1173					mobileBreakpoinWidth = settings.settings.desctop_mobile_breakpoint_width;
1174
1175				if (isMobileBreakpoin && '0' !== isMobileBreakpoin && mobileBreakpoinWidth && '0' !== mobileBreakpoinWidth) {
1176					if (screenSize <= mobileBreakpoinWidth) {
1177						isMobile = true;
1178					}
1179
1180					mainWrapper.find('.wfpHideButton[data-show-on-mobile]').each(function () {
1181						var button = jQuery(this),
1182							showDesctop = jQuery(this).data('show-on-desctop'),
1183							showMobile = jQuery(this).data('show-on-mobile'),
1184							mobileFloating = jQuery(this).data('button-mobile-floating');
1185						button.show();
1186						if (isMobile) {
1187							if (mobileFloating) {
1188								button.addClass('wpfHideButtonMobile');
1189							}
1190							if (showMobile == 'yes_close') {
1191								WpfFrontendPage.toggleHideFiltersButton(button, 'up');
1192							} else {
1193								WpfFrontendPage.toggleHideFiltersButton(button, 'down');
1194								if (showMobile == 'no') button.hide();
1195							}
1196						} else {
1197							button.removeClass('wpfHideButtonMobile');
1198							if (showDesctop == 'yes_close') {
1199								WpfFrontendPage.toggleHideFiltersButton(button, 'up');
1200							} else {
1201								WpfFrontendPage.toggleHideFiltersButton(button, 'down');
1202								if (showDesctop == 'no') button.hide();
1203							}
1204						}
1205					});
1206				}
1207			}
1208		});
1209
1210		WpfFrontendPage.constructor.prototype.toggleHideFiltersButton = (function (button, toggle) {
1211			var txt = button.find('.wfpHideText');
1212			if (toggle == 'up') {
1213				button.find('i.fa, svg').removeClass('fa-chevron-up').addClass('fa-chevron-down');
1214				txt.html(button.attr('data-show-text'));
1215				button.siblings('div:not(.wpfPreviewLoader):not(.wpfLoaderLayout)').addClass('wpfHideFilter');
1216			} else if (toggle == 'down') {
1217				button.find('i.fa, svg').removeClass('fa-chevron-down').addClass('fa-chevron-up');
1218				txt.html(button.attr('data-hide-text'));
1219				button.siblings('div').removeClass('wpfHideFilter');
1220			}
1221			button.attr('data-closed', toggle == 'up' ? 1 : 0);
1222
1223			// Hide button
1224			var hideButtonEvent = document.createEvent('Event');
1225			hideButtonEvent.initEvent('wpfHideButtonClick', false, true);
1226			document.dispatchEvent(hideButtonEvent);
1227		});
1228
1229		WpfFrontendPage.constructor.prototype.getIcons = (function ($icon) {
1230			let
1231				plusIcon  = $icon.attr('class').match(/(fa-plus|fa-[^\s]+-down)/),
1232				minusIcon = null,
1233				collapsed = true;
1234			if (null !== plusIcon) {
1235				plusIcon  = plusIcon[1];
1236				minusIcon = ('fa-plus' === plusIcon) ? "fa-minus" : plusIcon.replace(/(fa-[^\s]+-)down/, '$1up');
1237			} else {
1238				collapsed = false;
1239				minusIcon = $icon.attr('class').match(/(fa-minus|fa-[^\s]+-up)/);
1240				if (null !== minusIcon) {
1241					minusIcon = minusIcon[1];
1242					plusIcon  = ('fa-minus' === minusIcon) ? "fa-plus" : minusIcon.replace(/(fa-[^\s]+-)up/, '$1down');
1243				}
1244			}
1245
1246			return {collapsed, plusIcon, minusIcon};
1247		});
1248
1249		WpfFrontendPage.constructor.prototype.enableFiltersLoaderPro = (function(idWrapper, productListElem){
1250			var preview = jQuery('#' + idWrapper + ' .wpfPreviewLoader').first().clone().removeClass('wpfHidden');
1251			productListElem.css('position', 'relative');
1252			jQuery('<div>', {
1253			    class: 'wpf-loader-decorator',
1254			    title: 'Loading...'
1255			}).html(preview).appendTo(productListElem);
1256		});
1257
1258		WpfFrontendPage.eventsFrontendPro();
1259
1260	});
1261
1262}(window.jQuery));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.