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