PageSourceSearch

https://coach-outlets.ru/catalog/view/javascript/adv_ajaxfilter.js

js coach-outlets.ru collected 2026-10-06 00:30:55 UTC 15,903 bytes, 495 lines download raw bytes

1var timeoutID   = 0;
2var cache       = [];
3var delay       = 1;
4var container   = "";
5var tag_tmpl    = $.template(null, '<tr><td><input id="tag_${tag}" class="filtered" type="checkbox" name="tags[]" value="${tag}" {{if checked}} checked="checked" {{/if}}></td><td><label for="tag_${tag}">${name}</label></td></tr>');
6var cat_tmpl    = $.template(null, '<tr><td><input id="cat_${category_id}" class="filtered cat_name" type="checkbox" name="categories[]" value="${category_id}" {{if checked}} checked="checked" {{/if}}><label for="cat_${category_id}">${name}</label></td></tr>');
7
8if (!Array.prototype.indexOf) {
9    Array.prototype.indexOf = function(obj, start) {
10        for (var i = (start || 0), j = this.length; i < j; i++) {
11            if (this[i] === obj) {
12                return i;
13            }
14        }
15        return -1;
16    }
17}
18
19String.prototype.hashCode = function(){
20    var hash = 0, i, ch;
21    if (this.length == 0) return hash;
22    for (i = 0; i < this.length; i++) {
23        ch = this.charCodeAt(i);
24        hash = ((hash<<5)-hash)+ch;
25        hash = hash & hash;
26    }
27    return hash;
28};
29
30$(document).on('change', '.price_limit', (function () {
31    var b = parseInt($("#min_price").val());
32    var a = parseInt($("#max_price").val());
33    $("#slider-range").slider("values", [b, a]);
34    delayedFilter()
35}));
36
37$(document).on('change', '#adv_ajaxfilter .filtered', (function () {
38    delayedFilter();
39}));
40
41$(function () {
42    $("#slider-range").slider({
43        range:true,
44        min:0,
45        max:0,
46        values:[0, 0],
47        stop:function (a, b) { delayedFilter() },
48        slide:function (a, b) {
49            $("#min_price").val(b.values[0]);
50            $("#max_price").val(b.values[1])
51        }
52    });
53
54    $("#min_price").val($("#slider-range").slider("values", 0));
55    $("#max_price").val($("#slider-range").slider("values", 1))
56});
57
58$(document).ready(function () {
59    container = getContainer();
60
61    $(".option_box .option_name").click(function () {
62        $(this).siblings(".collapsible").toggle();
63
64        if ($(this).hasClass('hided')) {
65
66            $(this).removeClass('hided')
67        }else{
68            $('.option_name').removeClass('hided')
69            $(this).addClass('hided')
70        }
71        //$(this).toggleClass("hided")
72    });
73    
74    $(".option_box .attribute_group_name").click(function () {
75        $(this).siblings(".attribute_box").toggle();
76        $(this).toggleClass("hided")
77    });
78    
79    $(".clear_filter").click(function () {
80        $("#adv_ajaxfilter img").removeClass("selected");
81        $("#adv_ajaxfilter select").val("");
82        console.log('чек');
83        var rez = $(this).attr('id');
84
85        if(rez){
86        console.log(rez);
87        $(`#${rez} :input`).each(function () {
88            if ($(this).is(":checked")) {
89                $(this).attr("checked", false)
90                console.log('чек');
91            }
92        });
93        }else{
94         $("#adv_ajaxfilter :input").each(function () {
95            if ($(this).is(":checked")) {
96                $(this).attr("checked", false)
97                console.log('чек');
98            }
99        });
100        }   
101        
102        if(rez === 'pricesl21' || !rez){
103
104        var b = $("#slider-range").slider("option", "min");
105        var a = $("#slider-range").slider("option", "max");
106        
107        $("#slider-range").slider("option", {values:[b, a]});
108        $("#min_price").val(b);
109        $("#max_price").val(a);
110        
111        $("div[id^=slider-range-]").each(function(index, element) {
112            var id = this.id.replace(/[^\d]/g, '');
113            var b = $(element).slider("option", "min");
114            var a = $(element).slider("option", "max");
115            
116            hs = $(element).slider();
117            hs.slider("option", {values:[b, a]});
118            hs.slider("option","slide").call(hs, null, { handle: $(".ui-slider-handle", hs), values:[b, a] });
119    
120            $("#attribute_value_"+id+"_min").val('');
121            $("#attribute_value_"+id+"_max").val('');
122    
123        });
124
125        }
126        delayedFilter()
127    });
128
129
130
131    $(document).on('click', '.pagination a', (function () {
132
133        page_class_add()
134        
135
136
137        var a = $(this).attr("href");
138        var b = a.match(/page=(\d+)/);
139        $("#adv_ajaxfilter_page").val(b[1]);
140        filter(false);
141        var cont = getContainer();
142        $('html, body').animate({ scrollTop: $(cont).offset().top }, 'slow');
143        return false;
144    }));
145
146    if($("#sort-by select").length){
147        $("#sort-by select").get(0).onchange = null;
148        $("#sort-by select").change(function () {
149            var d = $(this).val();
150            var a = getUrlVar(d, "sort");
151            var b = getUrlVar(d, "order");
152            $("#adv_ajaxfilter_sort").val(a);
153            $("#adv_ajaxfilter_order").val(b);
154            delayedFilter()
155        });
156    }
157
158    if ($("#limiter select").length) {
159        $("#limiter select").get(0).onchange = null;
160        $("#limiter select").change(function () {
161            $("#adv_ajaxfilter_limit").val(getUrlVar($(this).val(), "limit"));
162            delayedFilter()
163        });
164    }
165
166    // deserialize
167    var hash = window.location.hash.substr(1);
168    if (hash && $('instock').is(':visible') && $('instock').is(':checked')) {
169        $('instock').attr("checked", false);
170        console.log('чек');
171    }
172    
173    $("#adv_ajaxfilter").deserialize(hash);
174
175    syncImgCbs();
176
177    $("#adv_ajaxfilter img").bind("click", function() {
178        var $input = $(this).prev("input");
179        if ($input.attr("disabled")) {
180            return;
181        }
182        $(this).toggleClass("selected");
183        $input.prop('checked', !$input.prop('checked'));
184        console.log('чек');
185        delayedFilter();
186    });
187
188    $("div[id^=slider-range-]").each(function(index, element) {
189	
190        var id = this.id.replace(/[^\d]/g, '');
191	var arr = window['attr_arr_'+id];
192
193	var b = parseInt($("#attribute_value_"+id+"_min").val());
194	var a = parseInt($("#attribute_value_"+id+"_max").val());
195	b = arr.indexOf(b);
196	a = arr.indexOf(a);
197	if (a >= 0 && b >= 0){
198	    hs = $(element).slider();
199	    hs.slider("option", {values:[b, a]});
200	    hs.slider("option","slide").call(hs, null, { handle: $(".ui-slider-handle", hs), values:[b, a] });
201	}
202    });
203
204    if ($("#sort-by select").length) {
205        if ($("#adv_ajaxfilter_sort").val()) {
206            $("#sort-by select").each(function(i, e) {
207                if (getUrlVar($(this).val(), "sort") == $("#adv_ajaxfilter_sort").val() && getUrlVar($(this).val(), "order") == $("#adv_ajaxfilter_order").val()) {
208                    $(".sort select").val($(this).val());
209                    return;
210                }
211            });
212        } else {
213            $val = $("#sort-by select").val();
214            $("#adv_ajaxfilter_sort").val(getUrlVar($val, "sort"));
215            $("#adv_ajaxfilter_order").val(getUrlVar($val, "order"))
216        }
217    }
218    if ($("#adv_ajaxfilter_limit").length) {
219        if ($("#adv_ajaxfilter_limit").val()) {
220            $("#limiter select").val($("#adv_ajaxfilter_limit").val());
221        } else {
222            $("#adv_ajaxfilter_limit").val(getUrlVar($("#limiter select").val(), "limit"));
223        }
224    }
225
226    console.log('filter');
227    filter(true, true);
228});
229
230function replaceHtml(a) {
231    return  a.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
232}
233
234function getUrlVar(url, rvar ) {
235    var a = String(url).split("?");
236    var _var = "";
237    if (a[1]) {
238        var vars = a[1].split("&");
239        for (var i = 0; i <= (vars.length); i++) {
240            if (vars[i]) {
241                var b = vars[i].split("=");
242                if (b[0] && b[0] == rvar) {
243                    _var = b[1];
244                }
245            }
246        }
247    }
248    return _var;
249}
250
251function syncImgCbs() {
252    $("#adv_ajaxfilter input.filtered[type=\"checkbox\"]").each(function() {
253        var $img = $(this).next('img');
254        if ($img.length) {
255            if ($(this).is(":checked")) {
256                $img.addClass("selected");
257
258            } else {
259                $img.removeClass("selected");
260                console.log('чек');
261            }
262        }
263    });
264}
265
266function filter(b, c ) {
267
268    var a = $("#adv_ajaxfilter").serialize().replace(/[^&]+=\.?(?:&|$)/g, "").replace(/&+$/, "");
269
270
271    var param = new URLSearchParams(window.location.search).get(
272        "old"
273      );
274
275    a += "&old=" + param;
276
277
278    console.log(a)
279	var cont = getContainer();
280    if (!b) {
281        window.location.hash = a
282    }
283    var h = a.hashCode();
284
285    var route = $("#adv_ajaxfilter_route").val();
286    var url   = $("#adv_ajaxfilter_url").val();
287	var _cont = $(cont);
288	
289    if(route != 'product/adv_ajaxfilter' && _cont.length < 1){
290        window.location = url+ '#' + a;
291    }
292
293    if (cache[h]){
294        adv_result(cache[h]);
295        console.log(cache[h]);
296    } else {
297        $(cont).advOverlay();
298        $("#adv_ajaxfilter").advOverlay();
299
300        $.ajax({url:"index.php?route=module/adv_ajaxfilter/getproducts", type:"POST", data:a + (b ? "&getPriceLimits=true" : ""), dataType:"json",
301            success:function (g) {
302				
303                adv_result(g, b);
304                cache[h] = g;
305                var cont = getContainer();
306                $(cont).advUnoverlay();
307                $("#adv_ajaxfilter").advUnoverlay();
308            }
309		});
310    }
311}
312
313function adv_result(g, b) {
314    var cont = getContainer();
315    var view = 'product-layout';
316
317    var hash = window.location.hash.substr(1);
318    if (typeof(g.result_html) != "undefined") {
319        $(cont).parent().html(g.result_html);
320        if (localStorage.getItem('display') == 'list') {
321       		$('#list-view').trigger('click');
322       	} else {
323       		$('#grid-view').trigger('click');
324       	}
325        afterload();
326
327        if(g.pagination == '') {
328            g.pagination = '<ul class="pagination"></ul>';
329        }
330
331        $(".pagination").parent().parent().children().last().html(g.pagination_result);
332		$(".pagination").parent().html(g.pagination);
333
334		if (b && g.min_price == g.max_price) {
335			$('.price_slider').hide();
336		}
337    }
338    
339    var d = parseInt(g.min_price);
340    var c = Math.ceil(parseFloat(g.max_price));
341    if (b) {
342        $("#slider-range").slider("option", {min:d, max:c});
343        if ($("#max_price").val() >= 1) {
344            d = parseInt($("#min_price").val());
345            c = parseInt($("#max_price").val())
346        }
347        $("#slider-range").slider("option", {values:[d, c]});
348        $("#min_price").val(d);
349        $("#max_price").val(c)
350    }
351	
352    if (g.totals_data) {
353
354        $('#filter_categories').html('');
355        if (g.totals_data.categories.length) {
356            $.tmpl(cat_tmpl, g.totals_data.categories).appendTo('#filter_categories');
357            $('#filter_categories').parents('.option_box').show();
358        } else {
359            $('#filter_categories').parents('.option_box').hide();
360        }
361
362        var atts = {};
363        $.each(g.totals_data.attributes, function(k, v) {
364            console.log('here',v)
365            atts[(v.id + "_" + v.text).replace(/\s/g, '_')] = v.t;
366        });
367       // console.log('вот тут количество в фильтре',atts);
368        $('.a_name').each(function (k, v) {
369            var at_v_i = $(v).attr('at_v_i').replace(/\s/g, '_');
370            var at_v_i_e = replaceHtml(at_v_i);
371            console.log(at_v_i);    
372            if (atts[at_v_i]) {
373                $('[at_v_t="' + at_v_i_e + '"]').text($('[at_v_t="' + at_v_i_e + '"]').attr('data-value') + " (" + atts[at_v_i] + ")");
374                $(v).removeAttr("disabled");
375           
376            } else {
377            
378                $('[at_v_t="' + at_v_i_e + '"]').text($('[at_v_t="' + at_v_i_e + '"]').attr('data-value'));
379                $(v).attr("disabled", true)
380                $(v).removeAttr('checked');
381                $(v).removeAttr(':selected');
382                
383              
384            }
385        });
386
387        var h = [];
388        $.each(g.totals_data.manufacturers, function (f, k) {
389            if (k.id) {
390                h[h.length] = k.id;
391                var j = $("#manufacturer_" + k.id);
392                if (j.length == 0) {
393                    return;
394                }
395                j.removeAttr("disabled");
396                if (j.get(0).tagName == "OPTION") {
397                    j.text($("#m_" + k.id).val() + " (" + k.t + ")")
398                } else {
399                    $('label[for="manufacturer_' + k.id + '"]').text($("#m_" + k.id).val() + " (" + k.t + ")")
400                }
401            }
402        });
403        $(".manufacturer_value").each(function (f, k) {
404            var j = $(this);
405            var l = j.attr("id").match(/manufacturer_(\d+)/);
406            if ($.inArray(l[1], h) < 0) {
407                j.attr("disabled", "disabled");
408                if (this.tagName == "OPTION") {
409                    j.text($("#m_" + l[1]).val());
410                    j.prop("selected", false)
411                } else {
412                    $('label[for="manufacturer_' + l[1] + '"]').text($("#m_" + l[1]).val());
413                    j.prop("checked", false)
414                }
415            }
416        });
417        var e = [];
418        $.each(g.totals_data.options, function (j, k) {
419            if (k.id) {
420                e[e.length] = k.id;
421                var f = $("#option_value_" + k.id);
422                if (f.length) {
423                    f.removeAttr("disabled");
424                    if (f.get(0).tagName == "OPTION") {
425                        f.text($("#o_" + k.id).val() + " (" + k.t + ")")
426                    } else {
427                        $('label[for="option_value_' + k.id + '"]').text($("#o_" + k.id).val() + " (" + k.t + ")")
428                    }
429                }
430            }
431        });
432        $(".option_value").each(function (j, k) {
433            var f = $(this);
434            var l = f.attr("id").match(/option_value_(\d+)/);
435            if ($.inArray(l[1], e) < 0) {
436                f.attr("disabled", "disabled");
437                if (this.tagName == "OPTION") {
438                    f.text($("#o_" + l[1]).val());
439                    f.attr("selected", false)
440                    console.log('чек');
441                } else {
442                    $('label[for="option_value_' + l[1] + '"]').text($("#o_" + l[1]).val());
443                    f.attr("checked", false)
444                    console.log('чек');
445                }
446            }
447        })
448    }
449
450    // additional image when you hover on the product
451    $('.item-img-info').each(function () {
452        if($(this).find('img').attr('data-additional')) {
453            $(this).find('img').first().addClass('main');
454            $(this).children('a').append('<img src="'+$(this).find('.main').attr('data-additional')+'" class="additional" title="'+$(this).find('.main').attr('alt')+'" />');
455        }
456    });
457
458    // scroll sidebar on page of category
459        if ( $(window).width() > 768 ) {
460            var columnLeftHeight = document.getElementById('column-left').offsetHeight;
461            var contentHeight = document.getElementById('content').offsetHeight;
462            if (contentHeight > columnLeftHeight) {
463                $("#column-left").stick_in_parent({
464                    offset_top: 130,
465                    spacer: false
466                });
467            } else {
468                $("#column-left").trigger("sticky_kit:detach");
469            }
470        }
471}
472
473function getContainer(){
474    return '.product-layout';
475}
476
477function delayedFilter() {
478    clearTimeout(timeoutID);
479    $("#adv_ajaxfilter_page").val(0);
480    timeoutID = setTimeout("filter(false, false)", delay)
481
482}
483
484function page_class_add(){
485    setTimeout(function(){
486            $('.pagination li a').each(function(){
487
488
489                
490                
491               // console.log(thatTxt);
492            })    
493        },400)
494}
495page_class_add()

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.