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.