1"use strict"; 2 3function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } 4 5window.Happy = window.Happy || {}; 6 7(function ($, Happy, w) { 8 var $window = $(w); 9 $(function () { 10 var $container = $('.ha-fsb-container'); 11 12 if ($container.length > 0) { 13 if (window.history && window.history.pushState) { 14 ha_manage_fsb(); 15 } 16 17 ; 18 $(document.body).on("added_to_cart", function (event, fragments, cart_hash, $button) { 19 ha_manage_fsb(); 20 }); 21 $(document.body).on("removed_from_cart", function (event, fragments, cart_hash, $button) { 22 ha_manage_fsb(); 23 }); 24 } 25 26 function ha_manage_fsb() { 27 $.ajax({ 28 url: HappyProLocalize.ajax_url, 29 type: "POST", 30 data: { 31 action: "ha_get_cart_subtotal_action", 32 security: HappyProLocalize.nonce 33 }, 34 success: function success(response) { 35 var $data = JSON.parse(response); 36 var $subTotalAmount = $data.subTotalAmount; 37 38 if ($data.status == 'true' && $subTotalAmount >= 0) { 39 var $container = $('.ha-fsb-container'); 40 var $elem = $container.find('.ha-fsb-size'); 41 var $settings = $container.data('fsb_settings'); 42 43 if ($settings != undefined) { 44 var $aimationSpeed = $settings.hasOwnProperty('ha_fsb_animation_speed') ? $settings.ha_fsb_animation_speed : 15; 45 var $progressType = $settings.hasOwnProperty('progress_type') ? $settings.progress_type : 'percent'; 46 var $currencySymbol = $settings.hasOwnProperty('currencySymbol') && $progressType == 'percent' ? '%' : $settings.currencySymbol; 47 var $targetAmount = $settings.hasOwnProperty('target_amount') ? $settings.target_amount : 0; 48 var $totalPercent = 0; 49 50 if (parseFloat($subTotalAmount) >= parseFloat($targetAmount)) { 51 $totalPercent = 100; 52 } else { 53 if (parseFloat($targetAmount) == 0) { 54 $totalPercent = 0; 55 } else { 56 $totalPercent = parseFloat($subTotalAmount) * 100 / parseFloat($targetAmount); 57 } 58 } 59 60 $totalPercent = parseFloat(Math.round($totalPercent)) >= 100 ? 100 : parseFloat(Math.round($totalPercent)); 61 var $progressText = $progressType == 'percent' ? $totalPercent : $subTotalAmount; 62 var defaultWidth = $(window).width() <= 768 ? 12 : 5; 63 64 if ($totalPercent > 0) { 65 $elem.text($progressText + $currencySymbol); 66 $elem.css({ 67 'width': $totalPercent + "%", 68 'transition': 'width ' + $aimationSpeed + 'ms ease-in-out' 69 }); 70 } 71 72 fsbMessageControl($totalPercent); 73 74 if ($progressText <= 0) { 75 $elem.css('width', +defaultWidth + "%"); 76 $elem.text('0' + $currencySymbol); 77 } 78 } 79 } 80 }, 81 error: function error(_error) {} 82 }); 83 } 84 85 ; 86 87 function fsbMessageControl() { 88 var totalPercent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; 89 var fsbContainer = $('.ha-fsb-container'); 90 var settings = fsbContainer.data('fsb_settings'); 91 92 if (fsbContainer && settings) { 93 if (totalPercent >= 100) { 94 $('.ha-fsb-inner-content').html(settings.fsb_success_message); 95 } else { 96 $('.ha-fsb-inner-content').html(settings.announcement); 97 } 98 } 99 } 100 101 ; 102 103 function log(event, item, level) { 104 $(document).on(event, item, level); 105 } 106 107 var e; 108 e = $(".ha-menu-container"); 109 $(e).each(function () { 110 var button = $(this); 111 112 if ("yes" != button.attr("ha-dom-added")) { 113 if (0 === button.parents(".elementor-widget-ha-nav-menu").length) { 114 button.parents(".ha-wid-con").addClass("ha_menu_responsive_tablet"); 115 } 116 117 button.attr("ha-dom-added", "yes"); 118 } 119 }); 120 $(".ha-dropdown-has > a").on("click", function (event) { 121 if (!$(this).parents(".ha-navbar-nav, .ha-vertical-navbar-nav").hasClass("submenu-click-on-icon") || $(event.target).hasClass("ha-submenu-indicator-wrap")) { 122 event.preventDefault(); 123 var $oElemDragged = $(this).parent().find(">.ha-dropdown, >.ha-megamenu-panel"); 124 $oElemDragged.find(".ha-dropdown-open").removeClass("ha-dropdown-open"); 125 126 if ($oElemDragged.hasClass("ha-dropdown-open")) { 127 $oElemDragged.removeClass("ha-dropdown-open"); 128 } else { 129 $oElemDragged.addClass("ha-dropdown-open"); 130 } 131 } 132 }); // $(".ha-menu-toggler").on("click", function(event) { 133 // event.preventDefault(); 134 // var el_form_group = $(this).parents(".ha-menu-container").parent(); 135 // if (el_form_group.length < 1) { 136 // el_form_group = $(this).parent(); 137 // } 138 // var $wrapElement = el_form_group.find(".ha-menu-offcanvas-elements"); 139 // if ($wrapElement.hasClass("active")) { 140 // $wrapElement.removeClass("active"); 141 // } else { 142 // $wrapElement.addClass("active"); 143 // } 144 // }); 145 146 $(".ha-navbar-nav li a").on("click", function (event) { 147 if (!$(this).attr("href") && "ha-submenu-indicator-wrap" == event.target.className) { 148 var thirdItem = $(this); 149 var lnk = thirdItem.get(0); 150 var oldUrl = lnk.href; 151 var sepor = oldUrl.indexOf("#"); 152 var s = thirdItem.parents(".ha-menu-container").hasClass("ha-nav-menu-one-page-yes"); 153 154 if (-1 !== sepor && oldUrl.length > 1 && s && lnk.pathname == window.location.pathname) { 155 event.preventDefault(); 156 thirdItem.parents(".ha-wid-con").find(".ha-menu-close").trigger("click"); 157 } 158 } 159 }); 160 }); 161 162 function debounce(func, wait, immediate) { 163 var timeout; 164 return function () { 165 var context = this, 166 args = arguments; 167 168 var later = function later() { 169 timeout = null;
170 if (!immediate) func.apply(context, args); 171 }; 172 173 var callNow = immediate && !timeout; 174 clearTimeout(timeout); 175 timeout = setTimeout(later, wait); 176 if (callNow) func.apply(context, args); 177 }; 178 } 179 180 $window.on("elementor/frontend/init", function () { 181 if (typeof haDisplayCondition != "undefined" && haDisplayCondition.status == "true") { 182 // Set user time in cookie 183 var HappyLocalTimeZone = new Date().toString().match(/([A-Z]+[\+-][0-9]+.*)/)[1]; 184 var ha_secure = document.location.protocol === "https:" ? "secure" : ""; 185 document.cookie = "HappyLocalTimeZone=" + HappyLocalTimeZone + ";SameSite=Strict;" + ha_secure; 186 } else { 187 var now = new Date(); 188 now.setTime(now.getTime() - 1000 * 3600); 189 document.cookie = "HappyLocalTimeZone=;expires=" + now.toUTCString() + ";"; 190 } 191 192 var CountDown = function CountDown($scope) { 193 var $item = $scope.find(".ha-countdown"); 194 var $countdown_item = $item.find(".ha-countdown-item"); 195 var $end_action = $item.data("end-action"); 196 var $redirect_link = $item.data("redirect-link"); 197 var $end_action_div = $item.find(".ha-countdown-end-action"); 198 var $editor_mode_on = $scope.hasClass("elementor-element-edit-mode"); 199 $item.countdown({ 200 end: function end() { 201 if (("message" === $end_action || "img" === $end_action) && $end_action_div !== undefined) { 202 $countdown_item.css("display", "none"); 203 $end_action_div.css("display", "block"); 204 } else if ("url" === $end_action && $redirect_link !== undefined && $editor_mode_on !== true) { 205 window.location.replace($redirect_link); 206 } 207 } 208 }); 209 }; 210 211 var SliderBase = elementorModules.frontend.handlers.Base.extend({ 212 onInit: function onInit() { 213 elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); 214 this.run(); 215 }, 216 getDefaultSettings: function getDefaultSettings() { 217 return { 218 selectors: { 219 container: ".ha-slider-container" 220 } 221 }; 222 }, 223 getDefaultElements: function getDefaultElements() { 224 var selectors = this.getSettings("selectors"); 225 return { 226 $container: this.$element.find(selectors.container) 227 }; 228 }, 229 getReadySettings: function getReadySettings() { 230 var $this = this; 231 var slidesPerView = parseInt(this.getElementSettings("slides_per_view")) || 1; 232 233 if (this.getElementSettings("thumbs_navigation") == "yes") { 234 var selectorThumbs = this.elements.$container.find(".ha-slider-gallery-thumbs"); 235 var haGallaryThumbs = new HaSwiper(selectorThumbs[0], { 236 spaceBetween: this.getElementSettings("space_between_thumbs"), 237 freeMode: true, 238 watchSlidesVisibility: true, 239 watchSlidesProgress: true 240 }); 241 } // TODO: Need to fix that in future. Currently, Disabled 242 243 244 var tempEffect = this.getElementSettings("effect"); 245 246 if (tempEffect == 'cube') { 247 tempEffect = false; 248 } 249 250 var settings = { 251 direction: this.getElementSettings("slider_direction"), 252 slidesPerView: slidesPerView || 1, 253 spaceBetween: parseInt(this.getElementSettings("space_between_slides")) || 0, 254 loop: !!(this.getElementSettings("infinity_loop") || false), 255 speed: parseInt(this.getElementSettings("effect_speed")), 256 effect: this.getElementSettings("slider_type") == "multiple" ? this.getElementSettings("effect_multiple") : tempEffect, 257 ha_animation: this.getElementSettings("slider_content_animation"), 258 sliderType: this.getElementSettings("slider_type") 259 }; 260 261 if (this.getElementSettings("effect") == "flip") { 262 settings.flipEffect = { 263 limitRotation: true, 264 slideShadows: true 265 }; 266 } // TODO: Need to fix that in future. Currently, Disabled 267 // if (this.getElementSettings("effect") == "cube") { 268 // settings.cubeEffect = { 269 // shadow: true, 270 // slideShadows: true, 271 // shadowOffset: 20, 272 // shadowScale: 0.94, 273 // }; 274 // } 275 276 277 if (this.getElementSettings("effect_multiple") == "coverflow") { 278 settings.coverflowEffect = { 279 rotate: 50, 280 stretch: 0, 281 depth: 100, 282 modifier: 1, 283 slideShadows: true 284 }; 285 } 286 287 if (this.getElementSettings("slider_type") == "multiple") { 288 var bpObj = { 289 desktop: { 290 slidesPerView: slidesPerView || 1, 291 spaceBetween: parseInt(this.getElementSettings("space_between_slides")) || 0 292 } 293 }; 294 var breakpoints = elementorFrontend.config.responsive.breakpoints; 295 $.each(breakpoints, function (idx, val) { 296 if (val.is_enabled) { 297 bpObj[idx] = { 298 screenSize: val.value, 299 slidesPerView: parseInt($this.getElementSettings("slides_per_view_" + idx)) || slidesPerView, 300 spaceBetween: parseInt($this.getElementSettings("space_between_slides_" + idx)) || 0 301 }; 302 } 303 }); 304 settings.customBreakpoints = bpObj; 305 settings.customMultiple = true; 306 } 307 308 if (this.getElementSettings("autoplay") == "yes") { 309 settings.autoplay = { 310 delay: this.getElementSettings("autoplay_speed"), 311 disableOnInteraction: false, 312 stopOnLastSlide: !(this.getElementSettings("infinity_loop") || false) 313 }; 314 } 315
316 if (this.getElementSettings("arrow_navigation") == "yes") { 317 var selectorNext = this.elements.$container.find(".ha-slider-next"); 318 var selectorPrev = this.elements.$container.find(".ha-slider-prev"); 319 settings.navigation = { 320 nextEl: selectorNext[0], 321 prevEl: selectorPrev[0] 322 }; 323 } 324 325 if (this.getElementSettings("pagination_type") == "dots") { 326 var selectorPagi = this.elements.$container.find(".ha-slider-pagination"); 327 settings.pagination = { 328 el: selectorPagi[0], 329 clickable: true 330 }; 331 } 332 333 if (this.getElementSettings("pagination_type") == "progressbar") { 334 var selectorPagi = this.elements.$container.find(".ha-slider-pagination"); 335 settings.pagination = { 336 el: selectorPagi[0], 337 clickable: true, 338 type: "progressbar" 339 }; 340 } 341 342 if (this.getElementSettings("pagination_type") == "numbers") { 343 var selectorPagi = this.elements.$container.find(".ha-slider-pagination"); 344 settings.pagination = { 345 el: selectorPagi[0], 346 clickable: true, 347 type: this.getElementSettings("number_pagination_type"), 348 renderBullet: function renderBullet(index, className) { 349 return '<span class="' + className + '">' + (index + 1) + "</span>"; 350 }, 351 renderFraction: function renderFraction(currentClass, totalClass) { 352 return '<span class="' + currentClass + '"></span>' + "<span>/</span>" + '<span class="' + totalClass + '"></span>'; 353 } 354 }; 355 } 356 357 if (this.getElementSettings("scroll_bar") == "yes") { 358 var selectorScroll = this.elements.$container.find(".ha-slider-scrollbar"); 359 settings.scrollbar = { 360 el: selectorScroll[0], 361 hide: this.getElementSettings("scroll_bar_visibility") == "true", 362 draggable: true 363 }; 364 } 365 366 if (this.getElementSettings("thumbs_navigation") == "yes") { 367 settings.thumbs = { 368 swiper: haGallaryThumbs 369 }; 370 } 371 372 return $.extend({}, settings); 373 }, 374 run: function run() { 375 var elContainer = this.elements.$container; 376 var slider = elContainer.find(".ha-slider-container"); 377 var readySettings = this.getReadySettings(); 378 var sliderObj = new HaSwiper(slider[0], readySettings); 379 380 if (readySettings.customMultiple) { 381 $(window).on('resize', function () { 382 var mode = $('body').attr('data-elementor-device-mode'); 383 sliderObj.params.slidesPerView = readySettings.customBreakpoints[mode].slidesPerView; 384 sliderObj.params.spaceBetween = readySettings.customBreakpoints[mode].spaceBetween; 385 sliderObj.update(); 386 }).resize(); 387 } 388 389 sliderObj.on("slideChange", function () { 390 if (readySettings.sliderType == "multiple") { 391 return; 392 } 393 394 var aI = sliderObj.activeIndex; 395 var elSlide = elContainer.find(".ha-slider-slide"); 396 var elSlideContent = elContainer.find(".ha-slider-content"); 397 var currentSlide = elSlideContent.eq(aI); 398 currentSlide.hide(); 399 400 if (currentSlide.length <= 0) {} 401 402 setTimeout(function () { 403 currentSlide.show(); 404 }, readySettings.speed); 405 elSlide.eq(aI).find(".elementor-invisible, .animated").each(function (e, t) { 406 var i = $(this).data("settings"); 407 408 if (i && (i._animation || i.animation)) { 409 var n = i._animation_delay ? i._animation_delay : 0, 410 a = i._animation || i.animation; 411 $(this).removeClass("elementor-invisible"); 412 $(this).addClass(a + " animated"); 413 } 414 }); 415 }); 416 sliderObj.on("transitionEnd", function () { 417 var aI = sliderObj.activeIndex; 418 var elSlide = elContainer.find(".ha-slider-slide"); 419 var elSlideContent = elContainer.find(".ha-slider-content"); 420 var currentSlide = elSlideContent.eq(aI); 421 setTimeout(function () { 422 elSlide.eq(aI).find(".animated").each(function (e, t) { 423 var i = $(this).data("settings"); 424 425 if (i && (i._animation || i.animation)) { 426 var n = i._animation_delay ? i._animation_delay : 0, 427 a = i._animation || i.animation; 428 $(this).removeClass(a); 429 } 430 }); 431 }, readySettings.speed); 432 }); 433 } 434 }); 435 var CarouselBase = elementorModules.frontend.handlers.Base.extend({ 436 onInit: function onInit() { 437 elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); 438 this.run(); 439 }, 440 getDefaultSettings: function getDefaultSettings() { 441 return { 442 selectors: { 443 container: ".ha-carousel-container" 444 },
445 arrows: false, 446 dots: false, 447 checkVisible: false, 448 infinite: true, 449 slidesToShow: 3, 450 rows: 0, 451 prevArrow: '<button type="button" class="slick-prev"><i class="fa fa-chevron-left"></i></button>', 452 nextArrow: '<button type="button" class="slick-next"><i class="fa fa-chevron-right"></i></button>' 453 }; 454 }, 455 getDefaultElements: function getDefaultElements() { 456 var selectors = this.getSettings("selectors"); 457 return { 458 $container: this.findElement(selectors.container) 459 }; 460 }, 461 onElementChange: function onElementChange() { 462 this.elements.$container.slick("unslick"); 463 this.run(); 464 }, 465 getReadySettings: function getReadySettings() { 466 var settings = { 467 infinite: !!this.getElementSettings("loop"), 468 autoplay: !!this.getElementSettings("autoplay"), 469 autoplaySpeed: this.getElementSettings("autoplay_speed"), 470 speed: this.getElementSettings("animation_speed"), 471 centerMode: !!this.getElementSettings("center"), 472 vertical: !!this.getElementSettings("vertical"), 473 slidesToScroll: 1 474 }; 475 476 switch (this.getElementSettings("navigation")) { 477 case "arrow": 478 settings.arrows = true; 479 break; 480 481 case "dots": 482 settings.dots = true; 483 break; 484 485 case "both": 486 settings.arrows = true; 487 settings.dots = true; 488 break; 489 } 490 491 settings.slidesToShow = parseInt(this.getElementSettings("slides_to_show")) || 1; 492 settings.responsive = [{ 493 breakpoint: elementorFrontend.config.breakpoints.lg, 494 settings: { 495 slidesToShow: parseInt(this.getElementSettings("slides_to_show_tablet")) || settings.slidesToShow 496 } 497 }, { 498 breakpoint: elementorFrontend.config.breakpoints.md, 499 settings: { 500 slidesToShow: parseInt(this.getElementSettings("slides_to_show_mobile")) || parseInt(this.getElementSettings("slides_to_show_tablet")) || settings.slidesToShow 501 } 502 }]; 503 return $.extend({}, this.getSettings(), settings); 504 }, 505 run: function run() { 506 this.elements.$container.slick(this.getReadySettings()); 507 } 508 }); // Source Code 509 510 var SourceCode = function SourceCode($scope) { 511 var $item = $scope.find('.ha-source-code'); 512 var $lng_type = $item.data('lng-type'); 513 var $after_copy_text = $item.data('after-copy'); 514 var $code = $item.find('code.language-' + $lng_type); 515 var $copy_btn = $scope.find('.ha-copy-code-button'); 516 $copy_btn.on('click', function () { 517 var $temp = $("<textarea>"); 518 $(this).append($temp); 519 $temp.val($code.text()).select(); 520 document.execCommand("copy"); 521 $temp.remove(); 522 523 if ($after_copy_text.length) { 524 $(this).text($after_copy_text); 525 } 526 }); 527 528 if ($lng_type !== undefined && $code !== undefined) { 529 Prism.highlightElement($code.get(0)); 530 } 531 }; // Animated text 532 533 534 var AnimatedText = function AnimatedText($scope) { 535 var $item = $scope.find(".cd-headline"), 536 $animationDelay = $item.data("animation-delay"); 537 happyAnimatedText({ 538 selector: $item, 539 animationDelay: $animationDelay 540 }); 541 }; //Instagram Feed 542 543 544 var InstagramFeed = function InstagramFeed($scope) { 545 var button = $scope.find(".ha-insta-load-more"); 546 var instagram_wrap = $scope.find(".ha-insta-default"); 547 button.on("click", function (e) { 548 e.preventDefault(); 549 var $self = $(this), 550 query_settings = $self.data("settings"), 551 total = $self.data("total"), 552 items = $scope.find(".ha-insta-item").length; 553 $.ajax({ 554 url: HappyProLocalize.ajax_url, 555 type: "POST", 556 data: { 557 action: "ha_instagram_feed_action", 558 security: HappyProLocalize.nonce, 559 query_settings: query_settings, 560 loaded_item: items 561 }, 562 success: function success(response) { 563 if (total > items) { 564 $(response).appendTo(instagram_wrap); 565 } else { 566 $self.text("All Loaded").addClass("loaded"); 567 setTimeout(function () { 568 $self.css({ 569 display: "none" 570 }); 571 }, 800); 572 } 573 }, 574 error: function error(_error2) {} 575 }); 576 }); 577 }; //Scrolling Image 578 579 580 var ScrollingImage = elementorModules.frontend.handlers.Base.extend({ 581 onInit: function onInit() { 582 elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); 583 this.wrapper = this.$element.find(".ha-scrolling-image-wrapper"); 584 this.run(); 585 }, 586 onElementChange: function onElementChange() { 587 this.run(); 588 }, 589 run: function run() {
590 var container_height = this.wrapper.innerHeight(), 591 container_width = this.wrapper.innerWidth(), 592 image_align = this.wrapper.data("align"), 593 scroll_direction = this.wrapper.data("scroll-direction"), 594 items = this.wrapper.find(".ha-scrolling-image-container"), 595 single_image_box = items.find(".ha-scrolling-image-item"), 596 scroll = "scroll" + image_align + scroll_direction + parseInt(container_height) + parseInt(container_width), 597 duration = this.wrapper.data("duration"), 598 direction = "normal", 599 horizontal_align_width = 10, 600 vertical_align_height = 10; 601 var start = { 602 transform: "translateY(" + container_height + "px)" 603 }, 604 end = { 605 transform: "translateY(-101%)" 606 }; 607 608 if ("bottom" === scroll_direction || "right" === scroll_direction) { 609 direction = "reverse"; 610 } 611 612 if ("ha-horizontal" === image_align) { 613 start = { 614 transform: "translateX(" + container_width + "px)" 615 }; 616 end = { 617 transform: "translateX(-101%)" 618 }; 619 single_image_box.each(function () { 620 horizontal_align_width += $(this).outerWidth(true); 621 }); 622 items.css({ 623 width: horizontal_align_width, 624 display: "flex" 625 }); 626 items.find("img").css({ 627 "max-width": "100%" 628 }); 629 single_image_box.css({ 630 display: "inline-flex" 631 }); 632 } 633 634 if ("ha-vertical" === image_align) { 635 single_image_box.each(function () { 636 vertical_align_height += $(this).outerHeight(true); 637 }); 638 } 639 640 $.keyframe.define([{ 641 name: scroll, 642 "0%": start, 643 "100%": end 644 }]); 645 items.playKeyframe({ 646 name: scroll, 647 duration: duration.toString() + "ms", 648 timingFunction: "linear", 649 delay: "0s", 650 iterationCount: "infinite", 651 direction: direction, 652 fillMode: "none", 653 complete: function complete() {} 654 }); 655 } 656 }); //Pricing Table ToolTip 657 658 var PricingTableToolTip = function PricingTableToolTip($scope) { 659 var tooltip_area = $scope.find(".ha-pricing-table-feature-tooltip"); 660 tooltip_area.on({ 661 mouseenter: function mouseenter(e) { 662 var $this = $(this), 663 direction = $this[0].getBoundingClientRect(), 664 tooltip = $this.find(".ha-pricing-table-feature-tooltip-text"), 665 tooltipW = tooltip.outerWidth(true), 666 tooltipH = tooltip.outerHeight(true), 667 W_width = $(window).width(), 668 W_height = $(window).height(); 669 tooltip.css({ 670 left: "0", 671 right: "auto", 672 top: "calc(100% + 1px)", 673 bottom: "auto" 674 }); 675 676 if (W_width - direction.left < tooltipW && direction.right < tooltipW) { 677 tooltip.css({ 678 left: "calc(50% - (" + tooltipW + "px/2))" 679 }); 680 } else if (W_width - direction.left < tooltipW) { 681 tooltip.css({ 682 left: "auto", 683 right: "0" 684 }); 685 } 686 687 if (W_height - direction.bottom < tooltipH) { 688 tooltip.css({ 689 top: "auto", 690 bottom: "calc(100% + 1px)" 691 }); 692 } 693 } 694 }); 695 }; 696 697 var TabHandlerBase = elementorModules.frontend.handlers.Base.extend({ 698 $activeContent: null, 699 getDefaultSettings: function getDefaultSettings() { 700 return { 701 selectors: { 702 tabTitle: ".ha-tab__title", 703 tabContent: ".ha-tab__content" 704 }, 705 classes: { 706 active: "ha-tab--active" 707 }, 708 showTabFn: "show", 709 hideTabFn: "hide", 710 toggleSelf: false, 711 hidePrevious: true, 712 autoExpand: true 713 }; 714 }, 715 getDefaultElements: function getDefaultElements() {
716 var selectors = this.getSettings("selectors"); 717 return { 718 $tabTitles: this.findElement(selectors.tabTitle), 719 $tabContents: this.findElement(selectors.tabContent) 720 }; 721 }, 722 activateDefaultTab: function activateDefaultTab() { 723 var settings = this.getSettings(); 724 725 if (!settings.autoExpand || "editor" === settings.autoExpand && !this.isEdit) { 726 return; 727 } 728 729 var defaultActiveTab = this.getEditSettings("activeItemIndex") || 1, 730 originalToggleMethods = { 731 showTabFn: settings.showTabFn, 732 hideTabFn: settings.hideTabFn 733 }; // Toggle tabs without animation to avoid jumping 734 735 this.setSettings({ 736 showTabFn: "show", 737 hideTabFn: "hide" 738 }); 739 this.changeActiveTab(defaultActiveTab); // Return back original toggle effects 740 741 this.setSettings(originalToggleMethods); 742 }, 743 deactivateActiveTab: function deactivateActiveTab(tabIndex) { 744 var settings = this.getSettings(), 745 activeClass = settings.classes.active, 746 activeFilter = tabIndex ? '[data-tab="' + tabIndex + '"]' : "." + activeClass, 747 $activeTitle = this.elements.$tabTitles.filter(activeFilter), 748 $activeContent = this.elements.$tabContents.filter(activeFilter); 749 $activeTitle.add($activeContent).removeClass(activeClass); 750 $activeContent[settings.hideTabFn](); 751 }, 752 activateTab: function activateTab(tabIndex) { 753 var settings = this.getSettings(), 754 activeClass = settings.classes.active, 755 $requestedTitle = this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]'), 756 $requestedContent = this.elements.$tabContents.filter('[data-tab="' + tabIndex + '"]'); 757 $requestedTitle.add($requestedContent).addClass(activeClass); 758 $requestedContent[settings.showTabFn](); 759 }, 760 isActiveTab: function isActiveTab(tabIndex) { 761 return this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]').hasClass(this.getSettings("classes.active")); 762 }, 763 bindEvents: function bindEvents() { 764 var _this = this; 765 766 this.elements.$tabTitles.on({ 767 keydown: function keydown(event) { 768 if ("Enter" === event.key) { 769 if ('A' == event.currentTarget.tagName && event.currentTarget.classList.contains('ha-tab__title')) { 770 //this conditional scope in only for advance tab widget 771 return; 772 } 773 774 event.preventDefault(); 775 776 _this.changeActiveTab(event.currentTarget.getAttribute("data-tab")); 777 } 778 }, 779 click: function click(event) { 780 if ('A' == event.currentTarget.tagName && event.currentTarget.classList.contains('ha-tab__title')) { 781 //this conditional scope in only for advance tab widget 782 return; 783 } 784 785 event.preventDefault(); 786 787 _this.changeActiveTab(event.currentTarget.getAttribute("data-tab")); 788 } 789 }); 790 }, 791 onInit: function onInit() { 792 elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); 793 this.activateDefaultTab(); 794 }, 795 onEditSettingsChange: function onEditSettingsChange(propertyName) { 796 if ("activeItemIndex" === propertyName) { 797 this.activateDefaultTab(); 798 } 799 }, 800 changeActiveTab: function changeActiveTab(tabIndex) { 801 var isActiveTab = this.isActiveTab(tabIndex), 802 settings = this.getSettings(); 803 804 if ((settings.toggleSelf || !isActiveTab) && settings.hidePrevious) { 805 this.deactivateActiveTab(); 806 } 807 808 if (!settings.hidePrevious && isActiveTab) { 809 this.deactivateActiveTab(tabIndex); 810 } 811 812 if (!isActiveTab) { 813 this.activateTab(tabIndex); 814 } 815 816 $(window).trigger("resize"); 817 } 818 }); 819 820 var TimeLine = function TimeLine($scope) { 821 var T_ID = $scope.data("id"); 822 var timeline = $scope.find(".ha-timeline-wrap"); 823 var dataScroll = timeline.data("scroll"); 824 var timeline_block = timeline.find(".ha-timeline-block"); 825 var event = "scroll.timelineScroll" + T_ID + " resize.timelineScroll" + T_ID; 826 827 function scroll_tree() { 828 timeline_block.each(function () { 829 var block_height = $(this).outerHeight(true); 830 var $offsetTop = $(this).offset().top;
831 var window_middle_p = $window.scrollTop() + $window.height() / 2; 832 833 if ($offsetTop < window_middle_p) { 834 $(this).addClass("ha-timeline-scroll-tree"); 835 } else { 836 $(this).removeClass("ha-timeline-scroll-tree"); 837 } 838 839 var scroll_tree_wrap = $(this).find(".ha-timeline-tree-inner"); 840 var scroll_height = $window.scrollTop() - scroll_tree_wrap.offset().top + $window.outerHeight() / 2; 841 842 if ($offsetTop < window_middle_p && timeline_block.hasClass("ha-timeline-scroll-tree")) { 843 if (block_height > scroll_height) { 844 scroll_tree_wrap.css({ 845 height: scroll_height * 1.5 + "px" 846 }); 847 } else { 848 scroll_tree_wrap.css({ 849 height: block_height * 1.2 + "px" 850 }); 851 } 852 } else { 853 scroll_tree_wrap.css("height", "0px"); 854 } 855 }); 856 } 857 858 if ("yes" === dataScroll) { 859 scroll_tree(); 860 $window.on(event, scroll_tree); 861 } else { 862 $window.off(event); 863 } 864 }; 865 866 var HotSpots = elementorModules.frontend.handlers.Base.extend({ 867 onInit: function onInit() { 868 elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); 869 this.init(); 870 }, 871 bindEvents: function bindEvents() { 872 if (!this.isEdit) { 873 this.elements.$items.on("click.spotClick", function (e) { 874 e.preventDefault(); 875 }); 876 } 877 }, 878 getDefaultSettings: function getDefaultSettings() { 879 return { 880 selectors: { 881 item: ".ha-hotspots__item" 882 } 883 }; 884 }, 885 getDefaultElements: function getDefaultElements() { 886 return { 887 $items: this.findElement(this.getSettings("selectors.item")) 888 }; 889 }, 890 onElementChange: function onElementChange(changedProp) { 891 if (!this.hasTipso()) { 892 return; 893 } 894 895 if (changedProp.indexOf("tooltip_") === 0) { 896 this.elements.$items.tipso("destroy"); 897 this.init(); 898 } 899 }, 900 hasTipso: function hasTipso() { 901 return $.fn["tipso"]; 902 }, 903 init: function init() { 904 var position = this.getElementSettings("tooltip_position"), 905 width = this.getElementSettings("tooltip_width"), 906 background = this.getElementSettings("tooltip_bg_color"), 907 color = this.getElementSettings("tooltip_color"), 908 speed = this.getElementSettings("tooltip_speed"), 909 delay = this.getElementSettings("tooltip_delay"), 910 hideDelay = this.getElementSettings("tooltip_hide_delay"), 911 hideArrow = this.getElementSettings("tooltip_hide_arrow"), 912 hover = this.getElementSettings("tooltip_hover"), 913 elementId = this.getID(); 914 915 if (!this.hasTipso()) { 916 return; 917 } 918 919 this.elements.$items.each(function (index, item) { 920 var $item = $(item), 921 target = $item.data("target"), 922 settings = $item.data("settings"), 923 classes = ["ha-hotspots--" + elementId, "elementor-repeater-item-" + target]; 924 $item.tipso({ 925 color: color, 926 width: width.size || 200, 927 position: settings.position || position, 928 speed: speed, 929 delay: delay, 930 showArrow: !hideArrow, 931 tooltipHover: !!hover, 932 hideDelay: hideDelay, 933 background: background, 934 useTitle: false, 935 content: $("#ha-" + target).html(), 936 onBeforeShow: function onBeforeShow($e, e, tooltip) { 937 $(document).find('.elementor-repeater-item-' + target).remove();
938 tooltip.tipso_bubble.addClass(classes.join(" ")); 939 } 940 }); 941 }); 942 } 943 }); 944 945 var LineChart = function LineChart($scope) { 946 elementorFrontend.waypoint($scope, function () { 947 var $chart = $(this), 948 $container = $chart.find(".ha-line-chart-container"), 949 $chart_canvas = $chart.find("#ha-line-chart"), 950 settings = $container.data("settings"); 951 952 if ($container.length) { 953 var chart = new Chart($chart_canvas, settings); 954 } 955 }); 956 }; 957 958 var RadarChart = function RadarChart($scope) { 959 elementorFrontend.waypoint($scope, function () { 960 var $chart = $(this), 961 $container = $chart.find(".ha-radar-chart-container"), 962 $chart_canvas = $chart.find("#ha-radar-chart"), 963 settings = $container.data("settings"); 964 965 if ($container.length) { 966 var chart = new Chart($chart_canvas, settings); 967 } 968 }); 969 }; 970 971 var PolarChart = function PolarChart($scope) { 972 elementorFrontend.waypoint($scope, function () { 973 var $chart = $(this), 974 $container = $chart.find(".ha-polar-chart-container"), 975 $chart_canvas = $chart.find("#ha-polar-chart"), 976 settings = $container.data("settings"); 977 978 if ($container.length) { 979 var chart = new Chart($chart_canvas, settings); 980 } 981 }); 982 }; 983 984 var PieChart = function PieChart($scope) { 985 elementorFrontend.waypoint($scope, function () { 986 var $chart = $(this), 987 $container = $chart.find(".ha-pie-chart-container"), 988 $chart_canvas = $chart.find("#ha-pie-chart"), 989 settings = $container.data("settings"); 990 991 if ($container.length) { 992 var chart = new Chart($chart_canvas, settings); 993 } 994 }); 995 }; 996 997 var StickyVideoArray = []; 998 999 var StickyVideo = function StickyVideo($scope) { 1000 var $id = "#ha-sticky-video-player-" + $scope.data("id"), 1001 $wrap = $scope.find(".ha-sticky-video-wrap"), 1002 $settting = $wrap.data("ha-player"), 1003 $box = $wrap.find(".ha-sticky-video-box"), 1004 $overlay_box = $wrap.find(".ha-sticky-video-overlay"), 1005 $overlay_play = $overlay_box.find(".ha-sticky-video-overlay-icon"), 1006 $sticky_close = $wrap.find(".ha-sticky-video-close i"), 1007 $all_box = $(".ha-sticky-video-box"), 1008 event = "scroll.haStickyVideo" + $scope.data("id"), 1009 set; 1010 var playerAbc = new Plyr($id); 1011 var StickyVideoObject = { 1012 player: playerAbc, 1013 event: event, 1014 player_box: $box 1015 }; 1016 StickyVideoArray.push(StickyVideoObject); //on ready 1017 1018 playerAbc.on("ready", function (e) { 1019 var $box_plyr = $box.find('.plyr.plyr--video'); 1020 1021 if (true == $settting.autoplay) { 1022 $box_plyr.trigger("click"); 1023 } 1024 }); //on overlay click 1025 1026 if (0 !== $overlay_box.length) { 1027 var $el = 0 !== $overlay_play.length ? $overlay_play : $overlay_box; 1028 $el.on("click", function () { 1029 playerAbc.play(); 1030 }); 1031 } //on close sticky 1032 1033 1034 $sticky_close.on("click", function () { 1035 $box.removeClass("sticky"); 1036 $box.addClass("sticky-close"); 1037 playerAbc.pause(); 1038 }); //on Play 1039 1040 playerAbc.on("play", function (e) { 1041 $overlay_box.css("display", "none"); 1042 1043 if ($box.hasClass("sticky-close")) { 1044 $box.removeClass("sticky-close"); 1045 } 1046 1047 StickyVideoArray.forEach(function (item, index) { 1048 if (item.player !== playerAbc) { 1049 item.player.pause(); 1050 } 1051 1052 if (item.event !== event) { 1053 $window.off(item.event); 1054 } 1055 1056 if (item.player_box !== $box) { 1057 item.player_box.removeClass("sticky"); 1058 } 1059 }); 1060 1061 if (true === $settting.sticky) { 1062 $window.on(event, function () { 1063 var height = $box.outerHeight(true); 1064 var $offsetTop = $wrap.offset().top; 1065 var videoBoxTopPoint = $window.scrollTop(); 1066 var videoBoxMiddlePoint = $offsetTop + height / 2; 1067 1068 if (!$box.hasClass("sticky-close")) { 1069 if (videoBoxMiddlePoint < videoBoxTopPoint) { 1070 $box.addClass("sticky"); 1071 } else { 1072 $box.removeClass("sticky"); 1073 } 1074 } 1075 }); 1076 } else { 1077 $window.off(event); 1078 } 1079 }); // on pause 1080 1081 playerAbc.on("pause", function (e) { 1082 $window.off(event); 1083 }); 1084 $window.on("load resize", debounce(function () { 1085 var height = $box.find(".plyr").height(); 1086 $wrap.css("min-height", height + "px"); 1087 }, 100)); 1088 }; //facebook feed 1089 1090 1091 var FacebookFeed = function FacebookFeed($scope) { 1092 var button = $scope.find(".ha-facebook-load-more"); 1093 var facebook_wrap = $scope.find(".ha-facebook-items"); 1094 button.on("click", function (e) { 1095 e.preventDefault(); 1096 var $self = $(this), 1097 query_settings = $self.data("settings"), 1098 total = $self.data("total"), 1099 items = $scope.find(".ha-facebook-item").length; 1100 $.ajax({ 1101 url: HappyProLocalize.ajax_url, 1102 type: "POST", 1103 data: { 1104 action: "ha_facebook_feed_action", 1105 security: HappyProLocalize.nonce, 1106 query_settings: query_settings, 1107 loaded_item: items 1108 }, 1109 success: function success(response) { 1110 if (total > items) { 1111 $(response).appendTo(facebook_wrap); 1112 } else { 1113 $self.text("All Loaded").addClass("loaded"); 1114 setTimeout(function () { 1115 $self.css({ 1116 display: "none" 1117 }); 1118 }, 800); 1119 } 1120 }, 1121 error: function error(_error3) {} 1122 }); 1123 }); 1124 }; //SmartPostList 1125 1126 1127 var SmartPostList = function SmartPostList($scope) { 1128 var filterWrap = $scope.find(".ha-spl-filter"), 1129 customSelect = $scope.find(".ha-spl-custom-select"),
1130 gridWrap = $scope.find(".ha-spl-grid-area"), 1131 mainWrapper = $scope.find(".ha-spl-wrapper"), 1132 querySettings = mainWrapper.data("settings"), 1133 dataOffset = mainWrapper.attr("data-offset"), 1134 nav = $scope.find(".ha-spl-pagination button"), 1135 navPrev = $scope.find(".ha-spl-pagination button.prev"), 1136 navNext = $scope.find(".ha-spl-pagination button.next"), 1137 filter = $scope.find("ul.ha-spl-filter-list li span"), 1138 event; 1139 customSelect.niceSelect(); 1140 var select = $scope.find(".ha-spl-custom-select li"); 1141 1142 function afterClick(e) { 1143 e.preventDefault(); 1144 var $self = $(this), 1145 dataFilter = filterWrap.attr("data-active"), 1146 dataTotalOffset = mainWrapper.attr("data-total-offset"), 1147 offset = "", 1148 termId = ""; 1149 1150 if (e.target.classList.contains("prev") || e.target.classList.contains("fa-angle-left")) { 1151 if (0 == parseInt(dataTotalOffset)) { 1152 navPrev.attr("disabled", true); 1153 return; 1154 } 1155 1156 offset = 0 !== parseInt(dataTotalOffset) ? parseInt(dataTotalOffset) - parseInt(dataOffset) : "0"; 1157 1158 if (undefined !== dataFilter) { 1159 termId = dataFilter; 1160 } 1161 } else if (e.target.classList.contains("next") || e.target.classList.contains("fa-angle-right")) { 1162 offset = parseInt(dataTotalOffset) + parseInt(dataOffset); 1163 1164 if (undefined !== dataFilter) { 1165 termId = dataFilter; 1166 } 1167 } 1168 1169 if (e.target.hasAttribute("data-value")) { 1170 termId = e.target.dataset["value"]; 1171 filterWrap[0].setAttribute("data-active", termId); 1172 1173 if ("SPAN" === e.target.tagName) { 1174 filter.removeClass("ha-active"); 1175 e.target.classList.toggle("ha-active"); 1176 } 1177 1178 offset = 0; 1179 navPrev.attr("disabled", true); 1180 navNext.removeAttr("disabled"); 1181 } 1182 1183 $.ajax({ 1184 url: HappyProLocalize.ajax_url, 1185 type: "POST", 1186 data: { 1187 action: "ha_smart_post_list_action", 1188 security: HappyProLocalize.nonce, 1189 querySettings: querySettings, 1190 offset: offset, 1191 termId: termId 1192 }, 1193 success: function success(response) { 1194 if ($(response).length > 0) { 1195 gridWrap.css("height", gridWrap.outerHeight(true) + "px"); 1196 gridWrap.html(""); 1197 $(response).appendTo(gridWrap); 1198 gridWrap.css("height", ""); 1199 mainWrapper[0].attributes["data-total-offset"].value = offset; 1200 1201 if (e.target.classList.contains("prev") || e.target.classList.contains("fa-angle-left")) { 1202 navNext.removeAttr("disabled"); 1203 } 1204 1205 if (e.target.classList.contains("next") || e.target.classList.contains("fa-angle-right")) { 1206 navPrev.removeAttr("disabled"); 1207 } 1208 } else { 1209 if (e.target.classList.contains("next") || e.target.classList.contains("fa-angle-right")) { 1210 navNext.attr("disabled", true); 1211 } 1212 } 1213 }, 1214 error: function error(_error4) {} 1215 }); 1216 } 1217 1218 nav.on("click", afterClick); 1219 filter.on("click", afterClick); 1220 select.on("click", afterClick); 1221 }; //PostGrid 1222 1223 1224 var postGridSkins = ["classic", "hawai", "standard", "monastic", "stylica", "outbox", "crossroad"]; 1225 1226 var PostGrid = function PostGrid($scope) { 1227 var wrapper = $scope.find(".ha-pg-wrapper"), 1228 gridWrap = wrapper.find(".ha-pg-grid-wrap"), 1229 button = wrapper.find("button.ha-pg-loadmore"); 1230 button.on("click", function (e) { 1231 e.preventDefault(); 1232 var $self = $(this), 1233 querySettings = $self.data("settings"), 1234 items = wrapper.find(".ha-pg-item").length; 1235 $self.attr("disabled", true); 1236 $.ajax({ 1237 url: HappyProLocalize.ajax_url, 1238 type: "POST", 1239 data: { 1240 action: "hapro_post_grid_action", 1241 security: HappyProLocalize.nonce, 1242 querySettings: querySettings, 1243 loadedItem: items 1244 }, 1245 beforeSend: function beforeSend() { 1246 $self.find(".eicon-loading").css({ 1247 display: "inline-block" 1248 }); 1249 }, 1250 success: function success(response) { 1251 if (response) { 1252 $(response).each(function () { 1253 var $self = $(this); 1254 1255 if ($self.hasClass("ha-pg-item")) { 1256 $self.addClass("ha-pg-item-loaded").appendTo(gridWrap); 1257 } else { 1258 $self.appendTo(gridWrap); 1259 } 1260 }); 1261 } else { 1262 $self.text("All Loaded").addClass("loaded"); 1263 setTimeout(function () { 1264 $self.css({ 1265 display: "none" 1266 }); 1267 }, 800); 1268 } 1269 1270 $self.find(".eicon-loading").css({ 1271 display: "none" 1272 }); 1273 $self.removeAttr("disabled"); 1274 }, 1275 error: function error(_error5) {} 1276 }); 1277 }); 1278 }; // Advanced Data Table 1279 1280 1281 var DataTable = function DataTable($scope) { 1282 var dataTable = $scope.find(".ha-advanced-table"); 1283 var widgetWrapper = $scope.find(".elementor-widget-container"); 1284 var row_td = $scope.find(".ha-advanced-table__body-row-cell"); 1285 var search = dataTable.data("search") == true ? true : false;
1286 var paging = dataTable.data("paging") == true ? true : false; 1287 var scrollX = dataTable.data("scroll-x") == undefined ? false : true; 1288 1289 if (window.innerWidth <= 767) { 1290 var scrollX = true; 1291 } // DataTables.js settings 1292 1293 1294 $(dataTable).DataTable({ 1295 searching: search, 1296 paging: paging, 1297 orderCellsTop: true, 1298 scrollX: scrollX, 1299 aaSorting: [] 1300 }); 1301 var column_th = $scope.find(".ha-advanced-table__head-column-cell"); 1302 column_th.each(function (index, v) { 1303 $(column_th[index]).css("width", ""); 1304 }); // export table button 1305 1306 if (dataTable.data("export-table") == true) { 1307 widgetWrapper.prepend('<div class="ha-advanced-table-btn-wrap"><button class="ha-advanced-table-btn">' + dataTable.data("export-table-text") + "</button></div>"); 1308 var dataTableBtn = $scope.find(".ha-advanced-table-btn"); 1309 dataTableBtn.on("click", function () { 1310 var oldDownloadNode = document.querySelector(".ha-advanced-data-table-export"); 1311 1312 if (oldDownloadNode) { 1313 oldDownloadNode.parentNode.removeChild(oldDownloadNode); 1314 } 1315 1316 var csv = []; 1317 dataTable.find("tr").each(function (index, tr) { 1318 var data = []; 1319 $(tr).find("th").each(function (index, th) { 1320 data.push(th.textContent); 1321 }); 1322 $(tr).find("td").each(function (index, td) { 1323 data.push(td.textContent); 1324 }); 1325 csv.push(data.join(",")); 1326 }); 1327 var csvFile = new Blob([csv.join("\n")], { 1328 type: "text/csv" 1329 }); 1330 var downloadNode = document.createElement("a"); 1331 var url = URL.createObjectURL(csvFile); 1332 var date = new Date(); 1333 var options = { 1334 day: "2-digit", 1335 month: "short", 1336 year: "numeric", 1337 hour: "numeric", 1338 minute: "numeric", 1339 second: "numeric" 1340 }; 1341 var formatedDate = date.toLocaleDateString("en-BD", options); 1342 var dateString = JSON.stringify(formatedDate.replace(/[ , :]/g, "-")); 1343 downloadNode.download = "advanced-data-table-" + dateString + "~" + dataTable.data("widget-id") + ".csv"; 1344 downloadNode.setAttribute("href", url); 1345 downloadNode.classList.add("ha-advanced-data-table-export"); 1346 downloadNode.style.visibility = "hidden"; 1347 document.body.appendChild(downloadNode); 1348 downloadNode.click(); 1349 }); 1350 } //for fit table th&td 1351 1352 1353 $(window).trigger('resize'); 1354 }; // ModalPopup 1355 1356 1357 var ModalPopup = function ModalPopup($scope) { 1358 var boxWrapper = $scope.find(".ha-modal-popup-box-wrapper"); 1359 var triggerType = boxWrapper.data("trigger-type"); 1360 var trigger = $scope.find(".ha-modal-popup-trigger"); 1361 var overlayClose = $scope.find(".ha-modal-popup-overlay"); 1362 var iconClose = $scope.find(".ha-modal-popup-content-close"); 1363 var modal = $scope.find(".ha-modal-popup-content-wrapper"); 1364 var modalAnimation = modal.data("animation"); 1365 var modalDelay = modal.data("display-delay"); 1366 1367 if ("pageload" == triggerType) { 1368 if (!modal.hasClass("ha-modal-show")) { 1369 setTimeout(function () { 1370 modal.addClass("ha-modal-show"); 1371 modal.find(".ha-modal-animation").addClass(modalAnimation); 1372 }, parseInt(modalDelay)); 1373 } 1374 } else { 1375 trigger.on("click", function (e) { 1376 e.preventDefault(); 1377 var wrapper = $(this).closest(".ha-modal-popup-box-wrapper"), 1378 modal = wrapper.find(".ha-modal-popup-content-wrapper"), 1379 modalAnimation = modal.data("animation"), 1380 modalContent = modal.find(".ha-modal-animation"); 1381 1382 if (!modal.hasClass("ha-modal-show")) { 1383 modal.addClass("ha-modal-show"); 1384 modalContent.addClass(modalAnimation); 1385 } 1386 }); 1387 } 1388 1389 overlayClose.on("click", close_modal); 1390 iconClose.on("click", close_modal); 1391 1392 function close_modal(el) { 1393 var wrap = $(this).closest(".ha-modal-popup-content-wrapper"), 1394 modalAnimation = wrap.data("animation"); 1395 1396 if (wrap != null && wrap.hasClass("ha-modal-show")) { 1397 var doSetTimeout = function doSetTimeout(target, source) { 1398 setTimeout(function () { 1399 target.attr("src", source); 1400 }, 500); 1401 }; 1402 1403 var nVideo = wrap.find("iframe, video"); 1404 $.each(nVideo, function (idx, val) { 1405 var videoSrc = $(this).attr("src"); 1406 $(this).attr("src", "https://happyaddons.com/marvin/index.html"); 1407 doSetTimeout($(this), videoSrc); 1408 }); 1409 wrap.removeClass("ha-modal-show"); 1410 wrap.find("." + modalAnimation).removeClass(modalAnimation); 1411 } 1412 } 1413 }; //Mini Cart 1414 1415 1416 var miniCart = function miniCart($scope) { 1417 $scope.find(".ha-mini-cart-inner").on("click mouseenter mouseleave", function (e) { 1418 var cart_btn = $(this), 1419 on_click = cart_btn.hasClass("ha-mini-cart-on-click"), 1420 on_hover = cart_btn.hasClass("ha-mini-cart-on-hover"), 1421 popup = cart_btn.find(".ha-mini-cart-popup"); 1422 1423 if (popup.length == 0) { 1424 return; 1425 } 1426 1427 if ("click" === e.type && on_click) { 1428 popup.fadeToggle(); 1429 } 1430 1431 if ("mouseenter" === e.type && on_hover) { 1432 popup.fadeIn(); 1433 } 1434 1435 if ("mouseleave" === e.type && on_hover) { 1436 popup.fadeOut(); 1437 } 1438 }); 1439 1440 if ($scope.find(".ha-mini-cart-popup").length > 0 && $scope.find(".ha-mini-cart-on-click").length > 0) { 1441 $("body").on("click", function (e) { 1442 if ($(e.target).hasClass("ha-mini-cart-popup") || $(e.target).parents().hasClass("ha-mini-cart-popup") || $(e.target).hasClass("ha-mini-cart-button") || $(e.target).parents().hasClass("ha-mini-cart-button")) { 1443 return; 1444 } else { 1445 $scope.find(".ha-mini-cart-popup").removeAttr("style"); 1446 } 1447 }); 1448 } 1449 }; //Image Scroller 1450 1451 1452 var ImageScroller = elementorModules.frontend.handlers.Base.extend({ 1453 onInit: function onInit() { 1454 elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); 1455 this.wrapper = this.$element.find(".ha-image-scroller-wrapper"); 1456 this.run(); 1457 }, 1458 onElementChange: function onElementChange() { 1459 this.run(); 1460 }, 1461 run: function run() { 1462 var triggerType = this.wrapper.data("trigger-type"); 1463 1464 if ("hover" !== triggerType) { 1465 return; 1466 } 1467 1468 var figure = this.wrapper.find(".ha-image-scroller-container"); 1469 var scrollType = this.wrapper.data("scroll-type"); 1470 var scrollDirection = this.wrapper.data("scroll-direction"); 1471 var imageScroll = figure.find("img"); 1472 var transformY = imageScroll.height() - figure.height(); 1473 var transformX = imageScroll.width() - figure.width(); 1474 1475 if (scrollType === "vertical" && transformY > 0) { 1476 if ("top" === scrollDirection) { 1477 mouseEvent("translateY", transformY); 1478 } else { 1479 imageScroll.css("transform", "translateY" + "( -" + transformY + "px)"); 1480 mouseEventRevers("translateY", transformY); 1481 } 1482 } 1483 1484 if (scrollType === "horizontal" && transformX > 0) { 1485 if ("left" === scrollDirection) { 1486 mouseEvent("translateX", transformX); 1487 } else { 1488 imageScroll.css("transform", "translateX" + "( -" + transformX + "px)"); 1489 mouseEventRevers("translateX", transformX); 1490 } 1491 } 1492 1493 function mouseEvent(cssProperty, value) { 1494 figure.on("mouseenter", function () { 1495 imageScroll.css("transform", cssProperty + "( -" + value + "px)"); 1496 }); 1497 figure.on("mouseleave", function () { 1498 imageScroll.css("transform", cssProperty + "( 0px)"); 1499 }); 1500 } 1501 1502 function mouseEventRevers(cssProperty, value) { 1503 figure.on("mouseenter", function () { 1504 imageScroll.css("transform", cssProperty + "( 0px)"); 1505 }); 1506 figure.on("mouseleave", function () { 1507 imageScroll.css("transform", cssProperty + "( -" + value + "px)"); 1508 }); 1509 } 1510 } 1511 }); // Mega Menu 1512 1513 var NavMenu = function _init($scope) { 1514 $scope.find(".ha-menu-toggler").on("click", function (event) { 1515 event.preventDefault(); 1516 var el_form_group = $(this).parents(".ha-menu-container").parent(); 1517 1518 if (el_form_group.length < 1) { 1519 el_form_group = $(this).parent(); 1520 } 1521 1522 var $wrapElement = el_form_group.find(".ha-menu-offcanvas-elements"); 1523 1524 if ($wrapElement.hasClass("active")) { 1525 $wrapElement.removeClass("active"); 1526 } else { 1527 $wrapElement.addClass("active"); 1528 } 1529 }); 1530 1531 if ($scope.find(".ha-menu-container").length > 0) { 1532 var additionalDigits = $scope.find(".ha-wid-con").data("responsive-breakpoint");
1533 var sidebar_mousemove = $scope.find(".ha-megamenu-has"); 1534 var tabPadding = $scope.find(".ha-menu-container").outerHeight(); 1535 $(window).on("resize", function () { 1536 $scope.find(".ha-megamenu-panel").css({ 1537 top: tabPadding 1538 }); 1539 }).trigger("resize"); 1540 sidebar_mousemove.on("mouseenter", function () { 1541 var q = $(this).data("vertical-menu"); 1542 var jqel = $(this).children(".ha-megamenu-panel"); 1543 1544 if ($(this).hasClass("ha-dropdown-menu-full_width") && $(this).hasClass("top_position")) { 1545 /** @type {number} */ 1546 var ffleft = Math.floor($(this).position().left - $(this).offset().left); 1547 var $sharepreview = $(this); 1548 $sharepreview.find(".ha-megamenu-panel").css("width", $(window).width()); 1549 $(window).on("resize", function () { 1550 $sharepreview.find(".ha-megamenu-panel").css({ 1551 left: ffleft + "px" 1552 }); 1553 }).trigger("resize"); 1554 } 1555 1556 if (!$(this).hasClass("ha-dropdown-menu-full_width") && $(this).hasClass("top_position")) { 1557 $(this).on({ 1558 mouseenter: function setup() { 1559 if (0 === $(".default_menu_position").length) { 1560 $(this).parents(".elementor-section-wrap").addClass("default_menu_position"); 1561 } 1562 }, 1563 mouseleave: function setup() { 1564 if (0 !== $(".default_menu_position").length) { 1565 $(this).parents(".elementor-section-wrap").removeClass("default_menu_position"); 1566 } 1567 } 1568 }); 1569 } 1570 1571 if (q && q !== undefined) { 1572 if ("string" == typeof q) { 1573 if (/^[0-9]/.test(q)) { 1574 $(window).on("resize", function () { 1575 jqel.css({ 1576 width: q 1577 }); 1578 1579 if (!($(document).width() > Number(additionalDigits))) { 1580 jqel.removeAttr("style"); 1581 } 1582 }).trigger("resize"); 1583 } else { 1584 $(window).on("resize", function () { 1585 jqel.css({ 1586 width: q + "px" 1587 }); 1588 1589 if (!($(document).width() > Number(additionalDigits))) { 1590 jqel.removeAttr("style"); 1591 } 1592 }).trigger("resize"); 1593 } 1594 } else { 1595 jqel.css({ 1596 width: q + "px" 1597 }); 1598 } 1599 } else { 1600 $(window).on("resize", function () { 1601 jqel.css({ 1602 width: q + "px" 1603 }); 1604 1605 if (!($(document).width() > Number(additionalDigits))) { 1606 jqel.removeAttr("style"); 1607 } 1608 }).trigger("resize"); 1609 } 1610 }); 1611 sidebar_mousemove.trigger("mouseenter"); 1612 } 1613 }; 1614 1615 elementorFrontend.hooks.addAction("frontend/element_ready/ha-countdown.default", CountDown); 1616 elementorFrontend.hooks.addAction("frontend/element_ready/ha-team-carousel.default", function ($scope) { 1617 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1618 $element: $scope, 1619 selectors: { 1620 container: ".ha-team-carousel-wrap" 1621 }, 1622 prevArrow: '<button type="button" class="slick-prev"><i class="hm hm-arrow-left"></i></button>', 1623 nextArrow: '<button type="button" class="slick-next"><i class="hm hm-arrow-right"></i></button>' 1624 }); 1625 }); 1626 elementorFrontend.hooks.addAction("frontend/element_ready/ha-source-code.default", SourceCode); 1627 elementorFrontend.hooks.addAction("frontend/element_ready/ha-animated-text.default", AnimatedText); 1628 elementorFrontend.hooks.addAction("frontend/element_ready/ha-logo-carousel.default", function ($scope) { 1629 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1630 $element: $scope, 1631 selectors: { 1632 container: ".ha-logo-carousel-wrap" 1633 } 1634 }); 1635 }); 1636 elementorFrontend.hooks.addAction("frontend/element_ready/ha-testimonial-carousel.default", function ($scope) { 1637 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1638 $element: $scope, 1639 selectors: { 1640 container: ".ha-testimonial-carousel__wrap" 1641 } 1642 }); 1643 }); 1644 elementorFrontend.hooks.addAction("frontend/element_ready/ha-advanced-tabs.default", function ($scope) { 1645 elementorFrontend.elementsHandler.addHandler(TabHandlerBase, { 1646 $element: $scope 1647 }); 1648 }); 1649 elementorFrontend.hooks.addAction("frontend/element_ready/ha-instagram-feed.default", InstagramFeed); 1650 elementorFrontend.hooks.addAction("frontend/element_ready/ha-scrolling-image.default", function ($scope) { 1651 elementorFrontend.elementsHandler.addHandler(ScrollingImage, { 1652 $element: $scope 1653 }); 1654 }); 1655 elementorFrontend.hooks.addAction("frontend/element_ready/ha-pricing-table.default", PricingTableToolTip); 1656 elementorFrontend.hooks.addAction("frontend/element_ready/ha-accordion.default", function ($scope) { 1657 elementorFrontend.elementsHandler.addHandler(TabHandlerBase, { 1658 $element: $scope, 1659 selectors: { 1660 tabTitle: ".ha-accordion__item-title", 1661 tabContent: ".ha-accordion__item-content" 1662 }, 1663 classes: { 1664 active: "ha-accordion__item--active" 1665 }, 1666 showTabFn: "slideDown", 1667 hideTabFn: "slideUp" 1668 }); 1669 }); 1670 elementorFrontend.hooks.addAction("frontend/element_ready/ha-toggle.default", function ($scope) { 1671 elementorFrontend.elementsHandler.addHandler(TabHandlerBase, { 1672 $element: $scope, 1673 selectors: { 1674 tabTitle: ".ha-toggle__item-title", 1675 tabContent: ".ha-toggle__item-content" 1676 }, 1677 classes: { 1678 active: "ha-toggle__item--active" 1679 }, 1680 hidePrevious: false, 1681 autoExpand: "editor", 1682 showTabFn: "slideDown", 1683 hideTabFn: "slideUp" 1684 }); 1685 }); 1686 elementorFrontend.hooks.addAction("frontend/element_ready/ha-timeline.default", TimeLine); 1687 elementorFrontend.hooks.addAction("frontend/element_ready/ha-hotspots.default", function ($scope) { 1688 elementorFrontend.elementsHandler.addHandler(HotSpots, { 1689 $element: $scope 1690 }); 1691 }); 1692 elementorFrontend.hooks.addAction("frontend/element_ready/ha-line-chart.default", LineChart); 1693 elementorFrontend.hooks.addAction("frontend/element_ready/ha-pie-chart.default", PieChart); 1694 elementorFrontend.hooks.addAction("frontend/element_ready/ha-polar-chart.default", PolarChart); 1695 elementorFrontend.hooks.addAction("frontend/element_ready/ha-radar-chart.default", RadarChart); 1696 elementorFrontend.hooks.addAction("frontend/element_ready/ha-facebook-feed.default", FacebookFeed); 1697 elementorFrontend.hooks.addAction("frontend/element_ready/ha-smart-post-list.default", SmartPostList); 1698 elementorFrontend.hooks.addAction("frontend/element_ready/ha-advanced-data-table.default", DataTable); 1699 elementorFrontend.hooks.addAction("frontend/element_ready/ha-twitter-carousel.default", function ($scope) { 1700 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1701 $element: $scope, 1702 selectors: { 1703 container: ".ha-tweet-carousel-items" 1704 } 1705 }); 1706 }); // Post Carousel
1707 1708 elementorFrontend.hooks.addAction("frontend/element_ready/ha-post-carousel.default", function ($scope) { 1709 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1710 $element: $scope, 1711 selectors: { 1712 container: ".ha-posts-carousel-wrapper" 1713 }, 1714 prevArrow: '<button type="button" class="slick-prev"><i class="hm hm-arrow-left"></i></button>', 1715 nextArrow: '<button type="button" class="slick-next"><i class="hm hm-arrow-right"></i></button>' 1716 }); 1717 }); // EDD Download product carousel 1718 1719 function initEddCarousel($scope) { 1720 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1721 $element: $scope, 1722 selectors: { 1723 container: ".ha-edd-product-carousel-wrapper" 1724 }, 1725 prevArrow: '<button type="button" class="slick-prev"><i class="hm hm-arrow-left"></i></button>', 1726 nextArrow: '<button type="button" class="slick-next"><i class="hm hm-arrow-right"></i></button>' 1727 }); 1728 } 1729 1730 function eddCarouselHandlerCallback($scope) { 1731 initEddCarousel($scope); 1732 initProductQuickView($scope); // if ( 1733 // $scope 1734 // .find(".ha-edd-product-carousel-wrapper") 1735 // .hasClass("ha-layout-classic") 1736 // ) { 1737 // $scope 1738 // .find(".ha-product-carousel-add-to-cart a") 1739 // .html('<i class="fas fa-shopping-cart"></i>'); 1740 // } 1741 } // Carousel 1742 1743 1744 elementorFrontend.hooks.addAction("frontend/element_ready/ha-edd-product-carousel.default", eddCarouselHandlerCallback); // product carousel 1745 1746 function initProductCarousel($scope) { 1747 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1748 $element: $scope, 1749 selectors: { 1750 container: ".ha-product-carousel-wrapper" 1751 }, 1752 prevArrow: '<button type="button" class="slick-prev"><i class="hm hm-arrow-left"></i></button>', 1753 nextArrow: '<button type="button" class="slick-next"><i class="hm hm-arrow-right"></i></button>' 1754 }); 1755 } 1756 1757 function productCarouselHandlerCallback($scope) { 1758 initProductCarousel($scope); 1759 initProductQuickView($scope); 1760 1761 if ($scope.find(".ha-product-carousel-wrapper").hasClass("ha-layout-modern")) { 1762 $scope.find(".ha-product-carousel-add-to-cart a").html('<i class="fas fa-shopping-cart"></i>'); 1763 } 1764 } 1765 1766 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-carousel.classic", productCarouselHandlerCallback); 1767 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-carousel.modern", productCarouselHandlerCallback); 1768 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-carousel-new.default", productCarouselHandlerCallback); // product category carousel 1769 1770 var productCategoryCarouselSkins = ["classic", "minimal"]; 1771 1772 function initProductCategoryCarousel($scope) { 1773 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1774 $element: $scope, 1775 selectors: { 1776 container: ".ha-product-cat-carousel" 1777 }, 1778 prevArrow: '<button type="button" class="slick-prev"><i class="hm hm-arrow-left"></i></button>', 1779 nextArrow: '<button type="button" class="slick-next"><i class="hm hm-arrow-right"></i></button>' 1780 }); 1781 } 1782 1783 productCategoryCarouselSkins.forEach(function (index) { 1784 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-category-carousel." + index, initProductCategoryCarousel); 1785 }); 1786 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-category-carousel-new.default", initProductCategoryCarousel); // EDD category carousel 1787 1788 elementorFrontend.hooks.addAction("frontend/element_ready/ha-edd-category-carousel.default", initProductCategoryCarousel); 1789 postGridSkins.forEach(function (index) { 1790 elementorFrontend.hooks.addAction("frontend/element_ready/ha-post-grid." + index, PostGrid); 1791 }); 1792 elementorFrontend.hooks.addAction("frontend/element_ready/ha-post-grid-new.default", PostGrid); 1793 elementorFrontend.hooks.addAction("frontend/element_ready/ha-sticky-video.default", StickyVideo); 1794 elementorFrontend.hooks.addAction("frontend/element_ready/ha-modal-popup.default", ModalPopup); 1795 1796 function initProductQuickView($scope) { 1797 var $button = $scope.find(".ha-pqv-btn"); 1798 1799 if (!$.fn["magnificPopup"]) { 1800 return; 1801 } 1802 1803 $button.magnificPopup({ 1804 type: "ajax", 1805 ajax: { 1806 settings: { 1807 cache: true, 1808 dataType: "html" 1809 }, 1810 cursor: "mfp-ajax-cur", 1811 tError: "The product could not be loaded." 1812 }, 1813 callbacks: { 1814 ajaxContentAdded: function ajaxContentAdded() { 1815 $(this.content).addClass(this.currItem.el.data("modal-class")); 1816 } 1817 } 1818 }); 1819 } 1820 1821 var initOnePageNav = elementorModules.frontend.handlers.Base.extend({ 1822 onInit: function onInit() { 1823 elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); 1824 this.run(); 1825 }, 1826 onElementChange: function onElementChange(e) { 1827 if (e == 'scroll_wheel' || e == 'touch_swipe' || e == 'scroll_keys') { 1828 this.run(); 1829 } 1830 }, 1831 getReadySettings: function getReadySettings() { 1832 var settings = { 1833 design: this.getElementSettings('select_design'), 1834 speed: this.getElementSettings('scrolling_speed') || 700, 1835 offset: this.getElementSettings('row_to_offset') || 0, 1836 threshold: this.getEditSettings('section_threshold') || 0.50, 1837 scrollWheel: this.getElementSettings('scroll_wheel') == 'yes', 1838 touchSwipe: this.getElementSettings('touch_swipe') == 'yes', 1839 scrollKeys: this.getElementSettings('scroll_keys') == 'yes' 1840 }; 1841 return $.extend({}
1841, this.getSettings(), settings); 1842 }, 1843 scroll: function scroll(id, speed, offset) { 1844 $('html, body').animate({ 1845 scrollTop: $('#' + id).offset().top - offset 1846 }, speed); 1847 }, 1848 run: function run() { 1849 var $this = this; 1850 var settings = this.getReadySettings(); 1851 var track = false; 1852 var $navWrapper = settings.design == 'ha-opn-design-default' ? this.$element.find(".ha-opn-dotted-item") : this.$element.find(".ha_opn__item"); 1853 $navWrapper.on('click', function (e) { 1854 e.preventDefault(); 1855 var targetId = $(this).find('a').data("section-id"); 1856 1857 if ($('#' + targetId).length > 0) { 1858 track = false; 1859 $this.scroll(targetId, settings.speed, settings.offset); 1860 $navWrapper.removeClass('ha_opn__item--current'); 1861 $(this).addClass('ha_opn__item--current'); 1862 } 1863 }); 1864 var sections = []; 1865 var navItems = {}; 1866 1867 if ($navWrapper.length > 0) { 1868 $.each($navWrapper, function (index, nav) { 1869 var targetId = $(this).find('a').data('section-id'); 1870 var targetSection = $('#' + targetId); 1871 sections.push(targetSection[0]); 1872 navItems[targetId] = $(this)[0]; 1873 }); 1874 } 1875 1876 var observerOptions = { 1877 root: null, 1878 rootMargin: "0px 0px -100px 0px", 1879 threshold: settings.threshold 1880 }; 1881 var currentEvent; 1882 var observer = new IntersectionObserver(function (entries) { 1883 entries.forEach(function (entry) { 1884 if (entry.isIntersecting) { 1885 var navItem = navItems[entry.target.id]; 1886 navItem.classList.add('ha_opn__item--current'); 1887 Object.values(navItems).forEach(function (item) { 1888 if (item != navItem) { 1889 item.classList.remove('ha_opn__item--current'); 1890 } 1891 }); 1892 1893 if (typeof elementor === 'undefined') { 1894 if (currentEvent == 'load' && track) { 1895 track = false; 1896 $this.scroll(entry.target.id, settings.speed, settings.offset); 1897 } 1898 1899 if (settings.scrollWheel && currentEvent == 'scroll' && track) { 1900 track = false; 1901 $this.scroll(entry.target.id, settings.speed, settings.offset); 1902 } 1903 1904 if (settings.scrollKeys && currentEvent == 'keys' && track) { 1905 track = false; 1906 $this.scroll(entry.target.id, settings.speed, settings.offset); 1907 } 1908 1909 if (settings.touchSwipe && currentEvent == 'touch' && track) { 1910 track = false; 1911 $this.scroll(entry.target.id, settings.speed, settings.offset); 1912 } 1913 } 1914 } 1915 }); 1916 }, observerOptions); 1917 $(window).on('load', function () { 1918 track = true; 1919 1920 if (sections.length > 0) { 1921 sections.forEach(function (sec) { 1922 if (!(sec == undefined)) { 1923 currentEvent = 'load'; 1924 observer.observe(sec); 1925 } 1926 }); 1927 } 1928 }); 1929 $(window).on('mousewheel DOMMouseScroll', debounce(function (e) { 1930 track = true; 1931 1932 if (sections.length > 0) { 1933 sections.forEach(function (sec) { 1934 if (!(sec == undefined)) { 1935 currentEvent = 'scroll'; 1936 observer.observe(sec); 1937 } 1938 }); 1939 } 1940 }, 200)); 1941 1942 if (typeof elementor === 'undefined') { 1943 if (settings.scrollKeys) { 1944 $(window).on('keydown', debounce(function (evt) { 1945 track = true; 1946 var code = parseInt(evt.keyCode); // code == 38 for arrow up key 1947 // code == 40 for arrow up key 1948 1949 if (sections.length > 0) { 1950 sections.forEach(function (sec) { 1951 if (!(sec == undefined)) { 1952 currentEvent = 'keys'; 1953 observer.observe(sec); 1954 } 1955 }); 1956 } 1957 }, 200)); 1958 } 1959 1960 if (settings.touchSwipe) { 1961 $(window).on('touchmove', debounce(function (evt) { 1962 track = true; 1963 1964 if (sections.length > 0) { 1965 sections.forEach(function (sec) { 1966 if (!(sec == undefined)) { 1967 currentEvent = 'touch'; 1968 observer.observe(sec); 1969 } 1970 }); 1971 } 1972 }, 200)); 1973 } 1974 } 1975 } 1976 }); 1977 elementorFrontend.hooks.addAction("frontend/element_ready/ha-one-page-nav.default", function ($scope) { 1978 elementorFrontend.elementsHandler.addHandler(initOnePageNav, { 1979 $element: $scope 1980 }); 1981 }); // advancedSliderHandler 1982 1983 elementorFrontend.hooks.addAction("frontend/element_ready/ha-advanced-slider.default", function ($scope) { 1984 elementorFrontend.elementsHandler.addHandler(SliderBase, { 1985 $element: $scope, 1986 selectors: { 1987 container: ".ha-slider-widget-wrapper" 1988 } 1989 }); 1990 }); 1991 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-grid.classic", initProductQuickView); 1992 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-grid.hover", initProductQuickView); 1993 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-grid-new.default", initProductQuickView); 1994 elementorFrontend.hooks.addAction("frontend/element_ready/ha-single-product.classic", initProductQuickView); 1995 elementorFrontend.hooks.addAction("frontend/element_ready/ha-single-product.
1995standard", initProductQuickView); 1996 elementorFrontend.hooks.addAction("frontend/element_ready/ha-single-product.landscape", initProductQuickView); 1997 elementorFrontend.hooks.addAction("frontend/element_ready/ha-single-product-new.default", initProductQuickView); 1998 elementorFrontend.hooks.addAction("frontend/element_ready/ha-edd-single-product.default", initProductQuickView); 1999 elementorFrontend.hooks.addAction("frontend/element_ready/ha-edd-product-grid.default", initProductQuickView); 2000 $(document.body).on("added_to_cart", function (event, fragment, hash, $addToCart) { 2001 if ($addToCart != undefined && $addToCart.length > 0) { 2002 $addToCart.parent(".ha-product-grid__btns").removeClass("ha-is--adding").addClass("ha-is--added"); 2003 } 2004 }); 2005 elementorFrontend.hooks.addAction("frontend/element_ready/ha-mini-cart.default", miniCart); 2006 elementorFrontend.hooks.addAction("frontend/element_ready/ha-image-scroller.default", function ($scope) { 2007 elementorFrontend.elementsHandler.addHandler(ImageScroller, { 2008 $element: $scope 2009 }); 2010 }); 2011 elementorFrontend.hooks.addAction("frontend/element_ready/ha-nav-menu.default", NavMenu); // Off Canvas 2012 2013 var $trigger; 2014 2015 var OffCanvas = function OffCanvas($scope) { 2016 this.node = $scope; 2017 this.wrap = $scope.find(".ha-offcanvas-content-wrap"); 2018 this.cart_wrap = $scope.find(".ha-offcanvas-cart-container"); 2019 this.content = $scope.find(".ha-offcanvas-content"); 2020 this.button = $scope.find(".ha-offcanvas-toggle"); 2021 this.settings = this.wrap.data("settings"); 2022 this.toggle_source = this.settings.toggle_source; 2023 this.id = this.settings.content_id; 2024 this.toggle_id = this.settings.toggle_id; 2025 this.toggle_class = this.settings.toggle_class; 2026 this.transition = this.settings.transition; 2027 this.esc_close = this.settings.esc_close; 2028 this.body_click_close = this.settings.body_click_close; 2029 this.links_click_close = this.settings.links_click_close; 2030 this.direction = this.settings.direction; 2031 this.buttons_position = this.settings.buttons_position; 2032 this.duration = 500; 2033 this.destroy(); 2034 this.init(); 2035 }; 2036 2037 OffCanvas.prototype = { 2038 id: "", 2039 node: "", 2040 wrap: "", 2041 content: "", 2042 button: "", 2043 settings: {}, 2044 transition: "", 2045 duration: 400, 2046 initialized: false, 2047 animations: ["slide", "slide-along", "reveal", "push"], 2048 init: function init() { 2049 if (!this.wrap.length) { 2050 return; 2051 } 2052 2053 $("html").addClass("ha-offcanvas-content-widget"); 2054 2055 if ($(".ha-offcanvas-container").length === 0) { 2056 var faProJs = $("#font-awesome-pro-js").length > 0 ? $("#font-awesome-pro-js").attr("src") : false; 2057 2058 if (faProJs) { 2059 $("#font-awesome-pro-js").remove(); 2060 } 2061 2062 $("body").wrapInner('<div class="ha-offcanvas-container" />'); 2063 this.content.insertBefore(".ha-offcanvas-container"); 2064 2065 if (faProJs) { 2066 $("body").append('<script type="text/javascript" id="font-awesome-pro-js" src="' + faProJs + '"></script>'); 2067 } 2068 } 2069 2070 if (this.wrap.find(".ha-offcanvas-content").length > 0) { 2071 if ($(".ha-offcanvas-container > .ha-offcanvas-content-" + this.id).length > 0) { 2072 $(".ha-offcanvas-container > .ha-offcanvas-content-" + this.id).remove(); 2073 } 2074 2075 if ($("body > .ha-offcanvas-content-" + this.id).length > 0) { 2076 $("body > .ha-offcanvas-content-" + this.id).remove(); 2077 } 2078 2079 $("body").prepend(this.wrap.find(".ha-offcanvas-content")); 2080 } 2081 2082 this.bindEvents(); 2083 }, 2084 destroy: function destroy() { 2085 this.close(); 2086 this.animations.forEach(function (animation) { 2087 if ($("html").hasClass("ha-offcanvas-content-" + animation)) { 2088 $("html").removeClass("ha-offcanvas-content-" + animation); 2089 } 2090 }); 2091 2092 if ($("body > .ha-offcanvas-content-" + this.id).length > 0) {//$('body > .ha-offcanvas-content-' + this.id ).remove(); 2093 } 2094 }, 2095 setTrigger: function setTrigger() { 2096 var $trigger = false;
2097 2098 if (this.toggle_source == "element-id" && this.toggle_id != "") { 2099 $trigger = $("#" + this.toggle_id); 2100 } else if (this.toggle_source == "element-class" && this.toggle_class != "") { 2101 $trigger = $("." + this.toggle_class); 2102 } else { 2103 $trigger = this.node.find(".ha-offcanvas-toggle"); 2104 } 2105 2106 return $trigger; 2107 }, 2108 bindEvents: function bindEvents() { 2109 $trigger = this.setTrigger(); 2110 2111 if ($trigger) { 2112 $trigger.on("click", $.proxy(this.toggleContent, this)); 2113 } 2114 2115 $("body").delegate(".ha-offcanvas-content .ha-offcanvas-close", "click", $.proxy(this.close, this)); 2116 2117 if (this.links_click_close === "yes") { 2118 $("body").delegate(".ha-offcanvas-content .ha-offcanvas-body a", "click", $.proxy(this.close, this)); 2119 } 2120 2121 if (this.esc_close === "yes") { 2122 this.closeESC(); 2123 } 2124 2125 if (this.body_click_close === "yes") { 2126 this.closeClick(); 2127 } 2128 2129 $(window).resize($.proxy(this._resize, this)); 2130 }, 2131 toggleContent: function toggleContent(e) { 2132 e.preventDefault(); 2133 2134 if (!$("html").hasClass("ha-offcanvas-content-open")) { 2135 this.show(); 2136 } else { 2137 this.close(); 2138 } 2139 2140 this._resize(); 2141 }, 2142 show: function show() { 2143 $(".ha-offcanvas-content-" + this.id).addClass("ha-offcanvas-content-visible"); // init animation class. 2144 2145 $("html").addClass("ha-offcanvas-content-" + this.transition); 2146 $("html").addClass("ha-offcanvas-content-" + this.direction); 2147 $("html").addClass("ha-offcanvas-content-open"); 2148 $("html").addClass("ha-offcanvas-content-" + this.id + "-open"); 2149 $("html").addClass("ha-offcanvas-content-reset"); 2150 this.button.addClass("ha-is-active"); 2151 2152 this._resize(); 2153 }, 2154 close: function close() { 2155 $("html").removeClass("ha-offcanvas-content-open"); 2156 $("html").removeClass("ha-offcanvas-content-" + this.id + "-open"); 2157 setTimeout($.proxy(function () { 2158 $("html").removeClass("ha-offcanvas-content-reset"); 2159 $("html").removeClass("ha-offcanvas-content-" + this.transition); 2160 $("html").removeClass("ha-offcanvas-content-" + this.direction); 2161 $(".ha-offcanvas-content-" + this.id).removeClass("ha-offcanvas-content-visible"); 2162 }, this), 500); 2163 this.button.removeClass("ha-is-active"); 2164 }, 2165 closeESC: function closeESC() { 2166 var self = this; 2167 2168 if ("" === self.settings.esc_close) { 2169 return; 2170 } // menu close on ESC key 2171 2172 2173 $(document).on("keydown", function (e) { 2174 if (e.keyCode === 27) { 2175 self.close(); 2176 } 2177 }); 2178 }, 2179 closeClick: function closeClick() { 2180 var self = this; 2181 2182 if (this.toggle_source == "element-id" && this.toggle_id != "") { 2183 $trigger = "#" + this.toggle_id; 2184 } else if (this.toggle_source == "element-class" && this.toggle_class != "") { 2185 $trigger = "." + this.toggle_class; 2186 } else { 2187 $trigger = ".ha-offcanvas-toggle"; 2188 } 2189 2190 $(document).on("click", function (e) { 2191 if ($(e.target).is(".ha-offcanvas-content") || $(e.target).parents(".ha-offcanvas-content").length > 0 || $(e.target).is(".ha-offcanvas-toggle") || $(e.target).parents(".ha-offcanvas-toggle").length > 0 || $(e.target).is($trigger) || $(e.target).parents($trigger).length > 0 || !$(e.target).is(".ha-offcanvas-container")) { 2192 return; 2193 } else { 2194 self.close(); 2195 } 2196 }); 2197 }, 2198 _resize: function _resize() { 2199 if (!this.cart_wrap.length) { 2200 return; 2201 } 2202 2203 var off_canvas = $(".ha-offcanvas-content-" + this.id); 2204 2205 if (off_canvas && off_canvas.length > 0) { 2206 if (this.buttons_position === "bottom") { 2207 var winHeight = window.innerHeight; 2208 var offset = 0; 2209 2210 if ($("body").hasClass("admin-bar")) { 2211 offset = 32; 2212 } 2213 2214 winHeight = winHeight - offset; 2215 off_canvas.find(".ha-offcanvas-inner").css({ 2216 height: winHeight + "px", 2217 top: offset 2218 }); 2219 headerHeight = off_canvas.find(".ha-offcanvas-cart-header").outerHeight(true); 2220 wrapHeight = off_canvas.find(".ha-offcanvas-wrap").outerHeight(); 2221 cartTotalHeight = off_canvas.find(".woocommerce-mini-cart__total").outerHeight(); 2222 cartButtonsHeight = off_canvas.find(".woocommerce-mini-cart__buttons").outerHeight(); 2223 cartMessageHeight = off_canvas.find(".ha-woo-menu-cart-message").outerHeight(); 2224 itemsHeight = winHeight - (headerHeight + cartTotalHeight + cartButtonsHeight + cartMessageHeight); 2225 finalItemsHeight = itemsHeight - (winHeight - wrapHeight); 2226 finalItemsHeight += "px"; 2227 } else { 2228 finalItemsHeight = "auto"; 2229 } 2230 2231 var style = '<style id="ha-woo-style-' + this.id + '">'; 2232 style += "#" + off_canvas.attr("id") + " .woocommerce-mini-cart.cart_list {"; 2233 style += "height: " + finalItemsHeight; 2234 style += "}"; 2235 style += "</style>"; 2236 2237 if ($("#ha-woopack-style-" + this.id).length > 0) { 2238 $("#ha-woopack-style-" + this.id).remove(); 2239 } 2240 2241 $("head").append(style); 2242 } 2243 } 2244 }; 2245 2246 var initOffCanvas = function initOffCanvas($scope, $) { 2247 var content_wrap = $scope.find(".ha-offcanvas-content-wrap"); 2248 2249 if ($(content_wrap).length > 0) { 2250 new OffCanvas($scope); 2251 } 2252 }; 2253 2254 elementorFrontend.hooks.addAction("frontend/element_ready/ha-off-canvas.default", initOffCanvas); 2255 var Unfold = elementorModules.frontend.handlers.Base.extend({ 2256 onInit: function onInit() { 2257 elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); 2258 this.run(); 2259 }, 2260 onElementChange: function onElementChange(e) { 2261 if (e == "unfold_text" || e == "unfold_icon" || e == "fold_text" || e == "fold_icon" || e == "fold_height" || e == "transition_duration" || e == "trigger") { 2262 this.run(); 2263 2264 if (e == "fold_height") { 2265 this.$element.find(".ha-unfold-data").css("height", this.getCollapseHeight() + "px"); 2266 } 2267 } 2268 }, 2269 getReadySettings: function getReadySettings() { 2270 var settings = { 2271 collapse_height: this.getElementSettings("fold_height") || 50,
2272 collapse_height_tablet: this.getElementSettings("fold_height_tablet") || this.getElementSettings("fold_height") || 50, 2273 collapse_height_mobile: this.getElementSettings("fold_height_mobile") || this.getElementSettings("fold_height_tablet") || this.getElementSettings("fold_height") || 50, 2274 trigger: this.getElementSettings("trigger"), 2275 transition_duration: this.getElementSettings("transition_duration") || 500, 2276 collapse_text: this.getElementSettings("unfold_text"), 2277 collapse_icon: this.getElementSettings("unfold_icon"), 2278 expand_text: this.getElementSettings("fold_text"), 2279 expand_icon: this.getElementSettings("fold_icon") 2280 }; 2281 return $.extend({}, settings); 2282 }, 2283 getCollapseHeight: function getCollapseHeight() { 2284 var body = this.$element.parents("body"); 2285 var unfoldSettings = this.getReadySettings(); 2286 var collapse_height = 50; 2287 2288 if (body.attr("data-elementor-device-mode") == "desktop") { 2289 collapse_height = unfoldSettings.collapse_height; 2290 } 2291 2292 if (body.attr("data-elementor-device-mode") == "tablet") { 2293 collapse_height = unfoldSettings.collapse_height_tablet; 2294 } 2295 2296 if (body.attr("data-elementor-device-mode") == "mobile") { 2297 collapse_height = unfoldSettings.collapse_height_mobile; 2298 } 2299 2300 return collapse_height; 2301 }, 2302 fold: function fold(unfoldData, button, collapse_height, unfoldRender) { 2303 var unfoldSettings = this.getReadySettings(); 2304 var html = unfoldSettings.collapse_icon ? unfoldSettings.collapse_icon.value ? '<i aria-hidden="true" class="' + unfoldSettings.collapse_icon.value + '"></i>' : "" : ""; 2305 html += unfoldSettings.collapse_text ? "<span>" + unfoldSettings.collapse_text + "</span>" : ""; 2306 unfoldData.css({ 2307 "transition-duration": unfoldSettings.transition_duration + "ms", 2308 "height": unfoldRender.outerHeight(true) + 'px' 2309 }); 2310 unfoldData.animate({ 2311 height: collapse_height 2312 }, 0); 2313 var timeOut = setTimeout(function () { 2314 button.html(html); 2315 clearTimeout(timeOut); 2316 }, unfoldSettings.transition_duration); 2317 unfoldData.removeClass("folded"); 2318 }, 2319 unfold: function unfold(unfoldData, unfoldRender, button) { 2320 var unfoldSettings = this.getReadySettings(); 2321 var html = unfoldSettings.expand_icon ? unfoldSettings.expand_icon.value ? '<i aria-hidden="true" class="' + unfoldSettings.expand_icon.value + '"></i>' : "" : ""; 2322 html += unfoldSettings.expand_text ? "<span>" + unfoldSettings.expand_text + "</span>" : ""; 2323 unfoldData.css("transition-duration", unfoldSettings.transition_duration + "ms"); 2324 unfoldData.animate({ 2325 height: unfoldRender.outerHeight(true) 2326 }, 0); 2327 var timeOut = setTimeout(function () { 2328 unfoldData.css("height", 'auto'); 2329 button.html(html); 2330 clearTimeout(timeOut); 2331 }, unfoldSettings.transition_duration); 2332 unfoldData.addClass("folded"); 2333 }, 2334 run: function run() { 2335 var $this = this; 2336 var button = this.$element.find(".ha-unfold-btn"), 2337 unfoldData = this.$element.find(".ha-unfold-data"), 2338 unfoldRender = this.$element.find(".ha-unfold-data-render"); 2339 var unfoldSettings = this.getReadySettings(); 2340 var collapse_height = $this.getCollapseHeight(); 2341 unfoldData.css("height", collapse_height + "px"); 2342 2343 if (unfoldSettings.trigger == "click") { 2344 button.on("click", function () { 2345 collapse_height = $this.getCollapseHeight(); 2346 2347 if (unfoldData.hasClass("folded")) { 2348 $this.fold(unfoldData, button, collapse_height, unfoldRender); 2349 } else { 2350 $this.unfold(unfoldData, unfoldRender, button); 2351 } 2352 }); 2353 } else if (unfoldSettings.trigger == "hover") { 2354 unfoldData.on("mouseenter", function () { 2355 $this.unfold(unfoldData, unfoldRender, button); 2356 }); 2357 unfoldData.on("mouseleave", function () { 2358 collapse_height = $this.getCollapseHeight(); 2359 $this.fold(unfoldData, button, collapse_height, unfoldRender); 2360 }); 2361 } 2362 } 2363 }); 2364 var Maps = elementorModules.frontend.handlers.Base.extend({ 2365 onInit: function onInit() { 2366 elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); 2367 this.runMap(); 2368 }, 2369 defaultStyle: function defaultStyle() { 2370 var defaultStyles = { 2371 standard: "", 2372 silver: [{ 2373 elementType: "geometry", 2374 stylers: [{ 2375 color: "#f5f5f5" 2376 }] 2377 }, { 2378 elementType: "labels.icon", 2379 stylers: [{ 2380 visibility: "off" 2381 }] 2382 }, { 2383 elementType: "labels.text.fill", 2384 stylers: [{ 2385 color: "#616161" 2386 }] 2387 }, { 2388 elementType: "labels.text.stroke", 2389 stylers: [{ 2390 color: "#f5f5f5" 2391 }] 2392 }, { 2393 featureType: "administrative.land_parcel", 2394 elementType: "labels.text.fill", 2395 stylers: [{ 2396 color: "#bdbdbd" 2397 }] 2398 }, { 2399 featureType: "poi", 2400 elementType: "geometry", 2401 stylers: [{ 2402 color: "#eeeeee" 2403 }] 2404 }, { 2405 featureType: "poi", 2406 elementType: "labels.text.fill", 2407 stylers: [{ 2408 color: "#757575" 2409 }] 2410 }, { 2411 featureType: "poi.park", 2412 elementType: "geometry", 2413 stylers: [{ 2414 color: "#e5e5e5" 2415 }] 2416 }, { 2417 featureType: "poi.park", 2418 elementType: "labels.text.fill", 2419 stylers: [{ 2420 color: "#9e9e9e" 2421 }] 2422 }, { 2423 featureType: "road", 2424 elementType: "geometry", 2425 stylers: [{ 2426 color: "#ffffff" 2427 }] 2428 }, { 2429 featureType: "road.arterial", 2430 elementType: "labels.text.fill", 2431 stylers: [{ 2432 color: "#757575" 2433 }] 2434 }, { 2435 featureType: "road.highway", 2436 elementType: "geometry", 2437 stylers: [{ 2438 color: "#dadada" 2439 }] 2440 }, { 2441 featureType: "road.highway", 2442 elementType: "labels.text.fill", 2443 stylers: [{ 2444 color: "#616161" 2445 }] 2446 }, { 2447 featureType: "road.local", 2448 elementType: "labels.text.fill", 2449 stylers: [{ 2450 color: "#9e9e9e" 2451 }] 2452 }, { 2453 featureType: "transit.line", 2454 elementType: "geometry", 2455 stylers: [{ 2456 color: "#e5e5e5" 2457 }] 2458 }, { 2459 featureType: "transit.station", 2460 elementType: "geometry", 2461 stylers: [{ 2462 color: "#eeeeee" 2463 }] 2464 }, { 2465 featureType: "water", 2466 elementType: "geometry", 2467 stylers: [{ 2468 color: "#c9c9c9" 2469 }] 2470 }, { 2471 featureType: "water", 2472 elementType: "labels.text.fill", 2473 stylers: [{ 2474 color: "#9e9e9e" 2475 }] 2476 }], 2477 retro: [{ 2478 elementType: "geometry", 2479 stylers: [{ 2480 color: "#ebe3cd" 2481 }] 2482 }, { 2483 elementType: "labels.text.fill", 2484 stylers: [{ 2485 color: "#523735" 2486 }] 2487 }, { 2488 elementType: "labels.text.stroke", 2489 stylers: [{ 2490 color: "#f5f1e6" 2491 }] 2492 }, { 2493 featureType: "administrative", 2494 elementType: "geometry.stroke", 2495 stylers: [{ 2496 color: "#c9b2a6" 2497 }] 2498 }, { 2499 featureType: "administrative.land_parcel", 2500 elementType: "geometry.stroke", 2501 stylers: [{ 2502 color: "#dcd2be" 2503 }] 2504 }, { 2505 featureType: "administrative.land_parcel", 2506 elementType: "labels.text.fill", 2507 stylers: [{ 2508 color: "#ae9e90" 2509 }] 2510 }, { 2511 featureType: "landscape.natural", 2512 elementType: "geometry", 2513 stylers: [{ 2514 color: "#dfd2ae" 2515 }] 2516 }, { 2517 featureType: "poi", 2518 elementType: "geometry", 2519 stylers: [{ 2520 color: "#dfd2ae" 2521 }] 2522 }, { 2523 featureType: "poi", 2524 elementType: "labels.text.fill", 2525 stylers: [{ 2526 color: "#93817c" 2527 }] 2528 }, { 2529 featureType: "poi.park", 2530 elementType: "geometry.fill", 2531 stylers: [{ 2532 color: "#a5b076" 2533 }] 2534 }, { 2535 featureType: "poi.park", 2536 elementType: "labels.text.fill", 2537 stylers: [{ 2538 color: "#447530" 2539 }] 2540 }, { 2541 featureType: "road", 2542 elementType: "geometry", 2543 stylers: [{ 2544 color: "#f5f1e6" 2545 }] 2546 }, { 2547 featureType: "road.arterial", 2548 elementType: "geometry", 2549 stylers: [{ 2550 color: "#fdfcf8" 2551 }] 2552 }, { 2553 featureType: "road.highway", 2554 elementType: "geometry", 2555 stylers: [{ 2556 color: "#f8c967" 2557 }] 2558 }, { 2559 featureType: "road.highway", 2560 elementType: "geometry.stroke", 2561 stylers: [{ 2562 color: "#e9bc62" 2563 }] 2564 }, { 2565 featureType: "road.highway.controlled_access", 2566 elementType: "geometry", 2567 stylers: [{ 2568 color: "#e98d58" 2569 }] 2570 }, { 2571 featureType: "road.highway.controlled_access", 2572 elementType: "geometry.stroke", 2573 stylers: [{ 2574 color: "#db8555" 2575 }] 2576 }, { 2577 featureType: "road.local", 2578 elementType: "labels.text.fill", 2579 stylers: [{ 2580 color: "#806b63" 2581 }] 2582 }, { 2583 featureType: "transit.line", 2584 elementType: "geometry", 2585 stylers: [{ 2586 color: "#dfd2ae" 2587 }] 2588 }, { 2589 featureType: "transit.line", 2590 elementType: "labels.text.fill", 2591 stylers: [{ 2592 color: "#8f7d77" 2593 }] 2594 }, { 2595 featureType: "transit.line", 2596 elementType: "labels.text.stroke", 2597 stylers: [{ 2598 color: "#ebe3cd" 2599 }] 2600 }, { 2601 featureType: "transit.station", 2602 elementType: "geometry", 2603 stylers: [{ 2604 color: "#dfd2ae" 2605 }] 2606 }, { 2607 featureType: "water", 2608 elementType: "geometry.fill", 2609 stylers: [{ 2610 color: "#b9d3c2" 2611 }] 2612 }, { 2613 featureType: "water", 2614 elementType: "labels.text.fill", 2615 stylers: [{ 2616 color: "#92998d" 2617 }] 2618 }], 2619 dark: [{ 2620 elementType: "geometry", 2621 stylers: [{ 2622 color: "#212121" 2623 }] 2624 }, { 2625 elementType: "labels.icon", 2626 stylers: [{ 2627 visibility: "off" 2628 }] 2629 }, { 2630 elementType: "labels.text.fill", 2631 stylers: [{ 2632 color: "#757575" 2633 }] 2634 }, { 2635 elementType: "labels.text.stroke", 2636 stylers: [{ 2637 color: "#212121" 2638 }] 2639 }, { 2640 featureType: "administrative", 2641 elementType: "geometry", 2642 stylers: [{ 2643 color: "#757575" 2644 }] 2645 }, { 2646 featureType: "administrative.country", 2647 elementType: "labels.text.fill", 2648 stylers: [{ 2649 color: "#9e9e9e" 2650 }] 2651 }, { 2652 featureType: "administrative.land_parcel", 2653 stylers: [{ 2654 visibility: "off" 2655 }] 2656 }, { 2657 featureType: "administrative.locality", 2658 elementType: "labels.text.fill", 2659 stylers: [{ 2660 color: "#bdbdbd" 2661 }] 2662 }, { 2663 featureType: "poi", 2664 elementType: "labels.text.fill", 2665 stylers: [{ 2666 color: "#757575" 2667 }] 2668 }, { 2669 featureType: "poi.park", 2670 elementType: "geometry", 2671 stylers: [{ 2672 color: "#181818" 2673 }] 2674 }, { 2675 featureType: "poi.park", 2676 elementType: "labels.text.fill", 2677 stylers: [{ 2678 color: "#616161" 2679 }] 2680 }, { 2681 featureType: "poi.park", 2682 elementType: "labels.text.stroke", 2683 stylers: [{ 2684 color: "#1b1b1b" 2685 }] 2686 }, { 2687 featureType: "road", 2688 elementType: "geometry.fill", 2689 stylers: [{ 2690 color: "#2c2c2c" 2691 }] 2692 }, { 2693 featureType: "road", 2694 elementType: "labels.text.fill", 2695 stylers: [{ 2696 color: "#8a8a8a" 2697 }] 2698 }, { 2699 featureType: "road.arterial", 2700 elementType: "geometry", 2701 stylers: [{ 2702 color: "#373737" 2703 }] 2704 }, { 2705 featureType: "road.highway", 2706 elementType: "geometry", 2707 stylers: [{ 2708 color: "#3c3c3c" 2709 }] 2710 }, { 2711 featureType: "road.highway.controlled_access", 2712 elementType: "geometry", 2713 stylers: [{ 2714 color: "#4e4e4e" 2715 }] 2716 }, { 2717 featureType: "road.local", 2718 elementType: "labels.text.fill", 2719 stylers: [{ 2720 color: "#616161" 2721 }] 2722 }, { 2723 featureType: "transit", 2724 elementType: "labels.text.fill", 2725 stylers: [{ 2726 color: "#757575" 2727 }] 2728 }, { 2729 featureType: "water", 2730 elementType: "geometry", 2731 stylers: [{ 2732 color: "#000000" 2733 }] 2734 }, { 2735 featureType: "water", 2736 elementType: "labels.text.fill", 2737 stylers: [{ 2738 color: "#3d3d3d" 2739 }] 2740 }], 2741 night: [{ 2742 elementType: "geometry", 2743 stylers: [{ 2744 color: "#242f3e" 2745 }] 2746 }, { 2747 elementType: "labels.text.fill", 2748 stylers: [{ 2749 color: "#746855" 2750 }] 2751 }, { 2752 elementType: "labels.text.stroke", 2753 stylers: [{ 2754 color: "#242f3e" 2755 }] 2756 }, { 2757 featureType: "administrative.locality", 2758 elementType: "labels.text.fill", 2759 stylers: [{ 2760 color: "#d59563" 2761 }] 2762 }, { 2763 featureType: "poi", 2764 elementType: "labels.text.fill", 2765 stylers: [{ 2766 color: "#d59563" 2767 }] 2768 }, { 2769 featureType: "poi.park", 2770 elementType: "geometry", 2771 stylers: [{ 2772 color: "#263c3f" 2773 }] 2774 }, { 2775 featureType: "poi.park", 2776 elementType: "labels.text.fill", 2777 stylers: [{ 2778 color: "#6b9a76" 2779 }] 2780 }, { 2781 featureType: "road", 2782 elementType: "geometry", 2783 stylers: [{ 2784 color: "#38414e" 2785 }] 2786 }, { 2787 featureType: "road", 2788 elementType: "geometry.stroke", 2789 stylers: [{ 2790 color: "#212a37" 2791 }] 2792 }, { 2793 featureType: "road", 2794 elementType: "labels.text.fill", 2795 stylers: [{ 2796 color: "#9ca5b3" 2797 }] 2798 }, { 2799 featureType: "road.highway", 2800 e
2800lementType: "geometry", 2801 stylers: [{ 2802 color: "#746855" 2803 }] 2804 }, { 2805 featureType: "road.highway", 2806 elementType: "geometry.stroke", 2807 stylers: [{ 2808 color: "#1f2835" 2809 }] 2810 }, { 2811 featureType: "road.highway", 2812 elementType: "labels.text.fill", 2813 stylers: [{ 2814 color: "#f3d19c" 2815 }] 2816 }, { 2817 featureType: "transit", 2818 elementType: "geometry", 2819 stylers: [{ 2820 color: "#2f3948" 2821 }] 2822 }, { 2823 featureType: "transit.station", 2824 elementType: "labels.text.fill", 2825 stylers: [{ 2826 color: "#d59563" 2827 }] 2828 }, { 2829 featureType: "water", 2830 elementType: "geometry", 2831 stylers: [{ 2832 color: "#17263c" 2833 }] 2834 }, { 2835 featureType: "water", 2836 elementType: "labels.text.fill", 2837 stylers: [{ 2838 color: "#515c6d" 2839 }] 2840 }, { 2841 featureType: "water", 2842 elementType: "labels.text.stroke", 2843 stylers: [{ 2844 color: "#17263c" 2845 }] 2846 }], 2847 aubergine: [{ 2848 elementType: "geometry", 2849 stylers: [{ 2850 color: "#1d2c4d" 2851 }] 2852 }, { 2853 elementType: "labels.text.fill", 2854 stylers: [{ 2855 color: "#8ec3b9" 2856 }] 2857 }, { 2858 elementType: "labels.text.stroke", 2859 stylers: [{ 2860 color: "#1a3646" 2861 }] 2862 }, { 2863 featureType: "administrative.country", 2864 elementType: "geometry.stroke", 2865 stylers: [{ 2866 color: "#4b6878" 2867 }] 2868 }, { 2869 featureType: "administrative.land_parcel", 2870 elementType: "labels.text.fill", 2871 stylers: [{ 2872 color: "#64779e" 2873 }] 2874 }, { 2875 featureType: "administrative.province", 2876 elementType: "geometry.stroke", 2877 stylers: [{ 2878 color: "#4b6878" 2879 }] 2880 }, { 2881 featureType: "landscape.man_made", 2882 elementType: "geometry.stroke", 2883 stylers: [{ 2884 color: "#334e87" 2885 }] 2886 }, { 2887 featureType: "landscape.natural", 2888 elementType: "geometry", 2889 stylers: [{ 2890 color: "#023e58" 2891 }] 2892 }, { 2893 featureType: "poi", 2894 elementType: "geometry", 2895 stylers: [{ 2896 color: "#283d6a" 2897 }] 2898 }, { 2899 featureType: "poi", 2900 elementType: "labels.text.fill", 2901 stylers: [{ 2902 color: "#6f9ba5" 2903 }] 2904 }, { 2905 featureType: "poi", 2906 elementType: "labels.text.stroke", 2907 stylers: [{ 2908 color: "#1d2c4d" 2909 }] 2910 }, { 2911 featureType: "poi.park", 2912 elementType: "geometry.fill", 2913 stylers: [{ 2914 color: "#023e58" 2915 }] 2916 }, { 2917 featureType: "poi.park", 2918 elementType: "labels.text.fill", 2919 stylers: [{ 2920 color: "#3C7680" 2921 }] 2922 }, { 2923 featureType: "road", 2924 elementType: "geometry", 2925 stylers: [{ 2926 color: "#304a7d" 2927 }] 2928 }, { 2929 featureType: "road", 2930 elementType: "labels.text.fill", 2931 stylers: [{ 2932 color: "#98a5be" 2933 }] 2934 }, { 2935 featureType: "road", 2936 elementType: "labels.text.stroke", 2937 stylers: [{ 2938 color: "#1d2c4d" 2939 }] 2940 }, { 2941 featureType: "road.highway", 2942 elementType: "geometry", 2943 stylers: [{ 2944 color: "#2c6675" 2945 }] 2946 }, { 2947 featureType: "road.highway", 2948 elementType: "geometry.stroke", 2949 stylers: [{ 2950 color: "#255763" 2951 }] 2952 }, { 2953 featureType: "road.highway", 2954 elementType: "labels.text.fill", 2955 stylers: [{ 2956 color: "#b0d5ce" 2957 }] 2958 }, { 2959 featureType: "road.highway", 2960 elementType: "labels.text.stroke", 2961 stylers: [{ 2962 color: "#023e58" 2963 }] 2964 }, { 2965 featureType: "transit", 2966 elementType: "labels.text.fill", 2967 stylers: [{ 2968 color: "#98a5be" 2969 }] 2970 }, { 2971 featureType: "transit", 2972 elementType: "labels.text.stroke", 2973 stylers: [{ 2974 color: "#1d2c4d" 2975 }] 2976 }, { 2977 featureType: "transit.line", 2978 elementType: "geometry.fill", 2979 stylers: [{ 2980 color: "#283d6a"
2981 }] 2982 }, { 2983 featureType: "transit.station", 2984 elementType: "geometry", 2985 stylers: [{ 2986 color: "#3a4762" 2987 }] 2988 }, { 2989 featureType: "water", 2990 elementType: "geometry", 2991 stylers: [{ 2992 color: "#0e1626" 2993 }] 2994 }, { 2995 featureType: "water", 2996 elementType: "labels.text.fill", 2997 stylers: [{ 2998 color: "#4e6d70" 2999 }] 3000 }] 3001 }; 3002 return defaultStyles; 3003 }, 3004 settings: function settings(wrapper) { 3005 var item = document.querySelector(wrapper); 3006 var settings = { 3007 latitude: parseFloat(item.dataset.latitude), 3008 longitude: parseFloat(item.dataset.longitude), 3009 mapType: item.dataset.mapType, 3010 markers: item.dataset.markers, 3011 polylines: item.dataset.polylines, 3012 mapZoom: parseInt(item.dataset.mapZoom), 3013 mapZoomMobile: parseInt(item.dataset.mapZoomMobile), 3014 mapZoomTablet: parseInt(item.dataset.mapZoomTablet), 3015 scrollWheelZoom: item.dataset.scrollWheelZoom, 3016 zoomControl: item.dataset.zoomControl, 3017 fullscreenControl: item.dataset.fullScreen, 3018 mapDraggable: item.dataset.disableMapDrag, 3019 showLegend: item.dataset.showLegend, 3020 showRoute: item.dataset.showRoute, 3021 googleMapType: item.dataset.googleMapType, 3022 mapTypeControl: item.dataset.mapTypeControl, 3023 streetViewControl: item.dataset.streetView, 3024 infoOpen: item.dataset.infoOpen, 3025 infoOpenHover: item.dataset.infoOpenHover, 3026 mapStyle: item.dataset.mapStyle, 3027 customMapStyles: item.dataset.customMapStyle, 3028 defaultStyle: this.defaultStyle(), 3029 strokeColor: item.dataset.strokeColor, 3030 strokeOpacity: item.dataset.strokeOpacity, 3031 strokeWeight: item.dataset.strokeWeight, 3032 strokeFill: item.dataset.strokeFill, 3033 strokeFillOpacity: item.dataset.strokeFillOpacity, 3034 originLat: item.dataset.originLat, 3035 originLng: item.dataset.originLng, 3036 destLat: item.dataset.destLat, 3037 destLng: item.dataset.destLng, 3038 travelMode: item.dataset.travelMode 3039 }; 3040 return settings; 3041 }, 3042 isValidJsonString: function isValidJsonString(jsonString) { 3043 try { 3044 JSON.parse(jsonString); 3045 } catch (e) { 3046 return false; 3047 } 3048 3049 return true; 3050 }, 3051 mapInit: function mapInit(wrapper) { 3052 var settings = this.settings(wrapper); 3053 var markersOptionsArray = JSON.parse(settings.markers); 3054 var map; 3055 var directionsService = new google.maps.DirectionsService(); 3056 var directionsRenderer = new google.maps.DirectionsRenderer(); 3057 var finalZoomLevel = settings.mapZoom; 3058 window.addEventListener("resize", function () { 3059 if (elementorFrontend.getCurrentDeviceMode() == "mobile") { 3060 finalZoomLevel = settings.mapZoomMobile; 3061 } else if (elementorFrontend.getCurrentDeviceMode() == "tablet") { 3062 finalZoomLevel = settings.mapZoomTablet; 3063 } else { 3064 finalZoomLevel = settings.mapZoom; 3065 } 3066 }); 3067 map = new google.maps.Map(document.querySelector(".ha-adv-google-map__wrapper" + wrapper), { 3068 center: { 3069 lat: settings.latitude === "" ? -34.391 : settings.latitude, 3070 lng: settings.longitude === "" ? 150.644 : settings.longitude 3071 }, 3072 zoom: finalZoomLevel, 3073 mapTypeId: settings.mapType, 3074 zoomControl: settings.zoomControl === "yes", 3075 mapTypeControl: settings.mapTypeControl === "yes", 3076 fullscreenControl: settings.fullscreenControl === "yes", 3077 streetViewControl: settings.streetViewControl === "yes", 3078 gestureHandling: settings.scrollWheelZoom === "yes" ? "greedy" : "cooperative", 3079 draggable: settings.mapDraggable !== "yes", 3080 styles: settings.mapStyle !== "custom" ? settings.defaultStyle[settings.mapStyle] : !this.isValidJsonString(settings.customMapStyles) ? "" : JSON.parse(settings.customMapStyles) 3081 }); 3082 3083 if (settings.mapDraggable === "yes") { 3084 map.setOptions({ 3085 draggableCursor: "default" 3086 }); 3087 } // adding markers and info window on map 3088 3089 3090 markersOptionsArray.forEach(function (option) { 3091 var marker = new google.maps.Marker({ 3092 icon: option.pin_icon.url === "" ? "" : { 3093 url: option.pin_icon.url, 3094 scaledSize: new google.maps.Size(option.rectangular_image === "yes" ? +option.rectangular_pin_size_width.size : +option.square_pin_size.size, option.rectangular_image === "yes" ? +option.rectangular_pin_size_height.size : +option.square_pin_size.size) 3095 }, 3096 map: map, 3097 position: { 3098 lat: +option.pin_latitude, 3099 lng: +option.pin_longitude 3100 } 3101 }); 3102 var infoWindow = new google.maps.InfoWindow({ 3103 content: '<div class="ha-adv-google-map__marker-wrapper">' + '<div class="ha-adv-google-map__marker-title-wrapper">' + '<div class="ha-adv-google-map__marker-title" style="display: inline-block">' + option.pin_item_title + "</div>" + "</div>" + '<div class="ha-adv-google-map__marker-description-wrapper">' + '<div class="ha-adv-google-map__marker-description">' + option.pin_item_description + "</div>" + "</div>" + "</div>" 3104 }); 3105 3106 if (settings.infoOpen === "yes") { 3107 infoWindow.open(map, marker); 3108 } 3109 3110 if (settings.infoOpenHover === "yes") { 3111 marker.addListener("mouseover", function (e) { 3112 infoWindow.open(map, marker); 3113 }); 3114 marker.addListener("mouseout", function (e) { 3115 var timeOut = setTimeout(function () { 3116 infoWindow.close(); 3117 clearTimeout(timeOut); 3118 }, 1000); 3119 }); 3120 } else { 3121 marker.addListener("click", function () { 3122 infoWindow.open(map, marker); 3123 }); 3124 } 3125 }); // adding map legend 3126 3127 if (settings.showLegend === "yes") { 3128 var legend = document.querySelector(wrapper).nextElementSibling; 3129 map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(legend); 3130 } 3131 3132 if (settings.googleMapType == "polyline") { 3133 var polylines_data = JSON.parse(settings.polylines); 3134 var polylines_arr = []; 3135 polylines_data.forEach(function (polyline) { 3136 polylines_arr.push({ 3137 lat: parseFloat(polyline.ha_gmap_polyline_lat), 3138 lng: parseFloat(polyline.ha_gmap_polyline_lng) 3139 }); 3140 }); 3141 var polyLinePath = JSON.parse(JSON.stringify(polylines_arr)); 3142 var polyPath = new google.maps.Polyline({ 3143 path: polyLinePath, 3144 strokeColor: settings.strokeColor, 3145 strokeOpacity: settings.strokeOpacity, 3146 strokeWeight: settings.strokeWeight 3147 });
3148 polyPath.setMap(map); 3149 } 3150 3151 if (settings.googleMapType == "polygon") { 3152 var polylines_data = JSON.parse(settings.polylines); 3153 var polylines_arr = []; 3154 polylines_data.forEach(function (polyline) { 3155 polylines_arr.push({ 3156 lat: parseFloat(polyline.ha_gmap_polyline_lat), 3157 lng: parseFloat(polyline.ha_gmap_polyline_lng) 3158 }); 3159 }); 3160 var polyLinePath = JSON.parse(JSON.stringify(polylines_arr)); 3161 var polygon = new google.maps.Polygon({ 3162 path: polyLinePath, 3163 strokeColor: settings.strokeColor, 3164 strokeOpacity: settings.strokeOpacity, 3165 strokeWeight: settings.strokeWeight, 3166 fillColor: settings.strokeFill, 3167 fillOpacity: settings.strokeFillOpacity 3168 }); 3169 polygon.setMap(map); 3170 } 3171 3172 if (settings.googleMapType == "routes") { 3173 this.routeDraw(directionsService, directionsRenderer, settings); 3174 directionsRenderer.setMap(map); 3175 } 3176 3177 google.maps.event.addDomListener(window, "resize", function () { 3178 var center = map.getCenter(); 3179 google.maps.event.trigger(map, "resize"); 3180 map.setCenter(center); 3181 map.setZoom(finalZoomLevel); 3182 }); 3183 }, 3184 routeDraw: function routeDraw(directionsService, directionsRenderer, settings) { 3185 var start = settings.originLat + "," + settings.originLng; 3186 var end = settings.destLat + "," + settings.destLng; 3187 directionsService.route({ 3188 origin: { 3189 query: start 3190 }, 3191 destination: { 3192 query: end 3193 }, 3194 travelMode: settings.travelMode.toUpperCase() 3195 }, function (response, status) { 3196 if (status === "OK") { 3197 directionsRenderer.setDirections(response); 3198 } else {} 3199 }); 3200 }, 3201 runMap: function runMap() { 3202 var gmaper = document.querySelectorAll(".ha-adv-google-map__wrapper"); 3203 3204 for (var i = 0; i < gmaper.length; i++) { 3205 gmaper[i].classList.add("ha-adv-google-map__wrapper--item" + i); 3206 this.mapInit(".ha-adv-google-map__wrapper--item" + i); 3207 } 3208 } 3209 }); 3210 elementorFrontend.hooks.addAction("frontend/element_ready/ha-google-map.default", function ($scope) { 3211 elementorFrontend.elementsHandler.addHandler(Maps, { 3212 $element: $scope, 3213 selectors: { 3214 container: ".ha-adv-google-map__wrapper" 3215 } 3216 }); 3217 }); 3218 elementorFrontend.hooks.addAction("frontend/element_ready/ha-unfold.default", function ($scope) { 3219 elementorFrontend.elementsHandler.addHandler(Unfold, { 3220 $element: $scope 3221 }); 3222 }); 3223 3224 var EddCart = function EddCart($scope) { 3225 var optionEL = $scope.find('.ha-edd-table-wrap'); 3226 var settings = optionEL.data('options'); 3227 var removeEl = $scope.find('.edd-remove-from-cart'); 3228 3229 if (settings.cart_btn_type == 'icon') { 3230 removeEl.html("<i class=\"".concat(settings.icon.value, "\"></i>")); 3231 } else { 3232 removeEl.text(settings.btn_text); 3233 } 3234 }; 3235 3236 elementorFrontend.hooks.addAction('frontend/element_ready/ha-edd-cart.default', EddCart); 3237 3238 var EddCheckout = function EddCheckout($scope) { 3239 var optionEL = $scope.find('.ha-edd-table-wrap'); 3240 var settings = optionEL.data('options'); 3241 var removeEl = $scope.find('.edd_cart_remove_item_btn'); 3242 3243 if (settings.cart_btn_type == 'icon') { 3244 removeEl.html("<i class=\"".concat(settings.icon.value, "\"></i>")); 3245 } else { 3246 removeEl.text(settings.btn_text); 3247 } 3248 }; 3249 3250 elementorFrontend.hooks.addAction('frontend/element_ready/ha-edd-checkout.default', EddCheckout); 3251 3252 var EddAjaxBtn = function EddAjaxBtn($scope) { 3253 var btn = $scope.find(".ha_edd_ajax_btn"); 3254 btn.on('click', function (event) { 3255 event.preventDefault(); 3256 var $self = $(this), 3257 download_id = $self.data('download-id'), 3258 nonce = $self.data('nonce'); 3259 $.ajax({ 3260 url: HappyProLocalize.ajax_url, 3261 type: "POST", 3262 data: { 3263 action: "ha_edd_ajax_add_to_cart_link", 3264 security: HappyProLocalize.nonce, 3265 download_id: download_id 3266 }, 3267 success: function success(response) { 3268 if (response.success == true) { 3269 $self.html("<i class=\"fas fa-cart-plus\"></i>"); 3270 } 3271 } 3272 }); 3273 }); 3274 }; 3275 3276 elementorFrontend.hooks.addAction('frontend/element_ready/ha-edd-product-grid.default', EddAjaxBtn); 3277 elementorFrontend.hooks.addAction('frontend/element_ready/ha-edd-product-carou
3277sel.default', EddAjaxBtn); 3278 elementorFrontend.hooks.addAction('frontend/element_ready/ha-edd-single-product.default', EddAjaxBtn); 3279 3280 var Image_Swap = function Image_Swap($scope) { 3281 var element = $scope.find('.ha-image-swap-wrapper'); 3282 var trigger_type = element.data('trigger'); 3283 var status; 3284 3285 if (trigger_type === 'click') { 3286 element.on('click', element, function () { 3287 var self = $(this); 3288 var click = self.attr('data-click'); 3289 3290 if ('inactive' == click) { 3291 status = 'active'; 3292 } else { 3293 status = 'inactive'; 3294 } 3295 3296 self.attr('data-click', status); 3297 var first_img = self.find('.img_swap_first'); 3298 var second_img = self.find('.img_swap_second'); 3299 }); 3300 } 3301 3302 var elm = $scope.find('.ha-image-swap-ctn'); 3303 var elm_img = $scope.find('.ha-image-swap-item'); 3304 var trigger = elm.data('trigger'); 3305 3306 if (elm.length > 0) { 3307 $('.ha-image-swap-ctn').on('click', '.ha-image-swap-item', function (e) { 3308 var elem = $(this); 3309 var parent = elem.parent('.ha-image-swap-insider'); 3310 var firstChild = parent.children('.ha-image-swap-item:first-of-type'); 3311 var secondChild = parent.children('.ha-image-swap-item:nth-of-type(2)'); 3312 3313 if (!elem.is(':first-child')) { 3314 parent.addClass('changed'); 3315 setTimeout(function () { 3316 firstChild.remove(); 3317 parent.append(firstChild); 3318 parent.removeClass('changed'); 3319 }, 400); 3320 } 3321 }); 3322 } // if( trigger == 'hover'){ 3323 // elm.hover(function (e){ 3324 // var target = e.target; 3325 // if(!$(target).hasClass('active')){ 3326 // var $self = $(this); 3327 // var parent = $self.find('.ha-image-swap-insider'); 3328 // var firstChild = parent.children('.ha-image-swap-item:first-of-type'); 3329 // var secondChild = parent.children('.ha-image-swap-item:nth-of-type(2)'); 3330 // firstChild.toggleClass('active'); 3331 // secondChild.toggleClass('active'); 3332 // } 3333 // }); 3334 // } 3335 3336 }; 3337 3338 var FlipBox = function FlipBox($scope) { 3339 var element = $scope.find('.ha-flip-box-inner'); // touchstart 3340 3341 element.on('mouseenter mouseleave touchstart', function (e) { 3342 if (('mouseenter' == e.type || 'touchstart' == e.type) && !$(this).hasClass('flip')) { 3343 $(this).addClass('flip'); 3344 } else if (('mouseleave' == e.type || 'touchstart' == e.type) && $(this).hasClass('flip')) { 3345 $(this).removeClass('flip'); 3346 } else if ('touchstart' == e.type && $(this).hasClass('flip')) { 3347 $(this).removeClass('flip'); 3348 } 3349 }); 3350 }; 3351 3352 elementorFrontend.hooks.addAction('frontend/element_ready/ha-image-swap.default', Image_Swap); 3353 3354 var FreeShippingBar = function FreeShippingBar($scope) { 3355 var $fsbContainer = $scope.find('.ha-fsb-container'); 3356 3357 if ($fsbContainer) { 3358 var $settings = $fsbContainer.data('fsb_settings'); 3359 3360 if ($settings != undefined) { 3361 var $aimationSpeed = $settings.hasOwnProperty('ha_fsb_animation_speed') ? $settings.ha_fsb_animation_speed : 15; 3362 var $achivePercent = $settings.hasOwnProperty('achive_percent') ? $settings.achive_percent : 0; 3363 var $progressType = $settings.hasOwnProperty('progress_type') ? $settings.progress_type : 'percent'; 3364 var $currencySymbol = $settings.hasOwnProperty('currencySymbol') && $progressType == 'percent' ? '%' : $settings.currencySymbol; 3365 var $cartTotal = $settings.hasOwnProperty('cart_total') ? $settings.cart_total : 0; 3366 var $totalPercent = parseFloat(Math.round($achivePercent)) >= 100 ? 100 : parseFloat(Math.round($achivePercent)); 3367 var $progressText = $progressType == 'percent' ? $totalPercent : $cartTotal; 3368 var $elem = $fsbContainer.find('.ha-fsb-size'); 3369 $elem.text($progressText + $currencySymbol); 3370 var defaultWidth = $(window).width() <= 768 ? 12 : 5; 3371 $totalPercent > 0 ? $elem.css({ 3372 'width': $totalPercent + "%", 3373 'transition': 'width ' + $aimationSpeed + 'ms ease-in-out' 3374 }) : $elem.css('width', +defaultWidth + "%"); 3375 } 3376 } 3377 }; 3378 3379 elementorFrontend.hooks.addAction('frontend/element_ready/ha-shipping-bar.default', FreeShippingBar); 3380 $('.fsb-close-icon').on('click', function () { 3381 document.cookie = "ha_close_fsb = yes;path=/"; 3382 $('.ha-fsb-container').hide(); 3383 }); 3384 elementorFrontend.hooks.addAction('frontend/element_ready/ha-flip-box.default', FlipBox
3384); 3385 3386 var HaRemoteCarousel = function HaRemoteCarousel($scope) { 3387 var $rcContainer = $scope.find('.ha-remote-carousel-container'); 3388 3389 if ($rcContainer) { 3390 var $rcBtn = $($rcContainer).find('.ha-custom-nav-remote-carousel'); 3391 3392 if ($rcBtn) { 3393 var $prevSliderIndex = 0; 3394 var $slides_to_show = 0; 3395 var $ha_show_thumbnail = $($rcBtn).parent().data('show_thumbnail'); 3396 var $ha_rc_unique_id = $($rcBtn).parent().data('ha_rc_id'); 3397 var $haRcSelector = $ha_rc_unique_id ? $('[data-ha_rcc_uid="' + $ha_rc_unique_id + '"]') : ''; 3398 3399 if ($ha_show_thumbnail && $ha_show_thumbnail == 'yes') { 3400 $haRcSelector.on('init', function (event, slick, currentSlide) { 3401 var $dataSettingsSelector = $haRcSelector.parent().parent(); 3402 var $dataSettings = $dataSettingsSelector.data('settings'); 3403 $slides_to_show = typeof $dataSettings === "undefined" ? $slides_to_show : $dataSettings.slides_to_show; 3404 $prevSliderIndex = (currentSlide ? currentSlide : 0) - 1; 3405 var $nextIndex = parseInt($slides_to_show) + parseInt($prevSliderIndex) + 1; 3406 var $nextItem = $haRcSelector.find('[data-slick-index="' + $nextIndex + '"]');
3407 var $nextImg = $nextItem.find('img').attr('src'); 3408 var $prevItem = $haRcSelector.find('[data-slick-index="' + $prevSliderIndex + '"]'); 3409 var $prevImg = $prevItem.find('img').attr('src'); 3410 var $nextBtn = $rcContainer.find('.ha-remote-carousel-btn-next'); 3411 var $prevBtn = $rcContainer.find('.ha-remote-carousel-btn-prev'); 3412 $nextBtn.css({ 3413 'background-image': 'url(' + $nextImg + ')', 3414 'background-position': 'center' 3415 }); 3416 $prevBtn.css({ 3417 'background-image': 'url(' + $prevImg + ')', 3418 'background-position': 'center' 3419 }); 3420 }); 3421 $haRcSelector.trigger('init'); 3422 $($rcBtn).on("click", function (e) { 3423 e.preventDefault(); 3424 $haRcSelector.on('afterChange', function (event, slick, currentSlideIndex) { 3425 var $dataSettingsSelector = $haRcSelector.parent().parent(); 3426 var $dataSettings = $dataSettingsSelector.data('settings'); 3427 var $slides_to_show = $dataSettings ? $dataSettings.slides_to_show : currentSlideIndex; 3428 $prevSliderIndex = parseInt(currentSlideIndex - 1); 3429 var $nextIndex = parseInt($slides_to_show) + parseInt($prevSliderIndex) + 1; 3430 var $nextItem = $haRcSelector.find('[data-slick-index="' + $nextIndex + '"]');
3431 var $nextImg = $nextItem.find('img').attr('src'); 3432 var $prevItem = $haRcSelector.find('[data-slick-index="' + $prevSliderIndex + '"]'); 3433 var $prevImg = $prevItem.find('img').attr('src'); 3434 var $nextBtn = $rcContainer.find('.ha-remote-carousel-btn-next'); 3435 var $prevBtn = $rcContainer.find('.ha-remote-carousel-btn-prev'); 3436 3437 if ($nextBtn) { 3438 $nextBtn.css({ 3439 'background-image': 'url(' + $nextImg + ')', 3440 'background-position': 'center' 3441 }); 3442 } 3443 3444 if ($prevBtn) { 3445 $prevBtn.css({ 3446 'background-image': 'url(' + $prevImg + ')', 3447 'background-position': 'center' 3448 }); 3449 } 3450 }); 3451 3452 if ($(this).data("ha_rc_nav") == 'ha_rc_next_btn') { 3453 $haRcSelector.slick("slickNext"); 3454 } else if ($(this).data("ha_rc_nav") == 'ha_rc_prev_btn') { 3455 $haRcSelector.slick("slickPrev"); 3456 } 3457 }); 3458 } else { 3459 $($rcBtn).on("click", function (e) { 3460 e.preventDefault(); 3461 3462 if ($(this).data("ha_rc_nav") == 'ha_rc_next_btn') { 3463 $haRcSelector.slick("slickNext"); 3464 } else if ($(this).data("ha_rc_nav") == 'ha_rc_prev_btn') { 3465 $haRcSelector.slick("slickPrev"); 3466 } 3467 }); 3468 } 3469 } 3470 } 3471 }; 3472 3473 elementorFrontend.hooks.addAction('frontend/element_ready/ha-remote-carousel.default', HaRemoteCarousel); 3474 var HaTOC = elementorModules.frontend.handlers.Base.extend({ 3475 getDefaultSettings: function getDefaultSettings() { 3476 var elementSettings = this.getElementSettings(), 3477 listWrapperTag = "numbers" === elementSettings.marker_view ? "ol" : "ul"; 3478 return { 3479 selectors: { 3480 widgetContainer: ".ha-toc-wrapper", 3481 container: '.elementor:not([data-elementor-type="header"]):not([data-elementor-type="footer"])', 3482 expandButton: ".ha-toc__header", 3483 collapseButton: ".ha-toc__header", 3484 body: ".ha-toc__body", 3485 headerTitle: ".ha-toc__header-title", 3486 scrollTop: ".ha-toc__scroll-to-top--container" 3487 }, 3488 classes: { 3489 anchor: "ha-toc-menu-anchor", 3490 listWrapper: "ha-toc__list-wrapper", 3491 listItem: "ha-toc__list-item", 3492 listTextWrapper: "ha-toc__list-item-text-wrapper", 3493 firstLevelListItem: "ha-toc__top-level", 3494 listItemText: "ha-toc__list-item-text", 3495 activeItem: "ha-toc-item-active", 3496 headingAnchor: "ha-toc__heading-anchor", 3497 collapsed: "ha-toc--collapsed" 3498 }, 3499 listWrapperTag: listWrapperTag 3500 }; 3501 }, 3502 getDefaultElements: function getDefaultElements() { 3503 var settings = this.getSettings(), 3504 elementSettings = this.getElementSettings(); 3505 return { 3506 $pageContainer: jQuery(elementSettings.container || settings.selectors.container), 3507 $widgetContainer: this.$element.find(settings.selectors.widgetContainer), 3508 $expandButton: this.$element.find(settings.selectors.expandButton), 3509 $collapseButton: this.$element.find(settings.selectors.collapseButton), 3510 $tocBody: this.$element.find(settings.selectors.body), 3511 $listItems: this.$element.find("." + settings.classes.listItem), 3512 $scrollTop: this.$element.find(settings.selectors.scrollTop) 3513 }; 3514 }, 3515 bindEvents: function bindEvents() { 3516 var $self = this; 3517 var elementSettings = this.getElementSettings(); 3518 3519 if (elementSettings.minimize_box) { 3520 this.elements.$expandButton.on("click", function () { 3521 if (!$($self.$element).hasClass($self.getSettings("classes.collapsed"))) { 3522 return $self.collapseBox(); 3523 } else { 3524 return $self.expandBox(); 3525 } 3526 }); 3527 } 3528 3529 if (elementSettings.collapse_subitems) { 3530 this.elements.$listItems.hover(function (event) { 3531 return jQuery(event.target).slideToggle(); 3532 }); 3533 } 3534 3535 if (elementSettings.sticky_toc_toggle) { 3536 elementorFrontend.elements.$window.on("resize", this.handleStickyToc); 3537 } 3538 3539 if (elementSettings.scroll_to_top_toggle) { 3540 this.elements.$scrollTop.on("click", function () { 3541 $self.scrollToTop(); 3542 }); 3543 } 3544 }, 3545 getHeadings: function getHeadings() { 3546 // Get all headings from document by user-selected tags 3547 var elementSettings = this.getElementSettings(), 3548 tags = elementSettings.headings_by_tags.join(","),
3549 selectors = this.getSettings("selectors"), 3550 excludedSelectors = elementSettings.exclude_headings_by_selector; 3551 return this.elements.$pageContainer.find(tags).not(selectors.headerTitle).filter(function (index, heading) { 3552 return !jQuery(heading).closest(excludedSelectors).length; // Handle excluded selectors if there are any 3553 }); 3554 }, 3555 addAnchorsBeforeHeadings: function addAnchorsBeforeHeadings() { 3556 var $this = this; // Add an anchor element right before each TOC heading to create anchors for TOC links 3557 3558 var classes = this.getSettings("classes"); 3559 this.elements.$headings.before(function (index) { 3560 var anchorLink = $this.getHeadingAnchorLink(index, classes); 3561 return '<span id="' + anchorLink + '" class="' + classes.anchor + ' "></span>'; 3562 }); 3563 }, 3564 activateItem: function activateItem($listItem) { 3565 var classes = this.getSettings("classes"); 3566 this.deactivateActiveItem($listItem); 3567 $listItem.addClass(classe
3567s.activeItem); 3568 this.$activeItem = $listItem; 3569 3570 if (!this.getElementSettings("sticky_toc_toggle")) { 3571 //Note:- The "Collapse" option will not work unless you make the Table of Contents sticky. 3572 return; 3573 } 3574 3575 if (!this.getElementSettings("collapse_subitems")) { 3576 return; 3577 } 3578 3579 var $activeList = void 0; 3580 3581 if ($listItem.hasClass(classes.firstLevelListItem)) { 3582 $activeList = $listItem.parent().next(); 3583 } else { 3584 $activeList = $listItem.parents("." + classes.listWrapper).eq(-2); 3585 } 3586 3587 if (!$activeList.length) { 3588 delete this.$activeList; 3589 return; 3590 } 3591 3592 this.$activeList = $activeList; 3593 this.$activeList.stop().slideDown(); 3594 }, 3595 deactivateActiveItem: function deactivateActiveItem($activeToBe) { 3596 if (!this.$activeItem || this.$activeItem.is($activeToBe)) { 3597 return; 3598 } 3599 3600 var _getSettings = this.getSettings(), 3601 classes = _getSettings.classes; 3602 3603 this.$activeItem.removeClass(classes.activeItem); 3604 3605 if (this.$activeList && (!$activeToBe || !this.$activeList[0].contains($activeToBe[0]))) { 3606 this.$activeList.slideUp(); 3607 } 3608 }, 3609 followAnchor: function followAnchor($element, index) { 3610 var $self = this; 3611 var anchorSelector = $element[0].hash; 3612 var $anchor = void 0; 3613 3614 try { 3615 // `decodeURIComponent` for UTF8 characters in the hash. 3616 $anchor = jQuery(decodeURIComponent(anchorSelector)); 3617 } catch (e) { 3618 return; 3619 } 3620 3621 if (0 === index) { 3622 elementorFrontend.waypoint($anchor, function (direction) { 3623 if ($self.itemClicked) { 3624 return; 3625 } 3626 3627 if ("down" === direction) { 3628 $self.activateItem($element); 3629 } else { 3630 $self.deactivateActiveItem(); 3631 } 3632 }, { 3633 offset: "bottom-in-view", 3634 triggerOnce: false 3635 }); 3636 } 3637 3638 elementorFrontend.waypoint($anchor, function (direction) { 3639 if ($self.itemClicked) { 3640 return; 3641 } 3642 3643 if ("down" === direction) { 3644 $self.activateItem($self.$listItemTexts.eq(index + 1)); 3645 } else { 3646 $self.activateItem($element); 3647 } 3648 }, { 3649 offset: 0, 3650 triggerOnce: false 3651 }); 3652 }, 3653 followAnchors: function followAnchors() { 3654 var $self = this; 3655 this.$listItemTexts.each(function (index, element) { 3656 return $self.followAnchor(jQuery(element), index); 3657 }); 3658 }, 3659 setOffset: function setOffset($listItem) { 3660 var $this = this; 3661 var settings = this.getSettings(); 3662 var list = this.$element.find("." + settings.classes.listItem); 3663 var offset = this.getCurrentDeviceSetting("scroll_offset"); 3664 list.each(function () { 3665 $('a', this).on('click', function (e) { 3666 e.preventDefault(); 3667 var hash = this.hash; 3668 $('html, body').animate({ 3669 scrollTop: $(hash).offset().top - parseInt(offset.size) 3670 }, 800); 3671 }); 3672 }); 3673 }, 3674 populateTOC: function populateTOC() { 3675 var $self = this; 3676 this.listItemPointer = 0; 3677 var elementSettings = this.getElementSettings(); 3678 3679 if (elementSettings.custom_style == 'yes') { 3680 this.elements.$widgetContainer.html(this.createSideDot()); 3681 } else { 3682 if (elementSettings.hierarchical_view) { 3683 this.createNestedList(); 3684 } else { 3685 this.createFlatList(); 3686 } 3687 } 3688 3689 this.$listItemTexts = this.$element.find(".ha-toc__list-item-text"); 3690 this.$listItemTexts.on("click", this.onListItemClick.bind(this)); 3691 3692 if (!elementorFrontend.isEditMode()) { 3693 this.followAnchors(); 3694 } 3695 3696 $(window).on('scroll', function () { 3697 if ("window_top" === elementSettings.scroll_to_top_option) { 3698 if ($(window).scrollTop() > 0) { 3699 $self.elements.$scrollTop.show(); 3700 } else { 3701 $self.elements.$scrollTop.hide(); 3702 } 3703 } else { 3704 var $id = $self.getID().parents('.elementor-widget-wrap'); 3705 3706 if ($id.offset().top >= $(window).scrollTop()) { 3707 $self.elements.$scrollTop.hide(); 3708 } else { 3709 $self.elements.$scrollTop.show(); 3710 } 3711 } 3712 }); 3713 }, 3714 createNestedList: function createNestedList() { 3715 var $self = this; 3716 this.headingsData.forEach(function (heading, index) { 3717 heading.level = 0; 3718 3719 for (var i = index - 1; i >= 0; i--) { 3720 var currentOrderedItem = $self.headingsData[i]; 3721 3722 if (currentOrderedItem.tag <= heading.tag) { 3723 heading.level = currentOrderedItem.level; 3724 3725 if (currentOrderedItem.tag < heading.tag) {
3726 heading.level++; 3727 } 3728 3729 break; 3730 } 3731 } 3732 }); 3733 this.elements.$tocBody.html(this.getNestedLevel(0)); 3734 }, 3735 createFlatList: function createFlatList() { 3736 this.elements.$tocBody.html(this.getNestedLevel()); 3737 }, 3738 createSideDot: function createSideDot(level) { 3739 var settings = this.getSettings(), 3740 elementSettings = this.getElementSettings(), 3741 icon = this.getElementSettings("icon"), 3742 htmlul = ''; 3743 3744 if (elementSettings.custom_style == 'yes') { 3745 htmlul += "<div class=\"".concat(elementSettings.custom_style_list, "\">\n <div class=\"hm-toc \">\n <ul class=\"hm-toc-items\" style=\"list-style: none;\">\n <li>"); 3746 3747 if (elementSettings.custom_style_list == 'hm-toc-slide-style') { 3748 htmlul += "<".concat(elementSettings.html_tag, " class=\"hm-toc-title\"><span>").concat(elementSettings.widget_title, "<span></").concat(elementSettings.html_tag, ">"); 3749 } else { 3750 htmlul += "<".concat(elementSettings.html_tag, " class=\"hm-toc-title\">").concat(elementSettings.widget_title, "</").concat(elementSettings.html_tag, ">"); 3751 } 3752 3753 htmlul += "<".concat(settings.listWrapperTag, " class=\"hm-toc-items-inner\">"); 3754 3755 for (var i = 0; i < this.headingsData.length; i++) { 3756 var list = ''; 3757 var currentItemDot = this.headingsData[i]; 3758 3759 if (level > currentItemDot.level) { 3760 break; 3761 } 3762 3763 var listItemTextClasses = settings.classes.listItemText; 3764 3765 if (0 === currentItemDot.level) { 3766 // If the current list item is a top level item, give it the first level class 3767 listItemTextClasses += " " + settings.classes.firstLevelListItem; 3768 } 3769 3770 if (level === currentItemDot.level) { 3771 list += "<li class=\"hm-toc-entry ".concat(settings.classes.listItem, "\">"); 3772 3773 if ('bullets' === elementSettings.marker_view && icon && elementSettings.custom_style_list == 'hm-toc-slide-style') { 3774 list += "<i class=\"".concat(icon.value, "\"></i>"); 3775 } 3776 3777 list += "<a href=\"#".concat(currentItemDot.anchorLink, "\" class=\"").concat(listItemTextClasses, "\"><span>").concat(currentItemDot.text, "</span></a>"); 3778 list += "</li>"; 3779 } 3780 3781 htmlul += list; 3782 } 3783 3784 htmlul += "</".concat(settings.listWrapperTag, ">"); 3785 htmlul += "</li>\n </ul>"; 3786 } 3787 3788 return htmlul; 3789 }, 3790 getNestedLevel: function getNestedLevel(level) { 3791 var settings = this.getSettings(), 3792 elementSettings = this.getElementSettings(), 3793 icon = this.getElementSettings("icon"); 3794 var html = ''; // Open new list/nested list 3795 3796 html += "<" + settings.listWrapperTag + ' class="' + settings.classes.listWrapper + '">'; // for each list item, build its markup. 3797 3798 while (this.listItemPointer < this.headingsData.length) { 3799 var currentItem = this.headingsData[this.listItemPointer]; 3800 var listItemTextClasses = settings.classes.listItemText; 3801 3802 if (0 === currentItem.level) { 3803 // If the current list item is a top level item, give it the first level class 3804 listItemTextClasses += " " + settings.classes.firstLevelListItem; 3805 } 3806 3807 if (level > currentItem.level) { 3808 break; 3809 } 3810 3811 if (level === currentItem.level) { 3812 html += '<li class="' + settings.classes.listItem + " " + "level-" + level + '">'; 3813 html += '<div class="' + settings.classes.listTextWrapper + '">'; 3814 var liContent = '<a href="#' + currentItem.anchorLink + '" class="' + listItemTextClasses + '">' + currentItem.text + "</a>"; // If list type is bullets, add the bullet icon as an <i> tag 3815 3816 if ("bullets" === elementSettings.marker_view && icon) { 3817 liContent = '<i class="' + icon.value + '"></i>' + liContent; 3818 } 3819 3820 html += liContent; 3821 html += "</div>"; 3822 this.listItemPointer++; 3823 var nextItem = this.headingsData[this.listItemPointer]; 3824 3825 if (nextItem && level < nextItem.level) { 3826 // If a new nested list has to be created under the current item, 3827 // this entire method is called recursively (outside the while loop, a list wrapper is created) 3828 html += this.getNestedLevel(nextItem.level); 3829 } 3830 3831 html += "</li>"; 3832 } 3833 } 3834 3835 html += "</" + settings.listWrapperTag + ">"; 3836 return html; 3837 }, 3838 handleNoHeadingsFound: function handleNoHeadingsFound() { 3839 var _messages = 'No headings were found on this page.'; 3840 3841 if (elementorFrontend.isEditMode()) { 3842 return this.elements.$tocBody.html(_messages); 3843 } 3844 }, 3845 collapseOnInit: function collapseOnInit() { 3846 var $self = this; 3847 var minimizedOn = this.getElementSettings("minimized_on"), 3848 currentDeviceMode = elementorFrontend.getCurrentDeviceMode(); 3849 3850 if ("" !== minimizedOn && "array" !== typeof minimizedOn) { 3851 minimizedOn = [minimizedOn]; 3852 } 3853 3854 if (0 !== minimizedOn.length && "object" === _typeof(minimizedOn)) {
3855 minimizedOn.forEach(function (value) { 3856 if ("desktop" === value[0] && "desktop" == currentDeviceMode && $(window).width() < elementorFrontend.config.breakpoints.xxl || "tablet" === value[0] && "tablet" === currentDeviceMode && $(window).width() < elementorFrontend.config.breakpoints.lg || "mobile" === value[0] && "mobile" === currentDeviceMode && $(window).width() < elementorFrontend.config.breakpoints.md) { 3857 $self.collapseBox(); 3858 } 3859 }); 3860 } 3861 }, 3862 getHeadingAnchorLink: function getHeadingAnchorLink(index, classes) { 3863 var headingID = this.elements.$headings[index].id, 3864 wrapperID = this.elements.$headings[index].closest('.elementor-widget').id; 3865 var anchorLink = ''; 3866 3867 if (headingID) { 3868 anchorLink = headingID; 3869 } else if (wrapperID) { 3870 // If the heading itself has an ID, we don't want to overwrite it 3871 anchorLink = wrapperID; 3872 } // If there is no existing ID, use the heading text to create a semantic ID 3873 3874 3875 if (headingID || wrapperID) { 3876 jQuery(this.elements.$headings[index]).data('hasOwnID', true); 3877 } else { 3878 anchorLink = "".concat(classes.headingAnchor, "-").concat(index); 3879 } 3880 3881 return anchorLink; 3882 }, 3883 setHeadingsData: function setHeadingsData() { 3884 var $this = this; 3885 this.headingsData = []; 3886 var classes = this.getSettings("classes"); // Create an array for simplifying TOC list creation 3887 3888 this.elements.$headings.each(function (index, element) { 3889 var anchorLink = $this.getHeadingAnchorLink(index, classes); 3890 $this.headingsData.push({ 3891 tag: +element.nodeName.slice(1), 3892 text: element.textContent, 3893 anchorLink: anchorLink 3894 }); 3895 }); 3896 }, 3897 run: function run() { 3898 var elementSettings = this.getElementSettings(); 3899 this.elements.$headings = this.getHeadings(); 3900 3901 if (!this.elements.$headings.length) { 3902 return this.handleNoHeadingsFound(); 3903 } 3904 3905 this.setHeadingsData(); 3906 3907 if (!elementorFrontend.isEditMode()) { 3908 this.addAnchorsBeforeHeadings(); 3909 } 3910 3911 this.populateTOC(); 3912 3913 if (elementSettings.minimize_box) { 3914 this.collapseOnInit(); 3915 } 3916 3917 if (elementSettings.sticky_toc_toggle) { 3918 this.handleStickyToc(); 3919 } 3920 3921 if ("" !== elementSettings.scroll_offset.size) { 3922 this.setOffset(); 3923 } 3924 }, 3925 expandBox: function expandBox() { 3926 var boxHeight = this.getCurrentDeviceSetting("min_height"); 3927 this.$element.removeClass(this.getSettings("classes.collapsed")); 3928 this.elements.$tocBody.slideDown(); // return container to the full height in case a min-height is defined by the user 3929 3930 this.elements.$widgetContainer.css("min-height", boxHeight.size + boxHeight.unit); 3931 }, 3932 collapseBox: function collapseBox() { 3933 this.$element.addClass(this.getSettings("classes.collapsed")); 3934 this.elements.$tocBody.slideUp(); // close container in case a min-height is defined by the user 3935 3936 this.elements.$widgetContainer.css("min-height", "0px"); 3937 }, 3938 onInit: function onInit() { 3939 var $self = this; 3940 this.initElements(); 3941 this.bindEvents(); 3942 jQuery(document).ready(function () { 3943 $self.run(); 3944 }); 3945 }, 3946 onListItemClick: function onListItemClick(event) { 3947 var $self = this; 3948 this.itemClicked = true; 3949 setTimeout(function () { 3950 return $self.itemClicked = false; 3951 }, 2000); 3952 var $clickedItem = jQuery(event.target), 3953 $list = $clickedItem.parent().next(), 3954 collapseNestedList = this.getElementSettings("collapse_subitems"); 3955 3956 if ("SPAN" == $clickedItem[0].tagName && 'yes' == this.getElementSettings("custom_style")) { 3957 $clickedItem = jQuery(event.currentTarget); 3958 } 3959 3960 var listIsActive = void 0; 3961 3962 if (collapseNestedList && $clickedItem.hasClass(this.getSettings("classes.firstLevelListItem"))) { 3963 if ($list.is(":visible")) { 3964 listIsActive = true; 3965 } 3966 } 3967 3968 this.activateItem($clickedItem); 3969 3970 if (collapseNestedList && listIsActive) { 3971 $list.slideUp(); 3972 } 3973 }, 3974 handleStickyToc: function handleStickyToc() { 3975 var elementSettings = this.getElementSettings(); 3976 var currentDeviceMode = elementorFrontend.getCurrentDeviceMode(); 3977 var $devices = elementSettings.sticky_toc_disable_on; 3978 var target = this.getID(); 3979 var type = elementSettings.sticky_toc_type; 3980 3981 if ("in-place" === type) { 3982 var parentWidth = target.parent().parent().outerWidth(); 3983 target.css("width", parentWidth); 3984 } else if ("custom-position" === type) { 3985 var parentWidth = target.parent().parent().outerWidth(); 3986 target.css("width", parentWidth); 3987 } 3988 3989 if (-1 == $.inArray(currentDeviceMode, $devices)) { 3990 target.removeClass('floating-toc'); 3991 $(window).off('scroll', this.stickyScroll); 3992 return; 3993 } 3994 3995 $(window).on('scroll', $.proxy(this.stickyScroll, this)); 3996 }, 3997 stickyScroll: function stickyScroll() { 3998 var target = this.getID(); 3999 var elementSettings = this.getElementSettings(); 4000 var item = document.querySelector(".ha-table-of-contents"); 4001 var bound, tocHeight; 4002 bound = item.getBoundingClientRect(); 4003 tocHeight = target.outerHeight(); 4004 4005 if (target.hasClass("floating-toc")) { 4006 target.parent().parent().css("height", tocHeight); 4007 } else { 4008 target.parent().parent().css("height", ''); 4009 } 4010 4011 if (bound.y + bound.height / 2 < 0) { 4012 if (target.hasClass('floating-toc')) { 4013 return; 4014 } 4015 4016 target.addClass("floating-toc"); 4017 } else { 4018 if (!target.hasClass('floating-toc')) { 4019 return; 4020 } 4021 4022 target.removeClass("floating-toc"); 4023 } 4024 }, 4025 scrollToTop: function scrollToTop() { 4026 var $self = this; 4027 var scrollTo = this.getElementSettings("scroll_to_top_option"); 4028 4029 if ("window_top" === scrollTo) { 4030 $("html, body").animate({ 4031 scrollTop: 0 4032 }, 250); 4033 } else { 4034 var $id = this.getID().parents('.ha-table-of-contents'); 4035 $("html, body").animate({ 4036 scrollTop: $($id).offset().top - 60 4037 }, 1000); 4038 } 4039 }, 4040 getID: function getID() { 4041 return $("#ha-toc-" + this.$element[0].attributes["data-id"].nodeValue); 4042 } 4043 }); 4044 elementorFrontend.hooks.addAction("frontend/element_ready/ha-table-of-contents.default", function ($scope) { 4045 elementorFrontend.elementsHandler.addHandler(HaTOC, { 4046 $element: $scope 4047 }); 4048 }); //creativeSlider 4049 4050 var HaCreativeSlider = function HaCreativeSlider($scope) { 4051 var $rcContainer = $scope.find('.ha-creative-slider-container'); 4052 4053 if ($rcContainer) { 4054 var $haCsWidth = window.innerWidth; 4055 var $haCsNextSelector = parseInt($haCsWidth) <= 767 ? $rcContainer.find('.ha_cs_mobile_next') : $rcContainer.find('.ha_cc_next_wrapper'); 4056 var $haCsPrevSelector = parseInt($haCsWidth) <= 767 ? $rcContainer.find('.ha_cs_mobile_prev') : $rcContainer.find('.ha_cc_prev_wrapper'); 4057 var csTextItemDelay = parseInt($haCsWidth) <= 767 ? 40 : 30; 4058 var csImageItemDelay = 40; 4059 var csPrevItemsOwl = $rcContainer.find('.ha_cc_prev_items'); 4060 var csTextItemsOwl = $rcContainer.find('.ha_cc_text_items'); 4061 var csImageItemsOwl = $rcContainer.find('.ha_cc_inner_image_items'); 4062 var csNextItemsOwl = $rcContainer.find('.ha_cc_next_items'); 4063 var csPrevNavOptions = { 4064 loop: true, 4065 dots: false, 4066 nav: false, 4067 items: 1, 4068 autoplay: false, 4069 smartSpeed: 500, 4070 touchDrag: false, 4071 mouseDrag: false, 4072 rewind: true, 4073 startPosition: -1 4074 }; 4075 var csNextNavOptions = { 4076 loop: true, 4077 dots: false, 4078 nav: false, 4079 items: 1, 4080 autoplay: false, 4081 smartSpeed: 500, 4082 touchDrag: false, 4083 mouseDrag: false, 4084 rewind: true, 4085 startPosition: 1 4086 }; 4087 var csGeneralOptions = { 4088 loop: true, 4089 dots: false, 4090 nav: false, 4091 items: 1, 4092 autoplay: false, 4093 smartSpeed: 1000, 4094 touchDrag: false, 4095 mouseDrag: false, 4096 singleItem: true, 4097 animateOut: 'fadeOutRight', 4098 animateIn: 'fadeInLeft', 4099 rewind: true 4100 }; 4101 } 4102 4103 csPrevItemsOwl.owlCarousel(csPrevNavOptions); 4104 csNextItemsOwl.owlCarousel(csNextNavOptions); 4105 csTextItemsOwl.owlCarousel(csGeneralOptions); 4106 csImageItemsOwl.owlCarousel(csGeneralOptions); 4107 window.parent.addEventListener('message', function (e) { 4108 if ('ha_cs_reinit' == e.data) { 4109 csTextItemsOwl.owlCarousel('refresh'); 4110 csImageItemsOwl.owlCarousel('refresh'); 4111 } 4112 }); 4113 $($haCsPrevSelector).click(function (e) { 4114 e.preventDefault(); 4115 csPrevItemsOwl.trigger('prev.owl.carousel'); 4116 csNextItemsOwl.trigger('prev.owl.carousel'); 4117 setTimeout(function () { 4118 csTextItemsOwl.trigger('prev.owl.carousel'); 4119 }, csTextItemDelay); 4120 setTimeout(function () { 4121 csImageItemsOwl.trigger('prev.owl.carousel'); 4122 }, csTextItemDelay + csImageItemDelay); 4123 }); 4124 $($haCsNextSelector).click(function (e) { 4125 e.preventDefault(); 4126 csPrevItemsOwl.trigger('next.owl.carousel'); 4127 csNextItemsOwl.trigger('next.owl.carousel'); 4128 setTimeout(function () { 4129 csTextItemsOwl.trigger('next.owl.carousel'); 4130 }, csTextItemDelay); 4131 setTimeout(function () { 4132 csImageItemsOwl.trigger('next.owl.carousel'); 4133 }, csTextItemDelay + csImageItemDelay); 4134 }); 4135 }; 4136 4137 elementorFrontend.hooks.addAction('frontend/element_ready/ha-creative-slider.default', HaCreativeSlider); 4138 }); 4139})(jQuery, Happy, window);
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.