1RefineSearch = { 2 checkKeys: [ 3 //add new field in getPagebar function, and in carsQuery class 4 "search", 5 6 "mark[]", "model[]", "fuel[]", "auction_type[]", "country[]", "gearbox[]", 7 "price", "price_to", "regist", "regist_to", "kilom", "kilom_to", "co2_emission", "co2_emission_to", 8 "engine", "engine_to", "doors", "doors_to", "seats", "seats_to", "emission_class", 9 "category[]", "condition[]", "power", "power_to", "power_value", "vat", "number", "color" 10 ], 11 12 init: function () { 13 RefineSearch.initSetUrl(); 14 RefineSearch.initApplyForm(); 15 RefineSearch.initClearForm(); 16 17 RefineSearch.initAddMarkModel(); 18 19 RefineSearch.initSaveSmartFinder(); 20 RefineSearch.initGoAdvancedSearch(); 21 22 RefineSearch.initSelectValues(); 23 24 RefineSearch.updateCounters(false, true); 25 RefineSearch.updateTotal() 26 27 $('.default-set-card').off("click").on("click", function () { 28 let inputName = $(this).data('input'); 29 let value = $(this).data('value'); 30 31 let container = $(".quick-filters").find("#"+inputName); 32 let input = $(`input[name="${inputName}[]"][value="${value}"]`) 33 34 console.log(input) 35 36 if (!container.hasClass("show")) { 37 container.addClass("show"); 38 } 39 40 input.prop("checked", !input.prop("checked")).change(); 41 }); 42 43 // Mirror Clear for Our stock; 44 const our_stock_name = $('#id_auction select option[value="74"]:selected').text().split(' (')[0].trim() 45 46 // Types; 47 document.querySelector('input[name="auction_type[]"][value="stock"]').addEventListener('change', function(){ 48 if($(this).prop('checked') === false){ 49 $(this).prop('checked', false) 50 51 Object.entries($('.search-choice')).forEach((item) => { 52 const filter_name = item[1].children !== undefined && item[1].children[0] !== undefined ? item[1].children[0].innerText.split(' (')[0].trim() : null 53 54 if(our_stock_name !== '' && filter_name === our_stock_name){ 55 if(window.skipMirrorClick){ 56 window.skipMirrorClick = false 57 } else{ 58 window.skipMirrorClick = true 59 item[1].children[0].nextSibling.click() 60 } 61 } 62 }) 63 } 64 }, false) 65 66 // Auctions; 67 Object.entries($('.search-choice')).forEach((item) => { 68 const filter_name = item[1].children !== undefined && item[1].children[0] !== undefined ? item[1].children[0].innerText.split(' (')[0].trim() : null 69 if(our_stock_name !== '' && filter_name === our_stock_name){ 70 item[1].children[0].nextSibling.addEventListener('click', function() { 71 if(window.skipMirrorClick){ 72 window.skipMirrorClick = false 73 } else{ 74 window.skipMirrorClick = true 75 $('input[name="auction_type[]"][value="stock"]').click() 76 } 77 }, false) 78 } 79 }) 80 }, 81 82 initSelectValues: function () { 83 $(".select-values").find(".dropdown-item").click(function () { 84 let btn = $(this).closest(".select-values"); 85 let input = btn.data("input"); 86 let group = btn.closest(".input-group"); 87 88 group.find("input[name='" + input + "']").val($(this).data("value")); 89 $(this).closest(".list-values").find(".active").removeClass("active"); 90 $(this).addClass("active"); 91 RefineSearch.setUrl(); 92 }); 93 }, 94 95 initGoAdvancedSearch: function () { 96 $(".to-advanced-search").click(function () { 97 let url = new URL(window.location.origin + "/search"); 98 url.searchParams.append("opt", "search"); 99 100 let params = window.location.href; 101 params = params.split('?')[1] 102 if (params) { 103 params.replace(new RegExp("/page([0-9]+)?"), '') 104 } 105 106 let advancedPath = url.pathname + url.search; 107 if (typeof window.subfolderPrefixPath === 'function') { 108 advancedPath = window.subfolderPrefixPath(url.pathname) + url.search; 109 } 110 let advancedUrl = url.origin + advancedPath; 111 if (params) { 112 advancedUrl += "&" + params; 113 } 114 115 window.location.href = advancedUrl; 116 }); 117 }, 118 initSaveSmartFinder: function () { 119 $('.save-filter').off("click").on("click", function () { 120 var link = window.location.href; 121 link = link.split('?')[1]; 122 $.ajax({ 123 url: "/search/save?"+link, 124 type: "POST", 125 data: { 126 "url_search" :link, 127 }, 128 success: function (xml) { 129 DisplaySystemHintMessage($("#type", xml).text(), $("#returnMess", xml).text()); 130 } 131 }); 132 }) 133 }, 134 135 initSetUrl: function () { 136 var filtersContainer = $(".quick-filters"); 137
138 filtersContainer.find("input[type=checkbox]").off("change").on("change", function () { 139 140 let parent = $(this).closest("div[data-input]"); 141 if (parent.length) { 142 let defaultSet = $(`.default-set-card[data-input="${parent.data('input')}"][data-value="${parent.data('value')}"]`); 143 if (defaultSet.length) { 144 defaultSet.toggleClass("active", $(this).prop("checked")); 145 } 146 } 147 148 RefineSearch.setUrl(); 149 }); 150 151 filtersContainer.find("input[type=radio], select, .quick-filter-input").off("change").on("change", function () { 152 RefineSearch.setUrl(); 153 }); 154 155 filtersContainer.find("input[type=number], input[type=text]:not(.chosen-search-input)").off("keyup").on("keyup", function (e) { 156 157 if ($(this).closest(".input-group").length) { 158 let group = $(this).closest(".input-group"); 159 if (group.find(".select-values[data-input='"+$(this).attr("name")+"']").length) { 160 let selectValuesList = group.find(".select-values[data-input='"+$(this).attr("name")+"']").find(".list-values"); 161 selectValuesList.find(".active").removeClass("active"); 162 if (selectValuesList.find("[data-value='"+$(this).val()+"']").length) { 163 selectValuesList.find("[data-value='"+$(this).val()+"']").addClass("active"); 164 } 165 } 166 } 167 168 RefineSearch.setUrl(); 169 170 if (e.keyCode === 13) { 171 $(".apply-quick-filters").click(); 172 } 173 }); 174 }, 175 176 setUrl: function (getOnlyFilter) { 177 $(".quick-filters").find(".pulse-refine").removeClass("pulse-refine"); 178 179 let currentUrl = window.location.href; 180 let currentUrlParams = new URL(currentUrl).searchParams; 181 let url = new URL(window.location.origin + "/search"); 182 RefineSearch.selection_filter = [] 183 184 let form = $(".quick-filters").find("form"); 185 let refineArray = {}; 186 $.each(form.serializeArray(), function (i, v) { 187 if (v.name && v.value && v.value !== "0") { 188 if (typeof refineArray[v.name] !== "undefined") { 189 refineArray[v.name] += v.value + "|||"; 190 } else { 191 refineArray[v.name] = v.value + "|||"; 192 } 193 } 194 }); 195 196 if (typeof refineArray['mark[]'] !== "undefined") { 197 //check marks for duplicates 198 var marksTempArray = refineArray['mark[]'].split('|||'); 199 refineArray['mark[]'] = marksTempArray.filter(function(value, index, self) { 200 return self.indexOf(value) === index; 201 }).join('|||'); 202 } 203 204 //if all unchecked 205 $.each(RefineSearch.checkKeys, function (i, key) { 206 if (typeof refineArray[key] === "undefined") { 207 url.searchParams.delete(key); 208 } 209 }); 210 211 //remove old values and add new 212 $.each(refineArray, function (key, values) { 213 url.searchParams.delete(key); 214 $.each(values.split('|||'), function (i, value) { 215 if (value) { 216 url.searchParams.append(key, value); 217 } 218 }); 219 }); 220 221 if (currentUrlParams.get("sort")) { 222 url.searchParams.append("sort", currentUrlParams.get("sort")); 223 } 224 225 if(getOnlyFilter !== undefined){ 226 if(window.refineCarsSearchURL !== undefined){ 227 Pagination.filter = window.refineCarsSearchURL 228 } else{ 229 window.refineCarsSearchURL = url.searchParams.toString() 230 Pagination.filter = url.searchParams.toString() 231 } 232 return 233 } 234 235 let pathNoPage = url.pathname.replace(new RegExp("/page([0-9]+)?"), ''); 236 237 if (typeof window.subfolderPrefixPath === 'function') { 238 pathNoPage = window.subfolderPrefixPath(pathNoPage); 239 } 240 let newUrl = url.origin + pathNoPage + "?" + url.searchParams.toString(); 241 242 if (currentUrl !== newUrl) { 243 window.history.replaceState(null, null, newUrl); 244 245 window.refineCarsSearchURL = url.searchParams.toString() 246 Pagination.filter = url.searchParams.toString(); 247 248 $(".apply-quick-filters").addClass("focus").find(".fas").addClass("d-none"); 249 250 RefineSearch.updateCounters(); 251 } 252 }, 253 254 isCountsLoading: false, 255 getCounts: function (renderPages) { 256 const applyFilterButton = $(".apply-quick-filters") 257 258 clearTimeout(window.searchCounterUpdateTimer) 259 260 if (RefineSearch.isCountsLoading) { 261 RefineSearch.isCountsLoading.abort(); 262 } 263 let loader = $("<i class='fas fa-circle-notch fa-spin'></i>"); 264 $(".quick-filters").find(".count-badge").html(loader); 265 266 let params = window.location.href; 267 let ispagination = params.split('?')[0].includes('page'); 268 params = params.split('?')[1]; 269 270 // Crunch for Auction filter; 271 const auction = window.location.href.split('/auction')[2] 272 if(auction !== undefined){ 273 if(params === undefined){ 274 params = `id_auction[]=${auction}`; 275 } else{ 276 params += `&id_auction[]=${auction}`; 277 } 278 } 279 280 /* 281 if (params != null && !ispagination) { 282 $('.total_count_title').addClass("d-none"); 283 } 284 */ 285 286 if(window.refineCarsSearchURL !== '' && params === undefined){ 287 params = window.refineCarsSearchURL.replace('/search?', '') 288 } 289 290 $('.clouds-container').addClass('loading') 291 292 window.searchCounterUpdateTimer = setTimeout(() => { 293 RefineSearch.isCountsLoading = $.ajax({ 294 async: true, 295 type: "POST", 296 url: "/modules/mod_refine/ajax/counts.php", 297 data: {"params": params}, 298 success: function (data) { 299 data = JSON.parse(data); 300 RefineSearch.isCountsLoading = false;
301 302 applyFilterButton.find(".total-cars").text(data['total']); 303 applyFilterButton.removeClass("focus").find(".fas").addClass("d-none"); 304 applyFilterButton.find(".total-cars").removeClass("d-none"); 305 applyFilterButton.removeClass('locked') 306 307 /* 308 * Update country origins and auctions; 309 * */ 310 $.each(data.addition_filters, function(filter, values){ 311 const el = $(`select[name="${filter}[]"]`); 312 $(`select[name="${filter}[]"] option`).remove() 313 $.each(values, function(key, value) { 314 el.append($(`<option ${value.selected ? "selected" : ""}></option>`).attr("value", value.value).text(value.text + ' (' + value.count + ')')); 315 }); 316 el.trigger("chosen:updated"); 317 }) 318 319 const exclusiveCount = data.is_exclusive?.[1] ?? 0; 320 321 if (exclusiveCount > 0) { 322 $('.default-set-card[data-input="is_exclusive"]') 323 .removeClass('d-none') 324 .addClass('d-flex'); 325 } else { 326 $('.default-set-card[data-input="is_exclusive"]') 327 .removeClass('d-flex') 328 .addClass('d-none'); 329 } 330 331 /* 332 * Update mark model - START; 333 * */ 334 // Mark; 335 let new_mark_options = [] 336 $(`select[name="mark[]"] option`).each(function(key, option){ 337 let clearName = option.innerText.slice(0, option.innerText.indexOf(' (')) 338 const lastName = clearName 339 340 $.each(data.mark, function(counter_mark_id, count){ 341 if(parseInt(option.getAttribute('value')) === parseInt(counter_mark_id)){ 342 clearName = `${clearName} (${count})` 343 } 344 }) 345 346 if(clearName === lastName){ 347 clearName = `${clearName} (0)` 348 } 349 350 if(option.innerText.indexOf(' (') === -1){ 351 clearName = option.innerText 352 } 353 new_mark_options.push($(`<option ${option.getAttribute('selected') ? "selected" : ""}></option>`).attr("value", option.getAttribute('value')).text(clearName)) 354 }) 355 356 const el = $(`select[name="mark[]"]`); 357 $(`select[name="mark[]"] option`).remove() 358 new_mark_options.forEach(function(option){ 359 el.append(option); 360 }) 361 el.trigger("chosen:updated"); 362 363 // Model; 364 const searchParams = new URLSearchParams(params); 365 const filterParams = {}; 366 for (const [key, value] of searchParams.entries()) { 367 if (filterParams[key]) { 368 // ÐÑли клÑÑ Ñже ÑÑÑеÑÑвÑеÑ, добавлÑем знаÑение в маÑÑив 369 filterParams[key] = Array.isArray(filterParams[key]) ? [...filterParams[key], value] : [filterParams[key], value]; 370 } else { 371 // ÐÑли клÑÑа еÑе неÑ, Ñоздаем его 372 filterParams[key] = value; 373 } 374 } 375 376 window.marksLoadingWaiter = setInterval(() => { 377 if($('select[name="model[]"] option').length === 0) return 378 379 if(filterParams['model[]'] !== undefined && filterParams['model[]'].length > 0){ 380 if(filterParams['model[]'].isArray){ 381 filterParams['model[]'].forEach((filter_mark_id) => { 382 $(`select[name="model[]"] option[value="${filter_mark_id}"]`).attr('selected', 1) 383 }) 384 } else{ 385 $(`select[name="model[]"] option[value="${filterParams['model[]']}"]`).attr('selected', 1) 386 } 387 388 $('select[name="model[]"]').trigger("chosen:updated") 389 } 390 391 clearInterval(window.marksLoadingWaiter) 392 }, 500) 393 394 /* 395 * Update mark model - END; 396 * */ 397 398 $('.clouds-container').removeClass('loading') 399 400 $('.total-cars').text(data['total']+' '); 401 402 // Update pagination; 403 if(window.initPaginationRender){ 404 if (typeof Pagination !== "undefined") { 405 Pagination.total = data['total'] 406 Pagination.toggleView() 407 Pagination.renderPages() 408 } 409 410 window.initPaginationRender = false 411 } 412 413 if($('.total_count_title').hasClass('d-none')){ 414 RefineSearch.updateTotal() 415 } 416 417 if (typeof Pagination !== "undefined") { 418 Pagination.total = data['total'] 419 if(renderPages){ 420 Pagination.renderPages() 421 } 422 } 423 if (typeof Pagination !== "undefined") { 424 Pagination.total = data['total'] 425 if(data['search_hash'] !== undefined){ 426 $('.apply-quick-filters').attr('data-search-hash', data['search_hash']) 427 } 428 if(renderPages){ 429 Pagination.renderPages() 430 } 431 } 432
433 if(parseInt(applyFilterButton.attr('data-immediate-update')) === 1){ 434 if (typeof Pagination !== "undefined") { 435 Pagination.type = 'search' 436 } 437 438 applyFilterButton.removeAttr('data-immediate-update') 439 applyFilterButton.click() 440 } 441 442 $.each(data, function (inputName, values) { 443 if (typeof values !== 'object' || values == null) { 444 return; 445 } 446 $.each(values, function (value, count) { 447 let inputContainer = $(".quick-filters") 448 .find("[data-input='" + inputName + "'][data-value='" + value + "']"); 449 inputContainer.removeClass('hidden'); 450 inputContainer.find(".count-badge").text(count); 451 }); 452 }); 453 454 let faSpinElement = $(".quick-filters") 455 .find(".count-badge").find(".fa-spin"); 456 457 faSpinElement.closest("div[data-input='sources'][data-value]").addClass('hidden'); 458 faSpinElement.closest(".count-badge").text(0); 459 460 } 461 }); 462 }, 1000) 463 }, 464 465 isMarksDataLoading: false, 466 getMarksData: function (firstLoading) { 467 if (RefineSearch.isMarksDataLoading) { 468 RefineSearch.isMarksDataLoading.abort(); 469 } 470 let loader = $("<i class='fas fa-circle-notch fa-spin'></i>"); 471 $(".quick-filters").find(".count-badge").html(loader); 472 473 $(".add-model-loader").show(); 474 $(".add-model-link").hide(); 475 476 let params = window.location.href; 477 params = params.split('?')[1]; 478 if (params == null){ 479 params = window.location.href; 480 } 481 482 RefineSearch.isMarksDataLoading = $.post("/modules/mod_refine/ajax/marksData.php", {"params": params}, function (data) { 483 data = JSON.parse(data); 484 RefineSearch.isMarksDataLoading = false; 485 486 RefineSearch.setMarksData(data); 487 488 window.marksDataLoaded = true 489 490 if(firstLoading && window.location.search !== "" && typeof updateCouldPills === 'function'){ 491 updateCouldPills(); 492 } 493 }); 494 }, 495 496 updateCounters: (renderPages, firstLoading) => { 497 const applyFilterButton = $(".apply-quick-filters") 498 applyFilterButton.addClass('locked') 499 applyFilterButton.find(".total-cars").addClass("d-none"); 500 applyFilterButton.find(".fas").removeClass("d-none"); 501 502 if(firstLoading){ 503 RefineSearch.setUrl(true) 504 } 505 506 RefineSearch.getMarksData(firstLoading) 507 RefineSearch.getCounts(renderPages) 508 }, 509 510 setMarksData: function (marksData) { 511 let container = $(".mark-models-container"); 512 513 $.each(marksData, function (mark_id, data) { 514 var isNewGroup = false; 515 let group = $('.mark-model-group[data-mark="'+mark_id+'"]'); 516 517 if (!group.length) { 518 group = $(".mark-model-template").find(".mark-model-group").clone(); 519 isNewGroup = true; 520 521 group.attr("data-mark", mark_id); 522 group.find(".mark-name").text(data.mark); 523 } 524 525 group.find("[name='mark[]']").val(mark_id); 526 group.find("[name='model[]']").html(data.options).chosen(); 527 528 if (isNewGroup) { 529 container.append(group); 530 } 531 532 $('select[name="model[]"]').trigger("chosen:updated"); 533 }); 534 535 $(".add-model-loader").hide(); 536 if (!$(".mark-models-container .mark-model-group").length) { 537 $(".add-model-link").hide(); 538 $(".add-model-select").show(); 539 } else { 540 $(".add-model-link").show(); 541 $(".add-model-select").hide(); 542 } 543 544 RefineSearch.initSetUrl(); 545 546 RefineSearch.initAddMarkModel(); 547 RefineSearch.initRemoveMarkModel(); 548 }, 549 550 initAddMarkModel: function () { 551 $(".add-model-select select").on("change", function () { 552 var selectedMark = $(this).val(); 553 554 $(this).val(null); 555 $(this).find("option[value='"+selectedMark+"']").hide(); 556 $(this).trigger("chosen:updated"); 557 558 $(".add-model-select").hide(); 559 $(".add-model-loader").show(); 560 }); 561 562 $(".add-model-link").click(function () { 563 $(".add-model-select").show(); 564 $(this).hide(); 565 }); 566 }, 567 568 initRemoveMarkModel: function () { 569 $(".remove-mark-model").click(function () { 570 let group = $(this).closest(".mark-model-group"); 571 572 let addModelSelect = $(".add-model-select select"); 573 addModelSelect.val(null); 574 addModelSelect.find("option[value='"+group.data("mark")+"']").show(); 575 addModelSelect.trigger("chosen:updated"); 576 577 group.remove(); 578 579 RefineSearch.setUrl(); 580 }); 581 }, 582 583 isPageLoading: false,
584 initClearForm: function () { 585 $(".clear-quick-filters").off("click").on("click", async function () { 586 var form = $(".quick-filters").find("form"); 587 588 form.find(".mark-model-group .remove-mark-model").click(); 589 form.find(".quick-filters-default-sets").find(".active").removeClass("active"); 590 form.find("input[type=checkbox], input[type=radio]").attr("checked", "").prop("checked",false); 591 form.find(".select-values .dropdown-item.active").removeClass("active"); 592 form.find("select:not(.chosen-select)").val(""); 593 form.find("select.chosen-select").val("").trigger("chosen:updated"); 594 form.find("input[type=number]").val(null).attr("value", ""); 595 form.find("input[type=text]:not(.chosen-search-input)").val("").attr("value", ""); 596 form.find("textarea").html("").val(""); 597 598 $('.clouds-container').html('') 599 600 RefineSearch.setUrl(); 601 602 let vatValue = form.find("input[type=radio][name='vat'][value='any']"); 603 vatValue.closest(".btn-group").find(".btn.active").removeClass("active"); 604 vatValue.prop("checked", true); 605 vatValue.closest(".btn").addClass("active"); 606 607 let powerValue = form.find("input[type=radio][name='power_value'][value='kw']"); 608 powerValue.closest(".btn-group").find(".btn.active").removeClass("active"); 609 powerValue.prop("checked", true); 610 powerValue.closest(".btn").addClass("active"); 611 612 RefineSearch.updateCounters(true); 613 RefineSearch.reloadPage(); 614 }); 615 }, 616 617 618 initApplyForm: function () { 619 $(document).off("keyup").on("keyup", function (e) { 620 if (e.keyCode === 13) { 621 $(".apply-quick-filters:not(.locked)").click(); 622 } 623 }) 624 625 $(document).on("click", '.apply-quick-filters:not(.locked)', function () { 626 // Hide filter only if his is visible; 627 $(".quick-filters:not(.filter-closed)").find(".toggle-filter").click() 628 RefineSearch.updateTotal() 629 RefineSearch.updateCounters(); 630 RefineSearch.reloadPage(); 631 typeof window.updateCouldPills === 'function' && window.updateCouldPills(); 632 }); 633 }, 634 635 updateTotal: () => { 636 let total = parseInt($('.total-cars').html()) 637 if(isNaN(total)){ 638 $('.total_count_title').addClass('d-none') 639 } else{ 640 $('.total_count_title').removeClass('d-none') 641 $('.total_count').html(total) 642 } 643 }, 644 645 reloadPage: function () { 646 if (typeof Pagination !== "undefined") { 647 Pagination.loadedCars = [] 648 Pagination.showPages(1, Pagination.perPage) 649 } 650 /* 651 if (RefineSearch.isPageLoading) { 652 RefineSearch.isPageLoading.abort(); 653 } 654 655 let url = new URL(window.location.href); 656 let urlNoPage = url.href.replace(new RegExp("/page([0-9]+)?"), ''); 657 658 659 if (!$(".items-view").hasClass("is-loading")) { 660 $(".quick-filters-content").find(".page_title").append('<i class="ml-1 text-danger fas fa-circle-notch fa-spin"></i>'); 661 $(".items-view").addClass("is-loading").css("opacity", "0.4"); 662 } 663 664 window.scrollTo({ 665 top: -10000, 666 behavior: "smooth" 667 }); 668 669 RefineSearch.isPageLoading = $.get(urlNoPage, {}, function (data) { 670 data = $($.parseHTML(data)); 671 672 $(".quick-filters").closest(".row").find(".quick-filters-content").replaceWith(data); 673 674 if (typeof Cars !== "undefined") { 675 Cars.init(); 676 } 677 $(".items-view").removeClass("is-loading").css("opacity", "1"); 678 $('.total_count_title').removeClass("d-none"); 679 RefineSearch.isPageLoading = false; 680 681 if (typeof Bids !== "undefined") { 682 Bids.init(); 683 } 684 685 CountdownTimers.init(); 686 BootstrapComponents.init(); 687 if (typeof MarketPriceModal != "undefined") { 688 MarketPriceModal.init(); 689 } 690 if (typeof ExportExcel != "undefined") { 691 ExportExcel.init(); 692 } 693 694 $(".chosen-select").chosen(); 695 696 RefineAll.initToggleMobileFiler(); 697 RefineSearch.initSaveSmartFinder(); 698 }); 699 */ 700 } 701}; 702 703deferPush(function () { 704 RefineSearch.init(); 705});
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.