1"use strict"; 2var disableAjax = !1; 3var applyButton = !1; 4 5$(document).ready(function() { 6 var tooltipPosition = 'left'; 7 var htmlTimeout = null; 8 var rangeableMainProperties = ["price", "length", "width", "height"]; 9 var listableMainProperties = ["producer", "seller"]; 10 var priceGroup = ["price_group"]; 11 $.fn.serializeObject = function() { 12 var arrayData, objectData; 13 arrayData = this.serializeArray(); 14 objectData = {}; 15 $.each(arrayData, function() { 16 var value; 17 if (this.value != null) { 18 value = this.value 19 } else { 20 value = '' 21 } 22 if (objectData[this.name] != null) { 23 if (!objectData[this.name].push) { 24 objectData[this.name] = [objectData[this.name]] 25 } 26 objectData[this.name].push(value) 27 } else { 28 objectData[this.name] = value 29 } 30 }); 31 return objectData 32 }; 33 if (tooltipPosition !== 'right') { 34 tooltipPosition = 'left' 35 } 36 $.fn.tooltipster('setDefaults', { 37 interactive: !0, 38 contentAsHTML: !0, 39 content: '', 40 theme: 'tooltipster-light', 41 onlyOne: !0, 42 trigger: 'custom', 43 position: tooltipPosition 44 }); 45 var controls = $('.filter .form-control, .filter_item'); 46 controls.tooltipster(); 47 $('.filter_slider').each(function(indx, element) { 48 setSlider(element) 49 }); 50 var filter_form_main = $('#filter_form_main'); 51 var filter_form_aside = $('#filter_form'); 52 var itemsContainer = $('#filters-ajax-container'); 53 disableAjax = filter_form_main.data('disable_ajax'); 54 var useAjaxContentLoad = !disableAjax && filter_form_main.data('use_ajax_content_load') && itemsContainer.length; 55 var ajaxContentLoadDelay = (filter_form_main.data('ajax_content_load_delay') || 250) * 1; 56 applyButton = (filter_form_main.data('use_apply') || !1); 57 $('body').on('change', '.extended-filters-sorting', function(event) { 58 event.preventDefault(); 59 event.stopPropagation(); 60 var filter_ctx = $(event.currentTarget); 61 var filterForm = filter_ctx.closest('form'); 62 var url = makeFilterUrl(filterForm); 63 if (disableAjax) { 64 window.location.href = url; 65 return !1 66 } else { 67 return ajaxContentLoad({ 68 url: url, 69 append: false 70 }) 71 } 72 }); 73 74 function linksHandler(event) { 75 event.preventDefault(); 76 event.stopPropagation(); 77 var url = $(this).attr('href'); 78 var bAppend = false; 79 var skipHistoryPush = false; 80 if ($(this).attr('data-append')) { 81 bAppend = true; 82 skipHistoryPush = true; 83 } 84 return ajaxContentLoad({ 85 url: url, 86 skipHistoryPush: skipHistoryPush, 87 append: bAppend 88 }) 89 } 90 91 function initLinks() { 92 $('.pagination a, .on-page a').off('click', linksHandler).on('click', linksHandler) 93 } 94 if (useAjaxContentLoad) { 95 initLinks(); 96 window.onpopstate = function(e) { 97 e.preventDefault(); 98 e.stopPropagation(); 99 if (e.state) { 100 if (e.state.html) { 101 itemsContainer.html(e.state.html); 102 scrollToViewport(itemsContainer) 103 } else { 104 ajaxContentLoad({ 105 url: window.location.href, 106 skipHistoryPush: !0 107 }) 108 } 109 } else { 110 ajaxContentLoad({ 111 url: window.location.href, 112 skipHistoryPush: !0 113 }) 114 } 115 } 116 } 117 var makeFilterUrl = function(currentForm) { 118 filter_form_main.find('input[type=hidden]').attr('disabled', 'disabled'); 119 filter_form_aside.find('input[type=hidden]').attr('disabled', 'disabled'); 120 var filterFormMainParams = filter_form_main.serializeObject(); 121 var filterFormAsideParams = filter_form_aside.serializeObject(); 122 filter_form_main.find('input[type=hidden]').removeAttr('disabled'); 123 filter_form_aside.find('input[type=hidden]').removeAttr('disabled'); 124 var resultParams = {}; 125 if (currentForm.attr('id') === 'filter_form_main') { 126 resultParams = $.extend({}, filterFormAsideParams, filterFormMainParams) 127 } else { 128 resultParams = $.extend({}, filterFormMainParams, filterFormAsideParams) 129 } 130 var on_page = filter_form_main.find(':input[name=on_page]:first').val() || filter_form_aside.find(':input[name=on_page]:first').val() || 0; 131 if (on_page) { 132 resultParams.on_page = on_page 133 } 134 var filter_params = $.param(resultParams); 135 var filter_action = currentForm.attr('action'); 136 return filter_action + '?' + filter_params 137 }; 138 filter_form_main.submit(function(event) { 139 event.preventDefault(); 140 event.stopPropagation(); 141 window.location.href = makeFilterUrl($(this)); 142 return !1 143 });
144 filter_form_aside.submit(function(event) { 145 event.preventDefault(); 146 event.stopPropagation(); 147 window.location.href = makeFilterUrl($(this)); 148 return !1 149 }); 150 controls.change($.debounceLast(700, this, function processFilter(eventObject) { 151 if (htmlTimeout) { 152 clearTimeout(htmlTimeout) 153 } 154 var filter_ctx = $(eventObject.currentTarget); 155 var inputPosition = tooltipPosition === 'right' ? 1 : 0; 156 if (filter_ctx.hasClass('range_from') || filter_ctx.hasClass('range_to')) { 157 filter_ctx = filter_ctx.closest('fieldset, .filterField').first().children('div').find('.tooltipstered:eq(' + inputPosition + ')'); 158 setSlider(filter_ctx.closest('.filter_slider')) 159 } 160 var filterForm = filter_ctx.closest('form'); 161 var url = makeFilterUrl(filterForm); 162 if (!applyButton) { 163 if (disableAjax) { 164 return window.location.href = url 165 } 166 $.getJSON(url, { 167 'data': 'json', 168 'ajax': '1' 169 }, function(data) { 170 data.used = data.used || {}; 171 data.initial = data.initial || {}; 172 data.filtered = data.filtered || {}; 173 var found = ref(data, 'filtered.count') || 0; 174 rangeableMainProperties.forEach(function(param) { 175 var initial_from = ref(data, 'initial.' + param + '.from') || 0; 176 var initial_to = ref(data, 'initial.' + param + '.to') || 0; 177 var filtered_from = ref(data, 'filtered.' + param + '.from') || 0; 178 var filtered_to = ref(data, 'filtered.' + param + '.to') || 0; 179 var value_from = ref(data, 'used.' + param + '.from') || initial_from; 180 var value_to = ref(data, 'used.' + param + '.to') || initial_to; 181 setSlider($('#' + param), value_from, value_to, filtered_from, filtered_to) 182 }); 183 priceGroup.forEach(function(param) { 184 var field_name = param; 185 var id_prefix = '#for_' + field_name + '_'; 186 iterateFilterOptions(ref(data, 'initial.' + field_name), id_prefix, !0); 187 iterateFilterOptions(ref(data, 'filtered.' + field_name), id_prefix) 188 }); 189 listableMainProperties.forEach(function(param) { 190 var field_name = param + '_id'; 191 var id_prefix = '#for_' + field_name + '_'; 192 iterateFilterOptions(ref(data, 'initial.' + field_name), id_prefix, !0); 193 iterateFilterOptions(ref(data, 'filtered.' + field_name), id_prefix) 194 }); 195 var initial_property_values = ref(data, 'initial.property_values'); 196 if (initial_property_values) { 197 $.each(initial_property_values, function(property_id, values) { 198 var id_prefix = '#for_property_' + property_id + '_'; 199 iterateFilterOptions(values, id_prefix, !0) 200 }) 201 } 202 var filtered_property_values = ref(data, 'filtered.property_values'); 203 if (filtered_property_values) { 204 $.each(filtered_property_values, function(property_id, values) { 205 var id_prefix = '#for_property_' + property_id + '_'; 206 iterateFilterOptions(values, id_prefix) 207 }) 208 } 209 var filtered_property_ranges = ref(data, 'filtered.property_ranges'); 210 if (filtered_property_ranges) { 211 $.each(filtered_property_ranges, function(property_id, values) { 212 var initial_from = ref(data, 'initial.property_ranges.' + property_id + '.from') || 0; 213 var initial_to = ref(data, 'initial.property_ranges.' + property_id + '.to') || 0; 214 var filtered_from = values.from || 0; 215 var filtered_to = values.to || 0; 216 var value_from = ref(data, 'used.property_ranges.' + property_id + '.from') || initial_from; 217 var value_to = ref(data, 'used.property_ranges.' + property_id + '.to') || initial_to; 218 setSlider($('#property_' + property_id), value_from, value_to, filtered_from, filtered_to) 219 }) 220 } 221 var templateData = { 222 count: found, 223 url: url 224 }; 225 var template = declensionSelect(templateData.count, filterForm.data('message_none'), filterForm.data('message_nominative'), filterForm.data('message_genitive_singular'), filterForm.data('message_genitive_plural')); 226 var text = nano(template, templateData); 227 if (useAjaxContentLoad) { 228 ajaxContentLoad({
229 url: url, 230 append: false, 231 filter_ctx: filter_ctx 232 }) 233 } 234 }) 235 } 236 })); 237 238 function ajaxContentLoad(params) { 239 params = params || {}; 240 if (htmlTimeout) { 241 clearTimeout(htmlTimeout) 242 } 243 htmlTimeout = setTimeout(function() { 244 var url = params.url; 245 if (!params.append) { 246 $.loadingScreen('show'); 247 itemsContainer.fadeOut(); 248 } else { 249 itemsContainer.find('.pagination.morepag .show-more').addClass('loading'); 250 } 251 $.ajax({ 252 url: url + (url.indexOf('?') >= 0 ? '&' : '?') + 'data=html_catalog&ajax=1', 253 success: function(html) { 254 if (!params.skipHistoryPush) { 255 window.history.pushState({ 256 html: html 257 }, document.title, url) 258 } 259 if (params.append) { 260 itemsContainer.find('.card-list').append($(html).find('.card-item')); 261 itemsContainer.find('.pagination:not(.morepag)').replaceWith($(html).find('.pagination:not(.morepag)')); 262 itemsContainer.find('.pagination.morepag').replaceWith($(html).find('.morepag')); 263 } else { 264 itemsContainer.html(html).fadeTo('fast', 1, function() { 265 itemsContainer.show(); 266 }); 267 } 268 initLinks(); 269 $.loadingScreen('hide'); 270 filterMove(); 271 if (params.filter_ctx) { 272 params.filter_ctx.tooltipster('hide'); 273 } 274 if (!params.append) { 275 scrollToViewport(itemsContainer); 276 } 277/* 278 setTimeout(function() { 279 scrollRevealInit(); 280 }, 300); 281*/ 282 }, 283 dataType: 'html' 284 }) 285 }, ajaxContentLoadDelay) 286 } 287 288 function scrollToViewport(elem) { 289 if (!isElementTopInViewport(elem)) { 290 $('html,body').animate({ 291 scrollTop: elem.offset().top 292 }, 'slow') 293 } 294 } 295 296 function setSlider(element, used_min, used_max, filtered_min, filtered_max) { 297 var prefix = $(element).attr('id') + '_'; 298 var from_input = $(element).find('#' + prefix + 'from'); 299 var to_input = $(element).find('#' + prefix + 'to'); 300 var initial_min = toNum(from_input.attr('data-range-boundary'), 0); 301 var initial_max = toNum(to_input.attr('data-range-boundary'), 0); 302 var _filtered_min = toNum(from_input.attr('data-range-lighting'), 0); 303 var _filtered_max = toNum(to_input.attr('data-range-lighting'), 0); 304 used_min = toNum(used_min || from_input.val(), 0); 305 used_max = toNum(used_max || to_input.val(), 0); 306 filtered_min = toNum(filtered_min || _filtered_min || initial_min, 0); 307 filtered_max = toNum(filtered_max || _filtered_max || initial_max, 0); 308 if (!used_min || used_min < initial_min) { 309 used_min = initial_min 310 } 311 if (!used_max || used_max > initial_max) { 312 used_max = initial_max 313 } 314 from_input.val(used_min); 315 to_input.val(used_max); 316 var container = $(element).find('.slider_container'); 317 var slider_block = container.find('#' + prefix + 'range'); 318 if (!slider_block.length) { 319 container.html('<div class="filter_range ctrl"><div id="' + prefix + 'range"></div></div>'); 320 slider_block = container.find('#' + prefix + 'range') 321 } 322 var slider = slider_block.data("ionRangeSlider"); 323 if (slider) { 324 slider.update({ 325 min: initial_min, 326 max: initial_max, 327 from: used_min, 328 to: used_max, 329 from_min: filtered_min, 330 from_max: filtered_max, 331 to_min: filtered_min, 332 to_max: filtered_max, 333 }); 334 return 335 } 336 slider_block.ionRangeSlider({ 337 hide_min_max: !0, 338 hide_from_to: !0, 339 keyboard: !0, 340 force_edges: !0, 341 grid: !1, 342 type: 'double', 343 step: 1, 344 min: initial_min, 345 max: initial_max, 346 from: used_min, 347 to: used_max, 348 from_min: filtered_min, 349 from_max: filtered_max, 350 from_shadow: !1, 351 to_min: filtered_min, 352 to_max: filtered_max, 353 to_shadow: !1, 354 onChange: function(data) { 355 from_input.val(data.from); 356 to_input.val(data.to) 357 }, 358 onUpdate: function(data) { 359 from_input.val(data.from); 360 to_input.val(data.to) 361 }, 362 onFinish: function(data) { 363 from_input.val(data.from).change(); 364 to_input.val(data.to).change() 365 } 366 }) 367 } 368 369 function declensionSelect(number, none, nominative, genitive_singular, genitive_plural) { 370 if (!number) { 371 return none 372 } 373 var last_digit = number % 10; 374 var last_two_digits = number % 100; 375 var result; 376 if (last_digit === 1 && last_two_digits !== 11) { 377 result = nominative 378 } else { 379 result = (last_digit === 2 && last_two_digits !== 12) || (last_digit === 3 && last_two_digits !== 13) || (last_digit === 4 && last_two_digits !== 14) ? genitive_singular : genitive_plural 380 } 381 return result 382 } 383 384 function iterateFilterOptions(collection, prefix, actionAdd) { 385 collection = collection || []; 386 prefix = prefix || ''; 387 if (collection) { 388 $.each(collection, function(indx, value_id) { 389 var _value_id = typeof value_id === 'object' ? value_id.value : value_id; 390 var elem = $(prefix + _value_id); 391 if (elem && elem.length) { 392 if (actionAdd) { 393 elem.addClass('filter_disabled') 394 } else { 395 elem.removeClass('filter_disabled') 396 } 397 } 398 }) 399 } 400 } 401 402 function toNum(str, defaultNum) { 403 defaultNum = typeof defaultNum === 'number' ? defaultNum : NaN; 404 if (typeof str !== 'string') { 405 return typeof str === 'number' ? str : defaultNum 406 }
407 var validNumRegExp = /^-?\d*(\.\d*)?$/; 408 str = str.replace(',', '.'); 409 if (str.indexOf('.') > -1) { 410 str += '0' 411 } 412 if (!validNumRegExp.test(str)) { 413 str = NaN 414 } 415 str = str * 1; 416 return isNaN(str) ? defaultNum : str 417 } 418 419 function ref(obj, path) { 420 path = ((typeof path === 'undefined' && typeof obj === 'string') ? obj : path) || ''; 421 obj = obj || {}; 422 return path.split(".").reduce(function(o, x) { 423 return (o) ? o[x] : undefined 424 }, obj) 425 } 426 427 function nano(template, data) { 428 return template.replace(/\{([\w\.]*)\}/g, function(str, key) { 429 var keys = key.split("."), 430 v = data[keys.shift()]; 431 for (var i = 0, l = keys.length; i < l; i++) v = v[keys[i]]; 432 return (typeof v !== "undefined" && v !== null) ? v : "" 433 }) 434 } 435 436 function isElementTopInViewport(el, visbleAreaStart) { 437 visbleAreaStart = (window.pageVisbleAreaStart * 1) || 0; 438 if (typeof jQuery === "function" && el instanceof jQuery) { 439 el = el[0] 440 } 441 var rect = el.getBoundingClientRect(); 442 return rect.top >= visbleAreaStart && rect.top <= (window.innerHeight || document.documentElement.clientHeight) 443 } 444});
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.