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.