PageSourceSearch

https://skomplekt.com/site/skomplekt/js/configurator.js

js skomplekt.com collected 2026-10-02 06:21:22 UTC 5,220 bytes, 162 lines download raw bytes

1function deployConfigurator(configuratorId) {
2    $('.configurator')
3        .data('configurator_id', configuratorId)
4        .on('change', 'input', filtersChanged)
5        .fadeIn(100);
6
7    $('.configurator__title').text($('.configurator__title_data').text());
8
9    initFirstLoad(configuratorId);
10}
11
12function closeConfigurator() {
13    $('.configurator')
14        .fadeOut(100, function () {
15            $('.configurator__filters-block').html('');
16            $('.configurator__products-block').html('');
17            $('.configurator').data('page', 1);
18        });
19}
20
21function changeConfiguratorLimit() {
22    $('.configurator').data('page', 1);
23    getProductsList();
24}
25
26function initFirstLoad(configuratorId) {
27    getFiltersList(configuratorId, function () {
28        getProductsList();
29    });
30}
31
32function getProductsList() {
33    $.ajax({
34        url: '/index.php?route=product/configurator/getProductsList',
35        type: 'POST',
36        data: getFormParams(),
37        beforeSend: function () {
38            $('.configurator__products-block').html('<img class="configurator__wait" src="/catalog/view/image/loading.gif">');
39        },
40        complete: function () {
41            $('.configurator__wait').remove();
42        },
43        success: function (productsBlockHtml) {
44            $('.configurator__products-block').html(productsBlockHtml);
45            $('.pagination-configurator__item').click(function () {
46                var thisElement = $(this);
47                if (!thisElement.hasClass('pagination-configurator__item_current')) {
48                    var configuratorElement = $('.configurator');
49                    configuratorElement.data('page', thisElement.data('page'));
50                    $('body').animate({scrollTop: configuratorElement.scrollTop()}, 400);
51                    getProductsList();
52                }
53            });
54            $('.content').css('display', 'none');
55            $('.m-social-line').css('display', 'none');
56        }
57    });
58}
59
60function getFormParams() {
61    var params = [];
62
63    $('.configurator__filters-block input').each(function () {
64        var thisElem = $(this);
65        if (thisElem.prop('type') == 'checkbox') {
66            if (!thisElem.prop('checked')) {
67                return;
68            }
69        }
70
71        params.push(thisElem.attr('name') + '=' + thisElem.val());
72    });
73
74    var limit = $('#configurator_limit').val();
75    if (limit) {
76        params.push('limit=' + limit);
77    }
78
79    var page = $('.configurator').data('page');
80    if (page && parseInt(page)) {
81        params.push('page=' + parseInt(page));
82    } else {
83        params.push('page=1');
84    }
85
86    return params.join('&');
87}
88
89function getFiltersList(configuratorId, callback) {
90    var filterBlock = $('.template .configurator-filter');
91
92    $.ajax({
93        url: '/index.php?route=product/configurator/getFiltersList',
94        data: {configurator_id: configuratorId},
95        type: 'POST',
96        dataType: 'json',
97        beforeSend: function () {
98
99        },
100        success: function (filters) {
101            $('.configurator__filters-block').append('<input type="hidden" name="configurator_id" value="' + configuratorId + '">');
102            (function recursiveDeployFilterTree(filters, parentElem, recursion) {
103                for (var key in filters) {
104                    var newFilterElem = filterBlock.clone();
105                    parentElem.append(newFilterElem);
106
107                    newFilterElem.find('.configurator-filter__name').text(filters[key]['name']);
108                    newFilterElem.find('.configurator-filter__values').append(getFilterValues(filters[key]['filter']['filter_id'], filters[key]['filter']['type'], filters[key]['filter']['presets']));
109
110                    if (filters[key].children && filters[key].children.length) {
111                        recursiveDeployFilterTree(filters[key].children, newFilterElem.find('.configurator-filter__children'), recursion + 1);
112                    }
113                }
114            }(filters, $('.configurator__filters-block'), 1));
115
116            callback();
117        },
118        complete: function () {
119
120        }
121    });
122}
123
124function getFilterValues(filterId, type, presets) {
125    var valueElement, stack = [], uniqueId;
126    switch (type) {
127        case 'multi':
128            for (var key in presets) {
129                uniqueId = Math.random();
130                valueElement = $('.template .configurator-filter__value_checkbox').clone();
131
132                valueElement.find('input').attr({
133                    name: 'filters[' + filterId + '][]',
134                    id: uniqueId,
135                    value: key
136                });
137                valueElement.find('label').attr('for', uniqueId).text(preset
137s[key]);
138
139                stack.push(valueElement);
140            }
141
142            valueElement = stack;
143            break;
144        case 'range':
145            break;
146        case 'bool':
147            break;
148    }
149    return valueElement;
150}
151
152var filtersChangeTimeout;
153function filtersChanged() {
154    if (filtersChangeTimeout) {
155        clearTimeout(filtersChangeTimeout);
156    }
157
158    filtersChangeTimeout = setTimeout(function () {
159        $('.configurator').data('page', 1);
160        getProductsList();
161    }, 400);
162}

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.