1 2 3var wcsearch_query_string = decodeURIComponent(wcsearch_js_objects.query_string); //place default values here 4 5var wcsearch_recount_attempts = 0; 6var wcsearch_max_counters = 200; 7var wcsearch_request_processing = false; 8 9var wcsearch_do_scroll = true; 10 11(function($) { 12 "use strict"; 13 14 $(function() { 15 wcsearch_init(); 16 }); 17 18 window.wcsearch_init = function() { 19 wcsearch_process_main_search_fields(); 20 wcsearch_custom_input_controls(); 21 wcsearch_setup_terms_separators(); 22 wcsearch_sticky_scroll(); 23 wcsearch_continue_recounting(); 24 wcsearch_init_open_close_dep_inputs(); 25 wcsearch_post_off_beforeunload(); 26 } 27 28 window.wcsearch_post_off_beforeunload = function() { 29 30 // Prevent WP from asking confirmation to navigate away from the current post in admin. 31 if ($("#post").length) { 32 $(window).off("beforeunload"); 33 } 34 } 35 36 window.wcsearch_init_open_close_dep_inputs = function() { 37 $("form").each( function(index, form) { 38 wcsearch_open_close_dep_inputs($(form)); 39 }); 40 } 41 42 window.wcsearch_is_model = function() { 43 return $(".wcsearch-search-model-wrapper").length; 44 } 45 46 window.wcsearch_search_input = (function(input) { 47 this.input = input; 48 49 this.get_value = function() { 50 if (this.input.is(".wcsearch-hidden-field[type=hidden]")) { 51 return { name: this.input.prop("name"), value: this.input.val() }; 52 } 53 54 if (this.input.find("[type=checkbox]").length) { 55 var checkboxes = this.input.find("[type=checkbox]"); 56 57 var checkboxes_name; 58 var selected = []; 59 checkboxes.each(function() { 60 if ($(this).is(":checked")) { 61 selected.push($(this).val()); 62 } 63 checkboxes_name = $(this).prop("name"); 64 }); 65 66 if (selected.length) { 67 68 var result = [{ name: checkboxes_name, value: selected.join(",") }]; 69 70 if (this.input.data("relation") == "AND") { 71 result.push({ name: checkboxes_name+"_relation", value: this.input.data("relation") }); 72 } 73 74 return result; 75 } 76 } 77 78 if (this.input.find("[type=radio]:checked").length) { 79 var radio = this.input.find("[type=radio]:checked"); 80 81 return { name: radio.prop("name"), value: radio.val() }; 82 } 83 84 if (this.input.attr("data-type") == "price" || this.input.attr("data-type") == "number") { 85 86 var slug = this.input.attr("data-slug"); 87 88 // price 2 inputs/dropdowns cahnge price input 89 if (this.input.find(".wcsearch-search-input-1, .wcsearch-search-input-2").length) { 90 91 var min_input = this.input.find(".wcsearch-search-input-1"); 92 var max_input = this.input.find(".wcsearch-search-input-2"); 93 94 var min = ''; 95 if (min_input.val() && !isNaN(min_input.val())) { 96 min = min_input.val(); 97 } 98 var max = ''; 99 if (max_input.val() && !isNaN(max_input.val())) { 100 max = max_input.val(); 101 } 102 var val = ''; 103 if (min || max) { 104 val = min+'-'+max; 105 } 106 107 this.input.find("input[name="+slug+"]").val(val); 108 } 109 110 // price single dropdown 111 if (this.input.find(".wcsearch-search-input-single-select").length) { 112 113 var val = this.input.find(".wcsearch-search-input-single-select").val(); 114 115 return { name: slug, value: val }; 116 } 117 118 // price range/single slider 119 if (this.input.find("input[name="+slug+"]:not([type=radio])").length) { 120 var val = this.input.find("input[name="+slug+"]").val(); 121 122 return { name: slug, value: val }; 123 } 124 } 125 126 if (this.input.find("input[name=more_filters]").length) { 127 var val = this.input.find("input[name=more_filters]").val(); 128 129 return { name: 'more_filters', value: val }; 130 } 131 132 if (this.input.find("input[name=radius]").length) { 133 var val = this.input.find("input[name=radius]").val(); 134 135 return { name: 'radius', value: val }; 136 } 137 138 if (this.input.find("input.wcsearch-date-input").length) { 139 var val = this.input.find("input.wcsearch-date-input").val(); 140 var name = this.input.find("input.wcsearch-date-input").attr("name"); 141 142 if (val != "-") { 143 return { name: name, value: val }; 144 } 145 } 146 147 if (this.input.find("input.wcsearch-search-string-input").length) { 148 var val = this.input.find("input.wcsearch-search-string-input").val(); 149 var name = this.input.find("input.wcsearch-search-string-input").attr("name"); 150 151 return { name: name, value: val }; 152 } 153
154 if (this.input.find("input.wcsearch-search-terms-buttons-input").length) { 155 var val = this.input.find("input.wcsearch-search-terms-buttons-input").val(); 156 var name = this.input.find("input.wcsearch-search-terms-buttons-input").attr("name"); 157 158 if (val) { 159 160 var result = [{ name: name, value: val }]; 161 162 if (this.input.data("relation") == "AND") { 163 result.push({ name: name+"_relation", value: this.input.data("relation") }); 164 } 165 166 return result; 167 } 168 } 169 170 if (this.input.find(".wcsearch-main-search-field").length) { 171 if (this.input.data("type") == "tax" || this.input.data("type") == "select") { 172 var tax_val = this.input.find("[id^=selected_tax]").val(); 173 var tax_name = this.input.find("[id^=selected_tax]").prop("name"); 174 175 if (this.input.find("input[name='keywords'], input[name='address']").length) { 176 // both keywords/address and tax 177 178 var field_name = ''; 179 var place_id = ''; 180 if (this.input.find("input[name='keywords']").length) { 181 field_name = "keywords"; 182 } else if (this.input.find("input[name='address']").length) { 183 field_name = "address"; 184 if (this.input.find("input[name='place_id']").length) { 185 place_id = this.input.find("input[name='place_id']").val(); 186 } 187 } 188 var string_val = this.input.find("input[name="+field_name+"]").val(); 189 190 if (string_val === '') { 191 return { name: tax_name, value: tax_val }; 192 } 193 194 if (tax_val === '') { 195 if (string_val) { 196 return [{ name: field_name, value: string_val }, { name: "place_id", value: place_id }]; 197 } 198 } else { 199 200 var string_in_select; 201 // look through select, when found - it is tax term, not keywords/address 202 if (this.input.find("select option").filter(function () { return $(this).text() == string_val; }).length) { 203 string_in_select = { name: tax_name, value: tax_val }; 204 } 205 206 if (string_in_select) { 207 return string_in_select; 208 } else { 209 return [{ name: field_name, value: string_val }, { name: "place_id", value: place_id }]; 210 } 211 } 212 } else { 213 // only tax 214 215 var result = [{ name: tax_name, value: tax_val }]; 216 217 if (tax_val && this.input.data("relation") == "AND") { 218 result.push({ name: tax_name+"_relation", value: this.input.data("relation") }); 219 } 220 221 return result; 222 } 223 } else if (this.input.find("input[name='keywords'], input[name='address']").length) { 224 225 var field_name = ''; 226 var place_id = ''; 227 if (this.input.find("input[name='keywords']").length) { 228 field_name = "keywords"; 229 } else if (this.input.find("input[name='address']").length) { 230 field_name = "address"; 231 if (this.input.find("input[name='place_id']").length) { 232 place_id = this.input.find("input[name='place_id']").val(); 233 } 234 } 235 var string_val = this.input.find("input[name="+field_name+"]").val(); 236 237 return [{ name: field_name, value: string_val }, { name: "place_id", value: place_id }]; 238 } 239 } else { 240 // tax range slider 241 if (this.input.has(".wcsearch-range-slider, .wcsearch-single-slider").find("input[data-tax]").length) { 242 var tax_val = this.input.find("input[data-tax]").val(); 243 var tax_name = this.input.find("input[data-tax]").prop("name"); 244 245 return { name: tax_name, value: tax_val }; 246 } 247 } 248 249 if (this.input.find("select.wcsearch-selectbox-input").length) { 250 var val = this.input.find("select.wcsearch-selectbox-input").val(); 251 var name = this.input.find("select.wcsearch-selectbox-input").attr("name"); 252 253 return { name: name, value: val }; 254 } 255 256 return ''; 257 }, 258 this.reset = function() { 259 260 if (this.input.hasClass("wcsearch-search-input-always-closed")) { 261 return false; 262 } 263 264 // temporarily disable submission on changes while resetting 265 wcsearch_request_processing = true; 266 267 if (this.input.find(".wcsearch-main-search-field").length) { 268 this.input.find(".wcsearch-main-search-field").trigger("reset"); 269 } 270 271 if (this.input.find(".wcsearch-search-input-1, .wcsearch-search-input-2").length) { 272 this.input.find("input, select").val(''); 273 } 274 275 if (this.input.find("select").length) { 276 this.input.find("select").prop('selectedIndex', 0); 277 } 278 279 if (this.input.find("[type=radio]").length) { 280 this.input.find("[type=radio]").prop('checked', false); 281 this.input.find(".wcsearch-radio-reset-btn").remove(); 282 } 283 284 if (this.input.find("[type=checkbox]").length) { 285 this.input.find("[type=checkbox]").prop('checked', false); 286 } 287 288 if (this.input.find("input.wcsearch-date-input").length) { 289 this.input.find("input.wcsearch-date-input").trigger("reset"); 290 } 291 292 if (this.input.find("input.wcsearch-search-string-input").length) { 293 this.input.find("input.wcsearch-search-string-input").val(''); 294 } 295
296 if (this.input.find("input.wcsearch-search-terms-buttons-input").length) { 297 this.input.find("input.wcsearch-search-terms-buttons-input").val(''); 298 299 this.input.find(".wcsearch-search-term-button").removeClass("wcsearch-search-term-button-active"); 300 } 301 302 // range slider 303 if (this.input.find(".wcsearch-range-slider").length) { 304 var slider = this.input.find(".wcsearch-range-slider"); 305 var options = slider.slider('option'); 306 307 slider.slider("values", [options.min, options.max]); 308 slider.slider("option", "slide")(null, { values: [options.min, options.max] }); 309 } 310 311 // single slider 312 if (this.input.find(".wcsearch-single-slider").length) { 313 var slider = this.input.find(".wcsearch-single-slider"); 314 var option = slider.slider("option"); 315 var input = this.input.find("input"); 316 317 if (this.input.data("default_values")) { 318 var value = this.input.data("default_values"); 319 } else { 320 var value = option.min; 321 } 322 323 slider.slider("value", value); 324 slider.slider("option", "slide")(null, { value: value }); 325 input.val(value); 326 } 327 328 wcsearch_request_processing = false; 329 }, 330 this.is_opened = function() { 331 if (!this.input.hasClass("wcsearch-search-input-closed")) { 332 return true; 333 } 334 }, 335 this.open = function() { 336 this.input.removeClass("wcsearch-search-input-closed"); 337 this.input.addClass("wcsearch-search-input-opened"); 338 }, 339 this.close = function() { 340 this.input.removeClass("wcsearch-search-input-opened"); 341 this.input.addClass("wcsearch-search-input-closed"); 342 } 343 }); 344 345 window.wcsearch_get_luma_color = function(c) { 346 var c = c.substring(1); // strip # 347 var rgb = parseInt(c, 16); // convert rrggbb to decimal 348 var r = (rgb >> 16) & 0xff; // extract red 349 var g = (rgb >> 8) & 0xff; // extract green 350 var b = (rgb >> 0) & 0xff; // extract blue 351 352 var luma = 0.2126 * r + 0.7152 * g + 0.0722 * b; // per ITU-R BT.709 353 354 return luma; 355 } 356 357 window.wcsearch_sticky_scroll = function() { 358 $('.wcsearch-sticky-scroll').each(function() { 359 var element = $(this); 360 var form = element.find("form"); 361 var id = form.data("id"); 362 var toppadding = (form.data("toppadding")) ? form.data("toppadding") : 0; 363 364 if (element.parents("div[class*='-map-sidebar']").length) { 365 var map_sidebar = element.parents("div[class*='-map-sidebar']"); 366 var search_wrapper = map_sidebar.find(".wcsearch-search-wrapper"); 367 var listings_wrapper = map_sidebar.find("div[class*='-map-sidebar-listings-wrapper']"); 368 369 if (listings_wrapper.length) { 370 var listings_wrapper_height = map_sidebar.height() - search_wrapper.outerHeight(); 371 listings_wrapper.height(listings_wrapper_height); 372 } 373 } else { 374 if ($("body").hasClass("admin-bar")) { 375 toppadding = toppadding + 32; 376 } 377 378 if ($(window).height() >= 768) { 379 if ($('.site-header.header-fixed').length) { 380 var headerHeight = $('.site-header.header-fixed').outerHeight(); 381 toppadding = toppadding + headerHeight; 382 } 383 } 384 385 if (!$("#wcsearch-scroller-anchor-"+id).length) { 386 var anchor = $("<div>", { 387 id: 'wcsearch-scroller-anchor-'+id 388 }); 389 element.before(anchor); 390 391 var background = $("<div>", { 392 id: 'wcsearch-sticky-scroll-background-'+id, 393 class: 'wcsearch-sticky-scroll-background', 394 style: {position: 'relative'} 395 }); 396 element.after(background); 397 } 398 399 window["wcsearch_sticky_scroll_toppadding_"+id] = toppadding; 400 401 $("#wcsearch-sticky-scroll-background-"+id).position().left = element.position().left; 402 $("#wcsearch-sticky-scroll-background-"+id).position().top = element.position().top; 403 $("#wcsearch-sticky-scroll-background-"+id).width(element.width()); 404 $("#wcsearch-sticky-scroll-background-"+id).height(element.height()); 405 406 var wcsearch_scroll_function = function(e) { 407 var id = e.data.id; 408 var toppadding = e.data.toppadding; 409 var b = $(document).scrollTop(); 410 var d = $("#wcsearch-scroller-anchor-"+id).offset().top - toppad
410ding; 411 var c = e.data.obj; 412 var e = $("#wcsearch-sticky-scroll-background-"+id); 413 414 c.width(c.parent().width()).css({ 'z-index': 100 }); 415 416 // .wcsearch-scroller-bottom - this is special class used to restrict the area of scroll of map canvas 417 if ($(".wcsearch-scroller-bottom").length) { 418 var f = $(".wcsearch-scroller-bottom").offset().top - (c.height() + toppadding); 419 } else { 420 var f = $(document).height(); 421 } 422 423 if (f > c.height()) { 424 if (b >= d && b < f) { // fixed 425 c.css({ position: "fixed", top: toppadding }); 426 e.css({ position: "relative" }); 427 } else { // unfixed 428 if (b <= d) { 429 c.stop().css({ position: "relative", top: "" }); 430 e.css({ position: "absolute" }); 431 } 432 if (b >= f) { 433 c.css({ position: "absolute" }); 434 c.stop().offset({ top: f + toppadding }); 435 e.css({ position: "relative" }); 436 } 437 } 438 } else { 439 c.css({ position: "relative", top: "" }); 440 e.css({ position: "absolute" }); 441 } 442 }; 443 444 $("#wcsearch-sticky-scroll-background-"+id).css({ position: "relative" }); 445 446 var args = {id: id, obj: $(this), toppadding: toppadding}; 447 $(window).scroll(args, wcsearch_scroll_function); 448 wcsearch_scroll_function({data: args}); 449 } 450 }); 451 } 452 453 window.wcsearch_create_radio_control_reset = function(item) { 454 var delete_btn = $("<span>", { 455 class: "wcsearch-radio-reset-btn wcsearch-fa wcsearch-fa-close", 456 title: wcsearch_js_objects.radio_reset_btn_title 457 }).appendTo(item); 458 459 $(document).on("click", ".wcsearch-radio-reset-btn", function() { 460 $(this).parent().find("input").prop('checked', false); 461 $(this).parents("label").find("input").trigger("change"); 462 $(this).remove(); 463 }); 464 } 465 $(".wcsearch-radio label input:checked").each(function() { 466 wcsearch_create_radio_control_reset($(this).parents("label")); 467 }); 468 $(document).on("click", ".wcsearch-radio label", function(event) { 469 if ($(event.target).is(".wcsearch-radio-reset-btn")) { 470 return false; 471 } 472 473 $(this).parents(".wcsearch-search-input-terms-column").parent().find(".wcsearch-radio-reset-btn").remove(); 474 $(this).parents(".wcsearch-search-model-input-terms-column").parent().find(".wcsearch-radio-reset-btn").remove(); 475 476 wcsearch_create_radio_control_reset($(this)); 477 }); 478 window.wcsearch_custom_input_controls = function() { 479 // Custom input controls 480 $(".wcsearch-checkbox label, .wcsearch-radio label").each(function() { 481 if (!$(this).find(".wcsearch-control-indicator").length) { 482 $(this).append($("<div>").addClass("wcsearch-control-indicator")); 483 } 484 }); 485 486 var slider_input_controls = function(el) { 487 var sheet = document.createElement('style'); 488 document.body.appendChild(sheet); 489 490 var prefs = ['webkit-slider-runnable-track', 'moz-range-track', 'ms-track']; 491 492 var id = $(el).attr('id'); 493 var slider_color = $('#'+id).css("background-color"); 494 var curVal = parseInt(el.value); 495 var rating = (curVal + 1) / 2; 496 var gradientVal = (curVal - 1) * 12.5; 497 var style = ''; 498 499 $('.wcsearch-range-slider-labels.'+id+' li').removeClass('wcsearch-range-slider-labels-active wcsearch-range-slider-labels-selected'); 500 var curLabel = $('.wcsearch-range-slider-labels.'+id).find('li:nth-child(' + curVal + ')'); 501 curLabel.addClass('wcsearch-range-slider-labels-active wcsearch-range-slider-labels-selected'); 502 curLabel.prevAll().addClass('wcsearch-range-slider-labels-selected'); 503 504 $('.wcsearch-range-slider-value.'+id).html(rating); 505 506 var gradient_destination = 'to right'; 507 if (wcsearch_js_objects.is_rtl) { 508 gradient_destination = 'to left'; 509 } 510 511 for (var i = 0; i < prefs.length; i++) { 512 style += '#'+id+'::-' + prefs[i] + '{background: linear-gradient(' + gradient_destination + ', ' + slider_color + ' 0%, ' + slider_color + ' ' + gradientVal + '%, #f0f0f0 ' + gradientVal + '%, #f0f0f0 100%)}'; 513 } 514 sheet.textContent = style; 515 516 var sum = 0; 517 $('.wcsearch-range-slider-value').each(function() { 518 sum += Number($(this).text()); 519 }); 520 var avg = Math.round(sum/$('.wcsearch-range-slider-value').length*10)/10; 521 var avg_percents = Math.round(((sum/$('.wcsearch-range-slider-value').length)-1)*25); 522 $('.wcsearch-progress-circle span').text(avg.toFixed(1)); 523 $('.wcsearch-progress-circle').removeClass().addClass('wcsearch-progress-circle').addClass('p'+avg_percents); 524 if (avg_percents > 50) { 525 $('.wcsearch-progress-circle').addClass('wcsearch-over50'); 526 } 527 } 528 $(".wcsearch-range-slider-input").each(function () { 529 slider_input_controls(this); 530 }); 531 $(".wcsearch-range-slider-input").on('input', function () { 532 slider_input_controls(this); 533 }); 534 $('.wcsearch-range-slider-labels li').on('click', function () { 535 var index = $(this).index(); 536 var input = $(this).parents('.wcsearch-range-slider').find('.wcsearch-range-slider-input'); 537 input.val(index + 1).trigger('input'); 538 }); 539 } 540 541 window.wcsearch_ajax_loader_target_show = function(target, scroll_to_anchor, offest_top) { 542 if (typeof scroll_to_anchor != 'undefined' && scroll_to_anchor) { 543 if (typeof offest_top == 'undefined' || !offest_top) { 544 var offest_top = 0; 545 } 546 $('html,body').animate({scrollTop: scroll_to_anchor.offset().top - offest_top}, 'slow'); 547 } 548 var target_id = target.attr("id"); 549 var form_id = target.attr("data-form-id"); 550 if (!$("[data-loader-id='"+target_id+"']").length) {
551 var loader = $('<div data-loader-id="'+target_id+'" class="wcsearch-ajax-target-loading"><div class="wcsearch-loader wcsearch-loader-'+form_id+'"></div></div>'); 552 target.prepend(loader); 553 loader.css({ 554 width: target.innerWidth(), 555 height: target.innerHeight() 556 }); 557 if (target.outerHeight() > 600) { 558 loader.find(".wcsearch-loader").addClass("wcsearch-loader-max-top"); 559 } 560 } 561 } 562 window.wcsearch_ajax_loader_target_hide = function(target_id) { 563 $("[data-loader-id='"+target_id+"']").remove(); 564 } 565 566 window.wcsearch_ajax_loader_show = function(msg) { 567 var overlay = $('<div id="wcsearch-ajax-loader-overlay"><div class="wcsearch-loader"></div></div>'); 568 $('body').append(overlay); 569 } 570 571 window.wcsearch_ajax_loader_hide = function() { 572 $("#wcsearch-ajax-loader-overlay").remove(); 573 } 574 575 window.wcsearch_ajax_iloader = $("<div>", { class: 'wcsearch-ajax-iloader' }).html('<div class="rect1"></div><div class="rect2"></div><div class="rect3"></div><div class="rect4"></div><div class="rect5"></div>'); 576 window.wcsearch_add_iloader_on_element = function(button) { 577 button 578 .attr('disabled', 'disabled') 579 .wrapInner('<div class="wcsearch-hidden"></div>') 580 .append(wcsearch_ajax_iloader); 581 } 582 window.wcsearch_delete_iloader_from_element = function(button) { 583 button.find(".wcsearch-hidden").contents().unwrap(); 584 button.removeAttr('disabled').find(".wcsearch-ajax-iloader").remove(); 585 } 586})(jQuery); 587 588(function($) { 589 "use strict"; 590 591 $(document).on("click", 592 ".wcsearch-search-input-closed .wcsearch-search-input-label," + 593 ".wcsearch-search-input-opened .wcsearch-search-input-label", 594 function() { 595 596 var input = new wcsearch_search_input($(this).parents(".wcsearch-search-input")) 597 598 if (input.is_opened()) { 599 input.close(); 600 } else { 601 input.open(); 602 } 603 604 wcsearch_setup_terms_separators(); 605 }); 606 607 $("body").on("change", 608 ".wcsearch-search-model-input input[type=\"checkbox\"]," + 609 ".wcsearch-search-model-input input[type=\"radio\"]", 610 function() { 611 var input = $(this).parents(".wcsearch-search-model-input"); 612 var values = []; 613 input.find("input:checked").each(function() { 614 values.push($(this).val()); 615 }); 616 input.attr("data-values", values.join(',')); 617 618 wcsearch_model_update_placeholders(); 619 }); 620 621 $("body").on("change", 622 ".wcsearch-search-model-input input[name=\"price\"]," + 623 ".wcsearch-search-model-input input[name=\"radius\"]," + 624 ".wcsearch-search-model-input select", 625 function() { 626 var input = $(this).parents(".wcsearch-search-model-input"); 627 var values = $(this).val(); 628 629 input.attr("data-values", values); 630 631 wcsearch_model_update_placeholders(); 632 }); 633 634 $("body").on("change", 635 ".wcsearch-search-model-input select[name=field_price_min]," + 636 ".wcsearch-search-model-input select[name=field_price_max]", 637 function() { 638 var input = $(this).parents(".wcsearch-search-model-input"); 639 var values = [input.find("select[name=field_price_min]").val(), input.find("select[name=field_price_max]").val()]; 640 input.attr("data-values", values.join('-')); 641 642 wcsearch_model_update_placeholders(); 643 }); 644 645 $("body").on("change", 646 ".wcsearch-search-model-input input[id^='selected_tax']", 647 function() { 648 var input = $(this).parents(".wcsearch-search-model-input"); 649 var values = $(this).val(); 650 input.attr("data-values", values); 651 652 wcsearch_model_update_placeholders(); 653 }); 654 655 $("body").on("change", 656 ".wcsearch-search-model-input-one-select select," + 657 ".wcsearch-search-model-input-tax-select select", 658 function() { 659 var input = $(this).parents(".wcsearch-search-model-input"); 660 var values = $(this).val(); 661 input.attr("data-values", values); 662 663 wcsearch_model_update_placeholders(); 664 }); 665 666 $("body").on("change", 667 ".wcsearch-search-model-input-range input," + 668 ".wcsearch-search-model-input-single-slider input", 669 function() { 670 var input = $(this).parents(".wcsearch-search-model-input"); 671 var values = $(this).val(); 672 input.attr("data-values", values); 673 674 wcsearch_model_update_placeholders(); 675 }); 676 677 $("body").on("change", 678 ".wcsearch-search-model-input-1," + 679 ".wcsearch-search-model-input-2", 680 function() { 681 var input = $(this).parents(".wcsearch-search-model-input"); 682 683 if (input.find(".wcsearch-search-model-input-1, .wcsearch-search-model-input-2").length) { 684
685 var min_input = input.find(".wcsearch-search-model-input-1"); 686 var max_input = input.find(".wcsearch-search-model-input-2"); 687 688 var min = ''; 689 if (min_input.val() && !isNaN(min_input.val())) { 690 min = min_input.val(); 691 } 692 var max = ''; 693 if (max_input.val() && !isNaN(max_input.val())) { 694 max = max_input.val(); 695 } 696 var values = ''; 697 if (min || max) { 698 values = min+'-'+max; 699 } 700 701 input.attr("data-values", values); 702 } 703 704 wcsearch_model_update_placeholders(); 705 }); 706 707 $("body").on("click", 708 ".wcsearch-search-input .wcsearch-search-term-button .wcsearch-btn," + 709 ".wcsearch-search-model-input .wcsearch-search-term-button .wcsearch-btn", 710 function() { 711 if (wcsearch_is_model()) { 712 var input = $(this).parents(".wcsearch-search-model-input"); 713 } else { 714 var input = $(this).parents(".wcsearch-search-input"); 715 } 716 var btn_wrapper = $(this).parents(".wcsearch-search-term-button"); 717 var values = ''; 718 719 if (input.data("mode") == "checkboxes_buttons") { 720 btn_wrapper.toggleClass("wcsearch-search-term-button-active"); 721 722 var selected_terms_ids = []; 723 var selected_terms = input.find(".wcsearch-search-term-button-active"); 724 $.each(selected_terms, function() { 725 selected_terms_ids.push($(this).data("term-id")); 726 }); 727 if (selected_terms_ids) { 728 values = selected_terms_ids.join(","); 729 } 730 } else if (input.data("mode") == "radios_buttons") { 731 if (btn_wrapper.hasClass("wcsearch-search-term-button-active")) { 732 input.find(".wcsearch-search-term-button").removeClass("wcsearch-search-term-button-active"); 733 } else { 734 input.find(".wcsearch-search-term-button").removeClass("wcsearch-search-term-button-active"); 735 btn_wrapper.toggleClass("wcsearch-search-term-button-active"); 736 values = btn_wrapper.data("term-id"); 737 } 738 } else { 739 btn_wrapper.toggleClass("wcsearch-search-term-button-active"); 740 if (btn_wrapper.hasClass("wcsearch-search-term-button-active")) { 741 values = btn_wrapper.data("term-id"); 742 } 743 } 744 745 if (wcsearch_is_model()) { 746 input.attr("data-values", values); 747 748 wcsearch_model_update_placeholders(); 749 } else { 750 input.find("input.wcsearch-search-terms-buttons-input").val(values).trigger("change"); 751 } 752 }); 753 754 window.wcsearch_setup_terms_separators = function() { 755 $( 756 ".wcsearch-search-input-checkboxes," + 757 ".wcsearch-search-input-radios," + 758 ".wcsearch-search-input-checkboxes_buttons," + 759 ".wcsearch-search-input-radios_buttons," + 760 ".wcsearch-search-model-input-checkboxes," + 761 ".wcsearch-search-model-input-checkboxes_buttons," + 762 ".wcsearch-search-model-input-radios," + 763 ".wcsearch-search-model-input-radios_buttons" 764 ).each(function() { 765 if (wcsearch_is_model()) { 766 // model 767 var container = $(this).find(".wcsearch-search-model-input-terms-columns"); 768 } else { 769 // frontend 770 var container = $(this).find(".wcsearch-search-input-terms-columns"); 771 } 772 773 var input_data = $(this).data(); 774 775 var height_limit = input_data["height_limit"]; 776 if (height_limit > 0) { 777 container.css("height", "auto"); 778 if (container.outerHeight() > height_limit) { 779 780 if (input_data["how_to_limit"] == "use_scroll") { 781 container.css("height", height_limit); 782 } else if (input_data["how_to_limit"] == "show_more_less") { 783 var overlay = $(this); 784 785 container.parent().find(".wcsearch-search-separator-link").remove(); 786 787 var separator_link = $("<div />") 788 .addClass("wcsearch-search-separator-link") 789 .attr("data-status", "closed") 790 .attr("data-text-open", input_data["text_open"]) 791 .attr("data-text-close", input_data["text_close"]) 792 .html(input_data["text_open"]+' <span class="wcsearch-fa wcsearch-fa-chevron-down"></span>'); 793 794 container.after(separator_link[0]); 795 796 container.css("height", height_limit); 797 container.css("overflow", "hidden"); 798 799 separator_link.on("click", function() { 800 var status = $(this).attr("data-status"); 801 if (status === "closed") { 802 $(this).attr("data-status", "opened"); 803 804 var chevron = $("<span />").addClass("wcsearch-fa wcsearch-fa-chevron-up"); 805 $(this).html($(this).data("text-close")+" ").append(chevron[0]); 806 container.css("overflow", "auto"); 807 container.css("height", height_limit+50); 808 } else { 809 $(this).attr("data-status", "closed"); 810 811 var chevron = $("<span />").addClass("wcsearch-fa wcsearch-fa-chevron-down"); 812 $(this).html($(this).data("text-open")+" ").append(chevron[0]); 813 container.css("overflow", "hidden"); 814 container.css("height", height_limit); 815 container.scrollTop(0); 816 } 817 });
818 } 819 } 820 } 821 }); 822 }; 823 824 var wcsearch_used_by = 'wc'; 825 if ($(".wcsearch-search-form").length && $(".wcsearch-search-form").data("used_by")) { 826 wcsearch_used_by = $(".wcsearch-search-form").data("used_by"); 827 } else if ($("[name='used_by']").length && $("[name='used_by']").val()) { 828 wcsearch_used_by = $("[name='used_by']").val(); 829 } 830 831 var wcsearch_submit_callback = wcsearch_js_objects.adapter_options[wcsearch_used_by].submit_callback; 832 833 window.wcsearch_get_loop = function() { 834 var selectors = wcsearch_js_objects.adapter_options[wcsearch_used_by].loop_selector_name; 835 836 if (!$.isArray(selectors)) { 837 selectors = [wcsearch_js_objects.adapter_options[wcsearch_used_by].loop_selector_name]; 838 } 839 840 var selected_selector; 841 $.each(selectors, function(index, selector_name) { 842 var wcsearch_loop_name = "div[id^='"+selector_name+"']"; 843 844 if ($(wcsearch_loop_name).length) { 845 selected_selector = $(wcsearch_loop_name); 846 return false; 847 } 848 }); 849 850 return selected_selector; 851 } 852 853 window.wcsearch_add_common_fields = function(post_params, form) { 854 form.find(".wcsearch-common-field").each(function() { 855 if ($(this).attr("name").indexOf("[]") != -1) { 856 var attr_name = $(this).attr("name"); 857 if (typeof post_params[attr_name] == 'undefined') { 858 post_params[attr_name] = []; 859 } 860 post_params[attr_name].push($(this).attr("value")); 861 } else { 862 post_params[$(this).attr("name")] = $(this).attr("value"); 863 } 864 }) 865 866 return post_params; 867 } 868 869 window.wcsearch_add_count_fields = function(post_params, form) { 870 post_params.count_params = []; 871 form.find(".wcsearch-count-field").each(function() { 872 post_params.count_params.push({ name: $(this).attr("name"), value: $(this).attr("value") }); 873 }) 874 875 return post_params; 876 } 877 878 window.wcsearch_only_unique = function(value, index, self) { 879 return self.indexOf(value) === index; 880 } 881 882 window.wcsearch_get_query_string_param = function(param_name) { 883 884 var param_value; 885 var parts = wcsearch_query_string.split('&'); 886 $.each(parts, function(index, key_value) { 887 key_value = key_value.split('='); 888 if (key_value[0] == param_name) { 889 param_value = key_value[1]; 890 return; 891 } 892 }); 893 return param_value; 894 } 895 window.wcsearch_extend_query_string_params = function(params) { 896 897 var parts = wcsearch_query_string.split('&'); 898 for (const [key, value] of Object.entries(params)) { 899 var key_exists = false; 900 $.each(parts, function(index, key_value) { 901 key_value = key_value.split('='); 902 if (key == key_value[0]) { 903 parts[index] = key+'='+value; 904 key_exists = true; 905 return; 906 } 907 }); 908 if (!key_exists) { 909 parts.push(key+'='+value); 910 } 911 } 912 parts = parts.filter(wcsearch_only_unique); 913 wcsearch_query_string = parts.join('&'); 914 } 915 916 window.wcsearch_insert_param_in_uri = function(...args) { 917 918 var hash = window.location.hash.substring(1); 919 920 if (!Array.isArray(args[0]) && args.length == 2) { 921 args = [[args[0], args[1]]]; 922 } 923 924 var parts = document.location.search.substr(1).split('&').filter(
924Boolean); 925 for (let [key, value] of args) { 926 key = encodeURIComponent(key); 927 value = encodeURIComponent(value); 928 929 let key_exists = false; 930 $.each(parts, function(index, key_value) { 931 key_value = key_value.split('='); 932 if (key == key_value[0]) { 933 parts[index] = key+'='+value; 934 key_exists = true; 935 return; 936 } 937 }); 938 if (!key_exists) { 939 parts.push(key+'='+value); 940 } 941 } 942 943 let params = parts.join('&'); 944 945 if (hash) { 946 hash = '#' + hash; 947 } 948 949 window.history.pushState("", "", "?" + params + hash); 950 } 951 952 window.wcsearch_remove_param_from_uri = function(...args) { 953 954 var hash = window.location.hash.substring(1); 955 956 var parts = document.location.search.substr(1).split('&').filter(Boolean); 957 for (let key of args) { 958 key = encodeURIComponent(key); 959 960 let _parts = parts.slice(); // copy array, do not affect splice on _parts when we do $.each 961 962 $.each(_parts, function(index, key_value) { 963 key_value = key_value.split('='); 964 if (key == key_value[0]) { 965 parts.splice(index, 1) 966 return; 967 } 968 }); 969 } 970 971 let params = parts.join('&'); 972 973 if (hash) { 974 hash = '#' + hash; 975 } 976 977 if (params) { 978 window.history.pushState("", "", "?" + params + hash); 979 } else { 980 // remove params from URL 981 var href = window.location.href; 982 var url = href.split('?'); 983 window.history.pushState("", "", url[0] + hash); 984 } 985 986 } 987 988 window.wcsearch_get_uri_param = function(param) { 989 990 var href = window.location.href; 991 var url = href.split('?'); 992 if (url.length == 2) { 993 var parts = url[1].split('&'); 994 995 for (let key in parts) { 996 let key_value = parts[key].split('='); 997 if (param == key_value[0]) { 998 return key_value[1]; 999 } 1000 }; 1001 } else { 1002 return false; 1003 } 1004 } 1005 1006 $('form.woocommerce-ordering').on("submit", function () { 1007 return false; 1008 }); 1009 $(document).on("change", ".woocommerce-ordering .orderby", function(e) { 1010 1011 // do not call request when clicking orderby without search form 1012 if ($(".wcsearch-search-form").length) { 1013 e.preventDefault(); 1014 1015 var form = $(".wcsearch-search-form"); 1016 1017 if (wcsearch_get_loop()) { 1018 var products_loop_id = wcsearch_get_loop().data("id"); 1019 } else { 1020 var products_loop_id = null; 1021 } 1022 var orderby = $(this).val(); 1023 1024 wcsearch_extend_query_string_params({ orderby: orderby }); 1025 var post_params = { 1026 'action': 'wcsearch_search_request', 1027 'pagination_base': wcsearch_js_objects.pagination_base, 1028 'query_string': wcsearch_query_string, 1029 'default_query': wcsearch_js_objects.default_query, 1030 'products_loop_id': products_loop_id 1031 }; 1032 1033 if (wcsearch_query_string) { 1034 window.history.pushState("", "", "?"+wcsearch_query_string); 1035 } 1036 1037 post_params = wcsearch_add_common_fields(post_params, form); 1038 1039 wcsearch_submit_request(post_params); 1040 } 1041 }); 1042 1043 $(document).on("click", "a.page-numbers", function(e) { 1044 1045 // do not call request when clicking pagination without search form 1046 if ($(".wcsearch-search-form").length) { 1047 e.preventDefault(); 1048 1049 var form = $(".wcsearch-search-form"); 1050 1051 if (wcsearch_get_loop()) { 1052 var products_loop_id = wcsearch_get_loop().data("id"); 1053 } else { 1054 var products_loop_id = null; 1055 } 1056 1057 var parts = $(this).attr("href").split("/"); 1058 $.each(parts, function(i, part) { 1059 if (part == 'page') { 1060 var page_num = parts[i+1]; 1061 1062 wcsearch_extend_query_string_params({ page: page_num }); 1063 var post_params = { 1064 'action': 'wcsearch_search_request', 1065 'pagination_base': wcsearch_js_objects.pagination_base, 1066 'query_string': wcsearch_query_string, 1067 'default_query': wcsearch_js_objects.default_query, 1068 'products_loop_id': products_loop_id 1069 }; 1070 1071 post_params = wcsearch_add_common_fields(post_params, form); 1072 1073 wcsearch_submit_request(post_params); 1074 1075 return; 1076 } 1077 }); 1078 } 1079 }); 1080 1081 window.wcsearch_filter_submit_params = function(search_inputs_value, form) { 1082
1083 // check address when radius was set, remove radius when no address param 1084 var radius_parameter_passed = false; 1085 var radius_parameter_key; 1086 for (var attr in search_inputs_value) { 1087 var name = search_inputs_value[attr]['name']; 1088 1089 if (name == 'radius') { 1090 radius_parameter_key = attr; 1091 1092 for (var _attr in search_inputs_value) { 1093 if (search_inputs_value[_attr]['name'] == 'address') { 1094 radius_parameter_passed = true; 1095 break; 1096 } 1097 } 1098 } 1099 } 1100 if (radius_parameter_key && !radius_parameter_passed) { 1101 search_inputs_value.splice(radius_parameter_key, 1); 1102 } 1103 1104 return search_inputs_value; 1105 } 1106 1107 window.wcsearch_submit_form = function(form) { 1108 1109 var form_id = form.data("id"); 1110 var hash = form.data("hash"); 1111 var use_ajax = true; 1112 var is_target_url = false; 1113 1114 if (form.data("scroll-to") == 'products' && wcsearch_get_loop() && wcsearch_do_scroll) { 1115 $("html, body").animate({ 1116 scrollTop: wcsearch_get_loop().offset().top 1117 }); 1118 } 1119 wcsearch_do_scroll = true; 1120 1121 if (form.data("use-ajax")) { 1122 use_ajax = true; 1123 } else { 1124 use_ajax = false; 1125 } 1126 1127 if (form.data("target_url")) { 1128 is_target_url = true; 1129 } else { 1130 is_target_url = false; 1131 } 1132 1133 // all_inputs -> search_inputs_value -> form_params -> URI_params -> wcsearch_query_string 1134 var all_inputs = form.find(".wcsearch-search-input, input.wcsearch-hidden-field[type=hidden]"); 1135 var form_params = {}; 1136 var search_inputs_value = []; 1137 1138 all_inputs.each(function(i, _input) { 1139 var input = new wcsearch_search_input($(_input)); 1140 1141 var value_obj = input.get_value(); 1142 1143 if (value_obj) { 1144 if (Array.isArray(value_obj)) { 1145 var value_arr = value_obj; 1146 $.each(value_arr, function(index, value_obj) { 1147 search_inputs_value.push(value_obj); 1148 }); 1149 } else { 1150 search_inputs_value.push(value_obj); 1151 } 1152 } 1153 }); 1154 1155 search_inputs_value = wcsearch_filter_submit_params(search_inputs_value, form); 1156 1157 for (var attr in search_inputs_value) { 1158 if (search_inputs_value[attr]['value'] != false && search_inputs_value[attr]['value'] != '') { 1159 var value = search_inputs_value[attr]['value']; 1160 var name = search_inputs_value[attr]['name']; 1161 1162 if (typeof form_params[name] == 'undefined' || form_params[name] == null) { 1163 form_params[name] = value; 1164 } else { 1165 var parts = form_params[name].split(','); 1166 var values = value.split(","); 1167 for (var key in values) { 1168 parts.push(values[key]); 1169 } 1170 1171 parts = parts.filter(wcsearch_only_unique); 1172 form_params[name] = parts.join(','); 1173 } 1174 } 1175 } 1176 1177 // save order params when they already persist in URI 1178 var save_order_params = [ 1179 "orderby", 1180 "order_by", 1181 "order", 1182 "page_id", 1183 "swLat", 1184 "swLng", 1185 "neLat", 1186 "neLng", 1187 ]; 1188 1189 for (var param in save_order_params) { 1190 var param_name = save_order_params[param]; 1191 if (wcsearch_get_uri_param(param_name)) { 1192 form_params[param_name] = wcsearch_get_uri_param(param_name); 1193 } 1194 } 1195 1196 if (typeof gtag != 'undefined') { 1197 gtag('event', 'search_results', form_params); 1198 } 1199 1200 var URI_params = $.param(form_params); 1201 if (URI_params) { 1202 window.history.pushState("", "", "?"+URI_params); 1203 } else { 1204 // remove params from URL 1205 var href = window.location.href; 1206 var url = href.split('?'); 1207 window.history.pushState("", "", url[0]); 1208 } 1209 1210 wcsearch_query_string = URI_params; 1211 1212 if (use_ajax && !is_target_url) { 1213 if (wcsearch_get_loop()) { 1214 wcsearch_get_loop().attr("data-form-id", form_id); 1215 } 1216 var post_params = { 1217 'action': 'wcsearch_search_request', 1218 'form_id': form_id, 1219 'hash': hash, 1220 'pagination_base': wcsearch_js_objects.pagination_base, 1221 'query_string': wcsearch_query_string, 1222 'default_query': wcsearch_js_objects.default_query 1223 }; 1224 post_params = wcsearch_add_common_fields(post_params, form); 1225 1226 window[wcsearch_submit_callback](post_params); 1227 } else { 1228 var form_action = $(form).attr("action"); 1229 var url = new URL(form_action); 1230 $.each(form_params, function(key, value) { 1231 url.searchParams.set(key, value); // setting your param 1232 }); 1233 var submit_url = url.href; 1234 1235 window.location.href = submit_url; 1236 } 1237 }; 1238 1239 window.wcsearch_submit_request = function(post_params) { 1240 1241 wcsearch_request_processing = true; 1242 wcsearch_ajax_loader_target_show($("#"+wcsearch_js_objects.loop_selector_name)); 1243 1244 // paginator clicked - do not need to recount 1245 var page = wcsearch_get_query_string_param('page'); 1246 if (!page) { 1247 wcsearch_recount_attempts = 0; 1248 wcsearch_recount(); 1249 } 1250 1251 $.ajax({
1252 type: "POST", 1253 url: wcsearch_js_objects.ajaxurl, 1254 data: post_params, 1255 dataType: 'JSON', 1256 success: function(response_from_the_action_function) { 1257 if (wcsearch_get_loop()) { 1258 wcsearch_get_loop().html(response_from_the_action_function.products); 1259 } 1260 1261 }, 1262 complete: function() { 1263 wcsearch_request_processing = false; 1264 } 1265 }); 1266 } 1267 1268 window.wcsearch_recount = function() { 1269 var post_params = { 1270 'action': 'wcsearch_recount_request', 1271 'query_string': wcsearch_query_string, 1272 'counters': [] 1273 }; 1274 1275 var recount_items = $(".wcsearch-item-count:not(.wcsearch-item-count-no-recount)").not(".wcsearch-search-input-always-closed .wcsearch-item-count"); 1276 1277 recount_items.addClass("wcsearch-item-count-blur"); 1278 recount_items.slice(0, wcsearch_max_counters).map(function(index, obj) { 1279 if ($(obj).data()) { 1280 $(obj).addClass("wcsearch-item-count-blur"); 1281 post_params.counters.push($(obj).data()); 1282 } 1283 }); 1284 1285 var form = $(".wcsearch-search-form"); 1286 post_params = wcsearch_add_common_fields(post_params, form); 1287 post_params = wcsearch_add_count_fields(post_params, form); 1288 1289 wcsearch_recount_request(post_params); 1290 } 1291 window.wcsearch_sort_terms_by_counter = function(input_div) { 1292 var columns = input_div.find(".wcsearch-search-input-terms-column, .wcsearch-search-model-input-terms-column"); 1293 if (columns.length) { 1294 columns.each(function() { 1295 var column = $(this); 1296 var sorted_elements = []; 1297 var terms = column.find(".wcsearch-checkbox, .wcsearch-radio"); 1298 1299 terms.each(function() { 1300 var count = $(this).find(".wcsearch-item-count").text(); 1301 if (count != 'xx') { 1302 sorted_elements.push([this, parseInt(count)]); 1303 $(this).remove(); 1304 } 1305 }); 1306 1307 sorted_elements.sort(function(a, b) { 1308 if (input_div.data("order") == 'DESC') { 1309 return a[1] < b[1]; 1310 } else { 1311 return a[1] > b[1]; 1312 } 1313 }); 1314 1315 $(sorted_elements).each(function() { 1316 column.append(this[0]); 1317 }); 1318 }); 1319 } else { 1320 var selects = input_div.find("select.wcsearch-form-control"); 1321 if (selects.length) { 1322 selects.each(function() { 1323 var select = $(this); 1324 var sorted_elements = []; 1325 var terms = select.find("option"); 1326 1327 terms.each(function() { 1328 var count = $(this).attr("data-count"); 1329 if (count != '') { 1330 sorted_elements.push([this, parseInt(count)]); 1331 $(this).remove(); 1332 } 1333 }); 1334 1335 sorted_elements.sort(function(a, b) { 1336 if (input_div.data("order") == 'DESC') { 1337 return a[1] < b[1]; 1338 } else { 1339 return a[1] > b[1]; 1340 } 1341 }); 1342 1343 $(sorted_elements).each(function() { 1344 select.append(this[0]); 1345 }); 1346 }); 1347 } 1348 } 1349 } 1350 window.wcsearch_recount_request = function(post_params) { 1351 1352 if (post_params.counters.length == 0) { 1353 return false; 1354 } 1355 1356 $.ajax({ 1357 type: "POST", 1358 url: wcsearch_js_objects.ajaxurl, 1359 data: post_params, 1360 query_string: wcsearch_query_string, 1361 dataType: 'JSON', 1362 success: function(response_from_the_action_function) { 1363 if (typeof response_from_the_action_function.counters == "object" && response_from_the_action_function.counters) { 1364 1365 $(wcsearch_dropdowns).each(function(i, dropdown) { 1366 if (typeof dropdown.input != "undefined" && dropdown.input.hasClass("ui-autocomplete-input")) { 1367 // call initialization to avoid error 1368 dropdown.input.autocomplete(); 1369 if (dropdown.input.autocomplete("widget").is(":visible")) { 1370 dropdown.is_open = true; 1371 dropdown.input.autocomplete("close"); 1372 } else { 1373 dropdown.is_open = false; 1374 } 1375 } 1376 }); 1377 1378 $(response_from_the_action_function.counters).each(function(index, counter_tag) { 1379 if (typeof counter_tag.counter_term_id != "undefined") { 1380 var counter_term_id = counter_tag.counter_term_id; 1381 var counter_term_tax = counter_tag.counter_term_tax; 1382 var counter_item = counter_tag.counter_item; 1383 var counter_number = counter_tag.counter_number; 1384 1385 $(".wcsearch-item-count[data-termid='"+counter_term_id+"'][data-tax='"+counter_term_tax+"']").replaceWith($(counter_item)[0]); 1386 1387 $(".wcsearch-search-input-tax-select[data-counter=1] option[data-termid="+counter_term_id+"][data-tax='"+counter_term_tax+"']").attr("data-count", counter_number); 1388 } else if (typeof counter_tag.counter_price != "undefined") { 1389 var counter_price = counter_tag.counter_price; 1390 var counter_item = counter_tag.counter_item; 1391 1392 $(".wcsearch-item-price-"+counter_price).each(function() { 1393 $(this).replaceWith($(counter_item)[0]); 1394 });
1395 } else if (typeof counter_tag.counter_option != "undefined") { 1396 var counter_option = counter_tag.counter_option; 1397 var counter_item = counter_tag.counter_item; 1398 1399 $(".wcsearch-item-option-"+counter_option).each(function() { 1400 $(this).replaceWith($(counter_item)[0]); 1401 }); 1402 } else if (typeof counter_tag.counter_hours != "undefined") { 1403 var counter_hours = counter_tag.counter_hours; 1404 var counter_item = counter_tag.counter_item; 1405 1406 $(".wcsearch-item-hours-"+counter_hours).each(function() { 1407 $(this).replaceWith($(counter_item)[0]); 1408 }); 1409 } else if (typeof counter_tag.counter_ratings != "undefined") { 1410 var counter_ratings = counter_tag.counter_ratings; 1411 var counter_item = counter_tag.counter_item; 1412 1413 $(".wcsearch-item-ratings-"+counter_ratings).each(function() { 1414 $(this).replaceWith($(counter_item)[0]); 1415 }); 1416 } 1417 }); 1418 } 1419 1420 if ($(".wcsearch-item-count.wcsearch-item-count-blur").length) { 1421 1422 if (this.query_string == wcsearch_query_string) { 1423 wcsearch_continue_recounting(); 1424 } else { 1425 wcsearch_recount_attempts = 0; 1426 } 1427 } else { 1428 $(".wcsearch-search-input[data-orderby='count'], .wcsearch-search-model-input[data-orderby='count']").each(function() { 1429 wcsearch_sort_terms_by_counter($(this)); 1430 }); 1431 } 1432 }, 1433 complete: function() { 1434 $(wcsearch_dropdowns).each(function(i, dropdown) { 1435 if (typeof dropdown.input != "undefined" && dropdown.input.hasClass("ui-autocomplete-input") && dropdown.is_open) { 1436 dropdown.input.autocomplete("search", dropdown.input.val()); 1437 } 1438 }); 1439 } 1440 }); 1441 } 1442 window.wcsearch_continue_recounting = function() { 1443 if ($(".wcsearch-item-count.wcsearch-item-count-blur").length) { 1444 var post_params = { 1445 'action': 'wcsearch_recount_request', 1446 'query_string': wcsearch_query_string, 1447 'counters': [] 1448 }; 1449 $(".wcsearch-item-count.wcsearch-item-count-blur:lt("+wcsearch_max_counters+")").map(function(index, obj) { 1450 post_params.counters.push($(obj).data()); 1451 }); 1452 1453 var form = $(".wcsearch-search-form"); 1454 post_params = wcsearch_add_common_fields(post_params, form); 1455 post_params = wcsearch_add_count_fields(post_params, form); 1456 1457 wcsearch_recount_attempts++; 1458 if (wcsearch_recount_attempts < 20) { 1459 wcsearch_recount_request(post_params); 1460 } else { 1461 setTimeout( function() { 1462 wcsearch_recount_attempts = 0; 1463 }, 5000); 1464 } 1465 } else { 1466 wcsearch_recount_attempts = 0; 1467 } 1468 } 1469 1470 var wcsearch_pointer_interal; 1471 window.wcsearch_show_pointer = function(form, input, message, time = 5000) { 1472 1473 form.parent().find(".wcsearch-apply-filters-float-btn").remove(); 1474 if (wcsearch_pointer_interal) { 1475 clearInterval(wcsearch_pointer_interal); 1476 } 1477 1478 var input_top = input.offset().top; 1479 var form_top = form.offset().top; 1480 var pointer = $("<div />") 1481 .html('<span>' + message + '</span>') 1482 .addClass("wcsearch-apply-filters-float-btn") 1483 .css({ top: (input_top - form_top - 22) }) 1484 .insertBefore(form) 1485 .on("click", function() { 1486 if (!wcsearch_request_processing) { 1487 wcsearch_submit_form(form); 1488 1489 if (wcsearch_get_loop()) { 1490 $("html, body").animate({ 1491 scrollTop: wcsearch_get_loop().offset().top 1492 }); 1493 } 1494 } 1495 }); 1496 1497 wcsearch_pointer_interal = setInterval(function() { 1498 clearInterval(wcsearch_pointer_interal); 1499 form.parent().find(".wcsearch-apply-filters-float-btn").fadeOut(300, function() { $(this).remove() }); 1500 }, time); 1501 } 1502 1503 $(document).on("change", ".wcsearch-search-input input, .wcsearch-search-input select", function(e) { 1504 1505 var input = $(this); 1506 var name = $(this).prop("name"); 1507 var input_div = input.parents(".wcsearch-search-input"); 1508 var form = input.parents("form"); 1509 1510 if (input.attr("type") == 'radio' || input.attr("type") == 'checkbox') { 1511 1512 var use_pointer = input.parents(".wcsearch-search-input").data("use_pointer"); 1513 1514 if (use_pointer) { 1515 wcsearch_show_pointer(form, input, 'Search'); 1516 } 1517 } 1518 1519 if (!wcsearch_request_processing) { 1520 1521 wcsearch_open_close_dep_inputs(form); 1522 1523 // reset the same type of inputs before submit, 1524 if (wcsearch_js_objects.reset_same_inputs) { 1525 var field_slug = $(this).parents(".wcsearch-search-input").attr("data-slug"); 1526 var the_same_inputs = form.find(".wcsearch-search-input[data-slug="+field_slug+"]").not(input_div); 1527 the_same_inputs.each(function(i, same_input) { 1528 var input = new wcsearch_search_input($(same_input)); 1529 input.reset(); 1530 }); 1531 } 1532 1533 if (!form.data("auto-submit")) { 1534 return false; 1535 } 1536 1537 $(".wcsearch-item-count-no-recount").removeClass("wcsearch-item-count-no-recount"); 1538 1539 if (input_div.data("type") == "tax" && input_div.data("relation") == 'OR') { 1540 // do not recount self input items 1541 input_div.find(".wcsearch-item-count").addClass("wcsearch-item-count-no-recount"); 1542 } 1543 1544 wcsearch_submit_form(form); 1545 } 1546 }); 1547 1548 window.wcsearch_open_close_dep_inputs = function(form) { 1549 if (form.find(".wcsearch-search-input[data-dependency_tax]").length) { 1550 var dep_inputs = form.find(".wcsearch-search-input[data-dependency_tax]");
1551 dep_inputs.filter(Boolean); // filter empty dependency_tax='' 1552 1553 var all_inputs = form.find(".wcsearch-search-input"); 1554 1555 dep_inputs.each( function(index, _dep_input) { 1556 1557 var dep_input = $(_dep_input); 1558 var dep_tax = dep_input.data("dependency_tax"); 1559 var dep_items = dep_input.data("dependency_items"); 1560 // without "No dependency" option 1561 if (dep_tax) { 1562 var input_opened = false; 1563 1564 all_inputs.each(function(i, _input) { 1565 var current_input_name = name; 1566 var input = new wcsearch_search_input($(_input)); 1567 var value = input.get_value(); 1568 1569 if (value) { 1570 if (Array.isArray(value)) { 1571 var value_arr = value; 1572 $.each(value_arr, function(index, value) { 1573 1574 if (value) { 1575 var input_values = value.value.toString().split(",").filter(item => item); 1576 1577 if (dep_tax == value.name) { 1578 if (typeof dep_items != "undefined") { 1579 dep_items = dep_items.toString().split(","); 1580 1581 if ($(input_values).filter(dep_items).length) { 1582 input_opened = true; 1583 return; 1584 } 1585 } else if (input_values.length) { 1586 input_opened = true; 1587 return; 1588 } 1589 } 1590 } 1591 });
1592 } else { 1593 var input_values = value.value.toString().split(",").filter(item => item); 1594 1595 if (dep_tax == value.name) { 1596 if (typeof dep_items != "undefined") { 1597 dep_items = dep_items.toString().split(","); 1598 1599 if ($(input_values).filter(dep_items).length) { 1600 input_opened = true; 1601 return; 1602 } 1603 } else if (input_values.length) { 1604 input_opened = true; 1605 return; 1606 } 1607 } 1608 } 1609 } 1610 }); 1611 1612 if (input_opened) { 1613 1614 // call wcsearch_setup_terms_separators() only when it was closed 1615 if (dep_input.parents(".wcsearch-search-placeholder").hasClass("wcsearch-search-placeholder-dependency-view-closed")) { 1616 dep_input.parents(".wcsearch-search-placeholder").removeClass("wcsearch-search-placeholder-dependency-view-closed"); 1617 1618 wcsearch_setup_terms_separators(); 1619 } 1620 } else { 1621 var dep_input_reset = new wcsearch_search_input(dep_input); 1622 dep_input_reset.reset(); 1623 1624 dep_input.parents(".wcsearch-search-placeholder").addClass("wcsearch-search-placeholder-dependency-view-closed"); 1625 } 1626 } 1627 }); 1628 } 1629 } 1630 1631 $(".wcsearch-search-input-button").on("click", function(e) { 1632 e.preventDefault(); 1633 1634 var form = $(this).parents("form"); 1635 1636 if (!wcsearch_request_processing) { 1637 wcsearch_submit_form(form); 1638 } 1639 }); 1640 1641 $(".wcsearch-search-input-reset-button").on("click", function(e) { 1642 e.preventDefault(); 1643 1644 wcsearch_do_scroll = false; 1645 1646 var form = $(this).parents("form"); 1647 1648 var inputs = form.find(".wcsearch-search-input"); 1649 inputs.each(function(i, _input) { 1650 var input = new wcsearch_search_input($(_input)); 1651 input.reset(); 1652 }); 1653 1654 wcsearch_submit_form(form); 1655 1656 wcsearch_open_close_dep_inputs(form); 1657 }); 1658 1659 $(".wcsearch-search-input-more-filters").on("click", function(e) { 1660 e.preventDefault(); 1661 1662 var form = $(this).parents("form"); 1663 1664 wcsearch_open_close_dep_inputs(form); 1665 1666 var inputs = form.find(".wcsearch-search-input"); 1667 inputs.each(function(i, _input) { 1668 1669 if ($(_input).parent().hasClass("wcsearch-search-placeholder-advanced-view")) { 1670 $(_input).parent().toggleClass("wcsearch-search-placeholder-advanced-view-closed"); 1671 } 1672 1673 wcsearch_setup_terms_separators(); 1674 }); 1675 1676 if ($(this).data("status") == "closed") { 1677 $(this).find("input").val(1); 1678 1679 $(this).find("span.wcsearch-fa-chevron-down") 1680 .removeClass("wcsearch-fa-chevron-down") 1681 .addClass("wcsearch-fa-chevron-up"); 1682 1683 wcsearch_insert_param_in_uri('more_filters', 1); 1684 1685 $(this).data("status", "opened"); 1686 } else { 1687 $(this).find("input").val(0); 1688 1689 $(this).find("span.wcsearch-fa-chevron-up") 1690 .removeClass("wcsearch-fa-chevron-up") 1691 .addClass("wcsearch-fa-chevron-down"); 1692 1693 wcsearch_remove_param_from_uri('more_filters'); 1694 1695 $(this).data("status", "closed"); 1696 } 1697 }); 1698 1699 window.wcsearch_sort_autocomplete_items = function(a, b) { 1700 if (typeof a.is_listing != "undefined" && a.is_listing && (typeof b.is_listing == "undefined" || !b.is_listing)) { 1701 return -1; 1702 } else if (typeof a.is_listing == "undefined" || !a.is_listing) { 1703 if (a.starts_with && !b.starts_with) { 1704 return -1; 1705 } else if (a.term_in_name && !b.term_in_name) { 1706 return 1; 1707 } else if (!a.term_in_name && b.term_in_name) { 1708 return -1; 1709 } else if (a.is_term && !b.is_term) { 1710 return 1; 1711 } else if (!a.is_term && b.is_term) { 1712 return -1; 1713 } else if (a.parents == '' && b.parents != '') { 1714 return 1; 1715 } else if (a.parents != '' && b.parents == '') { 1716 return -1; 1717 } else if (a.name > b.name) { 1718 return -1; 1719 } else if (b.name > a.name) { 1720 return 1; 1721 } else { 1722 return 0; 1723 } 1724 } 1725 } 1726 1727 var wcsearch_dropdowns = []; 1728 1729 window.wcsearch_process_main_search_fields = function() { 1730 if (typeof tax_keywords != "undefined") { 1731 1732 // tax autocomplete 1733 $(".wcsearch-tax-autocomplete").tax_autocomplete().each(function(i, dropdown) { 1734 wcsearch_dropdowns.push($(dropdown).tax_autocomplete().tax_autocomplete("instance")); 1735 }); 1736 1737 // tax + keywords autocomplete 1738 $(".wcsearch-tax-keywords").tax_keywords().each(function(i, dropdown) { 1739 wcsearch_dropdowns.push($(dropdown).tax_keywords().tax_keywords("instance")); 1740 }); 1741 1742 // tax + address autocomplete 1743 $(".wcsearch-tax-address").tax_address().each(function(i, dropdown) { 1744 wcsearch_dropdowns.push($(dropdown).tax_address().tax_address("instance")); 1745 }); 1746 1747 // address autocomplete 1748 $(".wcsearch-address-autocomplete").address_autocomplete().each(function(i, dropdown) { 1749 wcsearch_dropdowns.push($(dropdown).address_autocomplete().address_autocomplete("instance")); 1750 }); 1751
1752 // heirarhical tax 1753 $(".wcsearch-heirarhical-dropdown").heirarhical_dropdown().each(function(i, dropdown) { 1754 wcsearch_dropdowns.push($(dropdown).heirarhical_dropdown().heirarhical_dropdown("instance")); 1755 }); 1756 1757 // multiselect dropdown tax 1758 $(".wcsearch-multiselect-dropdown").multiselect_dropdown().each(function(i, dropdown) { 1759 wcsearch_dropdowns.push($(dropdown).multiselect_dropdown().multiselect_dropdown("instance")); 1760 }); 1761 1762 // keywords autocomplete 1763 $(".wcsearch-keywords-autocomplete").keywords_autocomplete().each(function(i, dropdown) { 1764 wcsearch_dropdowns.push($(dropdown).keywords_autocomplete().keywords_autocomplete("instance")); 1765 }); 1766 } 1767 } 1768 1769 // search suggestions links in string fields 1770 $(document).on("click", ".wcsearch-search-input .wcsearch-search-suggestions a", function() { 1771 var input = $(this).parents(".wcsearch-search-input").find(".wcsearch-search-string-input"); 1772 var value = $(this).text(); 1773 1774 input.val(value) 1775 .trigger("focus") 1776 .trigger("change"); 1777 }); 1778 1779 if (typeof $.ui.selectmenu != 'undefined' && typeof $.ui.autocomplete != 'undefined') { 1780 // search suggestions links in keywords/address fields 1781 $(document).on("click", ".wcsearch-search-input .wcsearch-search-suggestions a", function() { 1782 var input = $(this).parents(".wcsearch-search-input").find(".wcsearch-main-search-field"); 1783 var value = $(this).text(); 1784 1785 input.val(value) 1786 .trigger("focus") 1787 .trigger("change"); 1788 1789 if (input.hasClass('ui-autocomplete-input')) { 1790 input.autocomplete("search", value); 1791 } 1792 }); 1793 // redirect to listing 1794 $(document).on("click", ".wcsearch-dropdowns-menu a", function() { 1795 if ($(this).attr("target") == "_blank") { 1796 window.open($(this).attr("href"), '_blank'); 1797 } else { 1798 window.location = $(this).attr("href"); 1799 } 1800 }); 1801 // correct menu width 1802 $.ui.autocomplete.prototype._resizeMenu = function () { 1803 var ul = this.menu.element; 1804 ul.outerWidth(this.element.outerWidth()); 1805 } 1806 1807 $(document).on('change paste keyup blur', '.wcsearch-main-search-field', function() { 1808 var input = $(this); 1809 if (input.val()) { 1810 input.parent().find(".wcsearch-dropdowns-menu-button").addClass("wcsearch-fa-close"); 1811 } else { 1812 input.parent().find(".wcsearch-dropdowns-menu-button").removeClass("wcsearch-fa-close"); 1813 } 1814 }); 1815 $(document).on('click', '.wcsearch-fa-close', function(e) { 1816 var input = $(this).parent().find('.wcsearch-main-search-field'); 1817 input.trigger("reset"); 1818 input.trigger("change"); 1819 1820 $(this).removeClass('wcsearch-fa-close'); 1821 }); 1822 1823 window.tax_keywords = $.widget("custom.tax_keywords", { 1824 wrapper: "",
1825 input: "", 1826 button: "", 1827 input_icon_class: "wcsearch-fa wcsearch-fa-search", 1828 wrapper_class: "wcsearch-dropdowns-menu-tax-keywords", 1829 cache: new Object(), 1830 1831 _create: function() { 1832 this.wrapper = $("<div>") 1833 .addClass(this.wrapper_class) 1834 .insertAfter(this.element); 1835 1836 // move select inside wrapper 1837 this.element.appendTo(this.wrapper); 1838 1839 this.element.hide(); 1840 this._createAutocomplete(); 1841 this._createShowAllButton(); 1842 }, 1843 1844 _appendWrapper: function() { 1845 var append_to = null; // append to body 1846 1847 if (this.element.parents(".wcsearch-sticky-scroll").length) { 1848 // append to fixed fiv 1849 append_to = this.element.parents(".wcsearch-sticky-scroll"); 1850 } else { 1851 // append to search form wrapper, otherwise autocomplete menu becomes blinking on search 1852 var append_to = this.element.parents(".wcsearch-search-wrapper"); 1853 } 1854 1855 return append_to; 1856 }, 1857 1858 _autocompleteWithOptions: function(input) { 1859 input.autocomplete({ 1860 delay: 300, 1861 minLength: 0, 1862 appendTo: this._appendWrapper(), 1863 source: $.proxy(this, "_source"), 1864 open: function(event, ui) { 1865 if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) { 1866 $('.ui-autocomplete').off('menufocus hover mouseover mouseenter'); 1867 } 1868 } 1869 }); 1870 }, 1871 1872 _autocompleteRenderItem: function(input) { 1873 var default_icon_url = this.element.data('default-icon'); 1874 1875 input.autocomplete("widget").addClass("wcsearch-dropdowns-menu"); 1876 input.autocomplete("instance")._renderItem = function(ul, item) { 1877 var label = item.label; 1878 1879 var right_side_markup = ''; 1880 if (typeof item.count != "undefined") { 1881 if (item.count !== '') { 1882 right_side_markup = '<span class="wcsearch-dropdowns-menu-search-counter"><span class="wcsearch-item-count" data-termid="' + item.termid + '" data-tax="' + item.tax + '">' + item.count + '</span></span>'; 1883 } else { 1884 right_side_markup = '<span class="wcsearch-dropdowns-menu-search-counter"><span class="wcsearch-item-count wcsearch-item-count-blur wcsearch-item-term-' + item.termid + '-' + item.tax + '" data-termid="' + item.termid + '" data-tax="' + item.tax + '">xx</span></span>'; 1885 } 1886 } 1887 if (typeof item.note != "undefined") { 1888 right_side_markup = '<span class="wcsearch-dropdowns-menu-search-note">' + item.note + '</span>'; 1889 } 1890 1891 var item_class = "wcsearch-dropdowns-menu-search"; 1892 if (typeof item.is_term != "undefined" && item.is_term) { 1893 item_class = item_class + " wcsearch-dropdowns-menu-search-term"; 1894 } 1895 if (typeof item.is_listing != "undefined" && item.is_listing) { 1896 item_class = item_class + " wcsearch-dropdowns-menu-search-listing"; 1897 } 1898 1899 var item_li_class = ""; 1900 if (typeof item.option != "undefined" && $(item.option).data("selected")) { 1901 item_li_class = item_li_class + " wcsearch-dropdowns-menu-selected-item"; 1902 } 1903 1904 var place_id; 1905 if (typeof item.place_id != "undefined" && item.place_id) { 1906 place_id = item.place_id; 1907 } 1908 1909 var li = $("<li>", { 1910 class: item_li_class 1911 }); 1912 1913 var wrapper = $("<div>", { 1914 html: label + right_side_markup, 1915 class: item_class, 1916 "data-place-id": place_id 1917 }); 1918 1919 var icon_class = "ui-icon"; 1920 var icon_url; 1921 if (item.icon) { 1922 icon_url = item.icon; 1923 } else { 1924 icon_url = default_icon_url; 1925 } 1926 $("<span>", { 1927 style: "background-image: url('" + icon_url + "'); background-size: cover;", 1928 class: icon_class 1929 }) 1930 .appendTo(wrapper); 1931 1932 if (item.sublabel) { 1933 var sublabel = item.sublabel; 1934 1935 $("<span>") 1936 .html(sublabel) 1937 .addClass("wcsearch-dropdowns-menu-search-sublabel") 1938 .appendTo(wrapper); 1939 } else { 1940 wrapper.addClass("wcsearch-dropdowns-menu-search-root"); 1941 } 1942 1943 return li.append(wrapper).appendTo(ul); 1944 }; 1945 }, 1946 1947 _openMobileKeyboard: function() { 1948 if (typeof this.element.data("autocomplete-name") == 'undefined' && screen.height <= 768) { 1949 return false; 1950 } else { 1951 return true; 1952 } 1953 }, 1954 1955 _createAutocomplete: function() { 1956 var selected = this.element.find("[data-selected=\"selected\"]"); 1957 if (this.element.data("autocomplete-name") && this.element.data("autocomplete-value")) { 1958 var value = this.element.data("autocomplete-value"); 1959 } else { 1960 var value = selected.data("name") ? selected.data("name") : ""; 1961 } 1962 1963 this.input = $("<input>", { 1964 name: this.element.data("autocomplete-name") ? this.element.data("autocomplete-name") : "", 1965 readonly: this._openMobileKeyboard() ? false : true 1966 }) 1967 .appendTo(this.wrapper) 1968 .val(value) 1969 .attr("placeholder", this.element.data("placeholder")) 1970 .addClass("wcsearch-form-control wcsearch-main-search-field"); 1971 1972 this._autocompleteWithOptions(this.input); 1973 this._autocompleteRenderItem(this.input); 1974 1975 var element = this.element; 1976 var input = this.input; 1977 var id = this.element.data("id"); 1978 1979 this._on(input, { 1980 reset: function() { 1981 this.button.trigger("click"); 1982 1983 this.element.children("option").map(function() { 1984 $(this).removeData("selected").removeAttr("data-selected"); 1985 });
1986 }, 1987 autocompleteselect: function(event, ui) { 1988 this._trigger("select", event, { 1989 item: ui.item 1990 }); 1991 1992 // setup selected term in the options list 1993 this.element.children("option").map(function() { 1994 if ($(this).data("termid") == ui.item.value) { 1995 $(this).data("selected", "selected").attr("data-selected", "selected"); 1996 } else { 1997 $(this).removeData("selected").removeAttr("data-selected"); 1998 } 1999 }); 2000 2001 if (ui.item.is_term) { 2002 var name = wcsearch_HTML_entity_decode(ui.item.name); 2003 2004 $('#selected_tax\\['+id+'\\]').val(ui.item.value); 2005 2006 input.val(name); 2007 2008 $('#selected_tax\\['+id+'\\]').trigger("wcsearch:selected_tax_change"); 2009 $('#selected_tax\\['+id+'\\]').trigger("change"); 2010 } else { 2011 var name = wcsearch_HTML_entity_decode(ui.item.value); 2012 2013 $('#selected_tax\\['+id+'\\]').val(''); 2014 2015 input.val(name).trigger("change"); 2016 } 2017 2018 input.trigger("blur"); 2019 2020 event.preventDefault(); 2021 }, 2022 autocompletefocus: function(event, ui) { 2023 event.preventDefault(); 2024 }, 2025 click: function(event, ui) { 2026 // open list only when it already has a value 2027 if (!input.autocomplete("widget").is(":visible") && (input.val() || element.data("open-on-click"))) { 2028 2029 // show all on click, empty search opens full list 2030 input.trigger("focusout"); 2031 input.autocomplete("search", input.val()); // when click after close - it will get searched results 2032 // ------------- input.autocomplete("search", ''); - will give all results 2033 2034 wcsearch_continue_recounting(); 2035 } else { 2036 input.autocomplete("close"); 2037 } 2038 }, 2039 autocompletesearch: function(event, ui) { 2040 if (input.val() == '') { 2041 $('#selected_tax\\['+id+'\\]').val(''); 2042 2043 // trigger custom event 2044 $('#selected_tax\\['+id+'\\]').trigger("wcsearch:selected_tax_change"); 2045 } 2046 } 2047 }); 2048 2049 $(document).on("submit", "form", function() { 2050 input.autocomplete("close"); 2051 }); 2052 }, 2053 2054 _createShowAllButton: function() { 2055 var input = this.input, 2056 _this = this, 2057 id = this.element.data("id"); 2058 2059 this.wrapper.addClass("wcsearch-has-feedback"); 2060 this.button = $("<span>", { 2061 class: "wcsearch-dropdowns-menu-button wcsearch-form-control-feedback " + this.input_icon_class + (input.val() ? " wcsearch-fa-close" : "") 2062 }) 2063 .appendTo(this.wrapper) 2064 .on("click", function(e) { 2065 2066 wcsearch_do_scroll = false; 2067 2068 input.val(''); 2069 if ($('#selected_tax\\['+id+'\\]').val()) { 2070 // submit search form on input reset 2071 $('#selected_tax\\['+id+'\\]').val(''); 2072 //------------- $('#selected_tax\\['+id+'\\]').trigger("change"); - necessary trigger on double call on double call 2073 2074 // trigger custom event 2075 $('#selected_tax\\['+id+'\\]').trigger("wcsearch:selected_tax_change"); 2076 } else { 2077 input.trigger('change'); 2078 } 2079 2080 wcsearch_do_scroll = false; 2081 2082 if (_this._openMobileKeyboard()) { 2083 // -------------input.autocomplete("search", input.val()); - call submit by this 2084 } else { 2085 // Pass empty string as value to search for, displaying all results 2086 input.autocomplete("search", ''); 2087 } 2088 }); 2089 }, 2090 2091 _source: function(request, response) { 2092 var term = $.trim(request.term).toLowerCase(); 2093 var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), "i"); 2094 var common_array = []; 2095 2096 this.element.children("option").map(function() { 2097 $(this).prop("count", 11); 2098 2099 var text = $(this).text(), 2100 value = $(this).val(), 2101 name = $(this).attr("data-name"), 2102 icon = $(this).attr("data-icon"), 2103 count = $(this).attr("data-count"), 2104 termid = $(this).attr("data-termid"), 2105 tax = $(this).attr("data-tax"), 2106 note = $(this).attr("data-note"), 2107 sublabel = $(this).attr("data-sublabel"), 2108 starts_with = $(this).attr("data-name").toLowerCase().startsWith(term), 2109 term_in_name = matcher.test(name), 2110 term_in_sublabel = matcher.test(sublabel); 2111 if (this.value && (!term || term_in_name || term_in_sublabel)) { 2112 common_array.push({ 2113 label: text, 2114 value: value, 2115 name: name, 2116 full_value: name + ', ' + sublabel, 2117 count: count, 2118 termid: termid, 2119 tax: tax,
2120 note: note, 2121 icon: icon, 2122 sublabel: sublabel, 2123 option: this, 2124 is_term: true, 2125 is_listing: false, 2126 term_in_name: term_in_name, 2127 starts_with: starts_with 2128 }); 2129 } 2130 }); 2131 2132 if (this.element.data("ajax-search") && term) { 2133 this.wrapper.find(".wcsearch-dropdowns-menu-button").addClass("wcsearch-search-input-loader"); 2134 2135 if (term in this.cache) { 2136 var cache_array = this.cache[term]; 2137 this.wrapper.find(".wcsearch-dropdowns-menu-button").removeClass("wcsearch-search-input-loader"); 2138 common_array = cache_array.slice(0); // simply duplicate this array 2139 2140 response(common_array); 2141 } else { 2142 var do_links = this.input.parents(".wcsearch-search-input").data("do_links"); 2143 var do_links_blank = this.input.parents(".wcsearch-search-input").data("do_links_blank"); 2144 var orderby = this.input.parents(".wcsearch-search-input").data("orderby"); 2145 var order = this.input.parents(".wcsearch-search-input").data("order"); 2146 2147 var used_by = this.input.parents(".wcsearch-search-input").data("used_by"); 2148 2149 var post_params = { 2150 action: wcsearch_js_objects.adapter_options[used_by].keywords_search_action, 2151 query_string: wcsearch_query_string, 2152 do_links: do_links, 2153 do_links_blank: do_links_blank, 2154 orderby: orderby, 2155 order: order, 2156 term: term 2157 } 2158 2159 var form = this.input.parents("form"); 2160 post_params = wcsearch_add_common_fields(post_params, form); 2161 2162 $.ajax({
2163 url: wcsearch_js_objects.ajaxurl, 2164 type: "POST", 2165 dataType: "json", 2166 data: post_params, 2167 combobox: this, 2168 success: function(response_from_the_action_function){ 2169 if (response_from_the_action_function != 0 && response_from_the_action_function.listings) { 2170 var cache_array = []; 2171 response_from_the_action_function.listings.map(function(listing) { 2172 var starts_with = listing.name.toLowerCase().startsWith(term); 2173 2174 var item = { 2175 label: listing.title, // text in option 2176 value: listing.name, // value depends on is_term 2177 name: listing.name, // text to place in input 2178 full_value: listing.name, // full value of the item 2179 icon: listing.icon, 2180 sublabel: listing.sublabel, // sub-description 2181 option: listing, 2182 is_term: false, 2183 is_listing: true, 2184 term_in_name: true, 2185 starts_with: starts_with 2186 } 2187 common_array.push(item); 2188 cache_array.push(item); 2189 }); 2190 common_array.sort(wcsearch_sort_autocomplete_items); 2191 2192 this.combobox.cache[term] = common_array; 2193 } 2194 response(common_array); 2195 }, 2196 complete: function() { 2197 this.combobox.wrapper.find(".wcsearch-dropdowns-menu-button").removeClass("wcsearch-search-input-loader"); 2198 } 2199 }); 2200 } 2201 } else { 2202 if (term) { 2203 common_array.sort(wcsearch_sort_autocomplete_items); 2204 } 2205 response(common_array); 2206 } 2207 }, 2208 2209 renew_source: function(counter_term_id, counter_number) { 2210 this.cache = new Object(); 2211 2212 this.element.children("option").map(function() { 2213 if ($(this).data("termid") == counter_term_id) { 2214 if (counter_number !== false) { 2215 $(this).attr("data-count", counter_number); 2216 } 2217 } 2218 }); 2219 }, 2220 2221 _destroy: function() { 2222 this.wrapper.remove(); 2223 this.element.show(); 2224 }, 2225 }); 2226 2227 window.tax_address = $.widget("custom.tax_address", tax_keywords, { 2228 wrapper: "",
2229 input: "", 2230 input_place_id: "", 2231 button: "", 2232 input_icon_class: "wcsearch-fa wcsearch-fa-map-marker", 2233 wrapper_class: "wcsearch-dropdowns-menu-tax-autocomplete", 2234 2235 _create: function() { 2236 this.wrapper = $("<div>") 2237 .addClass(this.wrapper_class) 2238 .insertAfter(this.element); 2239 2240 // move select inside wrapper 2241 this.element.appendTo(this.wrapper); 2242 2243 this.element.hide(); 2244 this._createAutocomplete(); 2245 this._createShowAllButton(); 2246 }, 2247 2248 _createShowAllButton: function() { 2249 var input = this.input, 2250 input_place_id = this.input_place_id, 2251 _this = this, 2252 id = this.element.data("id"), 2253 used_by = this.input.parents(".wcsearch-search-input").data("used_by"), 2254 enable_my_location_button = wcsearch_js_objects.adapter_options[used_by].enable_my_location_button; 2255 2256 this.wrapper.addClass("wcsearch-has-feedback"); 2257 this.button = $("<span>", { 2258 class: "wcsearch-dropdowns-menu-button wcsearch-form-control-feedback" + (enable_my_location_button ? " wcsearch-get-location" : "") + " " + this.input_icon_class + (input.val() ? " wcsearch-fa-close" : "") 2259 }) 2260 .appendTo(this.wrapper) 2261 .on("click", function(e) { 2262 2263 wcsearch_do_scroll = false; 2264 2265 if ($(this).hasClass("wcsearch-fa-close")) { 2266 input.val(''); 2267 input_place_id.val(''); 2268 if ($('#selected_tax\\['+id+'\\]').val()) { 2269 // submit search form on input reset 2270 $('#selected_tax\\['+id+'\\]').val(''); 2271 // ------------- $('#selected_tax\\['+id+'\\]').trigger("change"); - necessary trigger on double call 2272 2273 // trigger custom event 2274 $('#selected_tax\\['+id+'\\]').trigger("wcsearch:selected_tax_change"); 2275 } else { 2276 input.trigger('change'); 2277 } 2278 } else if ($(this).hasClass("wcsearch-get-location")) { 2279 var geocode_field_callback = wcsearch_js_objects.geocode_functions.geocode_field; 2280 var geocode_field_error = wcsearch_js_objects.geocode_functions.my_location_button_error; 2281 2282 window[geocode_field_callback](input, geocode_field_error); 2283 } 2284 2285 if (_this._openMobileKeyboard()) { 2286 // ------------- input.autocomplete("search", input.val()); - call submit by this 2287 } else { 2288 // Pass empty string as value to search for, displaying all results 2289 input.autocomplete("search", ''); 2290 } 2291 }) 2292 .on("mouseover", function(e) { 2293 if ($(this).hasClass("wcsearch-get-location") && !$(this).hasClass("wcsearch-fa-close")) { 2294 $(this).attr("title", wcsearch_js_objects.get_my_location_title); 2295 } 2296 }); 2297 }, 2298 2299 _createAutocomplete: function() { 2300 var selected = this.element.find("[data-selected=\"selected\"]"); 2301 if (this.element.data("autocomplete-name") && this.element.data("autocomplete-value")) { 2302 var value = this.element.data("autocomplete-value"); 2303 } else { 2304 var value = selected.data("name") ? selected.data("name") : ""; 2305 } 2306 2307 this.input = $("<input>", { 2308 name: this.element.data("autocomplete-name") ? this.element.data("autocomplete-name") : "", 2309 readonly: this._openMobileKeyboard() ? false : true 2310 }) 2311 .appendTo(this.wrapper) 2312 .val(value) 2313 .attr("placeholder", this.element.data("placeholder")) 2314 .addClass("wcsearch-form-control wcsearch-main-search-field"); 2315 2316 this._autocompleteWithOptions(this.input); 2317 this._autocompleteRenderItem(this.input); 2318 2319 var place_id = this.element.data("place-id") ? this.element.data("place-id") : ""; 2320 this.input_place_id = $("<input>", { 2321 type: "hidden", 2322 name: "place_id" 2323 }) 2324 .appendTo(this.wrapper) 2325 .val(place_id); 2326 2327 var element = this.element; 2328 var input = this.input; 2329 var input_place_id = this.input_place_id; 2330 var id = this.element.data("id"); 2331 2332 this._on(input, { 2333 reset: function() { 2334 2335 wcsearch_do_scroll = false; 2336 2337 input_place_id.val(''); 2338 2339 this.element.children("option").map(function() { 2340 $(this).removeData("selected").removeAttr("data-selected"); 2341 });
2342 2343 // do not use trigger("click"), otherwise it will click on "My location" button 2344 input.val(''); 2345 if ($('#selected_tax\\['+id+'\\]').val()) { 2346 // submit search form on input reset 2347 $('#selected_tax\\['+id+'\\]').val(''); 2348 $('#selected_tax\\['+id+'\\]').trigger("change"); 2349 2350 // trigger custom event 2351 $('#selected_tax\\['+id+'\\]').trigger("wcsearch:selected_tax_change"); 2352 } else { 2353 input.trigger('change'); 2354 } 2355 this.button.removeClass("wcsearch-fa-close"); 2356 2357 input.autocomplete("close"); 2358 }, 2359 autocompleteselect: function(event, ui) { 2360 this._trigger("select", event, { 2361 item: ui.item 2362 }); 2363 2364 if (typeof ui.item.place_id != "undefined") { 2365 input_place_id.val(ui.item.place_id); 2366 } else { 2367 input_place_id.val(''); 2368 } 2369 2370 if (ui.item.is_term) { 2371 var name = wcsearch_HTML_entity_decode(ui.item.name); 2372 2373 $('#selected_tax\\['+id+'\\]').val(ui.item.value); 2374 2375 // setup selected term in the options list 2376 this.element.children("option").map(function() { 2377 if ($(this).data("termid") == ui.item.value) { 2378 $(this).data("selected", "selected").attr("data-selected", "selected"); 2379 } else { 2380 $(this).removeData("selected").removeAttr("data-selected"); 2381 } 2382 }); 2383 2384 input.val(name); 2385 2386 $('#selected_tax\\['+id+'\\]').trigger("wcsearch:selected_tax_change"); 2387 $('#selected_tax\\['+id+'\\]').trigger("change"); 2388 } else { 2389 var name = wcsearch_HTML_entity_decode(ui.item.value); 2390 2391 $('#selected_tax\\['+id+'\\]').val(''); 2392 2393 input.val(name).trigger("change"); 2394 } 2395 2396 input.trigger("blur"); 2397 2398 event.preventDefault(); 2399 }, 2400 autocompletefocus: function(event, ui) { 2401 event.preventDefault(); 2402 }, 2403 click: function(event, ui) { 2404 // open list only when it already has a value 2405 if (!input.autocomplete("widget").is(":visible") && (input.val() || element.data("open-on-click"))) { 2406 if (this._openMobileKeyboard()) { 2407 input.trigger("focus"); 2408 input.autocomplete("search", input.val()); 2409 } else { 2410 wcsearch_do_scroll = false; 2411 input.trigger("focusout"); 2412 wcsearch_do_scroll = false; 2413 input.autocomplete("search", ''); 2414 } 2415 2416 wcsearch_continue_recounting(); 2417 } else { 2418 input.autocomplete("close"); 2419 } 2420 }, 2421 autocompletesearch: function(event, ui) { 2422 if (input.val() == '') { 2423 $('#selected_tax\\['+id+'\\]').val(''); 2424 2425 // trigger custom event 2426 $('#selected_tax\\['+id+'\\]').trigger("wcsearch:selected_tax_change"); 2427 } 2428 }, 2429 change: function(event, ui) { 2430 2431 wcsearch_do_scroll = false; 2432 2433 input_place_id.val(''); 2434 } 2435 }); 2436 2437 $(document).on("submit", "form", function() { 2438 input.autocomplete("close"); 2439 }); 2440 }, 2441 2442 _source: function(request, response) { 2443 var term = $.trim(request.term).toLowerCase(); 2444 var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), "i"); 2445 var common_array = []; 2446 2447 this.element.children("option").map(function() { 2448 2449 var text = $(this).text(), 2450 value = $(this).val(), 2451 name = $(this).attr("data-name"), 2452 icon = $(this).attr("data-icon"), 2453 count = $(this).attr("data-count"), 2454 termid = $(this).attr("data-termid"), 2455 tax = $(this).attr("data-tax"), 2456 note = $(this).attr("data-note"), 2457 sublabel = $(this).attr("data-sublabel"), 2458 place_id = $(this).attr("data-place_id"), 2459 starts_with = $(this).attr("data-name").toLowerCase().startsWith(term), 2460 term_in_name = matcher.test(name), 2461 term_in_sublabel = matcher.test(sublabel); 2462 if (this.value && (!term || term_in_name || term_in_sublabel)) { 2463 common_array.push({ 2464 label: text, 2465 value: value, 2466 name: name, 2467 full_value: name + ', ' + sublabel, 2468 count: count, 2469 termid: termid, 2470 tax: tax,
2471 note: note, 2472 icon: icon, 2473 sublabel: sublabel, 2474 option: this, 2475 is_term: true, 2476 is_listing: false, 2477 term_in_name: term_in_name, 2478 starts_with: starts_with, 2479 place_id: place_id 2480 }); 2481 } 2482 }); 2483 2484 if (term && wcsearch_js_objects.geocode_functions) { 2485 var autocomplete_service_callback = wcsearch_js_objects.geocode_functions.autocomplete_service; 2486 var autocomplete_code = wcsearch_js_objects.geocode_functions.address_autocomplete_code; 2487 2488 window[autocomplete_service_callback](term, autocomplete_code, common_array, response, wcsearch_collect_locations_predictions); 2489 } else { 2490 if (term) { 2491 common_array.sort(wcsearch_sort_autocomplete_items); 2492 } 2493 response(common_array); 2494 } 2495 }, 2496 }); 2497 2498 window.address_autocomplete = $.widget("custom.address_autocomplete", tax_keywords, { 2499 wrapper: "", 2500 input: "", 2501 input_place_id: "", 2502 button: "", 2503 input_icon_class: "wcsearch-fa wcsearch-fa-map-marker", 2504 wrapper_class: "wcsearch-dropdowns-menu-address-autocomplete",
2505 2506 _create: function() { 2507 this.wrapper = this.element.parent(); 2508 2509 this.element.hide(); 2510 this._createAutocomplete(); 2511 this._createShowAllButton(); 2512 }, 2513 2514 _createShowAllButton: function() { 2515 var input = this.input, 2516 input_place_id = this.input_place_id, 2517 _this = this, 2518 id = this.element.data("id"), 2519 used_by = this.input.parents(".wcsearch-search-input").data("used_by"), 2520 enable_my_location_button = wcsearch_js_objects.adapter_options[used_by].enable_my_location_button; 2521 2522 this.wrapper.addClass("wcsearch-has-feedback"); 2523 this.button = $("<span>", { 2524 class: "wcsearch-dropdowns-menu-button wcsearch-form-control-feedback" + (enable_my_location_button ? " wcsearch-get-location" : "") + " " + this.input_icon_class + (input.val() ? " wcsearch-fa-close" : "") 2525 }) 2526 .appendTo(this.wrapper) 2527 .on("click", function(e) { 2528 2529 wcsearch_do_scroll = false; 2530 2531 if ($(this).hasClass("wcsearch-fa-close")) { 2532 input.val(''); 2533 input_place_id.val(''); 2534 } else if ($(this).hasClass("wcsearch-get-location")) { 2535 var geocode_field_callback = wcsearch_js_objects.geocode_functions.geocode_field; 2536 var geocode_field_error = wcsearch_js_objects.geocode_functions.my_location_button_error; 2537 2538 window[geocode_field_callback](input, geocode_field_error); 2539 } 2540 2541 wcsearch_do_scroll = false; 2542 2543 if (_this._openMobileKeyboard()) { 2544 // ------------- input.autocomplete("search", input.val()); - call submit by this 2545 } else { 2546 // Pass empty string as value to search for, displaying all results 2547 input.autocomplete("search", ''); 2548 } 2549 }) 2550 .on("mouseover", function(e) { 2551 if ($(this).hasClass("wcsearch-get-location") && !$(this).hasClass("wcsearch-fa-close")) { 2552 $(this).attr("title", wcsearch_js_objects.get_my_location_title); 2553 } 2554 }); 2555 }, 2556 2557 _createAutocomplete: function() { 2558 if (this.element.data("autocomplete-name") && this.element.data("autocomplete-value")) { 2559 var value = this.element.data("autocomplete-value"); 2560 } else { 2561 var value = "" 2562 } 2563 2564 this.input = $("<input>", { 2565 name: this.element.data("autocomplete-name") ? this.element.data("autocomplete-name") : "", 2566 readonly: this._openMobileKeyboard() ? false : true 2567 }) 2568 .appendTo(this.wrapper) 2569 .val(value) 2570 .attr("placeholder", this.element.data("placeholder")) 2571 .addClass("wcsearch-form-control wcsearch-main-search-field"); 2572 2573 this._autocompleteWithOptions(this.input); 2574 this._autocompleteRenderItem(this.input); 2575 2576 var place_id = this.element.data("place-id") ? this.element.data("place-id") : ""; 2577 this.input_place_id = $("<input>", { 2578 type: "hidden", 2579 name: "place_id" 2580 }) 2581 .appendTo(this.wrapper) 2582 .val(place_id); 2583 2584 var element = this.element; 2585 var input = this.input; 2586 var input_place_id = this.input_place_id; 2587 var id = this.element.data("id"); 2588 2589 this._on(input, { 2590 reset: function() { 2591 2592 wcsearch_do_scroll = false; 2593 2594 input_place_id.val(''); 2595 2596 this.element.children("option").map(function() { 2597 $(this).removeData("selected").removeAttr("data-selected"); 2598 }); 2599 2600 // do not use trigger("click"), otherwise it will click on "My location" button 2601 input.val(''); 2602 input.trigger('change'); 2603 2604 this.button.removeClass("wcsearch-fa-close"); 2605 2606 input.autocomplete("close"); 2607 }, 2608 autocompleteselect: function(event, ui) { 2609 this._trigger("select", event, { 2610 item: ui.item 2611 }); 2612 2613 if (typeof ui.item.place_id != "undefined") { 2614 input_place_id.val(ui.item.place_id); 2615 } else { 2616 input_place_id.val(''); 2617 } 2618 2619 var name = wcsearch_HTML_entity_decode(ui.item.value); 2620 2621 input.val(name); 2622 input.trigger('change'); 2623 2624 event.preventDefault(); 2625 }, 2626 autocompletefocus: function(event, ui) { 2627 event.preventDefault(); 2628 }, 2629 click: function(event, ui) { 2630 input.autocomplete("search", input.val()); 2631 }, 2632 change: function(event, ui) { 2633 2634 wcsearch_do_scroll = false; 2635 2636 input_place_id.val(''); 2637 } 2638 }); 2639 2640 $(document).on("submit", "form", function() { 2641 input.autocomplete("close"); 2642 }); 2643 }, 2644 2645 _source: function(request, response) { 2646 var term = $.trim(request.term).toLowerCase(); 2647 var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), "i"); 2648 var common_array = []; 2649 2650 if (term) { 2651 2652 if (term in this.cache) { 2653 var cache_array = this.cache[term];
2654 common_array = cache_array.slice(0); // simply duplicate this array 2655 2656 response(common_array); 2657 } else { 2658 2659 if (term && wcsearch_js_objects.geocode_functions) { 2660 var autocomplete_service_callback = wcsearch_js_objects.geocode_functions.autocomplete_service; 2661 var autocomplete_code = wcsearch_js_objects.geocode_functions.address_autocomplete_code; 2662 2663 window[autocomplete_service_callback](term, autocomplete_code, common_array, response, wcsearch_collect_locations_predictions); 2664 } else { 2665 if (term) { 2666 common_array.sort(wcsearch_sort_autocomplete_items); 2667 } 2668 response(common_array); 2669 } 2670 } 2671 } else { 2672 response(common_array); 2673 } 2674 }, 2675 }); 2676 2677 window.wcsearch_collect_locations_predictions = function(predictions, common_array, response) { 2678 $.map(predictions, function (prediction, i) { 2679 common_array.push({ 2680 label: prediction.label, 2681 value: prediction.value, 2682 name: prediction.name, 2683 note: wcsearch_js_objects.prediction_note, 2684 icon: "", 2685 sublabel: prediction.sublabel, 2686 is_term: false, 2687 term_in_name: true, 2688 place_id: prediction.place_id 2689 }); 2690 }) 2691 2692 response(common_array); 2693 } 2694 2695 window.tax_autocomplete = $.widget("custom.tax_autocomplete", tax_keywords, { 2696 wrapper: "",
2697 input: "", 2698 button: "", 2699 input_icon_class: "wcsearch-fa wcsearch-fa-search", 2700 wrapper_class: "wcsearch-dropdowns-menu-tax-autocomplete", 2701 2702 _source: function(request, response) { 2703 var term = $.trim(request.term).toLowerCase(); 2704 var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), "i"); 2705 var common_array = []; 2706 2707 this.element.children("option").map(function() { 2708 2709 var text = $(this).text(), 2710 value = $(this).val(), 2711 name = $(this).attr("data-name"), 2712 icon = $(this).attr("data-icon"), 2713 count = $(this).attr("data-count"), 2714 termid = $(this).attr("data-termid"), 2715 tax = $(this).attr("data-tax"), 2716 note = $(this).attr("data-note"), 2717 sublabel = $(this).attr("data-sublabel"), 2718 starts_with = $(this).attr("data-name").toLowerCase().startsWith(term), 2719 term_in_name = matcher.test(name), 2720 term_in_sublabel = matcher.test(sublabel); 2721 if (this.value && (!term || term_in_name || term_in_sublabel)) { 2722 common_array.push({ 2723 label: text, 2724 value: value, 2725 name: name, 2726 full_value: name + ', ' + sublabel, 2727 count: count, 2728 termid: termid, 2729 tax: tax, 2730 note: note, 2731 icon: icon, 2732 sublabel: sublabel, 2733 option: this, 2734 is_term: true, 2735 is_listing: false, 2736 term_in_name: term_in_name, 2737 starts_with: starts_with 2738 }); 2739 } 2740 }); 2741 2742 if (term) { 2743 common_array.sort(wcsearch_sort_autocomplete_items); 2744 } 2745 response(common_array); 2746 }, 2747 }); 2748 window.keywords_autocomplete = $.widget("custom.keywords_autocomplete", tax_keywords, { 2749 wrapper: "",
2750 input: "", 2751 button: "", 2752 input_icon_class: "wcsearch-fa wcsearch-fa-search", 2753 wrapper_class: "wcsearch-dropdowns-menu-keywords-autocomplete", 2754 cache: new Object(), 2755 2756 _create: function() { 2757 this.wrapper = this.element.parent(); 2758 2759 this.element.hide(); 2760 this._createAutocomplete(); 2761 this._createShowAllButton(); 2762 }, 2763 2764 _createAutocomplete: function() { 2765 2766 if (this.element.data("autocomplete-name") && this.element.data("autocomplete-value")) { 2767 var value = this.element.data("autocomplete-value"); 2768 } else { 2769 var value = "" 2770 } 2771 2772 this.input = $("<input>", { 2773 name: this.element.data("autocomplete-name") ? this.element.data("autocomplete-name") : "", 2774 readonly: this._openMobileKeyboard() ? false : true 2775 }) 2776 .appendTo(this.wrapper) 2777 .val(value) 2778 .attr("placeholder", this.element.data("placeholder")) 2779 .addClass("wcsearch-form-control wcsearch-main-search-field"); 2780 2781 this._autocompleteWithOptions(this.input); 2782 this._autocompleteRenderItem(this.input); 2783 2784 var input = this.input; 2785 2786 this._on(input, { 2787 reset: function() { 2788 this.button.trigger("click"); 2789 2790 this.element.children("option").map(function() { 2791 $(this).removeData("selected").removeAttr("data-selected"); 2792 }); 2793 }, 2794 autocompleteselect: function(event, ui) { 2795 this._trigger("select", event, { 2796 item: ui.item 2797 }); 2798 2799 input.val(ui.item.value); 2800 input.trigger('change'); 2801 2802 event.preventDefault(); 2803 }, 2804 autocompletefocus: function(event, ui) { 2805 event.preventDefault(); 2806 }, 2807 click: function(event, ui) { 2808 input.autocomplete("search", input.val()); 2809 } 2810 }); 2811 }, 2812 2813 _source: function(request, response) { 2814 var term = $.trim(request.term).toLowerCase(); 2815 var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), "i"); 2816 var common_array = []; 2817 2818 if (this.element.data("ajax-search") && term) { 2819 this.wrapper.find(".wcsearch-dropdowns-menu-button").addClass("wcsearch-search-input-loader"); 2820 2821 if (term in this.cache) { 2822 var cache_array = this.cache[term]; 2823 this.wrapper.find(".wcsearch-dropdowns-menu-button").removeClass("wcsearch-search-input-loader"); 2824 common_array = cache_array.slice(0); // simply duplicate this array 2825 2826 response(common_array); 2827 } else { 2828 var do_links = this.input.parents(".wcsearch-search-input").data("do_links"); 2829 var do_links_blank = this.input.parents(".wcsearch-search-input").data("do_links_blank"); 2830 var orderby = this.input.parents(".wcsearch-search-input").data("orderby"); 2831 var order = this.input.parents(".wcsearch-search-input").data("order"); 2832 2833 var used_by = this.input.parents(".wcsearch-search-input").data("used_by"); 2834 2835 var post_params = { 2836 action: wcsearch_js_objects.adapter_options[used_by].keywords_search_action, 2837 query_string: wcsearch_query_string, 2838 do_links: do_links, 2839 do_links_blank: do_links_blank, 2840 orderby: orderby, 2841 order: order, 2842 term: term 2843 } 2844 2845 var form = this.input.parents("form"); 2846 post_params = wcsearch_add_common_fields(post_params, form); 2847 2848 $.ajax({
2849 url: wcsearch_js_objects.ajaxurl, 2850 type: "POST", 2851 dataType: "json", 2852 data: post_params, 2853 combobox: this, 2854 success: function(response_from_the_action_function){ 2855 if (response_from_the_action_function != 0 && response_from_the_action_function.listings) { 2856 var cache_array = []; 2857 response_from_the_action_function.listings.map(function(listing) { 2858 var starts_with = listing.title.toLowerCase().startsWith(term); 2859 2860 var item = { 2861 label: listing.title, // text in option 2862 value: listing.name, // value depends on is_term 2863 name: listing.name, // text to place in input 2864 full_value: listing.name, // full value of the item 2865 icon: listing.icon, 2866 sublabel: listing.sublabel, // sub-description 2867 option: listing, 2868 is_term: false, 2869 is_listing: true, 2870 term_in_name: true, 2871 starts_with: starts_with 2872 } 2873 common_array.push(item); 2874 cache_array.push(item); 2875 }); 2876 common_array.sort(wcsearch_sort_autocomplete_items); 2877 2878 this.combobox.cache[term] = common_array; 2879 } 2880 response(common_array); 2881 }, 2882 complete: function() { 2883 this.combobox.wrapper.find(".wcsearch-dropdowns-menu-button").removeClass("wcsearch-search-input-loader"); 2884 } 2885 }); 2886 } 2887 } else { 2888 if (term) { 2889 common_array.sort(wcsearch_sort_autocomplete_items); 2890 } 2891 response(common_array); 2892 } 2893 } 2894 }); 2895 window.heirarhical_dropdown = $.widget("custom.heirarhical_dropdown", tax_keywords, { 2896 input_icon_class: "wcsearch-fa wcsearch-fa-search", 2897 wrapper_class: "wcsearch-dropdowns-menu-hierarhical", 2898 placeholders: "", 2899 2900 _createAutocomplete: function() { 2901 2902 var wrapper = this.wrapper; 2903 var id = this.element.data('id'); 2904 var name = this.element.data('tax'); 2905 var placeholders = this.element.data('placeholders'); 2906 var depth_level = this.element.data('depth-level'); 2907 2908 this.input_value = $("<input>", { 2909 type: 'hidden' 2910 }) 2911 .addClass('wcsearch-hierarhical-menu-'+id+'-depth-level-'+depth_level) 2912 .appendTo(wrapper); 2913 var input_value = this.input_value; 2914 2915 var selected = this.element.find("[data-selected=\"selected\"]"); 2916 if (this.element.data("autocomplete-name") && this.element.data("autocomplete-value")) { 2917 var value = this.element.data("autocomplete-value"); 2918 } else { 2919 var value = selected.data("name") ? selected.data("name") : ""; 2920 } 2921 this.input = $("<input>", { 2922 name: name, 2923 type: "text" 2924 }) 2925 .appendTo(wrapper) 2926 .val(value) 2927 .attr("placeholder", placeholders) 2928 .addClass("wcsearch-form-control wcsearch-main-search-field"); 2929 2930 this._autocompleteWithOptions(this.input); 2931 this._autocompleteRenderItem(this.input); 2932 2933 var element = this.element; 2934 var input = this.input; 2935 var tax = this.element.data('tax'); 2936 2937 this._on(input, { 2938 reset: function() { 2939 this.button.trigger("click"); 2940 2941 this.element.children("option").map(function() { 2942 $(this).removeData("selected").removeAttr("data-selected"); 2943 }); 2944 }, 2945 autocompletechange: function(event, ui) { 2946 console.log(ui); 2947 }, 2948 autocompleteselect: function(event, ui) { 2949 this._trigger("select", event, { 2950 item: ui.item 2951 }); 2952 2953 if (ui.item.is_term) { 2954 var name = ui.item.name; 2955 $('#selected_tax\\['+id+'\\]').val(ui.item.value); 2956 element.val(ui.item.value); 2957 2958 // setup selected term in the options list 2959 this.element.children("option").map(function() { 2960 if ($(this).data("termid") == ui.item.value) { 2961 $(this).data("selected", "selected").attr("data-selected", "selected"); 2962 } else { 2963 $(this).removeData("selected").removeAttr("data-selected"); 2964 } 2965 });
2966 2967 } else { 2968 var name = ui.item.value; 2969 $('#selected_tax\\['+id+'\\]').val(''); 2970 element.val(''); 2971 } 2972 // ------------- $('#selected_tax\\['+id+'\\]').trigger("change"); - this triggers the submission twice 2973 2974 name = wcsearch_HTML_entity_decode(name); 2975 input.val(name); 2976 input.trigger('change'); 2977 2978 event.preventDefault(); 2979 2980 var selects = wrapper.parent().find('select'); 2981 var curr_level = element.data('depth-level'); 2982 2983 selects.each(function(i) { 2984 if ($(this).data('depth-level') > curr_level) { 2985 $(this).parent().remove(); 2986 } 2987 }); 2988 2989 input_value.val(ui.item.value); 2990 2991 input.attr('disabled', 'disabled'); 2992 2993 var orderby = $(input).parents('.wcsearch-search-input').data("orderby"); 2994 var order = $(input).parents('.wcsearch-search-input').data("order"); 2995 var exact_terms = $(input).parents('.wcsearch-search-input').data("exact_terms"); 2996 var hide_empty = $(input).parents('.wcsearch-search-input').data("hide_empty"); 2997 2998 var post_params = { 2999 'action': 'wcsearch_tax_hierarhical_dropdowns_hook', 3000 'parentid': ui.item.value, 3001 'tax': tax, 3002 'depth_level': depth_level+1, 3003 'placeholders': placeholders, 3004 'uID': id, 3005 'orderby': orderby, 3006 'order': order, 3007 'exact_terms': exact_terms, 3008 'hide_empty': hide_empty 3009 }; 3010 3011 var form = this.input.parents("form"); 3012 post_params = wcsearch_add_common_fields(post_params, form); 3013 3014 $.post( 3015 wcsearch_js_objects.ajaxurl, 3016 post_params, 3017 function(response_from_the_action_function) { 3018 3019 if ($('.wcsearch-hierarhical-menu-'+id+'-depth-level-'+depth_level).length && $('.wcsearch-hierarhical-menu-'+id+'-depth-level-'+depth_level).val()) { 3020 var new_autocomplete = $(response_from_the_action_function); 3021 new_autocomplete.insertAfter(wrapper); 3022 3023 var new_select = wrapper.parent().find('select'); 3024 new_select.heirarhical_dropdown(); 3025 } 3026 3027 input.removeAttr('disabled'); 3028 } 3029 ); 3030 }, 3031 autocompletefocus: function(event, ui) { 3032 event.preventDefault(); 3033 }, 3034 click: function(event, ui) { 3035 if (!input.autocomplete("widget").is(":visible")) { 3036 // show all on click 3037 input.trigger("focusout"); 3038 input.autocomplete("search", ''); 3039 3040 wcsearch_continue_recounting(); 3041 } else { 3042 input.autocomplete("close"); 3043 } 3044 }, 3045 autocompletesearch: function(event, ui) { 3046 } 3047 }); 3048 }, 3049 3050 _createShowAllButton: function() { 3051 var element = this.element; 3052 var wrapper = this.wrapper; 3053 var input = this.input; 3054 var input_value = this.input_value; 3055 var id = this.element.data('id'); 3056 var depth_level = this.element.data('depth-level'); 3057 3058 this.wrapper.addClass("wcsearch-has-feedback"); 3059 this.button = $("<span>", { 3060 class: "wcsearch-dropdowns-menu-button wcsearch-form-control-feedback " + this.input_icon_class + (this.input.val() ? " wcsearch-fa-close" : "") 3061 }) 3062 .appendTo(this.wrapper) 3063 .on("click", function(e) { 3064 3065 wcsearch_do_scroll = false; 3066 3067 var selects = wrapper.parent().find('select'); 3068 var curr_level = element.data('depth-level'); 3069 3070 selects.each(function(i) { 3071 3072 if ($(this).data('depth-level') > curr_level) { 3073 $(this).parent().remove(); 3074 } 3075 }); 3076 3077 3078 if (depth_level > 1) { 3079 $('#selected_tax\\['+id+'\\]').val($('.wcsearch-hierarhical-menu-'+id+'-depth-level-'+(depth_level-1)).val()); 3080 } else { 3081 $('#selected_tax\\['+id+'\\]').val(''); 3082 } 3083 $('#selected_tax\\['+id+'\\]').trigger("change"); 3084 3085 if ($(this).hasClass("wcsearch-fa-close")) { 3086 input.val(''); 3087 $(this).removeClass('wcsearch-fa-close'); 3088 3089 element.val(0); 3090 input_value.val(''); 3091 } 3092 }); 3093 }, 3094 3095 _destroy: function() { 3096 this.element.show(); 3097 }, 3098 }); 3099 3100 window.multiselect_dropdown = $.widget("custom.multiselect_dropdown", tax_keywords, { 3101 input_icon_class: "wcsearch-fa wcsearch-fa-search", 3102 wrapper_class: "wcsearch-dropdowns-menu-multiselect", 3103 placeholder: "", 3104 3105 _createAutocomplete: function() { 3106 3107 var create_item = function(input, element_id, item_id, label) { 3108 input.append( 3109 $("<div></div>") 3110 .addClass("wcsearch-dropdowns-multiselect-item") 3111 .text(label) 3112 .attr('data-id', item_id) 3113 .append( 3114 $("<div></div>") 3115 .addClass("wcsearch-fa wcsearch-fa-close wcsearch-dropdowns-multiselect-item-close") 3116 .on("click", function(event) { 3117 event.preventDefault(); 3118 3119 var item = $(this).parent(); 3120 3121 delete_item(input, element_id, item); 3122 }) 3123 ) 3124 ); 3125 input.parent().find(".wcsearch-dropdowns-menu-button").addClass("wcsearch-fa-close"); 3126 }; 3127 var delete_item = function(input, element_id, item) { 3128 3129 wcsearch_do_scroll = false; 3130 3131 item.remove(); 3132 3133 var value = $('#selected_tax\\['+element_id+'\\]').val() 3134 .split(',') 3135 .filter(function (el) { 3136 return el != item.data('id'); 3137 });
3138 $('#selected_tax\\['+element_id+'\\]').val(value.join()).trigger("change"); 3139 3140 if (value.length == 0) { 3141 placeholder.show(); 3142 3143 input.parent().find(".wcsearch-dropdowns-menu-button").removeClass("wcsearch-fa-close"); 3144 } 3145 } 3146 3147 this.placeholder = $("<div class='wcsearch-dropdowns-multiselect-placeholder'>"+this.element.data("placeholder")+"</div>"); 3148 3149 this.input = $("<div></div>") 3150 .addClass("wcsearch-form-control wcsearch-main-search-field wcsearch-main-search-field-multiselect ui-autocomplete-input") 3151 .html(this.placeholder) 3152 .appendTo(this.wrapper); 3153 3154 this._autocompleteWithOptions(this.input); 3155 this._autocompleteRenderItem(this.input); 3156 3157 var input = this.input; 3158 var id = this.element.data("id"); 3159 var placeholder = this.placeholder; 3160 3161 var selected = this.element.find("[data-selected=\"selected\"]"); 3162 var values = []; 3163 $.each(selected, function() { 3164 create_item(input, id, $(this).attr("value"), $(this).text()); 3165 3166 values.push($(this).attr("value")); 3167 3168 placeholder.hide(); 3169 }); 3170 $('#selected_tax\\['+id+'\\]').val(values.join(",")); 3171 3172 this._on(input, { 3173 reset: function() { 3174 this.button.trigger("click"); 3175 3176 this.element.children("option").map(function() { 3177 $(this).removeData("selected").removeAttr("data-selected"); 3178 }); 3179 }, 3180 autocompleteselect: function(event, ui) { 3181 this._trigger("select", event, { 3182 item: ui.item 3183 }); 3184 3185 // do not close on select 3186 this.clicked_selected = true; 3187 3188 if (ui.item.is_term) { 3189 var name = ui.item.name; 3190 var value = $('#selected_tax\\['+id+'\\]').val().split(','); 3191 if (value.includes(ui.item.value)) { 3192 var item = input.find(".wcsearch-dropdowns-multiselect-item[data-id='"+ui.item.value+"']"); 3193 3194 delete_item(input, id, item); 3195 3196 return false; 3197 } 3198 value.push(ui.item.value); 3199 value = value.filter(function (el) { 3200 return el != ''; 3201 }); 3202 $('#selected_tax\\['+id+'\\]').val(value.join()); 3203 } else { 3204 var name = ui.item.value; 3205 $('#selected_tax\\['+id+'\\]').val(''); 3206 } 3207 $('#selected_tax\\['+id+'\\]').trigger("change"); 3208 3209 create_item(this.input, this.element.data("id"), ui.item.value, ui.item.label); 3210 3211 placeholder.hide(); 3212 3213 event.preventDefault(); 3214 }, 3215 autocompleteclose: function(event, ui) { 3216 // do not close on select 3217 if (this.clicked_selected) { 3218 input.trigger("focus"); 3219 input.autocomplete("search", ""); 3220 3221 this.clicked_selected = false; 3222 } 3223 }, 3224 autocompletefocus: function(event, ui) { 3225 event.preventDefault(); 3226 }, 3227 click: function(event, ui) { 3228 3229 // do not open when click to remove item 3230 if ($(event.target).is(".wcsearch-dropdowns-multiselect-item-close")) { 3231 return false; 3232 } 3233 3234 if (!input.autocomplete("widget").is(":visible")) { 3235 input.trigger("focusout"); 3236 input.autocomplete("search", ""); 3237 3238 wcsearch_continue_recounting(); 3239 3240 } else { 3241 input.autocomplete("close"); 3242 3243 } 3244 } 3245 }); 3246 }, 3247 3248 _createShowAllButton: function() { 3249 3250 wcsearch_do_scroll = false; 3251 3252 this._super(); 3253 3254 var input = this.input; 3255 var placeholder = this.placeholder; 3256 var id = this.element.data('id'); 3257 3258 if ($('#selected_tax\\['+id+'\\]').val()) { 3259 this.button.addClass("wcsearch-fa-close"); 3260 } 3261 3262 this.button.on("click", function(e) { 3263 $('#selected_tax\\['+id+'\\]').val(''); 3264 $('#selected_tax\\['+id+'\\]').trigger("change"); 3265 3266 input.find(".wcsearch-dropdowns-multiselect-item").remove(); 3267 3268 placeholder.show(); 3269 }); 3270 }, 3271 3272 _source: function(request, response) { 3273 var term = $.trim(request.term); 3274 var id = this.element.data("id"); 3275 var selected_ids = $('#selected_tax\\['+id+'\\]').val().split(','); 3276 3277 var common_array = []; 3278 3279 var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), "i"); 3280 this.element.children("option").map(function() { 3281 var text = $(this).text(), 3282 value = $(this).val(), 3283 name = $(this).attr("data-name"), 3284 icon = $(this).attr("data-icon"), 3285 count = $(this).attr("data-count"), 3286 termid = $(this).attr("data-termid"), 3287 tax = $(this).attr("data-tax"), 3288 sublabel = $(this).attr("data-sublabel"), 3289 term_in_name = matcher.test(name), 3290 term_in_sublabel = matcher.test(sublabel), 3291 selected = selected_ids.includes(value) ? true : false; 3292 common_array.push({ 3293 label: text, 3294 value: value, 3295 name: name, 3296 full_value: name + ', ' + sublabel, 3297 icon: icon, 3298 count: count, 3299 termid: termid, 3300 tax: tax, 3301 sublabel: sublabel, 3302 option: this, 3303 is_term: true, 3304 term_in_name: term_in_name, 3305 selected: selected 3306 });
3307 }); 3308 3309 response(common_array); 3310 }, 3311 3312 _destroy: function() { 3313 this.element.show(); 3314 }, 3315 }); 3316 } 3317 3318 $(document).on('change', '.wcsearch-tax-dropdowns-wrap select', function() { 3319 var select_box = $(this); 3320 var parent = select_box.val(); 3321 var current_level = select_box.data('level'); 3322 var uID = select_box.data('uid'); 3323 3324 var wrapper = select_box.parents('.wcsearch-tax-dropdowns-wrap'); 3325 var tax = wrapper.data('tax'); 3326 var count = wrapper.data('count'); 3327 var hide_empty = wrapper.data('hide-empty'); 3328 3329 wcsearch_update_tax(parent, tax, current_level, count, hide_empty, uID, function() {}); 3330 }); 3331 3332 function wcsearch_update_tax(parent, tax, current_level, count, hide_empty, uID, callback) { 3333 var current_level = parseInt(current_level); 3334 var next_level = current_level + 1; 3335 var prev_level = current_level - 1; 3336 var selects_length = $('#wcsearch-tax-dropdowns-wrap-'+uID+' select').length; 3337 3338 if (parent) { 3339 $('#selected_tax\\['+uID+'\\]').val(parent).trigger('change'); 3340 } else if (current_level > 1) { 3341 $('#selected_tax\\['+uID+'\\]').val($('#chainlist_'+prev_level+'_'+uID).val()).trigger('change'); 3342 } else { 3343 $('#selected_tax\\['+uID+'\\]').val(0).trigger('change'); 3344 } 3345 3346 var exact_terms = $('#exact_terms\\['+uID+'\\]').val(); 3347 3348 for (var i=next_level; i<=selects_length; i++) { 3349 $('#wcsearch-wrap-chainlist-'+i+'-'+uID).remove(); 3350 } 3351 3352 if (parent) { 3353 var labels_source = wcsearch_js_objects['tax_dropdowns_'+uID][uID]; 3354 3355 if (labels_source.titles[current_level] != undefined) { 3356 var title = labels_source.titles[current_level]; 3357 } else { 3358 var title = ''; 3359 } 3360 3361 $('#wcsearch-wrap-chainlist-'+current_level+'-'+uID+' select').attr('disabled', 'disabled'); 3362 $.post( 3363 wcsearch_js_objects.ajaxurl, 3364 { 3365 'action': 'wcsearch_tax_dropdowns_hook', 3366 'parentid': parent, 3367 'next_level': next_level, 3368 'tax': tax, 3369 'count': count, 3370 'hide_empty': hide_empty, 3371 'title': title, 3372 'exact_terms': exact_terms, 3373 'uID': uID 3374 }, 3375 function(response_from_the_action_function){ 3376 if (response_from_the_action_function != 0) 3377 $('#wcsearch-tax-dropdowns-wrap-'+uID).append(response_from_the_action_function); 3378 3379 $('#wcsearch-wrap-chainlist-'+current_level+'-'+uID+' select').removeAttr('disabled'); 3380 3381 callback(); 3382 } 3383 ); 3384 } 3385 } 3386 3387 function wcsearch_HTML_entity_decode(str){ 3388 return $('<textarea />').html(str).text(); // HTML Entity Decode 3389 } 3390 3391 function first(p){for(var i in p)return p[i];} 3392}(jQuery))
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.