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