1jQuery(function ($) { 2 /** 3 * Refresh frontend AJAX nonce via uncached admin-ajax. 4 * Fixes stale localized nonces in full-page caches (same pattern as Free classic). 5 */ 6 function cafRefreshNonce() { 7 if (typeof tc_caf_ajax === "undefined" || !tc_caf_ajax.ajax_url) { 8 return $.Deferred().reject().promise(); 9 } 10 return $.ajax({ 11 url: tc_caf_ajax.ajax_url, 12 type: "POST", 13 dataType: "json", 14 cache: false, 15 data: { action: "tc_caf_refresh_nonce" }, 16 }).done(function (res) { 17 if (res && res.success && res.data && res.data.nonce) { 18 tc_caf_ajax.nonce = res.data.nonce; 19 } 20 }); 21 } 22 23 function cafIsAnalyticsNonceFailure(xhr) { 24 if (!xhr) { 25 return false; 26 } 27 if (Number(xhr.status) === 403) { 28 return true; 29 } 30 var body = (xhr.responseText || "").toString().trim(); 31 return body === "-1" || body === "0"; 32 } 33 34 function parseLegacyTermTokens($container) { 35 var raw = String($container.attr("data-terms") || ""); 36 if (!raw) return []; 37 return raw 38 .split(",") 39 .map(function (v) { 40 return String(v || "").trim(); 41 }) 42 .filter(function (v) { 43 return v !== "" && v !== "0" && v.toLowerCase() !== "all"; 44 }); 45 } 46 47 function deriveLegacyTaxFromToken(token, fallbackTax) { 48 if (token.indexOf("___") > -1) { 49 return token.split("___")[0] || ""; 50 } 51 return String(fallbackTax || ""); 52 } 53 54 function deriveLegacyTermIdFromToken(token) { 55 if (token.indexOf("___") > -1) { 56 return parseInt(token.split("___")[1] || "0", 10) || 0; 57 } 58 return parseInt(token || "0", 10) || 0; 59 } 60 61 function setLegacyInteraction($container, interaction) { 62 if ($container && $container.length) { 63 $container.data("cafLegacyInteraction", interaction || null); 64 } 65 } 66 67 function getLegacyInteraction($container) { 68 if (!$container || !$container.length) return null; 69 return $container.data("cafLegacyInteraction") || null; 70 } 71 72 function clearLegacyInteraction($container) { 73 if ($container && $container.length) { 74 $container.removeData("cafLegacyInteraction"); 75 } 76 } 77 78 // Expose helpers for legacy global functions (e.g. get_posts) outside this closure. 79 window.CAFLegacyAnalytics = window.CAFLegacyAnalytics || {}; 80 window.CAFLegacyAnalytics.setInteraction = setLegacyInteraction; 81 window.CAFLegacyAnalytics.getInteraction = getLegacyInteraction; 82 window.CAFLegacyAnalytics.clearInteraction = clearLegacyInteraction; 83 window.CAFLegacyAnalytics.trackEvent = trackLegacyAnalyticsEvent; 84 85 window.CAFLegacyFilterAjax = window.CAFLegacyFilterAjax || (function () { 86 var xhrs = Object.create(null); 87 return { 88 abortPending: function (key) { 89 if (!key || !xhrs[key]) { 90 return; 91 } 92 try { 93 xhrs[key].abort(); 94 } catch (e) { 95 /* noop */ 96 } 97 delete xhrs[key]; 98 }, 99 setPending: function (key, jqXHR) { 100 xhrs[key] = jqXHR; 101 }, 102 clearIfCurrent: function (key, jqXHR) { 103 if (xhrs[key] === jqXHR) { 104 delete xhrs[key]; 105 } 106 } 107 }; 108 })(); 109 110 function trackLegacyAnalyticsEvent($container, eventType, interaction, options) { 111 if (typeof tc_caf_ajax === "undefined" || !$container || !$container.length) { 112 return; 113 } 114 var analyticsEnabled = String($container.attr("data-caf-analytics-enabled") || "0").trim(); 115 if (analyticsEnabled !== "1") { 116 return; 117 } 118 var filterId = String($container.attr("data-filter-id") || "").trim(); 119 if (!/^\d+$/.test(filterId)) { 120 return; 121 } 122 123 var retried = !!(options && options._nonceRetried); 124 var payload = { 125 action: "tc_caf_track_analytics_event", 126 nonce: tc_caf_ajax.nonce, 127 filter_id: filterId, 128 event_type: eventType 129 }; 130 131 if (interaction && interaction.taxonomy && interaction.term_id) { 132 payload.taxonomy = interaction.taxonomy; 133 payload.term_id = interaction.term_id; 134 } 135 if (interaction && interaction.meta && typeof interaction.meta === "object") { 136 payload.meta = interaction.meta; 137 } 138 139 // Beacon cannot retry; rely on proactive cafRefreshNonce() at boot. 140 if (options && options.useBeacon === true && typeof navigator !== "undefined" && typeof navigator.sendBeacon === "function") { 141 var formData = new FormData();
142 Object.keys(payload).forEach(function (key) { 143 var value = payload[key]; 144 if (value && typeof value === "object") { 145 Object.keys(value).forEach(function (metaKey) { 146 formData.append("meta[" + metaKey + "]", value[metaKey]); 147 }); 148 } else { 149 formData.append(key, value); 150 } 151 }); 152 navigator.sendBeacon(tc_caf_ajax.ajax_url, formData); 153 return; 154 } 155 156 $.ajax({ 157 url: tc_caf_ajax.ajax_url, 158 type: "POST", 159 data: payload, 160 error: function (xhr) { 161 if (!retried && cafIsAnalyticsNonceFailure(xhr)) { 162 cafRefreshNonce().done(function () { 163 trackLegacyAnalyticsEvent($container, eventType, interaction, Object.assign({}, options || {}, { 164 _nonceRetried: true, 165 useBeacon: false 166 })); 167 }); 168 } 169 } 170 }); 171 } 172 173 function buildLegacyInteraction($container, eventType, explicitToken) { 174 var tokens = parseLegacyTermTokens($container); 175 var fallbackTax = String($container.attr("data-tax") || ""); 176 var primaryToken = explicitToken || (tokens.length ? tokens[0] : ""); 177 var taxonomy = deriveLegacyTaxFromToken(primaryToken, fallbackTax); 178 var termId = deriveLegacyTermIdFromToken(primaryToken); 179 var searchKeyword = $.trim($container.find("#caf-search-input").val() || ""); 180 181 var interaction = { 182 event_type: eventType, 183 meta: { 184 source: "legacy_shortcode", 185 interaction_type: eventType, 186 term: tokens.join(","), 187 term_token: primaryToken || "", 188 tax: tokens.map(function (t) { 189 return deriveLegacyTaxFromToken(t, fallbackTax); 190 }).filter(Boolean).join(","), 191 selected_terms_count: tokens.length, 192 has_search_query: searchKeyword ? "yes" : "no", 193 search_keyword: searchKeyword || "" 194 } 195 }; 196 197 if (taxonomy && termId > 0) { 198 interaction.taxonomy = taxonomy; 199 interaction.term_id = termId; 200 } 201 202 return interaction; 203 } 204 205 /* SEARCH BAR FUNCTIONS */ 206 $(document).on("keypress", function (e) { 207 if (e.which == 13) { 208 search_submit(e.target); 209 } 210 }); 211 $("#caf-search-sub").click(function () { 212 search_submit($(this)); 213 }); 214 $(".manage-caf-search-icon i").click(function () { 215 if ($(this).hasClass("fa-search")) { 216 var cont = $(this).closest("#caf-post-layout-container"); 217 $(cont) 218 .find( 219 ".caf-filter-layout.srch-on.search-layout2 .caf-manage-search-bar" 220 ) 221 .addClass("active"); 222 $(this).removeClass("fa-search").addClass("fa-times"); 223 } else { 224 var cont = $(this).closest("#caf-post-layout-container"); 225 $(cont) 226 .find( 227 ".caf-filter-layout.srch-on.search-layout2 .caf-manage-search-bar" 228 ) 229 .removeClass("active"); 230 $(this).removeClass("fa-times").addClass("fa-search"); 231 } 232 }); 233 234 /* TABS SCROLLER FUNCTIONS */ 235 $(".caf-scroll-right i").click(function () { 236 var total = parseInt($(this).attr("data-count")) + 1; 237 var post_per_page = "5"; 238 var len = $(".caf-tab-layout ul li.caf-tab-hide").length; 239 var current_page = parseInt(len / 5); 240 var next_page = current_page + 1; 241 var show = next_page * post_per_page; 242 var ext = total - len; 243 if (len < total && ext >= post_per_page) { 244 $(".caf-tab-layout ul").each(function (i) { 245 var div = $(this).find("li:not('.caf-tab-hide'):lt(5)"); 246 $(div).addClass("caf-tab-hide"); 247 }); 248 } 249 }); 250 251 $(".caf-scroll-left i").click(function () { 252 $(".caf-tab-layout ul").each(function (i) { 253 var div = $(this).find("li.caf-tab-hide:gt(-5)"); 254 $(div).removeClass("caf-tab-hide"); 255 }); 256 }); 257 258 /* POPUP FUNCTIONS */ 259 260 function search_submit(div) { 261 var cl_pagination = $(div).attr("class"); 262 if (cl_pagination == "prev-next-input") { 263 pagination_submit(div); 264 return false; 265 } 266 var cont = $(div).closest("#caf-post-layout-container"); 267 var sr_val = $(cont).find("#caf-search-input").val(); 268 if (sr_val != "") { 269 var divc = $(cont).attr("data-target-div"); 270 var params = get_params(1, divc); 271 params.search_string = sr_val; 272 setLegacyInteraction($(cont), buildLegacyInteraction($(cont), "search")); 273 get_posts(params); 274 } 275 } 276 277 function get_params($page, div) { 278 var div = "." + div; 279 280 var params = { 281 page: $page, 282 tax: $(div).attr("data-tax"), 283 "post-type": $(div).attr("data-post-type"), 284 term: $(div).attr("data-terms"), 285 "per-page": $(div).attr("data-per-page"), 286 "filter-id": $(div).attr("data-filter-id"), 287 "caf-post-layout": $(div).attr("data-post-layout"), 288 "data-target-div": div, 289 "data-filter-layout": $(div).attr("data-filter-layout"), 290 "data-relation": $(div).attr("data-relation"), 291 "data-default-term": $(div).attr("data-default-term"), 292 "current-post-id": $(div).attr("current-post-id"), 293 "data-order-by":$(div).attr('data-order-by'), 294 "data-order-type":$(div).attr('data-order-type') 295 }; 296 if ($("#caf-search-input").val() != "") { 297 params.search_string = $("#caf-search-input").val(); 298 } 299 // if(params['data-default-term']!='all') { 300 // params['term']=params['data-default-term']; 301 302 // } 303 return params; 304 } 305
306 // Always get a fresh nonce first (fixes stale nonce in cached HTML). 307 cafRefreshNonce().always(function () { 308 $(".caf-post-layout-container").each(function (i) { 309 var div = $(this).attr("data-target-div"); 310 var params = get_params(1, div); 311 params["first"] = "first"; 312 get_posts(params); 313 }); 314 }); 315 316 $("ul.dropdown li a").click(function () { 317 var cat = $(this).text(); 318 $(this).closest("ul.dropdown").find("span.result").html(cat); 319 //$("ul.dropdown span.result").html(cat); 320 }); 321 322 function pagination_submit(e) { 323 var page = parseInt(e.value); 324 var div = $(e) 325 .closest(".caf-post-layout-container") 326 .attr("data-target-div"); 327 var perform = "pagination"; 328 /* SCROLLING FUNCTION START */ 329 cafScrollToDiv(div); 330 /** SCROLLING END **/ 331 var params = get_params(page, div); 332 333 if (params["data-filter-layout"] != "alphabetical-layout") { 334 params["caf-perform"] = perform; 335 } 336 337 var div_new = "#caf-post-layout-container." + div; 338 339 if ($(div_new).attr("data-filter-layout") == "multiple-taxonomy-filter2") { 340 params["data-filter-layout"] = "multiple-taxonomy-filter2"; 341 } 342 343 if (params["data-filter-layout"] == "multiple-checkbox") { 344 if ($("#caf-multiple-check-filter li .check_box:checked").length > 0) { 345 params["data-filter-layout"] = "multiple-checkbox2"; 346 } else { 347 params["data-filter-layout"] = "multiple-checkbox"; 348 } 349 } 350 get_posts(params); 351 //} 352 } 353 354 $(".caf-post-layout-container").on( 355 "click", 356 ".caf-pagi-btn,.caf-filter-container li a,.caf-pagination a,.caf-alpha-layout li", 357 function clickaction(e) { 358 var div = e.currentTarget.getAttribute("data-target-div"); 359 var current_id = e.currentTarget.getAttribute("data-main-id"); 360 361 if (current_id == "flt") { 362 $("." + div + " .caf-filter-layout ul li a").each(function () { 363 $(this).removeClass("active"); 364 }); 365 if ($("." + div).attr("data-filter-layout") == "alphabetical-layout") { 366 $("." + div + " .caf-filter-layout ul li").each(function () { 367 $(this).removeClass("active"); 368 }); 369 } 370 var id = $(this).attr("data-id"); 371 $(this).addClass("active"); 372 $("." + div).attr("data-terms", id); 373 $page = "1"; 374 if (id.indexOf(",") > -1) { 375 var perform = "filter-all"; 376 } else { 377 var perform = "filter"; 378 } 379 setLegacyInteraction($("." + div), buildLegacyInteraction($("." + div), "click", id)); 380 } else { 381 var div = e.delegateTarget.getAttribute("data-target-div"); 382 $page = parseInt($(this).attr("href").replace(/\D/g, "")); 383 //caf_performance("pagination"); 384 //params["data-filter-layout"]="multiple-taxonomy-filter2"; 385 var perform = "pagination"; 386 } 387 /* SCROLLING FUNCTION START */ 388 cafScrollToDiv(div); 389 /** SCROLLING END **/ 390 var params = get_params($page, div); 391 if (params["data-filter-layout"] != "alphabetical-layout") { 392 params["caf-perform"] = perform; 393 } 394 var div_new = "#caf-post-layout-container." + div; 395 if ( 396 $(div_new).attr("data-filter-layout") == "multiple-taxonomy-filter2" 397 ) { 398 params["data-filter-layout"] = "multiple-taxonomy-filter2"; 399 } 400 if (params["data-filter-layout"] == "multiple-checkbox") { 401 if ($("#caf-multiple-check-filter li .check_box:checked").length > 0) { 402 params["data-filter-layout"] = "multiple-checkbox2"; 403 } else { 404 params["data-filter-layout"] = "multiple-checkbox"; 405 } 406 } 407 get_posts(params); 408 e.preventDefault(); 409 } 410 ); 411 412 /* START FUNCTION FOR MULTIPLE CHECKBOX FILTER */ 413 $(".caf-post-layout-container").on( 414 "click", 415 "#caf-multiple-check-filter li .check_box", 416 function (e) { 417 var div = e.currentTarget.getAttribute("data-target-div"); 418 var div_new = "#caf-post-layout-container." + div; 419 var current_id = e.currentTarget.id; 420 var cr_tr = $("#" + current_id).val(); 421 var v = []; 422 i = 0; 423 424 $("#caf-multiple-check-filter li .check_box:checked").each(function () { 425 v[i++] = $(this).val(); 426 }); 427 428 var t = v.toString(); 429 if (t == "") { 430 var sel_terms = $("." + div).attr("data-selected-terms"); 431 $("." + div).attr("data-terms", sel_terms); 432 } else { 433 $("." + div).attr("data-terms", t); 434 } 435 436 $page = "1"; 437 var params = get_params($page, div); 438 params["caf-perform"] = "filter"; 439 params["caf-perform-term"] = cr_tr; 440 setLegacyInteraction($("." + div), buildLegacyInteraction($("." + div), "click", cr_tr)); 441 //params["caf-perform"]='filter'; 442 jQuery(div_new).attr("data-filter-layout", ""); 443 if ($("#caf-multiple-check-filter li .check_box:checked").length > 0) { 444 params["data-filter-layout"] = "multiple-checkbox2"; 445 } else { 446 params["data-filter-layout"] = "multiple-checkbox"; 447 } 448 cafScrollToDiv(div); 449 get_posts(params); 450 //e.preventDefault(); 451 } 452 ); 453 /* END FUNCTION FOR MULTIPLE CHECKBOX FILTER */ 454 455 /* START FUNCTION FOR MULTIPLE TAXONOMY FILTER */ 456 $(".caf-post-layout-container").on( 457 "click", 458 "#caf-multiple-taxonomy-filter li .check_box", 459 function (e) { 460 461 if (!$(this).closest("li").hasClass("act")) { 462 $(this).closest("li").addClass("act"); 463 } else { 464 $(this).closest("li").removeClass("act"); 465 } 466 var div = e.currentTarget.getAttribute("data-target-div"); 467 var div_new = "#caf-post-layout-container." + div; 468 469 var current_id = e.currentTarget.id; 470 var cr_tr = $("#" + current_id).val(); 471 var v = []; 472 i = 0; 473 if($(this).closest('.caf-post-layout-container').find(".caf-active-filters").length>0) { 474 set_active_filters($(this).closest('.caf-post-layout-container')); 475 } 476 $("#caf-multiple-taxonomy-filter li .check_box:checked").each( 477 function () { 478 v[i++] = $(this).val(); 479 } 480 ); 481 482 var t = v.toString(); 483 if (t == "") { 484 var sel_terms = $("." + div).attr("data-selected-terms"); 485 $("." + div).attr("data-terms", sel_terms); 486 } else { 487 $("." + div).attr("data-terms", t); 488 } 489 490 $page = "1"; 491 var params = get_params($page, div); 492 params["caf-perform"] = "filter"; 493 params["caf-perform-term"] = cr_tr; 494 setLegacyInteraction($("." + div), buildLegacyInteraction($("." + div), "click", cr_tr)); 495 496 if ( 497 v.filter(function (e) { 498 return e !== "0"; 499 }).length == 1 500 ) { 501 params["data-filter-layout"] = "multiple-taxonomy-filter"; 502 jQuery(div_new).attr("data-filter-layout", "multiple-taxonomy-filter"); 503 } 504 505 if ($("#caf-multiple-taxonomy-filter li .check_box:checked").length > 1) { 506 params["data-filter-layout"] = "multiple-taxonomy-filter2"; 507 jQuery(div_new).attr("data-filter-layout", "multiple-taxonomy-filter2"); 508 } else { 509 params["data-filter-layout"] = "multiple-taxonomy-filter"; 510 jQuery(div_new).attr("data-filter-layout", "multiple-taxonomy-filter"); 511 } 512 cafScrollToDiv(div); 513 get_posts(params); 514 //e.preventDefault(); 515 } 516 ); 517 /* END FUNCTION FOR MULTIPLE TAXONOMY FILTER */ 518 519 /* START FUNCTION FOR MULTIPLE TAXONOMY HORIZONTAL FILTER */ 520 $(".caf-post-layout-container").on( 521 "click", 522 ".caf_select_multi_btn", 523 function (e) { 524 var div = e.currentTarget.getAttribute("data-target-div"); 525 var div_new = "#caf-post-layout-container." + div; 526 var current_id = e.currentTarget.id; 527 var v = []; 528 i = 0; 529 $(".caf_select_multi").each(function () { 530 v[i++] = $(this).val(); 531 }); 532 const allEqual = (v) => v.every((val) => val === v[0]); 533 var t = v.toString(); 534 if (t == "" || allEqual(v)) { 535 var sel_terms = $("." + div).attr("data-selected-terms"); 536 $("." + div).attr("data-terms", sel_terms); 537 } else { 538 $("." + div).attr("data-terms", t); 539 } 540 541 $page = "1"; 542 var params = get_params($page, div); 543 //params["caf-perform"]='filter'; 544 if ( 545 v.filter(function (e) { 546 return e !== "0"; 547 }).length == 1 548 ) { 549 params["data-filter-layout"] = "multiple-taxonomy-filter"; 550 jQuery(div_new).attr("data-filter-layout", "multiple-taxonomy-filter"); 551 } 552 553 if ($(".caf_select_multi").length > 1 && allEqual(v) == false) { 554 params["data-filter-layout"] = "multiple-taxonomy-filter2"; 555 jQuery(div_new).attr("data-filter-layout", "multiple-taxonomy-filter2"); 556 } else { 557 params["data-filter-layout"] = "multiple-taxonomy-filter"; 558 jQuery(div_new).attr("data-filter-layout", "multiple-taxonomy-filter"); 559 } 560 561 /* SCROLLING FUNCTION START */ 562 cafScrollToDiv(div); 563 /** SCROLLING END **/ 564 get_posts(params); 565 //e.preventDefault(); 566 } 567 ); 568 /* END FUNCTION FOR MULTIPLE TAXONOMY HORIZONTAL FILTER */ 569 570 /* START FUNCTION FOR MULTIPLE TAXONOMY HORIZONTAL MODERN FILTER */ 571 $("ul.caf-multi-drop-sub li").click(function () { 572 var data_name = $(this).attr("data-name"); 573 var data_value = $(this).attr("data-value"); 574 575 var div = $(this) 576 .closest(".caf-post-layout-container") 577 .attr("data-target-div"); 578 var div_new = "#caf-post-layout-container." + div; 579 $(this) 580 .closest("ul.caf-multi-drop-sub") 581 .find("li") 582 .each(function () { 583 $(this).removeClass("active"); 584 }); 585 $(this).addClass("active"); 586 $(this).closest("ul.caf-multi-drop-sub").removeClass("active"); 587 $(this) 588 .closest("ul.caf_select_multi") 589 .find("li.caf_select_multi_default span") 590 .text(data_name); 591 $(this) 592 .closest("ul.caf_select_multi") 593 .find("li.caf_select_multi_default") 594 .attr("data-value", data_value); 595 var v = []; 596 i = 0; 597 $("li.caf_select_multi_default").each(function () { 598 v[i++] = $(this).attr("data-value"); 599 }); 600 const allEqual = (v) => v.every((val) => val === v[0]); 601 var t = v.toString(); 602 if (t == "" || allEqual(v)) { 603 var sel_terms = $("." + div).attr("data-selected-terms"); 604 $("." + div).attr("data-terms", sel_terms); 605 } else { 606 $("." + div).attr("data-terms", t); 607 } 608 609 $page = "1"; 610 var params = get_params($page, div); 611 params["caf-perform"] = "filter"; 612 params["caf-perform-term"] = data_value;
613 setLegacyInteraction($("." + div), buildLegacyInteraction($("." + div), "click", data_value)); 614 615 if ( 616 v.filter(function (e) { 617 return e !== "0"; 618 }).length == 1 619 ) { 620 params["data-filter-layout"] = "multiple-taxonomy-filter"; 621 jQuery(div_new).attr("data-filter-layout", "multiple-taxonomy-filter"); 622 } else if ($(".caf_select_multi").length > 1 && allEqual(v) == false) { 623 params["data-filter-layout"] = "multiple-taxonomy-filter2"; 624 jQuery(div_new).attr("data-filter-layout", "multiple-taxonomy-filter2"); 625 } else { 626 params["data-filter-layout"] = "multiple-taxonomy-filter"; 627 jQuery(div_new).attr("data-filter-layout", "multiple-taxonomy-filter"); 628 } 629 630 cafScrollToDiv(div); 631 get_posts(params); 632 }); 633 /* END FUNCTION FOR MULTIPLE TAXONOMY HORIZONTAL MODERN FILTER */ 634 635 /* START FUNCTION FOR PARENT CHILD CATEGORY FILTER */ 636 $(".caf-post-layout-container").on( 637 "click", 638 ".caf-pcf-layout li .check_box", 639 function (e) { 640 if (!$(this).closest("li").hasClass("act")) { 641 $(this).closest("li").addClass("act"); 642 } else { 643 $(this).closest("li").removeClass("act"); 644 } 645 var div = e.currentTarget.getAttribute("data-target-div"); 646 var div_new = "#caf-post-layout-container." + div; 647 var current_id = e.currentTarget.id; 648 var cr_tr = $("#" + current_id).val(); 649 var v = []; 650 i = 0; 651 $(".caf-pcf-layout li .check_box:checked").each(function () { 652 v[i++] = $(this).val(); 653 }); 654 655 var t = v.toString(); 656 if (t == "") { 657 var sel_terms = $("." + div).attr("data-selected-terms"); 658 $("." + div).attr("data-terms", sel_terms); 659 } else { 660 $("." + div).attr("data-terms", t); 661 } 662 663 $page = "1"; 664 var params = get_params($page, div); 665 params["caf-perform"] = "filter"; 666 params["caf-perform-term"] = cr_tr; 667 setLegacyInteraction($("." + div), buildLegacyInteraction($("." + div), "click", cr_tr)); 668 jQuery(div_new).attr("data-filter-layout", "multiple-taxonomy-filter2"); 669 if ($(".caf-pcf-layout li .check_box:checked").length > 1) { 670 params["data-filter-layout"] = "multiple-taxonomy-filter2"; 671 } else { 672 params["data-filter-layout"] = "multiple-taxonomy-filter"; 673 } 674 cafScrollToDiv(div); 675 get_posts(params); 676 //e.preventDefault(); 677 } 678 ); 679 /* END FUNCTION FOR PARENT CHILD CATEGORY FILTER*/ 680 681 $(".caf-post-layout-container").on("click", ".tp_load_more", function (e) { 682 var $current = $(this).attr("data-current"); 683 var $next = $(this).attr("data-next"); 684 var $total = $(this).attr("data-total"); 685 var div = e.delegateTarget.getAttribute("data-target-div"); 686 $page = parseInt($next); 687 var params = get_params($page, div); 688 if (params["data-filter-layout"] == "multiple-checkbox") { 689 if ($("#caf-multiple-check-filter li .check_box:checked").length > 0) { 690 params["data-filter-layout"] = "multiple-checkbox2"; 691 } else { 692 params["data-filter-layout"] = "multiple-checkbox"; 693 } 694 } 695 if ($page <= $total) { 696 get_posts_load(params); 697 } else { 698 $(this).fadeOut(); 699 } 700 e.preventDefault(); 701 }); 702 $(".caf-post-layout-container").on("change", ".caf-sort-front", function (e) { 703 var div=$(this).closest(".caf-post-layout-container").attr("data-target-div"); 704 var params =get_params(1,div); 705 $(this).closest(".caf-post-layout-container").attr("data-order-by",$(".caf-sort-order-by").val()); 706 $(this).closest(".caf-post-layout-container").attr("data-order-type",$(".caf-sort-order-type").val()); 707 params["data-order-by"]=$(".caf-sort-order-by").val(); 708 params["data-order-type"]=$(".caf-sort-order-type").val(); 709 get_posts(params); 710 }); 711 $(".caf-post-layout-container").on("click", "#manage-ajax-response a[href]", function () { 712 var $link = $(this); 713 if ( 714 $link.hasClass("caf-pagi-btn") || 715 $link.closest(".caf-pagination").length || 716 $link.closest("#caf-layout-pagination").length 717 ) { 718 return; 719 } 720 var $container = $link.closest(".caf-post-layout-container"); 721 if (!$container.length) return; 722 var interaction = buildLegacyInteraction($container, "post_click"); 723 interaction.meta.clicked_url = String($link.attr("href") || ""); 724 interaction.meta.clicked_text = $.trim($link.text() || ""); 725 trackLegacyAnalyticsEvent($container, "post_click", interaction, { useBeacon: true }); 726 }); 727 $(document).on('click', '.clear-all-btn', function() { 728 // Clear the active_filters array 729 active_filters = []; 730 // Uncheck all checkboxes 731 $("#caf-multiple-taxonomy-filter li .check_box").prop('checked', false); 732 // Remove all filter items and "Clear All" button from the UI 733 $(".caf-active-filters ul").find('li').fadeOut(function() { 734 $(this).remove(); 735 }); 736 var div = $(this).closest(".caf-post-layout-container").attr("data-target-div"); 737 $page = "1"; 738 var params = get_params($page, div); 739 params['term']=$(this).closest(".caf-post-layout-container").attr("data-selected-terms"); 740 setTimeout(function(){ 741 cafScrollToDiv(div); 742 get_posts(params); 743 },200) 744 745 }); 746 $(document).on('click', '.caf-active-filters li', function() { 747 var data_id = $(this).attr("data-id"); 748 var div1=$(this).closest(".caf-post-layout-container"); 749 var div = $(this).closest(".caf-post-layout-container").attr("data-target-div"); 750 var terms = $(this).closest(".caf-post-layout-container").attr("data-terms"); 751 752 // Convert the comma-separated string into an array 753 var termsArray = terms.split(','); 754 755 // Remove the data_id from the array 756 termsArray = termsArray.filter(function(term) { 757 return term !== data_id; 758 }); 759 760 // Convert the array back into a string 761 var updatedTerms = termsArray.join(','); 762 763 // Update the data-terms attribute with the new value 764 $(this).closest(".caf-post-layout-container").attr("data-terms", updatedTerms); 765 $("#caf-multiple-taxonomy-filter li .check_box[data-id='"+data_id+"']").prop('checked', false); 766 $(this).fadeOut(function() { 767 $(this).remove(); 768 }); 769 $page = "1"; 770 var params = get_params($page, div); 771 set_active_filters(div1); 772 if(termsArray.length==0) { 773 params['term']=$(this).closest(".caf-post-layout-container").attr("data-selected-terms"); 774 $("li.caf-clear-all").fadeOut(function() { 775 $(this).remove(); 776 }); 777 } 778 cafScrollToDiv(div); 779 get_posts(params); 780 }); 781}); 782 783 784function cafScrollToDiv(div) { 785 var scroll_to_div = jQuery("#caf-post-layout-container." + div).attr( 786 "data-scroll" 787 ); 788 if (scroll_to_div != "disabled") { 789 var scroll_desktop = parseInt( 790 jQuery("#caf-post-layout-container." + div).attr("data-scroll-desk") 791 ); 792 var scroll_mobile = parseInt( 793 jQuery("#caf-post-layout-container." + div).attr("data-scroll-mob") 794 ); 795 var width = jQuery(document).width(); 796 var position = 0; 797 if (scroll_to_div == "desktop" && width > 600) { 798 var position = scroll_desktop; 799 scroll_animate(position, div); 800 } else if (scroll_to_div == "desktop&mobile" && width > 600) { 801 var position = scroll_desktop; 802 scroll_animate(position, div); 803 } else if (scroll_to_div == "mobile" && width < 600) { 804 var position = scroll_mobile; 805 scroll_animate(position, div); 806 } else if (scroll_to_div == "desktop&mobile" && width < 600) { 807 var position = scroll_mobile; 808 scroll_animate(position, div); 809 } 810 } 811} 812 813 814 815function get_posts(params) { 816 var $ = jQuery.noConflict(); 817 var container = params["data-target-div"]; 818 var legacyKey = String(container || ""); 819 var $root = $(container); 820 var content = $root.find("#manage-ajax-response"); 821 var status = $root.find(".status"); 822 823 if (window.CAFLegacyFilterAjax) {
824 window.CAFLegacyFilterAjax.abortPending(legacyKey); 825 } 826 827 var prevRid = $root.data("cafLegacyReqId") || 0; 828 var requestId = prevRid + 1; 829 $root.data("cafLegacyReqId", requestId); 830 831 $root.addClass("fetching"); 832 $(status).html('<i class="fa fa-spinner fa-spin"></i>').addClass("active"); 833 $(content).addClass("loading"); 834 835 var jqXHR = $.ajax({ 836 url: tc_caf_ajax.ajax_url, 837 data: { 838 action: "get_filter_posts", 839 nonce: tc_caf_ajax.nonce, 840 params: params, 841 }, 842 type: "post", 843 dataType: "json", 844 success: function (data, textStatus, XMLHttpRequest) { 845 if ($root.data("cafLegacyReqId") !== requestId) { 846 return; 847 } 848 if (typeof cafTotalResults !== "undefined") { 849 $(cafTotalResults).html(data.found); 850 } 851 if (typeof cafAjaxSuccess !== "undefined") { 852 data["params"] = params; 853 cafAjaxSuccess(data); 854 } 855 var $container = $root; 856 var interaction = window.CAFLegacyAnalytics && window.CAFLegacyAnalytics.getInteraction 857 ? window.CAFLegacyAnalytics.getInteraction($container) 858 : null; 859 if (interaction) { 860 interaction.meta = interaction.meta || {}; 861 interaction.meta.results_total = parseInt(data.found || 0, 10) || 0; 862 interaction.meta.zero_results = (interaction.meta.results_total <= 0) ? "yes" : "no"; 863 if (interaction.event_type === "search") { 864 interaction.meta.search_results_total = interaction.meta.results_total; 865 interaction.meta.search_zero_results = interaction.meta.zero_results; 866 } 867 if (window.CAFLegacyAnalytics && window.CAFLegacyAnalytics.trackEvent) { 868 window.CAFLegacyAnalytics.trackEvent($container, interaction.event_type || "click", interaction); 869 } 870 } 871 if (window.CAFLegacyAnalytics && window.CAFLegacyAnalytics.clearInteraction) { 872 window.CAFLegacyAnalytics.clearInteraction($container); 873 } 874 $root.removeClass("fetching"); 875 $(content).removeClass("loading"); 876 877 if (data.status === 200) { 878 $(content).removeClass("caf-empty-error"); 879 $(content).html(data.content); 880 } else if (data.status === 201) { 881 if (data.message == "Empty Results") { 882 $(content).addClass("caf-empty-error"); 883 $(content).html(data.content); 884 } else { 885 $(content).html(data.content); 886 } 887 } else if (data.status === 404) { 888 $(content).html(data.content); 889 } else { 890 $(status).html(data.message); 891 } 892 }, 893 error: function (MLHttpRequest, textStatus, errorThrown) { 894 if (textStatus === "abort") { 895 return; 896 } 897 if ($root.data("cafLegacyReqId") !== requestId) { 898 return; 899 } 900 $(status).html(textStatus); 901 }, 902 complete: function (xhr, textStatus) { 903 if (window.CAFLegacyFilterAjax) { 904 window.CAFLegacyFilterAjax.clearIfCurrent(legacyKey, jqXHR); 905 } 906 if ($root.data("cafLegacyReqId") !== requestId) { 907 return; 908 } 909 var msg = textStatus; 910 if (textStatus === "success" && xhr.responseJSON) { 911 msg = xhr.responseJSON.found; 912 } 913 $(status).text("Posts found: " + msg); 914 }, 915 }); 916 917 if (window.CAFLegacyFilterAjax) { 918 window.CAFLegacyFilterAjax.setPending(legacyKey, jqXHR); 919 } 920} 921 922function get_posts_load(params) { 923 params.load_more = "load_more"; 924 var $ = jQuery.noConflict(); 925 var container = params["data-target-div"]; 926 var legacyKey = String(container || ""); 927 var $root = $(container); 928 var content = $root.find("#manage-ajax-response"); 929 var content2 = $root.find( 930 "#manage-ajax-response .load-more-container" 931 ); 932 var status = $root.find(".status"); 933 934 if (window.CAFLegacyFilterAjax) { 935 window.CAFLegacyFilterAjax.abortPending(legacyKey); 936 } 937 938 var prevRid = $root.data("cafLegacyReqId") || 0; 939 var requestId = prevRid + 1; 940 $root.data("cafLegacyReqId", requestId); 941 942 $root.addClass("fetching"); 943 $(status).html('<i class="fa fa-spinner fa-spin"></i>').addClass("active"); 944 $(content).addClass("loading"); 945 $root.find("#tp-load-more .fa-spinner").remove(); 946 $root 947 .find("#tp-load-more") 948 .append(' <i class="fa fa-spinner fa-spin"></i>') 949 .addClass("tp-loading"); 950 951 var jqXHR = $.ajax({ 952 url: tc_caf_ajax.ajax_url, 953 data: { 954 action: "get_filter_posts", 955 nonce: tc_caf_ajax.nonce, 956 params: params, 957 }, 958 type: "post", 959 dataType: "json", 960 success: function (data, textStatus, XMLHttpRequest) { 961 if ($root.data("cafLegacyReqId") !== requestId) { 962 return; 963 } 964 if (typeof cafTotalResults !== "undefined") { 965 $(cafTotalResults).html(data.found); 966 } 967 if (typeof cafAjaxSuccess !== "undefined") { 968 data["params"] = params; 969 cafAjaxSuccess(data); 970 } 971 $root.removeClass("fetching"); 972 $(content).removeClass("loading"); 973 $root.find("#tp-load-more").removeClass("tp-loading"); 974 if (data.status === 200) { 975 var crpg = parseInt( 976 $(content2).find("#tp-load-more").attr("data-current") 977 ); 978 var nxpg = parseInt( 979 $(content2).find("#tp-load-more").attr("data-next") 980 ); 981 var ttlpg = parseInt( 982 $(content2).find("#tp-load-more").attr("data-total") 983 ); 984 crpg = crpg + 1; 985 nxpg = nxpg + 1; 986 if (ttlpg == crpg) { 987 $(content2).find("#tp-load-more").addClass("caf-disabled-end-btn"); 988 } 989 parseInt($(content2).find("#tp-load-more").attr("data-current", crpg)); 990 parseInt($(content2).find("#tp-load-more").attr("data-next", nxpg)); 991 $(data.content).insertBefore(content2); 992 } else if (data.status === 201) { 993 $(content).html(data.content); 994 } else if (data.status === 404) { 995 $(content).html(data.content); 996 } else { 997 $(status).html(data.message); 998 } 999 }, 1000 error: function (MLHttpRequest, textStatus, errorThrown) { 1001 if (textStatus === "abort") { 1002 return; 1003 } 1004 if ($root.data("cafLegacyReqId") !== requestId) { 1005 return; 1006 } 1007 $(status).html(textStatus); 1008 }, 1009 complete: function (xhr, textStatus) { 1010 if (window.CAFLegacyFilterAjax) { 1011 window.CAFLegacyFilterAjax.clearIfCurrent(legacyKey, jqXHR); 1012 } 1013 if ($root.data("cafLegacyReqId") !== requestId) { 1014 return; 1015 } 1016 $(status).html("").removeClass("active"); 1017 }, 1018 }); 1019 1020 if (window.CAFLegacyFilterAjax) { 1021 window.CAFLegacyFilterAjax.setPending(legacyKey, jqXHR); 1022 } 1023} 1024 1025/* filter 2 dropdown code */ 1026jQuery(document).ready(function ($) { 1027 $("ul.dropdown").click(function () { 1028 $(this).find("li ul").toggle(); 1029 $(this).find("li").toggleClass("activss"); 1030 }); 1031 1032 $(".caf-post-layout-container").each(function () { 1033 if ($(this).attr("data-filter-layout") == "filter-layout2") { 1034 var d_term = $(this).attr("data-default-term"); 1035 $(this).find("ul.dropdown li ul li a.dfl").removeClass("active"); 1036 var div1 = $(this) 1037 .find("ul.dropdown li ul li a[data-id='" + d_term + "']") 1038 .not(".dfl"); 1039 if (div1.length == 0) { 1040 $("ul.dropdown ul li:first-child a").addClass("active"); 1041 } else { 1042 $(div1).addClass("active"); 1043 var text = $(div1).text(); 1044 $(this).find(".dropdown .result").html(text); 1045 } 1046 } 1047 }); 1048 1049 /* FUNCTION FOR MULTIPLE TAXONOMY FILTER TOGGLE */ 1050 $(".caf-mtf-layout h3.tax-heading").click(function () { 1051 if ($(this).find("i").hasClass("fa-chevron-up")) { 1052 $(this) 1053 .find("i") 1054 .removeClass("fa-chevron-up") 1055 .addClass("fa-chevron-down"); 1056 } else { 1057 $(this) 1058 .find("i") 1059 .removeClass("fa-chevron-down") 1060 .addClass("fa-chevron-up"); 1061 } 1062 $(this) 1063 .closest("ul") 1064 .find("li") 1065 .each(function () { 1066 $(this).slideToggle(); 1067 }); 1068 }); 1069}); 1070 1071/* SCROLL ANIMATE FUNCTION */ 1072function scroll_animate(pos, div) { 1073 if (jQuery("#caf-post-layout-container ." + div).offset()) { 1074 jQuery("html, body").animate( 1075 { 1076 scrollTop: 1077 jQuery("#caf-post-layout-container ." + div).offset().top - pos, 1078 }, 1079 2000 1080 ); 1081 } else { 1082 jQuery("html, body").animate( 1083 { 1084 scrollTop: 1085 jQuery("#caf-post-layout-container." + div).offset().top - pos, 1086 }, 1087 2000 1088 ); 1089 } 1090} 1091 1092jQuery(function ($) { 1093 $("ul.caf_select_multi li.caf_select_multi_default").click(function () { 1094 var th = $(this).find("ul.caf-multi-drop-sub"); 1095 $("ul.caf_select_multi li.caf_select_multi_default") 1096 .not(this) 1097 .each(function () { 1098 $(this) 1099 .closest("ul") 1100 .find("ul.caf-multi-drop-sub") 1101 .removeClass("active"); 1102 $(this).find("i.caf-multi-mod-right").removeClass("fa-chevron-up"); 1103 }); 1104 var data_value = $(this).attr("data-value"); 1105 $(this).find("i.caf-multi-mod-right").toggleClass("fa-chevron-up"); 1106 $(this).closest("ul").find("ul.caf-multi-drop-sub").toggleClass("active"); 1107 }); 1108 $(document).on('click', function(event) { 1109 if (!$(event.target).closest('.caf_select_multi').length && !$(event.target).closest('.caf_select_multi').length) { 1110 if($('ul.caf-multi-drop-sub').length) { 1111 $('ul.caf-multi-drop-sub').removeClass("active"); 1112 } 1113 } 1114}); 1115}); 1116var active_filters = []; 1117function set_active_filters(div) { 1118 // Iterate over all checkboxes 1119 1120 jQuery(div).find("#caf-multiple-taxonomy-filter li .check_box").each(function () { 1121 var filter_label = jQuery(this).closest("li").find('label').text(); 1122 var data_name = jQuery(this).closest("ul").find('h3').attr('data-name'); 1123 var data_id = jQuery(this).attr('data-id'); 1124 // Create the object for this checkbox 1125 var filter_obj = { 1126 label: filter_label, 1127 dataName: data_name 1128 }; 1129 // If checked, add to active_filters if not already present 1130 if (jQuery(this).is(":checked")) { 1131 1132 if (!active_filters.some(item => item.label === filter_label && item.dataName === data_name)) { 1133 active_filters.push(filter_obj); // Add in order of checking 1134 1135 var htm = '<li class="filter-item" data-id="'+data_id+'" data-label="' + filter_label + '" data-name="' + data_name + '" style="display:none;">'; 1136 if(jQuery(div).attr("active-filters-style")=='with_tax') { 1137 htm += "<span class='caf-active-filter-label'>" + data_name + " : </span>"; 1138 } 1139 htm += "<span class='caf-active-filter-tag'>" + filter_label + "</span>"; 1140 htm += "<span class='caf-active-filter-close'> X</span>"; 1141 htm += '</li>'; 1142 // Append to the .caf-active-filters ul 1143 jQuery(div).find(".caf-active-filters ul").append(htm).find('li:last').fadeIn(); // Smooth addition with fadeIn 1144 } 1145 } else { 1146 // If unchecked, remove from active_filters 1147 active_filters = active_filters.filter(item => !(item.label === filter_label && item.dataName === data_name)); 1148 1149 // Smooth removal of the corresponding <li> 1150 jQuery(div).find('.caf-active-filters ul li[data-label="'+filter_label+'"][data-name="'+data_name+'"]').fadeOut(function() { 1151 jQuery(this).remove(); // Remove the element after fadeOut completes 1152 }); 1153 } 1154 }); 1155 // Handle "Clear All" button logic in real-time after any checkbox change 1156 if (active_filters.length > 0) { 1157 // Append "Clear All" button if it doesn't exist 1158 jQuery(div).find(".caf-active-filters ul li.caf-clear-all").remove(); 1159 if (jQuery(div).find(".caf-clear-all").length === 0) { 1160 jQuery(div).find(".caf-active-filters ul").append('<li class="caf-clear-all" style="display:none;"><button class="clear-all-btn">Clear All</button></li>').find('li:last').fadeIn(); // Smooth addition with fadeIn 1161 } 1162 } else { 1163 // Remove the "Clear All" button if no active filters 1164 jQuery(div).find(".caf-clear-all").fadeOut(function() { 1165 jQuery(this).remove(); 1166 }); 1167 } 1168} 1169 1170// Script start to speech recognition... 1171document.addEventListener("DOMContentLoaded", function () { 1172 let voiceSearchButton = document.getElementById("caf-voice-search"); 1173 1174 if (voiceSearchButton) { // Check if the element exists 1175 voiceSearchButton.addEventListener("click", function () { 1176 const searchInput = document.getElementById("caf-search-input"); 1177 if (searchInput) { 1178 searchInput.value = ""; 1179 } 1180 let recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)(); 1181 recognition.lang = "en-US"; 1182 recognition.start(); 1183 1184 recognition.onresult = function (event) { 1185 let transcript = event.results[0][0].transcript; 1186 document.getElementById("caf-search-input").value = transcript; 1187 // Send the text to the WordPress search function 1188 jQuery("#caf-search-sub").trigger("click"); 1189 }; 1190 }); 1191 } else { 1192 // console.error("Error: #caf-voice-search button not found!"); 1193 } 1194});
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.