1jQuery(document).ready(function () { 2 jQuery(document).on("click", ".cwp-alert .cwp-alert-close", function () { 3 var $this = jQuery(this), 4 $parent = $this.closest('.cwp-alert'); 5 $parent.slideUp(200, function () { 6 if ($parent.hasClass("cwp-js-alert")) { 7 $parent.hide(); 8 } else { 9 $parent.remove(); 10 } 11 }); 12 }); 13 14 jQuery(document).on('click', '.cubewp-modal-trigger', function (event) { 15 event.preventDefault(); 16 var $this = jQuery(this), 17 target = jQuery($this.attr('data-cubewp-modal')); 18 if (target.length > 0) { 19 target.addClass('shown').fadeIn(); 20 } 21 }); 22 jQuery(document).on('click', '.cubewp-modal-close', function (event) { 23 event.preventDefault(); 24 var $this = jQuery(this), 25 target = $this.closest('.cubewp-modal'); 26 target.removeClass('shown').fadeOut(); 27 }); 28 29 var view_all_child_terms = jQuery('.cwp-taxonomy-term-child-terms-see-more'); 30 if (view_all_child_terms.length > 0) { 31 view_all_child_terms.on('click', function (e) { 32 e.preventDefault(); 33 var $this = jQuery(this), 34 more = $this.attr('data-more'), 35 less = $this.attr('data-less'), 36 all_child_terms = $this.closest('.cwp-taxonomy-term-child-terms').find('.cwp-taxonomy-term-child-terms-more'); 37 if ($this.hasClass('cwp-viewing-less')) { 38 $this.text(more); 39 $this.removeClass('cwp-viewing-less'); 40 all_child_terms.slideUp('hide'); 41 } else { 42 $this.text(less); 43 $this.addClass('cwp-viewing-less'); 44 all_child_terms.slideDown('show'); 45 } 46 }); 47 } 48 49}); 50 51function cwp_notification_ui(notification_type, notification_content) { 52 var $cwp_alert = jQuery(".cwp-alert.cwp-js-alert"), 53 $alert_class = '', 54 $cwp_alert_content = $cwp_alert.find('.cwp-alert-content'); 55 if ($cwp_alert.is(":visible") && $cwp_alert_content.html() === notification_content) { 56 return false; 57 } 58 if ($cwp_alert.is(":visible")) { 59 $cwp_alert.slideUp(200, function () { 60 if ($cwp_alert.hasClass("cwp-js-alert")) { 61 $cwp_alert.hide(); 62 } else { 63 $cwp_alert.remove(); 64 } 65 }); 66 } 67 if (notification_type === 'success') { 68 $alert_class = 'cwp-alert-success'; 69 } else if (notification_type === 'warning') { 70 $alert_class = 'cwp-alert-warning'; 71 } else if (notification_type === 'info') { 72 $alert_class = 'cwp-alert-info'; 73 } else if (notification_type === 'error') { 74 $alert_class = 'cwp-alert-danger'; 75 } 76 $cwp_alert.removeClass("cwp-alert-danger cwp-alert-success cwp-alert-warning cwp-alert-info").addClass($alert_class); 77 $cwp_alert.find('.cwp-alert-heading').text(notification_type + "!"); 78 $cwp_alert_content.html(notification_content); 79 $cwp_alert.slideDown(); 80 setTimeout(function () { 81 $cwp_alert.slideUp(200, function () { 82 if ($cwp_alert.hasClass("cwp-js-alert")) { 83 $cwp_alert.hide(); 84 } else { 85 $cwp_alert.remove(); 86 } 87 }); 88 }, 3000); 89} 90 91jQuery(document).on('click', '.cwp-post-confirmation-wrap .cwp-confirmation-bottom-bar', function (e) { 92 jQuery('.cwp-post-confirmation').slideToggle(700); 93}); 94jQuery(document).on('click', '.cwp-post-confirmation-wrap .cwp-confirmation-bottom-bar', function (e) { 95 jQuery('.cwp-post-confirmation').slideToggle(700); 96}); 97jQuery(document).on('click', '.cwp-save-post', function (e) { 98 var thisObj = jQuery(this); 99 var pid = thisObj.data('pid'); 100 thisObj.addClass('cubewp-active-ajax'); 101 jQuery.ajax({ 102 url: cwp_alert_ui_params.ajax_url, 103 type: 'POST', 104 data: 'action=cubewp_save_post&post-id=' + pid + '&nonce=' + cwp_alert_ui_params.nonce, 105 dataType: "json", 106 success: function (response) { 107 cwp_notification_ui(response.type, response.msg); 108 if (typeof response.text != 'undefined' && response.text != '') { 109 thisObj.addClass('cwp-saved-post'); 110 thisObj.removeClass('cwp-save-post'); 111 thisObj.find('.cwp-saved-text').html(response.text); 112 thisObj.removeClass('cubewp-active-ajax'); 113 } 114 } 115 }); 116}); 117jQuery(document).on('click', '.cwp-saved-post', function (e) { 118 var thisObj = jQuery(this); 119 var pid = thisObj.data('pid'); 120 var action = thisObj.data('action'); 121 thisObj.addClass('cubewp-active-ajax'); 122 jQuery.ajax({ 123 url: cwp_alert_ui_params.ajax_url, 124 type: 'POST', 125 data: 'action=cubewp_remove_saved_posts&post-id=' + pid + '&nonce=' + cwp_alert_ui_params.nonce, 126 dataType: "json", 127 success: function (response) { 128 cwp_notification_ui(response.type, response.msg); 129 if (typeof response.text != 'undefined' && response.text != '') { 130 if (action == 'remove') { 131 thisObj.closest('tr').remove(); 132 } 133 thisObj.addClass('cwp-save-post'); 134 thisObj.removeClass('cwp-saved-post'); 135 thisObj.find('.cwp-saved-text').html(response.text); 136 thisObj.removeClass('cubewp-active-ajax'); 137 } 138 } 139 }); 140}); 141 142/*-------- Mega Menu and Nav Menu --------*/ 143// CubeWP Menus JS >> 144jQuery(document).ready(function ($) { 145 jQuery(document).on( 146 "click", 147 ".elementor-cubewp-menu-toggle__icon--open", 148 function () { 149 jQuery(this).next("svg").addClass("active"); 150 jQuery(this).removeClass("active"); 151 jQuery(this) 152 .closest(".elementor-cubewp-menu-toggle") 153 .next(".elementor-cubewp-nav-menu--dropdown") 154 .addClass("active"); 155 } 156 ); 157 jQuery(document).on( 158 "click", 159 ".elementor-cubewp-menu-toggle__icon--close", 160 function () { 161 jQuery(this).prev("svg").addClass("active"); 162 jQuery(this).removeClass("active"); 163 jQuery(this) 164 .closest(".elementor-cubewp-menu-toggle") 165 .next(".elementor-cubewp-nav-menu--dropdown") 166 .removeClass("active"); 167 } 168 ); 169 jQuery(document).on("click", ".cubwp-menu-desktop.mobile", function () { 170 jQuery(this) 171 .closest(".elementor-widget-container") 172 .find(".cubewp-offcanvas-menus") 173 .addClass("active"); 174 }); 175 jQuery(document).on("click", ".cubewp-menu-closed", function () { 176 jQuery(this) 177 .closest(".elementor-widget-container") 178 .find(".cubewp-offcanvas-menus") 179 .removeClass("active"); 180 }); 181 182 $(document).on("click", ".cubewp-mega-menu-item.hover", function (event) { 183 if ($(window).width() <= 1024) { 184 if (!$(event.target).closest(".cubewp-mega-menu-item-dropdown").length) { 185 $(this).toggleClass("active"); 186 $(this).closest('.cubewp-mega-menu').toggleClass("active"); 187 } 188 } 189 }); 190 $(document).on("click", ".close-mega-menu-mobile", function (event) { 191 if ($(window).width() <= 1024) { 192 $('.cubewp-mega-menu-item , .cubewp-mega-menu').removeClass("active"); 193 } 194 }); 195 jQuery(document).ready(function ($) { 196 // Open the next slide when clicking the trigger 197 $(document).on("click", ".container-next-triger", function () { 198 $(this) 199 .closest(".elementor-element") 200 .next(".container-next-screen") 201 .addClass("active"); 202 }); 203 // Close the slide when clicking the back button 204 $(document).on("click", ".container-back-slide", function (e) { 205 if ($(window).width() <= 1024) { 206 e.preventDefault(); 207 setTimeout(() => { 208 if ($(this).closest(".container-next-screen").length > 0) { 209 $(this).closest(".container-next-screen").removeClass("active"); 210 } else { 211 $(this).closest(".cubewp-mega-menu").removeClass("active"); 212 $(this).closest(".cubewp-mega-menu-item").removeClass("active"); 213 } 214 }, 200); 215 } 216 }); 217 }); 218 219 // CubeWP Mega menus JS >> 220 jQuery(document).on( 221 "click", 222 ".cubewp-mega-menu .cubewp-mega-menu-item.click", 223 function () { 224 var getID = jQuery(this).data("showid"); 225 jQuery(this) 226 .closest(".cubewp-mega-menu") 227 .find(".cubewp-mega-menu-item-dropdown") 228 .removeClass("active"); 229 jQuery(this) 230 .closest(".cubewp-mega-menu") 231 .find(".cubewp-mega-menu-item-dropdown") 232 .removeClass("init"); 233 jQuery(this) 234 .closest(".cubewp-mega-menu") 235 .find(".cubewp-mega-menu-item.click") 236 .removeClass("active"); 237 jQuery("#" + getID).addClass("active"); 238 jQuery(document.body).trigger("cubewp_mega_menu_item_loaded"); 239 jQuery(this).addClass("active"); 240 setTimeout(function () { 241 jQuery("#" + getID).addClass("init"); 242 }, 500); 243 } 244 ); 245 246 jQuery(document).on( 247 "click", 248 ".cubewp-mega-menu-mobile-button", 249 function () { 250 jQuery(this).next(".cubewp-mega-menu.cubwp-menu-desktop").slideToggle(); 251 jQuery(this).toggleClass("active"); 252 } 253 ); 254 255 function adjustMegaMenuDropdown($this) { 256 var dropdown = $this.find(".cubewp-mega-menu-item-dropdown"); 257 if (dropdown.length) { 258 var bodyWidth = jQuery("body").width(); // Get the full width of the body 259 var dropdownOffsetLeft = dropdown.offset().left; // Current left position of the dropdown 260 var bodyOffsetLeft = jQuery("body").offset().left; // Body's left position (should be 0) 261 var difference = dropdownOffsetLeft - bodyOffsetLeft; 262 263 // Adjust the dropdown's width and position to span the entire body width 264 dropdown.css({ 265 "left": "-" + difference + "px", 266 "right": "auto", 267 "width": bodyWidth + "px" 268 }); 269 } 270 } 271 272 jQuery(document).on("mouseenter", ".cubewp-mega-menu-item", function () { 273 var $this = jQuery(this); 274 adjustMegaMenuDropdown($this); 275 }); 276 277 jQuery(document).on("mouseleave", ".cubewp-mega-menu-item", function () { 278 jQuery(this).find(".cubewp-mega-menu-item-dropdown").css({ 279 "left": "unset", 280 }); 281 }); 282 283 setTimeout(function () { 284 if (jQuery(".elementor-cubewp-nav-menu__container").length > 0) { 285 var get_iconsInd = jQuery(".elementor-cubewp-nav-menu__container").data( 286 "icons" 287 ); 288 if (typeof get_iconsInd === "string") { 289 get_iconsInd = get_iconsInd.trim().replace(/1$/, ""); 290 } 291 jQuery(".elementor-cubewp-nav-menu__container") 292 .find(".menu-item-has-children>a") 293 .append(get_iconsInd); 294 } 295 }, 200); 296}); 297 298function cubewpSlickIsRTL() { 299 return typeof jQuery !== 'undefined' && jQuery('body').hasClass('rtl'); 300} 301 302/*------- CubeWP Post Slider ---------*/ 303function initPostSlider($scope, clicked) { 304 var sliders = $scope.find('.cubewp-post-slider'); 305 if (!sliders.length) return; 306 sliders.each(function () { 307 var sliderElement = jQuery(this); 308 309 if (sliderElement.hasClass('slick-initialized')) { 310 if (clicked == 'clicked') { 311 sliderElement.slick("unslick"); 312 console.log('have slider'); 313 sliderElement.addClass('sliderElement'); 314 } else { 315 return; 316 317 } 318 319 } 320 321 var isPrevSvg = sliderElement.data('is-prev-svg'); 322 var isNextSvg = sliderElement.data('is-next-svg'); 323 324 var prevArrowHtml = isPrevSvg ? sliderElement.attr('data-prev-arrow-svg') : sliderElement.data('prev-arrow'); 325 326 var nextArrowHtml = isNextSvg ? sliderElement.attr('data-next-arrow-svg') : sliderElement.data('next-arrow'); 327 328 var enable_wrapper = sliderElement.data('enable-wrapper'); 329 var slidesToShow = sliderElement.data('slides-to-show'); 330 var slidesToScroll = sliderElement.data('slides-to-scroll'); 331 var slidesToShowTablet = sliderElement.data('slides-to-show-tablet'); 332 var slidesToShowTabletPortrait = sliderElement.data('slides-show-tablet-portrait'); 333 var slidesToShowMobile = sliderElement.data('slides-to-show-mobile'); 334 var slidesToScrollTablet = sliderElement.data('slides-to-scroll-tablet'); 335 var slidesToScrollTabletPortrait = sliderElement.data('slides-scroll-tablet-portrait'); 336 var slidesToScrollMobile = sliderElement.data('slides-to-scroll-mobile'); 337 var autoplay = sliderElement.data('autoplay') === true || sliderElement.data('autoplay') === 'true'; 338 var autoplaySpeed = sliderElement.data('autoplay-speed'); 339 var Speed = sliderElement.data('speed'); 340 var infinite = sliderElement.data('infinite') === true || sliderElement.data('infinite') === 'true'; 341 var fade_effect = sliderElement.data('fade') === true || sliderElement.data('fade') === 'true'; 342 var variableWidth = sliderElement.data('variable-width') === true || sliderElement.data('variable-width') === 'true'; 343 var prevArrowButton, nextArrowButton; 344 345 if (isPrevSvg) { 346 prevArrowButton = '<button type="button" class="slick-prev">' + prevArrowHtml + '</button>'; 347 } else { 348 prevArrowButton = '<button type="button" class="slick-prev"><i class="' + prevArrowHtml + '"></i></button>'; 349 } 350 351 if (isNextSvg) { 352 nextArrowButton = '<button type="button" class="slick-next">' + nextArrowHtml + '</button>'; 353 } else { 354 nextArrowButton = '<button type="button" class="slick-next"><i class="' + nextArrowHtml + '"></i></button>'; 355 } 356 var CustomArrows = sliderElement.data('custom-arrows') === true || sliderElement.data('custom-arrows') === 'true'; 357 var CustomDots = sliderElement.data('custom-dots') === true || sliderElement.data('custom-dots') === 'true'; 358 var enableProgressBar = sliderElement.data('enable-progress-bar') === true || sliderElement.data('enable-progress-bar') === 'true'; 359 360 function postSliderIsVertical(value) { 361 return value === true || value === 'true'; 362 } 363 364 var vertical = postSliderIsVertical(sliderElement.data('vertical')); 365 var verticalTabletRaw = sliderElement.data('vertical-tablet'); 366 var verticalTablet = (verticalTabletRaw === undefined || verticalTabletRaw === '') ? vertical : postSliderIsVertical(verticalTabletRaw); 367 var verticalMobileRaw = sliderElement.data('vertical-mobile'); 368 var verticalMobile = (verticalMobileRaw === undefined || verticalMobileRaw === '') ? verticalTablet : postSliderIsVertical(verticalMobileRaw); 369 370 function postSliderApplyVertical(settings, isVertical) { 371 if (!settings) { 372 return settings; 373 } 374 settings.vertical = isVertical; 375 settings.verticalSwiping = isVertical; 376 settings.fade = isVertical ? false : fade_effect; 377 return settings; 378 } 379 380 var postSlickOptions = { 381 slidesToShow: slidesToShow, 382 slidesToScroll: slidesToScroll, 383 autoplay: autoplay,
384 autoplaySpeed: autoplaySpeed, 385 speed: Speed, 386 infinite: infinite, 387 fade: vertical ? false : fade_effect, 388 variableWidth: variableWidth, 389 prevArrow: prevArrowButton, 390 nextArrow: nextArrowButton, 391 rtl: cubewpSlickIsRTL(), 392 arrows: CustomArrows, 393 dots: CustomDots, 394 vertical: vertical, 395 verticalSwiping: vertical, 396 responsive: [{ 397 breakpoint: 1025, 398 settings: postSliderApplyVertical({ 399 slidesToShow: slidesToShowTablet, 400 slidesToScroll: slidesToScrollTablet 401 }, verticalTablet) 402 }, 403 { 404 breakpoint: 768, 405 settings: postSliderApplyVertical({ 406 slidesToShow: slidesToShowTabletPortrait, 407 slidesToScroll: slidesToScrollTabletPortrait 408 }, verticalTablet) 409 }, 410 { 411 breakpoint: 481, 412 settings: postSliderApplyVertical({ 413 slidesToShow: slidesToShowMobile, 414 slidesToScroll: slidesToScrollMobile 415 }, verticalMobile) 416 } 417 ] 418 }; 419 420 postSliderApplyVertical(postSlickOptions, vertical); 421 sliderElement.slick(postSlickOptions); 422 423 if (enableProgressBar == true) { 424 if (!sliderElement.next('.slick-progress').length) { 425 sliderElement.after( 426 '<div class="slick-progress"><div class="slick-progress-bar"></div></div>' 427 ); 428 var totalSlides = sliderElement.slick("getSlick").slideCount; 429 sliderElement.on("afterChange", function (event, slick, currentSlide) { 430 var progress = ((currentSlide + 1) / totalSlides) * 100; 431 sliderElement.next('.slick-progress').find('.slick-progress-bar').css("width", progress + "%"); 432 }); 433 } 434 } 435 if (enable_wrapper == true) { 436 sliderElement.append('<div class="slick-arrows-wrapper"></div>'); 437 sliderElement.find(".slick-prev").appendTo(sliderElement.find(".slick-arrows-wrapper")); 438 sliderElement.find(".slick-dots").appendTo(sliderElement.find(".slick-arrows-wrapper")); 439 sliderElement.find(".slick-next").appendTo(sliderElement.find(".slick-arrows-wrapper")); 440 } 441 }); 442 if (clicked == 'clicked') { 443 jQuery(document).trigger("post_slider_initialized", [$scope]); 444 } 445} 446(function ($) { 447 // Expose initPostSlider to a global object if needed outside Elementor's scope 448 if (typeof window.CubeWp === 'undefined') { 449 window.CubeWp = {}; 450 } 451 window.CubeWp.initPostSlider = initPostSlider; 452 453 // Hook for Elementor frontend and editor 454 jQuery(window).on('elementor/frontend/init', function () { 455 elementorFrontend.hooks.addAction('frontend/element_ready/cubewp_posts.default', initPostSlider); 456 }); 457})(jQuery); 458 459var CubeWpShortcodePostsAjax = { 460 loadPosts: function (containerSelector) { 461 var $container = jQuery(containerSelector); 462 var parameters = $container.data('parameters'); 463 if (parameters) { 464 jQuery.ajax({ 465 url: cwp_alert_ui_params.ajax_url, 466 type: 'POST', 467 data: { 468 action: 'cubewp_posts_output', 469 ...parameters, 470 load_via_ajax: 'yes' 471 }, 472 success: function (response) { 473 if (response.success) { 474 $container.replaceWith(response.data.content); 475 initPostSlider(jQuery(document.body)); 476 jQuery(document.body).trigger('cubewp_posts_loaded'); 477 } else { 478 $container.html('<div class="cubewp-error-card">Error loading posts.</div>'); 479 } 480 }, 481 error: function () { 482 $container.html('<div class="cubewp-error-card">Failed to load posts.</div>'); 483 } 484 }); 485 } 486 } 487}; 488jQuery(document).on("click", ".vpack-nested-tabs .e-n-tab-title", function () { 489 var $dataid = jQuery(this).attr('aria-controls'); 490 var $sliderContainer = jQuery(this).closest('.elementor-element').find('#' + $dataid); 491 var clicked = 'clicked'; 492 if (jQuery(this).hasClass('init-clicked')) { 493 return false;
494 } 495 initPostSlider($sliderContainer, clicked); 496 jQuery(this).addClass('init-clicked'); 497}); 498 499/* CubeWP Term / User Slider */ 500function initTermSlider($scope, clicked) { 501 var sliders = $scope.find('.cubewp-term-slider, .cubewp-user-slider'); 502 if (!sliders.length) return; 503 sliders.each(function () { 504 var sliderElement = jQuery(this); 505 506 if (sliderElement.hasClass('slick-initialized')) { 507 if (clicked == 'clicked') { 508 sliderElement.slick("unslick"); 509 console.log('have slider'); 510 sliderElement.addClass('sliderElement'); 511 } else { 512 return; 513 514 } 515 516 } 517 518 var sliderDeviceOption = sliderElement.data('slider-device-option'); 519 520 var isPrevSvg = sliderElement.data('is-prev-svg'); 521 var isNextSvg = sliderElement.data('is-next-svg'); 522 523 var prevArrowHtml = isPrevSvg ? sliderElement.attr('data-prev-arrow-svg') : sliderElement.data('prev-arrow'); 524 525 var nextArrowHtml = isNextSvg ? sliderElement.attr('data-next-arrow-svg') : sliderElement.data('next-arrow'); 526 527 var enable_wrapper = sliderElement.data('enable-wrapper'); 528 var slidesToShow = sliderElement.data('slides-to-show'); 529 var slidesToScroll = sliderElement.data('slides-to-scroll'); 530 var slidesToShowTablet = sliderElement.data('slides-to-show-tablet'); 531 var slidesToShowTabletPortrait = sliderElement.data('slides-show-tablet-portrait'); 532 var slidesToShowMobile = sliderElement.data('slides-to-show-mobile'); 533 var slidesToScrollTablet = sliderElement.data('slides-to-scroll-tablet'); 534 var slidesToScrollTabletPortrait = sliderElement.data('slides-scroll-tablet-portrait'); 535 var slidesToScrollMobile = sliderElement.data('slides-to-scroll-mobile'); 536 var autoplay = sliderElement.data('autoplay') === true || sliderElement.data('autoplay') === 'true'; 537 var autoplaySpeed = sliderElement.data('autoplay-speed'); 538 var Speed = sliderElement.data('speed'); 539 var infinite = sliderElement.data('infinite') === true || sliderElement.data('infinite') === 'true'; 540 var fade_effect = sliderElement.data('fade') === true || sliderElement.data('fade') === 'true'; 541 var variableWidth = sliderElement.data('variable-width') === true || sliderElement.data('variable-width') === 'true'; 542 var draggable = sliderElement.data('draggable') === true || sliderElement.data('draggable') === 'true'; 543 var prevArrowButton, nextArrowButton; 544 545 if (isPrevSvg) { 546 prevArrowButton = '<button type="button" class="slick-prev">' + prevArrowHtml + '</button>'; 547 } else { 548 prevArrowButton = '<button type="button" class="slick-prev"><i class="' + prevArrowHtml + '"></i></button>'; 549 } 550 551 if (isNextSvg) { 552 nextArrowButton = '<button type="button" class="slick-next">' + nextArrowHtml + '</button>'; 553 } else { 554 nextArrowButton = '<button type="button" class="slick-next"><i class="' + nextArrowHtml + '"></i></button>'; 555 } 556 var CustomArrows = sliderElement.data('custom-arrows') === true || sliderElement.data('custom-arrows') === 'true'; 557 var CustomDots = sliderElement.data('custom-dots') === true || sliderElement.data('custom-dots') === 'true'; 558 var enableProgressBar = sliderElement.data('enable-progress-bar') === true || sliderElement.data('enable-progress-bar') === 'true'; 559 560 function termSliderIsVertical(value) { 561 return value === true || value === 'true'; 562 } 563 564 var vertical = termSliderIsVertical(sliderElement.data('vertical')); 565 var verticalTabletRaw = sliderElement.data('vertical-tablet'); 566 var verticalTablet = (verticalTabletRaw === undefined || verticalTabletRaw === '') ? vertical : termSliderIsVertical(verticalTabletRaw); 567 var verticalMobileRaw = sliderElement.data('vertical-mobile'); 568 var verticalMobile = (verticalMobileRaw === undefined || verticalMobileRaw === '') ? verticalTablet : termSliderIsVertical(verticalMobileRaw); 569 570 function termSliderApplyVertical(settings, isVertical) { 571 if (!settings) { 572 return settings; 573 } 574 settings.vertical = isVertical; 575 settings.verticalSwiping = isVertical; 576 settings.fade = isVertical ? false : fade_effect; 577 return settings; 578 } 579 580 // Use real viewport width (jQuery width can be misleading on some mobiles) 581 var viewportWidth = (typeof window !== 'undefined' && window.innerWidth) ? window.innerWidth : $(window).width(); 582 var isMobileViewport = (typeof window !== 'undefined' && window.matchMedia) ? window.matchMedia('(max-width: 767px)').matches : (viewportWidth <= 767); 583 584 // If slider is configured as mobile-only, do not initialize it on larger viewports 585 if (sliderDeviceOption === "mobile_only" && !isMobileViewport) { 586 return; 587 } 588 589 var termSlickOptions = { 590 rtl: cubewpSlickIsRTL(), 591 autoplay: autoplay,
592 autoplaySpeed: autoplaySpeed, 593 speed: Speed, 594 infinite: infinite, 595 fade: vertical ? false : fade_effect, 596 variableWidth: variableWidth, 597 prevArrow: prevArrowButton, 598 nextArrow: nextArrowButton, 599 arrows: CustomArrows, 600 dots: CustomDots, 601 draggable: draggable, 602 vertical: vertical, 603 verticalSwiping: vertical, 604 }; 605 606 if (sliderDeviceOption === "mobile_only" && isMobileViewport) { 607 termSlickOptions.slidesToShow = slidesToShowMobile; 608 termSlickOptions.slidesToScroll = slidesToScrollMobile; 609 termSliderApplyVertical(termSlickOptions, verticalMobile); 610 sliderElement.slick(termSlickOptions); 611 }else{ 612 termSlickOptions.slidesToShow = slidesToShow; 613 termSlickOptions.slidesToScroll = slidesToScroll; 614 termSliderApplyVertical(termSlickOptions, vertical); 615 termSlickOptions.responsive = [{ 616 breakpoint: 1025, 617 settings: termSliderApplyVertical({ 618 slidesToShow: slidesToShowTablet, 619 slidesToScroll: slidesToScrollTablet, 620 }, verticalTablet) 621 }, 622 { 623 breakpoint: 768, 624 settings: termSliderApplyVertical({ 625 slidesToShow: slidesToShowTabletPortrait, 626 slidesToScroll: slidesToScrollTabletPortrait, 627 }, verticalTablet) 628 }, 629 { 630 breakpoint: 481, 631 settings: termSliderApplyVertical({ 632 slidesToShow: slidesToShowMobile, 633 slidesToScroll: slidesToScrollMobile, 634 }, verticalMobile) 635 } 636 ]; 637 sliderElement.slick(termSlickOptions); 638 } 639 640 641 if (enableProgressBar == true) { 642 if (!sliderElement.next('.slick-progress').length) { 643 sliderElement.after( 644 '<div class="slick-progress"><div class="slick-progress-bar"></div></div>' 645 ); 646 var totalSlides = sliderElement.slick("getSlick").slideCount; 647 sliderElement.on("afterChange", function (event, slick, currentSlide) { 648 var progress = ((currentSlide + 1) / totalSlides) * 100; 649 sliderElement.next('.slick-progress').find('.slick-progress-bar').css("width", progress + "%"); 650 }); 651 } 652 } 653 if (enable_wrapper == true) { 654 sliderElement.append('<div class="slick-arrows-wrapper"></div>'); 655 sliderElement.find(".slick-prev").appendTo(sliderElement.find(".slick-arrows-wrapper")); 656 sliderElement.find(".slick-dots").appendTo(sliderElement.find(".slick-arrows-wrapper")); 657 sliderElement.find(".slick-next").appendTo(sliderElement.find(".slick-arrows-wrapper")); 658 } 659 }); 660 if (clicked == 'clicked') { 661 jQuery(document).trigger("term_slider_initialized", [$scope]); 662 } 663} 664(function ($) { 665 // Expose initTermSlider to a global object if needed outside Elementor's scope 666 if (typeof window.CubeWp === 'undefined') { 667 window.CubeWp = {}; 668 } 669 window.CubeWp.initTermSlider = initTermSlider; 670 671 // Hook for Elementor frontend and editor 672 jQuery(window).on('elementor/frontend/init', function () { 673 elementorFrontend.hooks.addAction('frontend/element_ready/cubewp_taxonomy.default', initTermSlider); 674 elementorFrontend.hooks.addAction('frontend/element_ready/cubewp_users.default', initTermSlider); 675 }); 676 677 // Initialize on document ready for frontend (non-Elementor contexts) 678 jQuery(document).ready(function () { 679 initTermSlider(jQuery(document.body)); 680 }); 681 682 /* CubeWP Post Cards Hover Effects */ 683 window.addEventListener('elementor/frontend/init', () => { 684 685 class CubewpHoverHandler extends elementorModules.frontend.handlers.Base { 686 687 onInit() { 688 this.applyHoverStyles(); 689 } 690
691 onElementChange(settingName) { 692 const hoverSettings = [ 693 'cwp_hover_animation_direction', 694 'cwp_hover_translate_distance', 695 'cwp_hover_transition_duration' 696 ]; 697 if (hoverSettings.includes(settingName)) { 698 this.applyHoverStyles(); 699 } 700 } 701 702 applyHoverStyles() { 703 const settings = this.getElementSettings(); 704 const direction = settings.cwp_hover_animation_direction || 'none'; 705 const visiblity = settings.cwp_hover_visibility || 'default'; 706 707 const $el = this.$element; 708 const elementId = this.getID(); 709 const $card = $el.closest('.cwp-elementor-post-card, .cwp-elementor-term-card'); 710 711 if (!$card.length) return; 712 713 // Remove previous bindings for this specific element only 714 $card.off(`.cubewpHover_${elementId}`); 715 716 if (direction === 'none') { 717 $el.css({ 718 'transform': '', 719 'opacity': '', 720 'transition': '' 721 }); 722 if (visiblity === 'show') { 723 $card.on(`mouseenter.cubewpHover_${elementId}`, () => { 724 $el.css({ 725 'display': 'flex', 726 }); 727 }); 728 // Hover Out 729 $card.on(`mouseleave.cubewpHover_${elementId}`, () => { 730 $el.css({ 731 'display': 'none', 732 }); 733 }); 734 } else if (visiblity === 'hide') { 735 $card.on(`mouseenter.cubewpHover_${elementId}`, () => { 736 $el.css({ 737 'display': 'none', 738 }); 739 }); 740 // Hover Out 741 $card.on(`mouseleave.cubewpHover_${elementId}`, () => { 742 $el.css({ 743 'display': 'flex', 744 }); 745 }); 746 } 747 return; 748 } 749 750 const distance = settings.cwp_hover_translate_distance?.size || 30; 751 const duration = settings.cwp_hover_transition_duration?.size || 0.3; 752 753 let transform = ''; 754 let opacity = '1'; 755 756 switch (direction) { 757 case 'top': 758 transform = `translateY(-${distance}px)`; 759 break; 760 case 'bottom': 761 transform = `translateY(${distance}px)`; 762 break; 763 case 'left': 764 transform = `translateX(-${distance}px)`; 765 break; 766 case 'right': 767 transform = `translateX(${distance}px)`; 768 break; 769 case 'fade': 770 opacity = '0'; 771 break; 772 case 'fadeout': 773 opacity = '1'; 774 break; 775 } 776 777 // Apply base styles 778 $el.css({ 779 'transition': `all ${duration}s ease`, 780 'transform': transform, 781 'opacity': opacity 782 }); 783 784 // Hover In (applies only for this element) 785 $card.on(`mouseenter.cubewpHover_${elementId}`, () => { 786 if (direction === 'fadeout') { 787 // Fade OUT on hover 788 $el.css({ 789 'opacity': '0', 790 'transform': 'none', 791 }); 792 } else { 793 // All other animations fade/slide IN 794 $el.css({ 795 'transform': 'none', 796 'opacity': '1' 797 }); 798 } 799 }); 800 801 // Hover Out 802 $card.on(`mouseleave.cubewpHover_${elementId}`, () => { 803 if (direction === 'fadeout') { 804 // Restore visibility when mouse leaves 805 $el.css({ 806 'opacity': '1', 807 'transform': transform, 808 }); 809 } else { 810 // Return to default (hidden or translated) 811 $el.css({ 812 'transform': transform, 813 'opacity': opacity 814 }); 815 } 816 }); 817 } 818 } 819 820 // Apply to container, button, and icon widgets 821 ['container', 'button.default', 'icon.default'].forEach(widget => { 822 elementorFrontend.hooks.addAction(`frontend/element_ready/${widget}`, ($scope) => { 823 elementorFrontend.elementsHandler.addHandler(CubewpHoverHandler, { 824 $element: $scope 825 }); 826 }); 827 }); 828 }); 829 830 window.addEventListener('elementor/frontend/init', () => { 831 elementorFrontend.hooks.addAction('frontend/element_ready/container', function ($scope) { 832 if (elementorFrontend.isEditMode()) { 833 class ContainerHandler extends elementorModules.frontend.handlers.Base { 834 onInit() { 835 super.onInit(); 836 const settings = this.getElementSettings(); 837 const cwp_click_enable = settings.cwp_click_enable;
838 const cwp_click_apply = settings.cwp_click_apply; 839 if (cwp_click_enable == 'yes' && cwp_click_apply == 'custom') { 840 $scope.css('display', 'none'); 841 }else{ 842 $scope.css('display', ''); 843 } 844 } 845 846 onElementChange(settingName) { 847 super.onElementChange?.apply(this, arguments); 848 const sliderSettings = [ 849 'cwp_click_enable' , 'cwp_click_apply' 850 ]; 851 852 if (sliderSettings.includes(settingName)) { 853 this.onInit(); 854 } 855 } 856 } 857 elementorFrontend.elementsHandler.addHandler(ContainerHandler, { 858 $element: $scope 859 }); 860 } 861 }); 862 }); 863 864 jQuery(document).ready(function ($) { 865 function cwpRefreshMapsInCard($card) { 866 if (typeof VP_Refresh_Or_Init_Single_Map !== 'function') { 867 return; 868 } 869 setTimeout(function () { 870 $card.find('.vp-cubewp-map-container').each(function () { 871 VP_Refresh_Or_Init_Single_Map($(this)); 872 }); 873 }, 100); 874 } 875 876 jQuery(document).on('click', '.cwp-elementor-post-card, .cwp-elementor-term-card', function (event) { 877 var $card = $(this); 878 $card.find('.cwp-click-element[data-cwp-click-enabled="true"]').each(function () { 879 const clickable = $(this); 880 const targetMode = clickable.data('cwp-target-mode'); 881 const applyCss = clickable.data('cwp-apply-css'); 882 if (targetMode === 'parent' && applyCss) { 883 clickable.attr('style', function (i, oldStyle) { 884 return (oldStyle ? oldStyle + '; ' : '') + applyCss; 885 }); 886 } 887 }); 888 cwpRefreshMapsInCard($card); 889 }); 890 891 jQuery(document).on('click', '.cwp-click-element[data-cwp-click-enabled="true"]', function (event) { 892 const clickable = $(this); 893 const targetMode = clickable.data('cwp-target-mode'); 894 const applyCss = clickable.data('cwp-apply-css'); 895 if (targetMode === 'current' && applyCss) { 896 clickable.attr('style', function (i, oldStyle) { 897 return (oldStyle ? oldStyle + '; ' : '') + applyCss; 898 }); 899 } 900 cwpRefreshMapsInCard(clickable.closest('.cwp-elementor-post-card, .cwp-elementor-term-card')); 901 }); 902 903 jQuery(document).on('click', '.cwp-click-element[data-cwp-click-enabled="true"]', function (event) { 904 const clickable = $(this); 905 const targetMode = clickable.data('cwp-target-class'); 906 907 908 var $this_data = $('.cwp-click-element[data-cwp-apply-class="' + targetMode + '"]'); 909 var $this_data_remove = $('.cwp-click-element[data-cwp-remove-class="' + targetMode + '"]'); 910 if ($this_data.length > 0) { 911 const targetModes = $this_data.data('cwp-target-mode'); 912 const dataID = $this_data.data('id'); 913 const applyClass = $this_data.data('cwp-apply-class'); 914 const applyCss = $this_data.data('cwp-apply-css'); 915 if (targetModes === 'custom' && applyClass) { 916 const card = $(this).closest('.cwp-elementor-post-card, .cwp-elementor-term-card'); 917 const element = card.find('.cwp-click-element[data-id="' + dataID + '"]'); 918 element.removeAttr('style'); 919 element.attr('style', applyCss); 920 element.find('.vp-cubewp-map-container').addBack('.vp-cubewp-map-container').each(function () { 921 if (typeof VP_Refresh_Or_Init_Single_Map === 'function') { 922 VP_Refresh_Or_Init_Single_Map($(this)); 923 } else if (typeof VP_Init_Single_Map === 'function') { 924 VP_Init_Single_Map($(this)); 925 } 926 }); 927 } 928 } 929 if ($this_data_remove.length > 0) { 930 const targetModes = $this_data_remove.data('cwp-target-mode'); 931 const dataID = $this_data_remove.data('id'); 932 const removeClass = $this_data_remove.data('cwp-remove-class'); 933 const removeCss = $this_data_remove.data('cwp-remove-css'); 934 if (targetModes === 'custom' && removeClass && $this_data_remove.length > 0) { 935 const card = $(this).closest('.cwp-elementor-post-card, .cwp-elementor-term-card'); 936 const element = card.find('.cwp-click-element[data-id="' + dataID + '"]'); 937 element.removeAttr('style'); 938 element.attr('style', removeCss); 939 element.find('.vp-cubewp-map-container').addBack('.vp-cubewp-map-container').each(function () { 940 if (typeof VP_Refresh_Or_Init_Single_Map === 'function') { 941 VP_Refresh_Or_Init_Single_Map($(this)); 942 } else if (typeof VP_Init_Single_Map === 'function') { 943 VP_Init_Single_Map($(this)); 944 } 945 }); 946 } 947 } 948 }) 949 }); 950 951 //Grid/List Switcher 952 jQuery(document).on('click', '.cubewp-view-btn', function (e) { 953 e.preventDefault(); 954 955 var $btn = jQuery(this); 956 var view = $btn.data('view'); 957 var $wrapper = $btn.closest('.cubewp-view-switcher'); 958 959 // Active button 960 $wrapper.find('.cubewp-view-btn').removeClass('active'); 961 $btn.addClass('active'); 962 963 // Apply view class to archive container 964 var $archive = jQuery('.cwp-search-result-output .cwp-grids-container'); 965 $archive.removeClass('grid-view list-view').addClass(view + '-view '); 966 if (view === 'list') { 967 cwp_setCookie("cwp_archive_switcher", 'list-view', 30); 968 } else if (view === 'grid') { 969 cwp_setCookie("cwp_archive_switcher", 'grid-view', 30); 970 } 971 }); 972 973 function getCookie(name) { 974 var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)')); 975 return match ? decodeURIComponent(match[2]) : null; 976 } 977 978 jQuery(document).ready(function () { 979 if (typeof cwp_search_filters_ajax_content === 'function') { 980 var $archive = jQuery('.cwp-search-result-output .cwp-grids-container'); 981 var savedView = getCookie('cwp_archive_switcher'); // list-view / grid-view 982 if (!savedView) { 983 savedView = 'grid-view'; 984 } 985 var view = (savedView === 'list-view') ? 'list' : 'grid'; 986 $archive.removeClass('grid-view list-view').addClass(view + '-view'); 987 988 jQuery('.cubewp-view-btn').removeClass('active'); 989 jQuery('.cubewp-view-btn[data-view="' + view + '"]').addClass('active'); 990 } 991 }); 992 993 if (jQuery('.cwp-search-result-output .cwp-grids-container').length > 0) { 994 if (typeof cwp_search_filters_ajax_content === 'function') { 995 var $btn = jQuery('.cubewp-view-switcher'); 996 if(!$btn.length > 0){ 997 jQuery('.cwp-search-result-output .cwp-grids-container').removeClass('grid-view list-view').addClass('grid-view'); 998 } 999 }else{ 1000 var $btn = jQuery('.cubewp-view-switcher'); 1001 if(!$btn.length > 0){ 1002 jQuery('.cwp-search-result-output .cwp-grids-container').removeClass('grid-view list-view').addClass('grid-view'); 1003 } 1004 } 1005 } 1006})(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.