PageSourceSearch

https://www.ferrache.com/templates/product_list/components/filters/desktop/filters.js?1

js ferrache.com collected 2026-10-10 02:06:03 UTC 19,634 bytes, 498 lines download raw bytes

1var mudou_filtros = 0;
2
3if(typeof windowLocation == "undefined")
4   windowLocation = window.parent;
5
6if(typeof timeoutListOverlay == "undefined")
7   timeoutListOverlay = "";
8
9$(document).ready(function(){
10   /* Top Plus and Minus Filters */
11   if(typeof disable_filters_adicional_top == "undefined") {
12      var firstFilter = $(".products .filters .box-filter > p").first();
13      var topBeforePlus = parseInt(parseInt(firstFilter.css("padding-top")) + (firstFilter.find(".item-name").outerHeight() / 2));
14      if(typeof topBeforePlus == "number" && topBeforePlus > 10)
15         $(".filters").append('<style type="text/css">.filters .box-filter > p::after{top: '+topBeforePlus+'px;}</style>');
16   }
17   /* Top Plus and Minus Filters */
18
19   $('.filters').on('click', 'a.see-all', function(){
20      var filters = $(this).prev();
21      var _this = $(this);
22      filters.slideToggle(150, function(){
23         if($(this).is(':visible')){
24            _this.text(windowLocation.JSVars.expressions[88]);
25         }else{
26            _this.text(windowLocation.JSVars.expressions[31]);
27         };
28      });
29   });
30
31   if($('.custom-scrollbar-filters').length > 0) {
32      // if(typeof $.fn.perfectScrollbar == "function" && 'ontouchstart' in window == false) {
33         $('.custom-scrollbar-filters').perfectScrollbar({
34            wheelSpeed: 0.5,
35            useBothWheelAxes: false,
36            suppressScrollX: true
37         });
38      // } else if('ontouchstart' in window == false) {
39         // $('.custom-scrollbar-filters').css("overflow-y", "auto");
40      // }
41   }
42   var closeSideBar = false;
43   $(".toggle-button-filters").click(function(){
44      mudou_filtros = 0;
45      $("#wrapper-filters-sidebar .bottom-filters-button .button").addClass("disabled");
46      $("body").addClass("sidebar-filters");
47      $("#containerSite").addClass("overlay");
48      $("#wrapper-filters-sidebar").height($(window).outerHeight());
49      $("#wrapper-filters-sidebar .filters").height($(window).outerHeight() - $(".wrapper-top-filters").outerHeight() - $(".bottom-filters-button").outerHeight());
50      setTimeout(function(){
51         closeSideBar = true;
52      }, 200);
53   });
54
55   $("#wrapper-filters-sidebar .wrapper-top-filters .close-filters").click(function(){
56      if(mudou_filtros == 1){
57         $("#wrapper-filters-sidebar .wrapper-top-filters .clear-filters-div a").trigger("click");
58      }
59      $("#wrapper-filters-sidebar .bottom-filters-button .button").addClass("disabled");
60      $("body").removeClass("sidebar-filters");
61      $("#containerSite").removeClass("overlay");
62      closeSideBar = false;
63   });
64
65   $("body #wrapper-filters-sidebar .bottom-filters-button .button").click(function(){
66      $("body").removeClass("sidebar-filters");
67      $("#containerSite").removeClass("overlay");
68      closeSideBar = false;
69   });
70
71   $('html').click(function (ev) {
72      var _parentsLength = jQuery(ev.target).parents("#wrapper-filters-sidebar").length;
73      if (jQuery(ev.target).attr("id") == 'wrapper-filters-sidebar') _parentsLength = 1;
74      if(_parentsLength == 0 && closeSideBar) {
75         $("body").removeClass("sidebar-filters");
76         $("#containerSite").removeClass("overlay");
77         closeSideBar = false;
78      }
79   });
80
81
82   totalFilters();
83});
84
85function buildFilterPrice(pMin, pMax, minSel, maxSel){
86   $("#slider-range").slider({
87      range: true,
88      min: pMin,
89      max: pMax,
90      step: 0.00000001,
91      values: [minSel, maxSel],
92      create: function( event, ui ) {
93         var min_value = number_format($( "#slider-range" ).slider( "values", 0 ), windowLocation.JSVars.shop.currency.numberDec, windowLocation.JSVars.shop.currency.separatorDec, windowLocation.JSVars.shop.currency.separatorMil);
94         var max_value = number_format($( "#slider-range" ).slider( "values", 1 ), windowLocation.JSVars.shop.currency.numberDec, windowLocation.JSVars.shop.currency.separatorDec, windowLocation.JSVars.shop.currency.separatorMil);
95         $('.numbers .min .n').text(min_value);
96         $('.numbers .max .n').text(max_value);
97      },
98      slide: function( event, ui ) {
99         var min_value = number_format(ui.values[0], windowLocation.JSVars.shop.currency.numberDec, windowLocation.JSVars.shop.currency.separatorDec, windowLocation.JSVars.shop.currency.separatorMil);
100         var max_value = number_format(ui.values[1], windowLocation.JSVars.shop.currency.numberDec, windowLocation.JSVars.shop.currency.separatorDec, windowLocation.JSVars.shop.currency.separatorMil);
101         $('.numbers .min .n').text(min_value);
102         $('.numbers .max .n').text(max_value);
103      },
104      stop: function( event, ui ){
105         var pmi = ($('.ui-slider').slider('values', 0));
106         var pma = ($('.ui-slider').slider('values', 1));
107         $('#preco_min').val(pmi);
108         $('#preco_max').val(pma);
109         changePrice();
110      }
111   });
112}
113
114function buildFilters(data, fieldV){
115   $.each(data.response.filters, function(key, value){
116      var valores_selecionados = [];
117
118      if(value.selected_id != '')
119         var valores_selecionados = value.selected_id.split(",");
120
121      if(value.field == 'preco'){
122         var val_min_sel = value.values[0].name;
123         var val_max_sel = value.values[1].name;
124
125         if(valores_selecionados.length > 0){
126            val_min_sel = valores_selecionados[0];
127            val_max_sel = valores_selecionados[1];
128         }
129
130         var min_value = number_format(val_min_sel, windowLocation.JSVars.shop.currency.numberDec, windowLocation.JSVars.shop.currency.separatorDec, windowLocation.JSVars.shop.currency.separatorMil);
131         var max_value = number_format(val_max_sel, windowLocation.JSVars.shop.currency.numberDec, windowLocation.JSVars.shop.currency.separatorDec, windowLocation.JSVars.shop.currency.separatorMil);
132         
133         $("#slider-range").slider("values", 0, val_min_sel);
134         $("#slider-range").slider("values", 1, val_max_sel);
135         $('#preco_min').val(val_min_sel);
136         $('#preco_max').val(val_max_sel);
137         $('.numbers .min .n').text(min_value);
138         $('.numbers .max .n').text(max_value);
139      } else {
140         $.each(value.values, function(k, v){
141            if(v.enabled == 1) {
142               $('.filters input[flttype="'+value.field+'"][fltid="'+v.id+'"]').attr('enabled', v.enabled).prop('disabled', false).parents('.checkbox').removeClass('disabled');
143            } else {
144               $('.filters input[flttype="'+value.field+'"][fltid="'+v.id+'"]').attr('enabled', v.enabled).prop('disabled', true).parents('.checkbox').addClass('disabled');
145            }
146
147            var actual_cor = v.id.split(",");
148            var actual_checked = false;
149
150            $(actual_cor).each(function(kco, vco){
151               if(valores_selecionados.indexOf(vco) >= 0) {
152                  actual_checked = true;
153               }
154            });
155
156            $('.filters input[flttype="'+value.field+'"][fltid="'+v.id+'"]').prop("checked", actual_checked);
157         });
158      }
159
160      if(value.selected_id != ''){
161         $('.clear-filter[flttype="'+value.field+'"]').addClass('active').closest(".box-filter").addClass('active');
162      } else {
163         $('.clear-filter[flttype="'+value.field+'"]').removeClass('active').closest(".box-filter").removeClass('active');
164      }
165   });
166
167   if(data.response.active_filters > 0) {
168      $('.clear-filters-div').css("display", "inline-block");
169   } else {
170      $('.clear-filters-div').hide();
171
172      if(!fieldV) {
173         $('.filters input').prop('checked', false);
174      }
175   }
176
177   totalFilters({products_count : data.response.products_count});
178}
179
180function changePrice(totalFilters){
181   mudou_filtros = 1;
182   $('.list-overlay:not(:visible)').fadeIn('fast');
183   timeoutListOverlay = setTimeout(function(){ timeoutListOverlay = ""; $('.list-overlay').hide(); }, 5000);
184
185   var pmi = $('#preco_min').val();
186   var pma = $('#preco_max').val();
187   
188   if(totalFilters == undefined)
189      totalFilters = 1;
190
191   angular.element($("[ng-controller=filterscontroller]")).scope().setFilterPriceGlobal({filter: {min: pmi, max: pma}, totalFilters : totalFilters});
192}
193
194function totalFilters(data) {
195   var products_count = (data != undefined && data.products_count != undefined) ? data.products_count : null;
196   var filtersActive = [];
197
198   $('.filters .box-filter').each(function(key, value){
199      var filtersTotal = $(this).find('input[type="checkbox"]:checked').length;
200      var namesSelected = "";
201      var idsSelected = "";
202      var filterValues = [];
203      var itemFilterActive = {
204         name : $(this).find(".title-filter .item-name").text(),
205         field: $(this).find("[flttype]").attr("flttype"),
206         selected_id : idsSelected,
207         values : filterValues
208      }
209
210      if(filtersTotal > 0) {
211         $(this).children('.title-filter').find('.total-filter-active').html(' <span>(</span>'+filtersTotal+'<span>)</span>');
212      } else {
213         $(this).children('.title-filter').find('.total-filter-active').html('');
214      }
215
216      var auxKeyChecked = 0;
217      $(this).find('input[type="checkbox"]').each(function(k, v){
218         var fltid = $(this).attr('fltid');
219         var fltname = $(this).attr('data-filter-name');
220         var disabled = $(this).prop("disabled");
221         var checked = $(this).prop("checked");
222
223         if(checked) {
224            $(this).parents(".checkbox").addClass("active");
225            if(auxKeyChecked != 0) {
226               namesSelected += ', ';
227               idsSelected += ',';
228            }
229            namesSelected  += fltname;
230            idsSelected    += fltid;
231            auxKeyChecked++;
232            
233         } else {
234            $(this).parents(".checkbox").removeClass("active");
235         }
236
237         filterValues.push({
238            id: fltid,
239            name: fltname,
240            enabled: !disabled,
241            active: checked
242         });
243      });
244
245      if(idsSelected != "" || filterValues.length > 0) {
246         itemFilterActive.selected_id = idsSelected;
247         itemFilterActive.values = filterValues;
248      }
249
250      $(this).children('.title-filter').find('.names-filter-active').text(namesSelected);
251
252      if($(this).find("#slider-range").length > 0) {
253         namesSelected = "";         
254         var preco_min_init = Number($(".filters .price .numbers").attr("preco_min_init"));
255         var preco_max_init = Number($(".filters .price .numbers").attr("preco_max_init"));
256         var preco_min_format = $(".price .min .p").text()+$(".price .min .n").text()+$(".price .min .s").text();
257         var preco_max_format = $(".price .max .p").text()+$(".price .max .n").text()+$(".price .max .s").text();
258
259         if(preco_min_init != $("#preco_min").val() || preco_max_init != $("#preco_max").val()) {
260            namesSelected = preco_min_format+" - "+preco_max_format;
261         }
262         
263         $(this).children('.title-filter').find(".names-filter-active").html(namesSelected);
264         itemFilterActive.selected_id = namesSelected;
265
266         filterValues = [
267            {
268               id: 0,
269               name: preco_min_format,
270               enabled: true,
271               active: (namesSelected != "") ? true : false
272            },
273            {
274               id: 1,
275               name: preco_max_format,
276               enabled: true,
277               active: (namesSelected != "") ? true : false
278            }
279         ];
280
281         itemFilterActive.values = filterValues;
282      }
283
284      filtersActive.push(itemFilterActive);
285   });
286
287   var activeFiltersArray = 0;
288   $.each(filtersActive, function(k, v){
289      $.each(v.values, function(k2,v2){
290         if (v2.active == true) activeFiltersArray++;
291      });
292      if (v.field == 'preco' && v.selected_id != '') activeFiltersArray--;
293   });
294
295   if(activeFiltersArray> 0)
296      $("#filters-total").html(activeFiltersArray).css("display", "inline-block");
297   else
298      $("#filters-total").html("").hide();
299
300   if(typeof activeFiltersCustom == "function")
301      activeFiltersCustom(filtersActive, products_count);
302}
303
304app.controller("filterscontroller", function($scope, $http, $rootScope) {
305
306   $('.filters input[type=checkbox]').change(function(event){
307      mudou_filtros = 1;
308      $('.list-overlay:not(:visible)').fadeIn('fast');
309      timeoutListOverlay = setTimeout(function(){ timeoutListOverlay = ""; $('.list-overlay').hide(); }, 5000);
310
311      $scope.setFiltersGlobal({$elem: event, filter: {field: $(this).attr('flttype'), values: $(this).attr('fltid')}
311});
312   });
313
314   $('.filters .clear-filter').on('click', function(event){
315      event.stopPropagation();
316      var fieldV = $(this).attr('flttype');
317      $('.list-overlay:not(:visible)').fadeIn('fast');
318      timeoutListOverlay = setTimeout(function(){ timeoutListOverlay = ""; $('.list-overlay').hide(); }, 5000);
319
320      $scope.resetFiltersGlobal(fieldV);
321      if(windowLocation.JSVars.shop.templatesParams.list_filters_opened == 0)
322         $(this).closest(".title-filter").trigger("click");
323   });
324
325   $(".clear-filters-div .clear-filters").click(function(event){
326      event.stopPropagation();
327      $('.list-overlay:not(:visible)').fadeIn('fast');
328      $("#wrapper-filters-sidebar .bottom-filters-button .button").removeClass("disabled");
329      timeoutListOverlay = setTimeout(function(){ timeoutListOverlay = ""; $('.list-overlay').hide(); }, 5000);
330
331      $scope.resetFiltersGlobal();
332      if(windowLocation.JSVars.shop.templatesParams.list_filters_opened == 0)
333         $(".filters .box-filter:not(.closed)").find(".title-filter").trigger("click");
334   });
335
336   $(".order input[type='checkbox']").on("change", function(event){
337      $('.list-overlay').fadeIn('fast');
338      timeoutListOverlay = setTimeout(function(){ timeoutListOverlay = ""; $('.list-overlay').hide(); }, 5000);
339
340      var fieldV = $(this).attr("name"), valuesV = $(this).val(), prop_checed = 0;
341
342      if($(this).is(":checked")){prop_checed = 1;}
343
344      $(".order input[type='checkbox']").prop("checked", false);
345      if( prop_checed == 1 ) {
346         $(this).prop("checked", true);
347         $(".order .exp2").html($(this).closest("label").find('.filter-name').text());
348      } else {
349         $(".order .exp2").html(windowLocation.JSVars.expressions[6]);
350      }
351
352      $scope.setOrderByGlobal({$elem: event, order_by: { field: fieldV, value: valuesV }});
353   });
354
355   $scope.setFiltersGlobal = function (data) {
356      if(data.filter != undefined) {
357         var filter = data.filter;
358         var field = filter.field;
359         var obj = {'page_id': windowLocation.JSVars.selectedPage.id, filter: filter};
360      } else {
361         var filter = data.filters;
362         var obj = {'page_id': windowLocation.JSVars.selectedPage.id, filters: filter};
363      }
364
365      window.scrollTo(0, 0);
366
367      $.post( "/api/api.php/setFilters", obj).done(function(data, status, headers, config){
368         $scope.getProductsBylistOrSearch();
369         $("#wrapper-filters-sidebar .bottom-filters-button .button").removeClass("disabled");
370      });
371   };
372
373   $scope.getProductsGlobal = function(field){
374      var HTTP_URL = '/api/api.php/getProducts/'+windowLocation.JSVars.selectedPage.id +'/'+ windowLocation.JSVars.selectedPage.cat +'/0/1/'+ windowLocation.JSVars.shop.templatesParams.page;
375
376      $http.get(HTTP_URL).success(function(data, status, headers, config) {
377         if(windowLocation.JSVars.debug == 1) {
378            console.log("->data.response.products");
379            console.log(data.response.products);
380         }
381         
382         if(typeof buildFilters == "function")
383            buildFilters(data, field);
384
385         if(typeof buildProducts == "function")
386            buildProducts(data);
387
388         $(".column-horizontal").remove();
389
390         setTimeout(function(){
391            if($('.custom-scrollbar-filters').length > 0 ){ // && typeof $.fn.perfectScrollbar == "function" && 'ontouchstart' in window == false
392               $('.custom-scrollbar-filters').perfectScrollbar('update');
393            }
394         }, 100);
395      });
396   }
397
398   $scope.resetFiltersGlobal = function (field) {
399      var HTTP_URL = '/api/api.php/resetFilters/'+ windowLocation.JSVars.selectedPage.id;
400
401      if(field != undefined) {
402         HTTP_URL += '/'+ field;
403      }
404
405      window.scrollTo(0, 0);
406
407      $http.get(HTTP_URL).success(function(data, status, headers, config) {
408         $scope.getProductsBylistOrSearch();
409      });
410      
411   };
412
413   $scope.setOrderByGlobal = function(object){
414      var filter = object.order_by;
415      var getproduct = object.getproduct;
416
417      $http.post('/api/api.php/setOrderBy', { page_id: windowLocation.JSVars.selectedPage.id, 'order_by': filter}).success(function(data, status, headers, config) {
418         $('.order .order-dropdown').css('display','none');
419
420         if(getproduct == 0)
421            return false;
422
423         $scope.getProductsBylistOrSearch();
424      });
425   }
426
427   $scope.setFilterPriceGlobal = function(object){
428      var filter = object.filter;
429      var totalFilters = object.totalFilters;
430      
431      $http.post('/api/api.php/setFilterPrice', { page_id: windowLocation.JSVars.selectedPage.id, 'filter': filter}).success(function(data, status, headers, config) {
432         
433         if(totalFilters == 0)
434            return;
435
436         $scope.getProductsBylistOrSearch();
437
438         $("#wrapper-filters-sidebar .bottom-filters-button .button").removeClass("disabled");
439      });
440   }
441
442   $scope.getSearchAuto = function(filter, field){
443      var dataPost = {
444         terms: windowLocation.JSVars.search.terms,
445         offset: offset,
446         page: windowLocation.JSVars.shop.templatesParams.page
447      }
448
449      if(filter != undefined && field != undefined) {
450         var dataPost = {
451            terms: windowLocation.JSVars.search.terms,
452            filter: filter,
453            offset: offset,
454            page: windowLocation.JSVars.shop.templatesParams.page
455         }
456      }
457
458      $http.post('/api/api.php/getSearchAuto/', dataPost).success(function(data, status, headers, config) {
459         if(typeof data != "object")
460            var data = $.parseJSON(data);
461         
462         if(typeof buildFilters == "function")
463               buildFilters(data, field);
464
465         if(buildProducts == "function")
466            buildProducts(data);
467      });
468   }
469
470   $scope.getSearch = function(filter, field) {
471      $http.get('/api/api.php/search/'+windowLocation.JSVars.search.terms+'/'+offset).success(function(data, status, headers, config) {
472         if(typeof data != "object")
473            var data = $.parseJSON(data);
474
475         if(typeof buildFilters == "function")
476            buildFilters(data, field);
477
478         if(typeof buildProducts == "function")
479            buildProducts(data);
480      });
481   }
482
483   $scope.getProductsBylistOrSearch = function(){
484      windowLocation.JSVars.shop.templatesParams.page = 1;
485      offset = 0;
486      clearType = "clear";
487
488      if(windowLocation.JSVars.shop.templatesParams.module == 'search') {
489         if(windowLocation.JSVars.shop.templatesParams.solr == 1)
490            $scope.getSearchAuto();
491         else
492            $scope.getSearch();
493      } else {
494         $scope.getProductsGlobal();
495      }
496   }
497
498});

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.