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