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 $scope.find(".ha-menu-container").css({ 1522 visibility: "visible" 1523 }); 1524 setTimeout(function () { 1525 $scope.find(".ha-megamenu-panel").css({ 1526 visibility: "visible" 1527 }); 1528 }, 300); 1529 $(window).on("resize", function () { 1530 $scope.find(".ha-megamenu-panel").css({ 1531 top: tabPadding 1532 }); 1533 }).trigger("resize"); 1534 sidebar_mousemove.on("mouseenter", function () { 1535 var q = $(this).data("vertical-menu"); 1536 var jqel = $(this).children(".ha-megamenu-panel"); 1537 if ($(this).hasClass("ha-dropdown-menu-full_width") && $(this).hasClass("top_position")) { 1538 /** @type {number} */ 1539 var ffleft = Math.floor($(this).position().left - $(this).offset().left); 1540 var $sharepreview = $(this); 1541 $sharepreview.find(".ha-megamenu-panel").css("width", $(window).width()); 1542 $(window).on("resize", function () { 1543 $sharepreview.find(".ha-megamenu-panel").css({ 1544 left: ffleft + "px" 1545 }); 1546 }).trigger("resize"); 1547 } 1548 if (!$(this).hasClass("ha-dropdown-menu-full_width") && $(this).hasClass("top_position")) { 1549 $(this).on({ 1550 mouseenter: function setup() { 1551 if (0 === $(".default_menu_position").length) { 1552 $(this).parents(".elementor-section-wrap").addClass("default_menu_position"); 1553 } 1554 }, 1555 mouseleave: function setup() { 1556 if (0 !== $(".default_menu_position").length) { 1557 $(this).parents(".elementor-section-wrap").removeClass("default_menu_position"); 1558 } 1559 } 1560 }); 1561 } 1562 if (q && q !== undefined) { 1563 if ("string" == typeof q) { 1564 if (/^[0-9]/.test(q)) { 1565 $(window).on("resize", function () { 1566 jqel.css({ 1567 width: q 1568 }); 1569 if (!($(document).width() > Number(additionalDigits))) { 1570 jqel.removeAttr("style"); 1571 } 1572 }).trigger("resize"); 1573 } else { 1574 $(window).on("resize", function () { 1575 jqel.css({ 1576 width: q + "px" 1577 }); 1578 if (!($(document).width() > Number(additionalDigits))) { 1579 jqel.removeAttr("style"); 1580 } 1581 }).trigger("resize"); 1582 } 1583 } else { 1584 jqel.css({ 1585 width: q + "px" 1586 }); 1587 } 1588 } else { 1589 $(window).on("resize", function () { 1590 jqel.css({ 1591 width: q + "px" 1592 }); 1593 if (!($(document).width() > Number(additionalDigits))) { 1594 jqel.removeAttr("style"); 1595 } 1596 }).trigger("resize"); 1597 } 1598 }); 1599 sidebar_mousemove.trigger("mouseenter"); 1600 } 1601 }; 1602 elementorFrontend.hooks.addAction("frontend/element_ready/ha-countdown.default", CountDown); 1603 elementorFrontend.hooks.addAction("frontend/element_ready/ha-team-carousel.default", function ($scope) { 1604 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1605 $element: $scope, 1606 selectors: { 1607 container: ".ha-team-carousel-wrap" 1608 }, 1609 prevArrow: '<button type="button" class="slick-prev"><i class="hm hm-arrow-left"></i></button>', 1610 nextArrow: '<button type="button" class="slick-next"><i class="hm hm-arrow-right"></i></button>' 1611 }); 1612 }); 1613 elementorFrontend.hooks.addAction("frontend/element_ready/ha-source-code.default", SourceCode); 1614 elementorFrontend.hooks.addAction("frontend/element_ready/ha-animated-text.default", AnimatedText); 1615 elementorFrontend.hooks.addAction("frontend/element_ready/ha-logo-carousel.default", function ($scope) { 1616 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1617 $element: $scope, 1618 selectors: { 1619 container: ".ha-logo-carousel-wrap" 1620 } 1621 }); 1622 }); 1623 elementorFrontend.hooks.addAction("frontend/element_ready/ha-testimonial-carousel.default", function ($scope) { 1624 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1625 $element: $scope, 1626 selectors: { 1627 container: ".ha-testimonial-carousel__wrap" 1628 } 1629 }); 1630 }); 1631 elementorFrontend.hooks.addAction("frontend/element_ready/ha-advanced-tabs.default", function ($scope) { 1632 elementorFrontend.elementsHandler.addHandler(TabHandlerBase, { 1633 $element: $scope 1634 }); 1635 }); 1636 elementorFrontend.hooks.addAction("frontend/element_ready/ha-instagram-feed.default", InstagramFeed); 1637 elementorFrontend.hooks.addAction("frontend/element_ready/ha-scrolling-image.default", function ($scope) { 1638 elementorFrontend.elementsHandler.addHandler(ScrollingImage, { 1639 $element: $scope 1640 }); 1641 }); 1642 elementorFrontend.hooks.addAction("frontend/element_ready/ha-pricing-table.default", PricingTableToolTip); 1643 elementorFrontend.hooks.addAction("frontend/element_ready/ha-accordion.default", function ($scope) { 1644 elementorFrontend.elementsHandler.addHandler(TabHandlerBase, { 1645 $element: $scope, 1646 selectors: { 1647 tabTitle: ".ha-accordion__item-title", 1648 tabContent: ".ha-accordion__item-content" 1649 }, 1650 classes: { 1651 active: "ha-accordion__item--active" 1652 }, 1653 showTabFn: "slideDown", 1654 hideTabFn: "slideUp" 1655 }); 1656 }); 1657 elementorFrontend.hooks.addAction("frontend/element_ready/ha-toggle.default", function ($scope) { 1658 elementorFrontend.elementsHandler.addHandler(TabHandlerBase, { 1659 $element: $scope, 1660 selectors: { 1661 tabTitle: ".ha-toggle__item-title", 1662 tabContent: ".ha-toggle__item-content" 1663 }, 1664 classes: { 1665 active: "ha-toggle__item--active" 1666 }, 1667 hidePrevious: false, 1668 autoExpand: "editor", 1669 showTabFn: "slideDown", 1670 hideTabFn: "slideUp" 1671 }); 1672 }); 1673 elementorFrontend.hooks.addAction("frontend/element_ready/ha-timeline.default", TimeLine); 1674 elementorFrontend.hooks.addAction("frontend/element_ready/ha-hotspots.default", function ($scope) { 1675 elementorFrontend.elementsHandler.addHandler(HotSpots, { 1676 $element: $scope 1677 }); 1678 }); 1679 elementorFrontend.hooks.addAction("frontend/element_ready/ha-line-chart.default", LineChart); 1680 elementorFrontend.hooks.addAction("frontend/element_ready/ha-pie-chart.default", PieChart); 1681 elementorFrontend.hooks.addAction("frontend/element_ready/ha-polar-chart.default", PolarChart); 1682 elementorFrontend.hooks.addAction("frontend/element_ready/ha-radar-chart.default", RadarChart); 1683 elementorFrontend.hooks.addAction("frontend/element_ready/ha-facebook-feed.default", FacebookFeed); 1684 elementorFrontend.hooks.addAction("frontend/element_ready/ha-smart-post-list.default", SmartPostList); 1685 elementorFrontend.hooks.addAction("frontend/element_ready/ha-advanced-data-table.default", DataTable); 1686 elementorFrontend.hooks.addAction("frontend/element_ready/ha-twitter-carousel.default", function ($scope) { 1687 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1688 $element: $scope, 1689 selectors: { 1690 container: ".ha-tweet-carousel-items" 1691 } 1692 }); 1693 }); 1694 1695 // Post Carousel
1696 elementorFrontend.hooks.addAction("frontend/element_ready/ha-post-carousel.default", function ($scope) { 1697 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1698 $element: $scope, 1699 selectors: { 1700 container: ".ha-posts-carousel-wrapper" 1701 }, 1702 prevArrow: '<button type="button" class="slick-prev"><i class="hm hm-arrow-left"></i></button>', 1703 nextArrow: '<button type="button" class="slick-next"><i class="hm hm-arrow-right"></i></button>' 1704 }); 1705 }); 1706 1707 // EDD Download product carousel 1708 function initEddCarousel($scope) { 1709 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1710 $element: $scope, 1711 selectors: { 1712 container: ".ha-edd-product-carousel-wrapper" 1713 }, 1714 prevArrow: '<button type="button" class="slick-prev"><i class="hm hm-arrow-left"></i></button>', 1715 nextArrow: '<button type="button" class="slick-next"><i class="hm hm-arrow-right"></i></button>' 1716 }); 1717 } 1718 function eddCarouselHandlerCallback($scope) { 1719 initEddCarousel($scope); 1720 initProductQuickView($scope); 1721 1722 // if ( 1723 // $scope 1724 // .find(".ha-edd-product-carousel-wrapper") 1725 // .hasClass("ha-layout-classic") 1726 // ) { 1727 // $scope 1728 // .find(".ha-product-carousel-add-to-cart a") 1729 // .html('<i class="fas fa-shopping-cart"></i>'); 1730 // } 1731 } 1732 1733 // Carousel 1734 elementorFrontend.hooks.addAction("frontend/element_ready/ha-edd-product-carousel.default", eddCarouselHandlerCallback); 1735 1736 // product carousel 1737 function initProductCarousel($scope) { 1738 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1739 $element: $scope, 1740 selectors: { 1741 container: ".ha-product-carousel-wrapper" 1742 }, 1743 prevArrow: '<button type="button" class="slick-prev"><i class="hm hm-arrow-left"></i></button>', 1744 nextArrow: '<button type="button" class="slick-next"><i class="hm hm-arrow-right"></i></button>' 1745 }); 1746 } 1747 function productCarouselHandlerCallback($scope) { 1748 initProductCarousel($scope); 1749 initProductQuickView($scope); 1750 if ($scope.find(".ha-product-carousel-wrapper").hasClass("ha-layout-modern")) { 1751 $scope.find(".ha-product-carousel-add-to-cart a").html('<i class="fas fa-shopping-cart"></i>'); 1752 } 1753 } 1754 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-carousel.classic", productCarouselHandlerCallback); 1755 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-carousel.modern", productCarouselHandlerCallback); 1756 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-carousel-new.default", productCarouselHandlerCallback); 1757 // product category carousel 1758 var productCategoryCarouselSkins = ["classic", "minimal"]; 1759 function initProductCategoryCarousel($scope) { 1760 elementorFrontend.elementsHandler.addHandler(CarouselBase, { 1761 $element: $scope, 1762 selectors: { 1763 container: ".ha-product-cat-carousel" 1764 }, 1765 prevArrow: '<button type="button" class="slick-prev"><i class="hm hm-arrow-left"></i></button>', 1766 nextArrow: '<button type="button" class="slick-next"><i class="hm hm-arrow-right"></i></button>' 1767 }); 1768 } 1769 productCategoryCarouselSkins.forEach(function (index) { 1770 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-category-carousel." + index, initProductCategoryCarousel); 1771 }); 1772 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-category-carousel-new.default", initProductCategoryCarousel); 1773 1774 // EDD category carousel 1775 elementorFrontend.hooks.addAction("frontend/element_ready/ha-edd-category-carousel.default", initProductCategoryCarousel); 1776 postGridSkins.forEach(function (index) { 1777 elementorFrontend.hooks.addAction("frontend/element_ready/ha-post-grid." + index, PostGrid); 1778 }); 1779 elementorFrontend.hooks.addAction("frontend/element_ready/ha-post-grid-new.default", PostGrid); 1780 // elementorFrontend.hooks.addAction("frontend/element_ready/ha-happy-loop-grid.default", PostGrid); 1781 elementorFrontend.hooks.addAction("frontend/element_ready/ha-happy-loop-grid.default", Lo
1781opGrid); 1782 elementorFrontend.hooks.addAction("frontend/element_ready/ha-sticky-video.default", StickyVideo); 1783 elementorFrontend.hooks.addAction("frontend/element_ready/ha-modal-popup.default", ModalPopup); 1784 function initProductQuickView($scope) { 1785 var $button = $scope.find(".ha-pqv-btn"); 1786 if (!$.fn["magnificPopup"]) { 1787 return; 1788 } 1789 $button.magnificPopup({ 1790 type: "ajax", 1791 ajax: { 1792 settings: { 1793 cache: true, 1794 dataType: "html" 1795 }, 1796 cursor: "mfp-ajax-cur", 1797 tError: "The product could not be loaded." 1798 }, 1799 callbacks: { 1800 ajaxContentAdded: function ajaxContentAdded() { 1801 $(this.content).addClass(this.currItem.el.data("modal-class")); 1802 } 1803 } 1804 }); 1805 } 1806 var initOnePageNav = elementorModules.frontend.handlers.Base.extend({ 1807 onInit: function onInit() { 1808 elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); 1809 this.run(); 1810 }, 1811 onElementChange: function onElementChange(e) { 1812 if (e == 'scroll_wheel' || e == 'touch_swipe' || e == 'scroll_keys') { 1813 this.run(); 1814 } 1815 }, 1816 getReadySettings: function getReadySettings() { 1817 var settings = { 1818 design: this.getElementSettings('select_design'), 1819 speed: this.getElementSettings('scrolling_speed') || 700, 1820 offset: this.getElementSettings('row_to_offset') || 0, 1821 threshold: this.getEditSettings('section_threshold') || 0.50, 1822 scrollWheel: this.getElementSettings('scroll_wheel') == 'yes', 1823 touchSwipe: this.getElementSettings('touch_swipe') == 'yes', 1824 scrollKeys: this.getElementSettings('scroll_keys') == 'yes' 1825 }; 1826 return $.extend({}, this.getSettings(), settings); 1827 }, 1828 scroll: function scroll(id, speed, offset) { 1829 $('html, body').animate({ 1830 scrollTop: $('#' + id).offset().top - offset 1831 }, speed); 1832 }, 1833 run: function run() { 1834 var $this = this; 1835 var settings = this.getReadySettings(); 1836 var track = false; 1837 var $navWrapper = settings.design == 'ha-opn-design-default' ? this.$element.find(".ha-opn-dotted-item") : this.$element.find(".ha_opn__item"); 1838 $navWrapper.on('click', function (e) { 1839 e.preventDefault(); 1840 var targetId = $(this).find('a').data("section-id"); 1841 if ($('#' + targetId).length > 0) { 1842 track = false; 1843 $this.scroll(targetId, settings.speed, settings.offset); 1844 $navWrapper.removeClass('ha_opn__item--current'); 1845 $(this).addClass('ha_opn__item--current'); 1846 } 1847 }); 1848 var sections = []; 1849 var navItems = {}; 1850 if ($navWrapper.length > 0) { 1851 $.each($navWrapper, function (index, nav) { 1852 var targetId = $(this).find('a').data('section-id'); 1853 var targetSection = $('#' + targetId); 1854 sections.push(targetSection[0]); 1855 navItems[targetId] = $(this)[0]; 1856 }); 1857 } 1858 var observerOptions = { 1859 root: null, 1860 rootMargin: "0px 0px -100px 0px", 1861 threshold: settings.threshold 1862 }; 1863 var currentEvent; 1864 var observer = new IntersectionObserver(function (entries) { 1865 entries.forEach(function (entry) { 1866 if (entry.isIntersecting) { 1867 var navItem = navItems[entry.target.id]; 1868 navItem.classList.add('ha_opn__item--current'); 1869 Object.values(navItems).forEach(function (item) { 1870 if (item != navItem) { 1871 item.classList.remove('ha_opn__item--current'); 1872 } 1873 }); 1874 if (typeof elementor === 'undefined') { 1875 if (currentEvent == 'load' && track) { 1876 track = false; 1877 $this.scroll(entry.target.id, settings.speed, settings.offset); 1878 } 1879 if (settings.scrollWheel && currentEvent == 'scroll' && track) { 1880 track = false;
1881 $this.scroll(entry.target.id, settings.speed, settings.offset); 1882 } 1883 if (settings.scrollKeys && currentEvent == 'keys' && track) { 1884 track = false; 1885 $this.scroll(entry.target.id, settings.speed, settings.offset); 1886 } 1887 if (settings.touchSwipe && currentEvent == 'touch' && track) { 1888 track = false; 1889 $this.scroll(entry.target.id, settings.speed, settings.offset); 1890 } 1891 } 1892 } 1893 }); 1894 }, observerOptions); 1895 $(window).on('load', function () { 1896 track = true; 1897 if (sections.length > 0) { 1898 sections.forEach(function (sec) { 1899 if (!(sec == undefined)) { 1900 currentEvent = 'load'; 1901 observer.observe(sec); 1902 } 1903 }); 1904 } 1905 }); 1906 $(window).on('mousewheel DOMMouseScroll', debounce(function (e) { 1907 track = true; 1908 if (sections.length > 0) { 1909 sections.forEach(function (sec) { 1910 if (!(sec == undefined)) { 1911 currentEvent = 'scroll'; 1912 observer.observe(sec); 1913 } 1914 }); 1915 } 1916 }, 200)); 1917 if (typeof elementor === 'undefined') { 1918 if (settings.scrollKeys) { 1919 $(window).on('keydown', debounce(function (evt) { 1920 track = true; 1921 var code = parseInt(evt.keyCode); 1922 // code == 38 for arrow up key 1923 // code == 40 for arrow up key 1924 if (sections.length > 0) { 1925 sections.forEach(function (sec) { 1926 if (!(sec == undefined)) { 1927 currentEvent = 'keys'; 1928 observer.observe(sec); 1929 } 1930 }); 1931 } 1932 }, 200)); 1933 } 1934 if (settings.touchSwipe) { 1935 $(window).on('touchmove', debounce(function (evt) { 1936 track = true; 1937 if (sections.length > 0) { 1938 sections.forEach(function (sec) { 1939 if (!(sec == undefined)) { 1940 currentEvent = 'touch'; 1941 observer.observe(sec); 1942 } 1943 }); 1944 } 1945 }, 200)); 1946 } 1947 } 1948 } 1949 }); 1950 elementorFrontend.hooks.addAction("frontend/element_ready/ha-one-page-nav.default", function ($scope) { 1951 elementorFrontend.elementsHandler.addHandler(initOnePageNav, { 1952 $element: $scope 1953 }); 1954 }); 1955 // advancedSliderHandler 1956 elementorFrontend.hooks.addAction("frontend/element_ready/ha-advanced-slider.default", function ($scope) { 1957 elementorFrontend.elementsHandler.addHandler(SliderBase, { 1958 $element: $scope, 1959 selectors: { 1960 container: ".ha-slider-widget-wrapper" 1961 } 1962 }); 1963 }); 1964 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-grid.classic", initProductQuickView); 1965 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-grid.hover", initProductQuickView); 1966 elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-grid-new.default", initProductQuickView); 1967 elementorFrontend.hooks.addAction("frontend/element_ready/ha-single-product.classic", initProductQuickView); 1968 elementorFrontend.hooks.addAction("frontend/element_ready/ha-single-product.standard", initProductQuickView); 1969 elementorFrontend.hooks.addAction("frontend/element_ready/ha-single-product.landscape", initProductQuickView); 1970 elementorFrontend.hooks.addAction("frontend/element_ready/ha-single-product-new.default", initProductQuickView); 1971 elementorFrontend.hooks.addAction("frontend/element_ready/ha-edd-single-product.default", initProductQuickView); 1972 elementorFrontend.hooks.addAction("frontend/element_ready/ha-edd-product-grid.default", initProductQuickView); 1973 $(document.body).on("added_to_cart", function (event, fragment, hash, $addToCart) { 1974 if ($addToCart != undefined && $addToCart.length > 0) { 1975 $addToCart.parent(".ha-product-grid__btns").removeClass("ha-is--adding").addClass("ha-is--added"); 1976 } 1977 }); 1978 elementorFrontend.hooks.addAction("frontend/element_ready/ha-mini-cart.default", miniCart); 1979 elementorFrontend.hooks.addAction("frontend/element_ready/ha-image-scroller.default", function ($scope) { 1980 elementorFrontend.elementsHandler.addHandler(ImageScroller, { 1981 $element: $scope 1982 }); 1983 }); 1984 elementorFrontend.hooks.addAction("frontend/element_ready/ha-nav-menu.default", NavMenu); 1985 1986 // Off Canvas 1987 var $trigger; 1988 var OffCanvas = function OffCanvas($scope) { 1989 this.node = $scope; 1990 this.wrap = $scope.find(".ha-offcanvas-content-wrap"); 1991 this.cart_wrap = $scope.find(".ha-offcanvas-cart-container"); 1992 this.content = $scope.find(".ha-offcanvas-content"); 1993 this.button = $scope.find(".ha-offcanvas-toggle"); 1994 this.settings = this.wrap.data("settings"); 1995 this.toggle_source = this.settings.toggle_source; 1996 this.id = this.settings.content_id; 1997 this.toggle_id = this.settings.toggle_id; 1998 this.toggle_class = this.settings.toggle_class; 1999 this.transition = this.settings.transition; 2000 this.esc_close = this.settings.esc_close; 2001 this.body_click_close = this.settings.body_click_close; 2002 this.links_click_close = this.settings.links_click_close; 2003 this.direction = this.settings.direction; 2004 this.buttons_position = this.settings.buttons_position; 2005 this.duration = 500; 2006 this.destroy(); 2007 this.init(); 2008 }; 2009 OffCanvas.prototype = { 2010 id: "", 2011 node: "", 2012 wrap: "", 2013 content: "", 2014 button: "", 2015 settings: {}, 2016 transition: "", 2017 duration: 400, 2018 initialized: false, 2019 animations: ["slide", "slide-along", "reveal", "push"],
2020 init: function init() { 2021 if (!this.wrap.length) { 2022 return; 2023 } 2024 $("html").addClass("ha-offcanvas-content-widget"); 2025 if ($(".ha-offcanvas-container").length === 0) { 2026 var faProJs = $("#font-awesome-pro-js").length > 0 ? $("#font-awesome-pro-js").attr("src") : false; 2027 if (faProJs) { 2028 $("#font-awesome-pro-js").remove(); 2029 } 2030 $("body").wrapInner('<div class="ha-offcanvas-container" />'); 2031 this.content.insertBefore(".ha-offcanvas-container"); 2032 if (faProJs) { 2033 $("body").append('<script type="text/javascript" id="font-awesome-pro-js" src="' + faProJs + '"></script>'); 2034 } 2035 } 2036 if (this.wrap.find(".ha-offcanvas-content").length > 0) { 2037 if ($(".ha-offcanvas-container > .ha-offcanvas-content-" + this.id).length > 0) { 2038 $(".ha-offcanvas-container > .ha-offcanvas-content-" + this.id).remove(); 2039 } 2040 if ($("body > .ha-offcanvas-content-" + this.id).length > 0) { 2041 $("body > .ha-offcanvas-content-" + this.id).remove(); 2042 } 2043 $("body").prepend(this.wrap.find(".ha-offcanvas-content")); 2044 } 2045 this.bindEvents(); 2046 }, 2047 destroy: function destroy() { 2048 this.close(); 2049 this.animations.forEach(function (animation) { 2050 if ($("html").hasClass("ha-offcanvas-content-" + animation)) { 2051 $("html").removeClass("ha-offcanvas-content-" + animation); 2052 } 2053 }); 2054 if ($("body > .ha-offcanvas-content-" + this.id).length > 0) { 2055 //$('body > .ha-offcanvas-content-' + this.id ).remove(); 2056 } 2057 }, 2058 setTrigger: function setTrigger() { 2059 var $trigger = false; 2060 if (this.toggle_source == "element-id" && this.toggle_id != "") { 2061 $trigger = $("#" + this.toggle_id); 2062 } else if (this.toggle_source == "element-class" && this.toggle_class != "") { 2063 $trigger = $("." + this.toggle_class); 2064 } else { 2065 $trigger = this.node.find(".ha-offcanvas-toggle"); 2066 } 2067 return $trigger; 2068 }, 2069 bindEvents: function bindEvents() { 2070 $trigger = this.setTrigger(); 2071 if ($trigger) { 2072 $trigger.on("click", $.proxy(this.toggleContent, this)); 2073 } 2074 $("body").delegate(".ha-offcanvas-content .ha-offcanvas-close", "click", $.proxy(this.close, this)); 2075 if (this.links_click_close === "yes") { 2076 $("body").delegate(".ha-offcanvas-content .ha-offcanvas-body a", "click", $.proxy(this.close, this)); 2077 } 2078 if (this.esc_close === "yes") { 2079 this.closeESC(); 2080 } 2081 if (this.body_click_close === "yes") { 2082 this.closeClick(); 2083 } 2084 $(window).resize($.proxy(this._resize, this)); 2085 }, 2086 toggleContent: function toggleContent(e) { 2087 e.preventDefault(); 2088 if (!$("html").hasClass("ha-offcanvas-content-open")) { 2089 this.show(); 2090 } else { 2091 this.close(); 2092 } 2093 this._resize(); 2094 }, 2095 show: function show() { 2096 $(".ha-offcanvas-content-" + this.id).addClass("ha-offcanvas-content-visible"); 2097 // init animation class. 2098 $("html").addClass("ha-offcanvas-content-" + this.transition); 2099 $("html").addClass("ha-offcanvas-content-" + this.direction); 2100 $("html").addClass("ha-offcanvas-content-open"); 2101 $("html").addClass("ha-offcanvas-content-" + this.id + "-open"); 2102 $("html").addClass("ha-offcanvas-content-reset"); 2103 this.button.addClass("ha-is-active"); 2104 this._resize(); 2105 }, 2106 close: function close() { 2107 $("html").removeClass("ha-offcanvas-content-open"); 2108 $("html").removeClass("ha-offcanvas-content-" + this.id + "-open"); 2109 setTimeout($.proxy(function () { 2110 $("html").removeClass("ha-offcanvas-content-reset"); 2111 $("html").removeClass("ha-offcanvas-content-" + this.transition); 2112 $("html").removeClass("ha-offcanvas-content-" + this.direction); 2113 $(".ha-offcanvas-content-" + this.id).removeClass("ha-offcanvas-content-visible"); 2114 }, this), 500); 2115 this.button.removeClass("ha-is-active"); 2116 }, 2117 closeESC: function closeESC() { 2118 var self = this; 2119 if ("" === self.settings.esc_close) { 2120 return; 2121 } 2122 // menu close on ESC key 2123 $(document).on("keydown", function (e) { 2124 if (e.keyCode === 27) { 2125 self.close(); 2126 } 2127 }); 2128 }, 2129 closeClick: function closeClick() { 2130 var self = this; 2131 if (this.toggle_source == "element-id" && this.toggle_id != "") { 2132 $trigger = "#" + this.toggle_id; 2133 } else if (this.toggle_source == "element-class" && this.toggle_class != "") { 2134 $trigger = "." + this.toggle_class; 2135 } else { 2136 $trigger = ".ha-offcanvas-toggle"; 2137 } 2138 $(document).on("click", function (e) { 2139 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")) { 2140 return; 2141 } else { 2142 self.close(); 2143 } 2144 }); 2145 }, 2146 _resize: function _resize() { 2147 if (!this.cart_wrap.length) { 2148 return; 2149 } 2150 var off_canvas = $(".ha-offcanvas-content-" + this.id); 2151 if (off_canvas && off_canvas.length > 0) { 2152 if (this.buttons_position === "bottom") { 2153 var winHeight = window.innerHeight; 2154 var offset = 0; 2155 if ($("body").hasClass("admin-bar")) { 2156 offset = 32; 2157 } 2158 winHeight = winHeight - offset; 2159 off_canvas.find(".ha-offcanvas-inner").css({ 2160 height: winHeight + "px", 2161 top: offset 2162 }); 2163 headerHeight = off_canvas.find(".ha-offcanvas-cart-header").outerHeight(true); 2164 wrapHeight = off_canvas.find(".ha-offcanvas-wrap").outerHeight(); 2165 cartTotalHeight = off_canvas.find(".woocommerce-mini-cart__total").outerHeight(); 2166 cartButtonsHeight = off_canvas.find(".woocommerce-mini-cart__buttons").outerHeight(); 2167 cartMessageHeight = off_canvas.find(".ha-woo-menu-cart-message").outerHeight(); 2168 itemsHeight = winHeight - (headerHeight + cartTotalHeight + cartButtonsHeight + cartMessageHeight); 2169 finalItemsHeight = itemsHeight - (winHeight - wrapHeight); 2170 finalItemsHeight += "px"; 2171 } else { 2172 finalItemsHeight = "auto"; 2173 } 2174 var style = '<style id="ha-woo-style-' + this.id + '">'; 2175 style += "#" + off_canvas.attr("id") + " .woocommerce-mini-cart.cart_list {"; 2176 style += "height: " + finalItemsHeight; 2177 style += "}"; 2178 style += "</style>"; 2179 if ($("#ha-woopack-style-" + this.id).length > 0) { 2180 $("#ha-woopack-style-" + this.id).remove(); 2181 } 2182 $("head").append(style); 2183 } 2184 } 2185 }; 2186 var initOffCanvas = function initOffCanvas($scope, $) { 2187 var content_wrap = $scope.find(".ha-offcanvas-content-wrap"); 2188 if ($(content_wrap).length > 0) { 2189 new OffCanvas($scope); 2190 } 2191 }; 2192 elementorFrontend.hooks.addAction("frontend/element_ready/ha-off-canvas.default", initOffCanvas); 2193 var Unfold = elementorModules.frontend.handlers.Base.extend({ 2194 onInit: function onInit() { 2195 elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); 2196 this.run(); 2197 }, 2198 onElementChange: function onElementChange(e) { 2199 if (e == "unfold_text" || e == "unfold_icon" || e == "fold_text" || e == "fold_icon" || e == "fold_height" || e == "transition_duration" || e == "trigger") { 2200 this.run(); 2201 if (e == "fold_height") { 2202 this.$element.find(".ha-unfold-data").css("height", this.getCollapseHeight() + "px"); 2203 } 2204 } 2205 }, 2206 getReadySettings: function getReadySettings() { 2207 var settings = { 2208 collapse_height: this.getElementSettings("fold_height") || 50,
2209 collapse_height_tablet: this.getElementSettings("fold_height_tablet") || this.getElementSettings("fold_height") || 50, 2210 collapse_height_mobile: this.getElementSettings("fold_height_mobile") || this.getElementSettings("fold_height_tablet") || this.getElementSettings("fold_height") || 50, 2211 trigger: this.getElementSettings("trigger"), 2212 transition_duration: this.getElementSettings("transition_duration") || 500, 2213 collapse_text: this.getElementSettings("unfold_text"), 2214 collapse_icon: this.getElementSettings("unfold_icon"), 2215 expand_text: this.getElementSettings("fold_text"), 2216 expand_icon: this.getElementSettings("fold_icon") 2217 }; 2218 return $.extend({}, settings); 2219 }, 2220 getCollapseHeight: function getCollapseHeight() { 2221 var body = this.$element.parents("body"); 2222 var unfoldSettings = this.getReadySettings(); 2223 var collapse_height = 50; 2224 if (body.attr("data-elementor-device-mode") == "desktop") { 2225 collapse_height = unfoldSettings.collapse_height; 2226 } 2227 if (body.attr("data-elementor-device-mode") == "tablet") { 2228 collapse_height = unfoldSettings.collapse_height_tablet; 2229 } 2230 if (body.attr("data-elementor-device-mode") == "mobile") { 2231 collapse_height = unfoldSettings.collapse_height_mobile; 2232 } 2233 return collapse_height; 2234 }, 2235 fold: function fold(unfoldData, button, collapse_height, unfoldRender) { 2236 var unfoldSettings = this.getReadySettings(); 2237 var html = unfoldSettings.collapse_icon ? unfoldSettings.collapse_icon.value ? '<i aria-hidden="true" class="' + unfoldSettings.collapse_icon.value + '"></i>' : "" : ""; 2238 html += unfoldSettings.collapse_text ? "<span>" + unfoldSettings.collapse_text + "</span>" : ""; 2239 unfoldData.css({ 2240 "transition-duration": unfoldSettings.transition_duration + "ms", 2241 "height": unfoldRender.outerHeight(true) + 'px' 2242 }); 2243 unfoldData.animate({ 2244 height: collapse_height 2245 }, 0); 2246 var timeOut = setTimeout(function () { 2247 button.html(html); 2248 clearTimeout(timeOut); 2249 }, unfoldSettings.transition_duration); 2250 unfoldData.removeClass("folded"); 2251 }, 2252 unfold: function unfold(unfoldData, unfoldRender, button) { 2253 var unfoldSettings = this.getReadySettings(); 2254 var html = unfoldSettings.expand_icon ? unfoldSettings.expand_icon.value ? '<i aria-hidden="true" class="' + unfoldSettings.expand_icon.value + '"></i>' : "" : ""; 2255 html += unfoldSettings.expand_text ? "<span>" + unfoldSettings.expand_text + "</span>" : ""; 2256 unfoldData.css("transition-duration", unfoldSettings.transition_duration + "ms"); 2257 unfoldData.animate({ 2258 height: unfoldRender.outerHeight(true) 2259 }, 0); 2260 var timeOut = setTimeout(function () { 2261 unfoldData.css("height", 'auto'); 2262 button.html(html); 2263 clearTimeout(timeOut); 2264 }, unfoldSettings.transition_duration); 2265 unfoldData.addClass("folded"); 2266 }, 2267 run: function run() { 2268 var $this = this; 2269 var button = this.$element.find(".ha-unfold-btn"), 2270 unfoldData = this.$element.find(".ha-unfold-data"), 2271 unfoldRender = this.$element.find(".ha-unfold-data-render"); 2272 var unfoldSettings = this.getReadySettings(); 2273 var collapse_height = $this.getCollapseHeight(); 2274 unfoldData.css("height", collapse_height + "px"); 2275 if (unfoldSettings.trigger == "click") { 2276 button.on("click", function () { 2277 collapse_height = $this.getCollapseHeight(); 2278 if (unfoldData.hasClass("folded")) { 2279 $this.fold(unfoldData, button, collapse_height, unfoldRender); 2280 } else { 2281 $this.unfold(unfoldData, unfoldRender, button); 2282 } 2283 }); 2284 } else if (unfoldSettings.trigger == "hover") { 2285 unfoldData.on("mouseenter", function () { 2286 $this.unfold(unfoldData, unfoldRender, button); 2287 }); 2288 unfoldData.on("mouseleave", function () { 2289 collapse_height = $this.getCollapseHeight(); 2290 $this.fold(unfoldData, button, collapse_height, unfoldRender); 2291 }); 2292 } 2293 } 2294 }); 2295 var Maps = elementorModules.frontend.handlers.Base.extend({ 2296 onInit: function onInit() { 2297 elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); 2298 this.runMap(); 2299 }, 2300 defaultStyle: function defaultStyle() { 2301 var defaultStyles = { 2302 standard: "", 2303 silver: [{ 2304 elementType: "geometry", 2305 stylers: [{ 2306 color: "#f5f5f5" 2307 }] 2308 }, { 2309 elementType: "labels.icon", 2310 stylers: [{ 2311 visibility: "off" 2312 }] 2313 }, { 2314 elementType: "labels.text.fill", 2315 stylers: [{ 2316 color: "#616161" 2317 }] 2318 }, { 2319 elementType: "labels.text.stroke", 2320 stylers: [{ 2321 color: "#f5f5f5" 2322 }] 2323 }, { 2324 featureType: "administrative.land_parcel", 2325 elementType: "labels.text.fill", 2326 stylers: [{ 2327 color: "#bdbdbd" 2328 }] 2329 }, { 2330 featureType: "poi", 2331 elementType: "geometry", 2332 stylers: [{ 2333 color: "#eeeeee" 2334 }] 2335 }, { 2336 featureType: "poi", 2337 elementType: "labels.text.fill", 2338 stylers: [{ 2339 color: "#757575" 2340 }] 2341 }, { 2342 featureType: "poi.park", 2343 elementType: "geometry", 2344 stylers: [{ 2345 color: "#e5e5e5" 2346 }] 2347 }, { 2348 featureType: "poi.park", 2349 elementType: "labels.text.fill", 2350 stylers: [{ 2351 color: "#9e9e9e" 2352 }] 2353 }, { 2354 featureType: "road", 2355 elementType: "geometry", 2356 stylers: [{ 2357 color: "#ffffff" 2358 }] 2359 }, { 2360 featureType: "road.arterial", 2361 elementType: "labels.text.fill", 2362 stylers: [{ 2363 color: "#757575" 2364 }] 2365 }, { 2366 featureType: "road.highway", 2367 elementType: "geometry", 2368 stylers: [{ 2369 color: "#dadada" 2370 }] 2371 }, { 2372 featureType: "road.highway", 2373 elementType: "labels.text.fill", 2374 stylers: [{ 2375 color: "#616161" 2376 }] 2377 }, { 2378 featureType: "road.local", 2379 elementType: "labels.text.fill", 2380 stylers: [{ 2381 color: "#9e9e9e" 2382 }] 2383 }, { 2384 featureType: "transit.line", 2385 elementType: "geometry", 2386 stylers: [{ 2387 color: "#e5e5e5" 2388 }] 2389 }, { 2390 featureType: "transit.station", 2391 elementType: "geometry", 2392 stylers: [{ 2393 color: "#eeeeee" 2394 }] 2395 }, { 2396 featureType: "water", 2397 elementType: "geometry", 2398 stylers: [{ 2399 color: "#c9c9c9" 2400 }] 2401 }, { 2402 featureType: "water", 2403 elementType: "labels.text.fill", 2404 stylers: [{ 2405 color: "#9e9e9e" 2406 }] 2407 }], 2408 retro: [{ 2409 elementType: "geometry", 2410 stylers: [{ 2411 color: "#ebe3cd" 2412 }] 2413 }, { 2414 elementType: "labels.text.fill", 2415 stylers: [{ 2416 color: "#523735" 2417 }] 2418 }, { 2419 elementType: "labels.text.stroke", 2420 stylers: [{ 2421 color: "#f5f1e6" 2422 }] 2423 }, { 2424 featureType: "administrative", 2425 elementType: "geometry.stroke", 2426 stylers: [{ 2427 color: "#c9b2a6" 2428 }] 2429 }, { 2430 featureType: "administrative.land_parcel", 2431 elementType: "geometry.stroke", 2432 stylers: [{ 2433 color: "#dcd2be" 2434 }] 2435 }, { 2436 featureType: "administrative.land_parcel", 2437 elementType: "labels.text.fill", 2438 stylers: [{ 2439 color: "#ae9e90" 2440 }] 2441 }, { 2442 featureType: "landscape.natural", 2443 elementType: "geometry", 2444 stylers: [{ 2445 color: "#dfd2ae" 2446 }] 2447 }, { 2448 featureType: "poi", 2449 elementType: "geometry", 2450 stylers: [{ 2451 color: "#dfd2ae" 2452 }] 2453 }, { 2454 featureType: "poi", 2455 elementType: "labels.text.fill", 2456 stylers: [{ 2457 color: "#93817c" 2458 }] 2459 }, { 2460 featureType: "poi.park", 2461 elementType: "geometry.fill", 2462 stylers: [{ 2463 color: "#a5b076" 2464 }] 2465 }, { 2466 featureType: "poi.park", 2467 elementType: "labels.text.fill", 2468 stylers: [{ 2469 color: "#447530" 2470 }] 2471 }, { 2472 featureType: "road", 2473 elementType: "geometry", 2474 stylers: [{ 2475 color: "#f5f1e6" 2476 }] 2477 }, { 2478 featureType: "road.arterial", 2479 elementType: "geometry", 2480 stylers: [{ 2481 color: "#fdfcf8" 2482 }] 2483 }, { 2484 featureType: "road.highway", 2485 elementType: "geometry", 2486 stylers: [{ 2487 color: "#f8c967" 2488 }] 2489 }, { 2490 featureType: "road.highway", 2491 elementType: "geometry.stroke", 2492 stylers: [{ 2493 color: "#e9bc62" 2494 }] 2495 }, { 2496 featureType: "road.highway.controlled_access", 2497 elementType: "geometry", 2498 stylers: [{ 2499 color: "#e98d58" 2500 }] 2501 }, { 2502 featureType: "road.highway.controlled_access", 2503 elementType: "geometry.stroke", 2504 stylers: [{ 2505 color: "#db8555" 2506 }] 2507 }, { 2508 featureType: "road.local", 2509 elementType: "labels.text.fill", 2510 stylers: [{ 2511 color: "#806b63" 2512 }] 2513 }, { 2514 featureType: "transit.line", 2515 elementType: "geometry", 2516 stylers: [{ 2517 color: "#dfd2ae" 2518 }] 2519 }, { 2520 featureType: "transit.line", 2521 elementType: "labels.text.fill", 2522 stylers: [{ 2523 color: "#8f7d77" 2524 }] 2525 }, { 2526 featureType: "transit.line", 2527 elementType: "labels.text.stroke", 2528 stylers: [{ 2529 color: "#ebe3cd" 2530 }] 2531 }, { 2532 featureType: "transit.station", 2533 elementType: "geometry", 2534 stylers: [{ 2535 color: "#dfd2ae" 2536 }] 2537 }, { 2538 featureType: "water", 2539 elementType: "geometry.fill", 2540 stylers: [{ 2541 color: "#b9d3c2" 2542 }] 2543 }, { 2544 featureType: "water", 2545 elementType: "labels.text.fill", 2546 stylers: [{ 2547 color: "#92998d" 2548 }] 2549 }], 2550 dark: [{ 2551 elementType: "geometry", 2552 stylers: [{ 2553 color: "#212121" 2554 }] 2555 }, { 2556 elementType: "labels.icon", 2557 stylers: [{ 2558 visibility: "off" 2559 }] 2560 }, { 2561 elementType: "labels.text.fill", 2562 stylers: [{ 2563 color: "#757575" 2564 }] 2565 }, { 2566 elementType: "labels.text.stroke", 2567 stylers: [{ 2568 color: "#212121" 2569 }] 2570 }, { 2571 featureType: "administrative", 2572 elementType: "geometry", 2573 stylers: [{ 2574 color: "#757575" 2575 }] 2576 }, { 2577 featureType: "administrative.country", 2578 elementType: "labels.text.fill", 2579 stylers: [{ 2580 color: "#9e9e9e" 2581 }] 2582 }, { 2583 featureType: "administrative.land_parcel", 2584 stylers: [{ 2585 visibility: "off" 2586 }] 2587 }, { 2588 featureType: "administrative.locality", 2589 elementType: "labels.text.fill", 2590 stylers: [{ 2591 color: "#bdbdbd" 2592 }] 2593 }, { 2594 featureType: "poi", 2595 elementType: "labels.text.fill", 2596 stylers: [{ 2597 color: "#757575" 2598 }] 2599 }, { 2600 featureType: "poi.park", 2601 elementType: "geometry", 2602 stylers: [{ 2603 color: "#181818" 2604 }] 2605 }, { 2606 featureType: "poi.park", 2607 elementType: "labels.text.fill", 2608 stylers: [{ 2609 color: "#616161" 2610 }] 2611 }, { 2612 featureType: "poi.park", 2613 elementType: "labels.text.stroke", 2614 stylers: [{ 2615 color: "#1b1b1b" 2616 }] 2617 }, { 2618 featureType: "road", 2619 elementType: "geometry.fill", 2620 stylers: [{ 2621 color: "#2c2c2c" 2622 }] 2623 }, { 2624 featureType: "road", 2625 elementType: "labels.text.fill", 2626 stylers: [{ 2627 color: "#8a8a8a" 2628 }] 2629 }, { 2630 featureType: "road.arterial", 2631 elementType: "geometry", 2632 stylers: [{ 2633 color: "#373737" 2634 }] 2635 }, { 2636 featureType: "road.highway", 2637 elementType: "geometry", 2638 stylers: [{ 2639 color: "#3c3c3c" 2640 }] 2641 }, { 2642 featureType: "road.highway.controlled_access", 2643 elementType: "geometry", 2644 stylers: [{ 2645 color: "#4e4e4e" 2646 }] 2647 }, { 2648 featureType: "road.local", 2649 elementType: "labels.text.fill", 2650 stylers: [{ 2651 color: "#616161" 2652 }] 2653 }, { 2654 featureType: "transit", 2655 elementType: "labels.text.fill", 2656 stylers: [{ 2657 color: "#757575" 2658 }] 2659 }, { 2660 featureType: "water", 2661 elementType: "geometry", 2662 stylers: [{ 2663 color: "#000000" 2664 }] 2665 }, { 2666 featureType: "water", 2667 elementType: "labels.text.fill", 2668 stylers: [{ 2669 color: "#3d3d3d" 2670 }] 2671 }], 2672 night: [{ 2673 elementType: "geometry", 2674 stylers: [{ 2675 color: "#242f3e" 2676 }] 2677 }, { 2678 elementType: "labels.text.fill", 2679 stylers: [{ 2680 color: "#746855" 2681 }] 2682 }, { 2683 elementType: "labels.text.stroke", 2684 stylers: [{ 2685 color: "#242f3e" 2686 }] 2687 }, { 2688 featureType: "administrative.locality", 2689 elementType: "labels.text.fill", 2690 stylers: [{ 2691 color: "#d59563" 2692 }] 2693 }, { 2694 featureType: "poi", 2695 elementType: "labels.text.fill", 2696 stylers: [{ 2697 color: "#d59563" 2698 }] 2699 }, { 2700 featureType: "poi.park", 2701 elementType: "geometry", 2702 stylers: [{ 2703 color: "#263c3f" 2704 }] 2705 }, { 2706 featureType: "poi.park", 2707 elementType: "labels.text.fill", 2708 stylers: [{ 2709 color: "#6b9a76" 2710 }] 2711 }, { 2712 featureType: "road", 2713 elementType: "geometry", 2714 stylers: [{ 2715 color: "#38414e" 2716 }] 2717 }, { 2718 featureType: "road", 2719 elementType: "geometry.stroke", 2720 stylers: [{ 2721 color: "#212a37" 2722 }] 2723 }, { 2724 featureType: "road", 2725 elementType: "labels.text.fill", 2726 stylers: [{ 2727 color: "#9ca5b3" 2728 }] 2729 }, { 2730 featureType: "road.highway", 2731 elementType
2731: "geometry", 2732 stylers: [{ 2733 color: "#746855" 2734 }] 2735 }, { 2736 featureType: "road.highway", 2737 elementType: "geometry.stroke", 2738 stylers: [{ 2739 color: "#1f2835" 2740 }] 2741 }, { 2742 featureType: "road.highway", 2743 elementType: "labels.text.fill", 2744 stylers: [{ 2745 color: "#f3d19c" 2746 }] 2747 }, { 2748 featureType: "transit", 2749 elementType: "geometry", 2750 stylers: [{ 2751 color: "#2f3948" 2752 }] 2753 }, { 2754 featureType: "transit.station", 2755 elementType: "labels.text.fill", 2756 stylers: [{ 2757 color: "#d59563" 2758 }] 2759 }, { 2760 featureType: "water", 2761 elementType: "geometry", 2762 stylers: [{ 2763 color: "#17263c" 2764 }] 2765 }, { 2766 featureType: "water", 2767 elementType: "labels.text.fill", 2768 stylers: [{ 2769 color: "#515c6d" 2770 }] 2771 }, { 2772 featureType: "water", 2773 elementType: "labels.text.stroke", 2774 stylers: [{ 2775 color: "#17263c" 2776 }] 2777 }], 2778 aubergine: [{ 2779 elementType: "geometry", 2780 stylers: [{ 2781 color: "#1d2c4d" 2782 }] 2783 }, { 2784 elementType: "labels.text.fill", 2785 stylers: [{ 2786 color: "#8ec3b9" 2787 }] 2788 }, { 2789 elementType: "labels.text.stroke", 2790 stylers: [{ 2791 color: "#1a3646" 2792 }] 2793 }, { 2794 featureType: "administrative.country", 2795 elementType: "geometry.stroke", 2796 stylers: [{ 2797 color: "#4b6878" 2798 }] 2799 }, { 2800 featureType: "administrative.land_parcel", 2801 elementType: "labels.text.fill", 2802 stylers: [{ 2803 color: "#64779e" 2804 }] 2805 }, { 2806 featureType: "administrative.province", 2807 elementType: "geometry.stroke", 2808 stylers: [{ 2809 color: "#4b6878" 2810 }] 2811 }, { 2812 featureType: "landscape.man_made", 2813 elementType: "geometry.stroke", 2814 stylers: [{ 2815 color: "#334e87" 2816 }] 2817 }, { 2818 featureType: "landscape.natural", 2819 elementType: "geometry", 2820 stylers: [{ 2821 color: "#023e58" 2822 }] 2823 }, { 2824 featureType: "poi", 2825 elementType: "geometry", 2826 stylers: [{ 2827 color: "#283d6a" 2828 }] 2829 }, { 2830 featureType: "poi", 2831 elementType: "labels.text.fill", 2832 stylers: [{ 2833 color: "#6f9ba5" 2834 }] 2835 }, { 2836 featureType: "poi", 2837 elementType: "labels.text.stroke", 2838 stylers: [{ 2839 color: "#1d2c4d" 2840 }] 2841 }, { 2842 featureType: "poi.park", 2843 elementType: "geometry.fill", 2844 stylers: [{ 2845 color: "#023e58" 2846 }] 2847 }, { 2848 featureType: "poi.park", 2849 elementType: "labels.text.fill", 2850 stylers: [{ 2851 color: "#3C7680" 2852 }] 2853 }, { 2854 featureType: "road", 2855 elementType: "geometry", 2856 stylers: [{ 2857 color: "#304a7d" 2858 }] 2859 }, { 2860 featureType: "road", 2861 elementType: "labels.text.fill", 2862 stylers: [{ 2863 color: "#98a5be" 2864 }] 2865 }, { 2866 featureType: "road", 2867 elementType: "labels.text.stroke", 2868 stylers: [{ 2869 color: "#1d2c4d" 2870 }] 2871 }, { 2872 featureType: "road.highway", 2873 elementType: "geometry", 2874 stylers: [{ 2875 color: "#2c6675" 2876 }] 2877 }, { 2878 featureType: "road.highway", 2879 elementType: "geometry.stroke", 2880 stylers: [{ 2881 color: "#255763" 2882 }] 2883 }, { 2884 featureType: "road.highway", 2885 elementType: "labels.text.fill", 2886 stylers: [{ 2887 color: "#b0d5ce" 2888 }] 2889 }, { 2890 featureType: "road.highway", 2891 elementType: "labels.text.stroke", 2892 stylers: [{ 2893 color: "#023e58" 2894 }] 2895 }, { 2896 featureType: "transit", 2897 elementType: "labels.text.fill", 2898 stylers: [{ 2899 color: "#98a5be" 2900 }] 2901 }, { 2902 featureType: "transit", 2903 elementType: "labels.text.stroke", 2904 stylers: [{ 2905 color: "#1d2c4d" 2906 }] 2907 }, { 2908 featureType: "transit.line", 2909 elementType: "geometry.fill", 2910 stylers: [{ 2911 color: "#283d6a"
2912 }] 2913 }, { 2914 featureType: "transit.station", 2915 elementType: "geometry", 2916 stylers: [{ 2917 color: "#3a4762" 2918 }] 2919 }, { 2920 featureType: "water", 2921 elementType: "geometry", 2922 stylers: [{ 2923 color: "#0e1626" 2924 }] 2925 }, { 2926 featureType: "water", 2927 elementType: "labels.text.fill", 2928 stylers: [{ 2929 color: "#4e6d70" 2930 }] 2931 }] 2932 }; 2933 return defaultStyles; 2934 }, 2935 settings: function settings(wrapper) { 2936 var item = document.querySelector(wrapper); 2937 var settings = { 2938 latitude: parseFloat(item.dataset.latitude), 2939 longitude: parseFloat(item.dataset.longitude), 2940 mapType: item.dataset.mapType, 2941 markers: item.dataset.markers, 2942 polylines: item.dataset.polylines, 2943 mapZoom: parseInt(item.dataset.mapZoom), 2944 mapZoomMobile: parseInt(item.dataset.mapZoomMobile), 2945 mapZoomTablet: parseInt(item.dataset.mapZoomTablet), 2946 scrollWheelZoom: item.dataset.scrollWheelZoom, 2947 zoomControl: item.dataset.zoomControl, 2948 fullscreenControl: item.dataset.fullScreen, 2949 mapDraggable: item.dataset.disableMapDrag, 2950 showLegend: item.dataset.showLegend, 2951 showRoute: item.dataset.showRoute, 2952 googleMapType: item.dataset.googleMapType, 2953 mapTypeControl: item.dataset.mapTypeControl, 2954 streetViewControl: item.dataset.streetView, 2955 infoOpen: item.dataset.infoOpen, 2956 infoOpenHover: item.dataset.infoOpenHover, 2957 mapStyle: item.dataset.mapStyle, 2958 customMapStyles: item.dataset.customMapStyle, 2959 defaultStyle: this.defaultStyle(), 2960 strokeColor: item.dataset.strokeColor, 2961 strokeOpacity: item.dataset.strokeOpacity, 2962 strokeWeight: item.dataset.strokeWeight, 2963 strokeFill: item.dataset.strokeFill, 2964 strokeFillOpacity: item.dataset.strokeFillOpacity, 2965 originLat: item.dataset.originLat, 2966 originLng: item.dataset.originLng, 2967 destLat: item.dataset.destLat, 2968 destLng: item.dataset.destLng, 2969 travelMode: item.dataset.travelMode 2970 }; 2971 return settings; 2972 }, 2973 isValidJsonString: function isValidJsonString(jsonString) { 2974 try { 2975 JSON.parse(jsonString); 2976 } catch (e) { 2977 return false; 2978 } 2979 return true; 2980 }, 2981 mapInit: function mapInit(wrapper) { 2982 var settings = this.settings(wrapper); 2983 var markersOptionsArray = JSON.parse(settings.markers); 2984 var map; 2985 var directionsService = new google.maps.DirectionsService(); 2986 var directionsRenderer = new google.maps.DirectionsRenderer(); 2987 var finalZoomLevel = settings.mapZoom; 2988 window.addEventListener("resize", function () { 2989 if (elementorFrontend.getCurrentDeviceMode() == "mobile") { 2990 finalZoomLevel = settings.mapZoomMobile; 2991 } else if (elementorFrontend.getCurrentDeviceMode() == "tablet") { 2992 finalZoomLevel = settings.mapZoomTablet; 2993 } else { 2994 finalZoomLevel = settings.mapZoom; 2995 } 2996 }); 2997 map = new google.maps.Map(document.querySelector(".ha-adv-google-map__wrapper" + wrapper), { 2998 center: { 2999 lat: settings.latitude === "" ? -34.391 : settings.latitude, 3000 lng: settings.longitude === "" ? 150.644 : settings.longitude 3001 }, 3002 zoom: finalZoomLevel, 3003 mapTypeId: settings.mapType, 3004 zoomControl: settings.zoomControl === "yes", 3005 mapTypeControl: settings.mapTypeControl === "yes", 3006 fullscreenControl: settings.fullscreenControl === "yes", 3007 streetViewControl: settings.streetViewControl === "yes", 3008 gestureHandling: settings.scrollWheelZoom === "yes" ? "greedy" : "cooperative", 3009 draggable: settings.mapDraggable !== "yes", 3010 styles: settings.mapStyle !== "custom" ? settings.defaultStyle[settings.mapStyle] : !this.isValidJsonString(settings.customMapStyles) ? "" : JSON.parse(settings.customMapStyles) 3011 }); 3012 if (settings.mapDraggable === "yes") { 3013 map.setOptions({ 3014 draggableCursor: "default" 3015 }); 3016 } 3017 3018 // adding markers and info window on map 3019 markersOptionsArray.forEach(function (option) { 3020 var marker = new google.maps.Marker({ 3021 icon: option.pin_icon.url === "" ? "" : { 3022 url: option.pin_icon.url, 3023 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) 3024 }, 3025 map: map, 3026 position: { 3027 lat: +option.pin_latitude, 3028 lng: +option.pin_longitude 3029 } 3030 }); 3031 var infoWindow = new google.maps.InfoWindow({ 3032 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>" 3033 }); 3034 if (settings.infoOpen === "yes") { 3035 infoWindow.open(map, marker); 3036 } 3037 if (settings.infoOpenHover === "yes") { 3038 marker.addListener("mouseover", function (e) { 3039 infoWindow.open(map, marker); 3040 }); 3041 marker.addListener("mouseout", function (e) { 3042 var timeOut = setTimeout(function () { 3043 infoWindow.close(); 3044 clearTimeout(timeOut); 3045 }, 1000); 3046 }); 3047 } else { 3048 marker.addListener("click", function () { 3049 infoWindow.open(map, marker); 3050 }); 3051 } 3052 }); 3053 3054 // adding map legend 3055 if (settings.showLegend === "yes") { 3056 var legend = document.querySelector(wrapper).nextElementSibling; 3057 map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(legend); 3058 } 3059 if (settings.googleMapType == "polyline") { 3060 var polylines_data = JSON.parse(settings.polylines); 3061 var polylines_arr = []; 3062 polylines_data.forEach(function (polyline) { 3063 polylines_arr.push({ 3064 lat: parseFloat(polyline.ha_gmap_polyline_lat), 3065 lng: parseFloat(polyline.ha_gmap_polyline_lng) 3066 }); 3067 }); 3068 var polyLinePath = JSON.parse(JSON.stringify(polylines_arr)); 3069 var polyPath = new google.maps.Polyline({ 3070 path: polyLinePath, 3071 strokeColor: settings.strokeColor, 3072 strokeOpacity: settings.strokeOpacity, 3073 strokeWeight: settings.strokeWeight 3074 });
3075 polyPath.setMap(map); 3076 } 3077 if (settings.googleMapType == "polygon") { 3078 var polylines_data = JSON.parse(settings.polylines); 3079 var polylines_arr = []; 3080 polylines_data.forEach(function (polyline) { 3081 polylines_arr.push({ 3082 lat: parseFloat(polyline.ha_gmap_polyline_lat), 3083 lng: parseFloat(polyline.ha_gmap_polyline_lng) 3084 }); 3085 }); 3086 var polyLinePath = JSON.parse(JSON.stringify(polylines_arr)); 3087 var polygon = new google.maps.Polygon({ 3088 path: polyLinePath, 3089 strokeColor: settings.strokeColor, 3090 strokeOpacity: settings.strokeOpacity, 3091 strokeWeight: settings.strokeWeight, 3092 fillColor: settings.strokeFill, 3093 fillOpacity: settings.strokeFillOpacity 3094 }); 3095 polygon.setMap(map); 3096 } 3097 if (settings.googleMapType == "routes") { 3098 this.routeDraw(directionsService, directionsRenderer, settings); 3099 directionsRenderer.setMap(map); 3100 } 3101 google.maps.event.addDomListener(window, "resize", function () { 3102 var center = map.getCenter(); 3103 google.maps.event.trigger(map, "resize"); 3104 map.setCenter(center); 3105 map.setZoom(finalZoomLevel); 3106 }); 3107 }, 3108 routeDraw: function routeDraw(directionsService, directionsRenderer, settings) { 3109 var start = settings.originLat + "," + settings.originLng; 3110 var end = settings.destLat + "," + settings.destLng; 3111 directionsService.route({ 3112 origin: { 3113 query: start 3114 }, 3115 destination: { 3116 query: end 3117 }, 3118 travelMode: settings.travelMode.toUpperCase() 3119 }, function (response, status) { 3120 if (status === "OK") { 3121 directionsRenderer.setDirections(response); 3122 } else {} 3123 }); 3124 }, 3125 runMap: function runMap() { 3126 var gmaper = document.querySelectorAll(".ha-adv-google-map__wrapper"); 3127 for (var i = 0; i < gmaper.length; i++) { 3128 gmaper[i].classList.add("ha-adv-google-map__wrapper--item" + i); 3129 this.mapInit(".ha-adv-google-map__wrapper--item" + i); 3130 } 3131 } 3132 }); 3133 elementorFrontend.hooks.addAction("frontend/element_ready/ha-google-map.default", function ($scope) { 3134 elementorFrontend.elementsHandler.addHandler(Maps, { 3135 $element: $scope, 3136 selectors: { 3137 container: ".ha-adv-google-map__wrapper" 3138 } 3139 }); 3140 }); 3141 elementorFrontend.hooks.addAction("frontend/element_ready/ha-unfold.default", function ($scope) { 3142 elementorFrontend.elementsHandler.addHandler(Unfold, { 3143 $element: $scope 3144 }); 3145 }); 3146 var EddCart = function EddCart($scope) { 3147 var optionEL = $scope.find('.ha-edd-table-wrap'); 3148 var settings = optionEL.data('options'); 3149 var removeEl = $scope.find('.edd-remove-from-cart'); 3150 if (settings.cart_btn_type == 'icon') { 3151 removeEl.html("<i class=\"".concat(settings.icon.value, "\"></i>")); 3152 } else { 3153 removeEl.text(settings.btn_text); 3154 } 3155 }; 3156 elementorFrontend.hooks.addAction('frontend/element_ready/ha-edd-cart.default', EddCart); 3157 var EddCheckout = function EddCheckout($scope) { 3158 var optionEL = $scope.find('.ha-edd-table-wrap'); 3159 var settings = optionEL.data('options'); 3160 var removeEl = $scope.find('.edd_cart_remove_item_btn'); 3161 if (settings.cart_btn_type == 'icon') { 3162 removeEl.html("<i class=\"".concat(settings.icon.value, "\"></i>")); 3163 } else { 3164 removeEl.text(settings.btn_text); 3165 } 3166 }; 3167 elementorFrontend.hooks.addAction('frontend/element_ready/ha-edd-checkout.default', EddCheckout); 3168 var EddAjaxBtn = function EddAjaxBtn($scope) { 3169 var btn = $scope.find(".ha_edd_ajax_btn"); 3170 btn.on('click', function (event) { 3171 event.preventDefault(); 3172 var $self = $(this), 3173 download_id = $self.data('download-id'), 3174 nonce = $self.data('nonce'); 3175 $.ajax({ 3176 url: HappyProLocalize.ajax_url, 3177 type: "POST", 3178 data: { 3179 action: "ha_edd_ajax_add_to_cart_link", 3180 security: HappyProLocalize.nonce, 3181 download_id: download_id 3182 }, 3183 success: function success(response) { 3184 if (response.success == true) { 3185 $self.html("<i class=\"fas fa-cart-plus\"></i>"); 3186 } 3187 } 3188 }); 3189 }); 3190 }; 3191 elementorFrontend.hooks.addAction('frontend/element_ready/ha-edd-product-grid.default', EddAjaxBtn); 3192 elementorFrontend.hooks.addAction('frontend/element_ready/ha-edd-product-carou
3192sel.default', EddAjaxBtn); 3193 elementorFrontend.hooks.addAction('frontend/element_ready/ha-edd-single-product.default', EddAjaxBtn); 3194 var Image_Swap = function Image_Swap($scope) { 3195 var element = $scope.find('.ha-image-swap-wrapper'); 3196 var trigger_type = element.data('trigger'); 3197 var status; 3198 if (trigger_type === 'click') { 3199 element.on('click', element, function () { 3200 var self = $(this); 3201 var click = self.attr('data-click'); 3202 if ('inactive' == click) { 3203 status = 'active'; 3204 } else { 3205 status = 'inactive'; 3206 } 3207 self.attr('data-click', status); 3208 var first_img = self.find('.img_swap_first'); 3209 var second_img = self.find('.img_swap_second'); 3210 }); 3211 } 3212 var elm = $scope.find('.ha-image-swap-ctn'); 3213 var elm_img = $scope.find('.ha-image-swap-item'); 3214 var trigger = elm.data('trigger'); 3215 if (elm.length > 0) { 3216 $('.ha-image-swap-ctn').on('click', '.ha-image-swap-item', function (e) { 3217 var elem = $(this); 3218 var parent = elem.parent('.ha-image-swap-insider'); 3219 var firstChild = parent.children('.ha-image-swap-item:first-of-type'); 3220 var secondChild = parent.children('.ha-image-swap-item:nth-of-type(2)'); 3221 if (!elem.is(':first-child')) { 3222 parent.addClass('changed'); 3223 setTimeout(function () { 3224 firstChild.remove(); 3225 parent.append(firstChild); 3226 parent.removeClass('changed'); 3227 }, 400); 3228 } 3229 }); 3230 } 3231 // if( trigger == 'hover'){ 3232 // elm.hover(function (e){ 3233 // var target = e.target; 3234 3235 // if(!$(target).hasClass('active')){ 3236 3237 // var $self = $(this); 3238 // var parent = $self.find('.ha-image-swap-insider'); 3239 // var firstChild = parent.children('.ha-image-swap-item:first-of-type'); 3240 // var secondChild = parent.children('.ha-image-swap-item:nth-of-type(2)'); 3241 3242 // firstChild.toggleClass('active'); 3243 // secondChild.toggleClass('active'); 3244 // } 3245 // }); 3246 // } 3247 }; 3248 var FlipBox = function FlipBox($scope) { 3249 var element = $scope.find('.ha-flip-box-inner'); 3250 // touchstart 3251 element.on('mouseenter mouseleave touchstart', function (e) { 3252 if (('mouseenter' == e.type || 'touchstart' == e.type) && !$(this).hasClass('flip')) { 3253 $(this).addClass('flip'); 3254 } else if (('mouseleave' == e.type || 'touchstart' == e.type) && $(this).hasClass('flip')) { 3255 $(this).removeClass('flip'); 3256 } else if ('touchstart' == e.type && $(this).hasClass('flip')) { 3257 $(this).removeClass('flip'); 3258 } 3259 }); 3260 }; 3261 elementorFrontend.hooks.addAction('frontend/element_ready/ha-image-swap.default', Image_Swap); 3262 var FreeShippingBar = function FreeShippingBar($scope) { 3263 var $fsbContainer = $scope.find('.ha-fsb-container'); 3264 if ($fsbContainer) { 3265 var $settings = $fsbContainer.data('fsb_settings'); 3266 if ($settings != undefined) { 3267 var $aimationSpeed = $settings.hasOwnProperty('ha_fsb_animation_speed') ? $settings.ha_fsb_animation_speed : 15; 3268 var $achivePercent = $settings.hasOwnProperty('achive_percent') ? $settings.achive_percent : 0; 3269 var $progressType = $settings.hasOwnProperty('progress_type') ? $settings.progress_type : 'percent'; 3270 var $currencySymbol = $settings.hasOwnProperty('currencySymbol') && $progressType == 'percent' ? '%' : $settings.currencySymbol; 3271 var $cartTotal = $settings.hasOwnProperty('cart_total') ? $settings.cart_total : 0; 3272 var $totalPercent = parseFloat(Math.round($achivePercent)) >= 100 ? 100 : parseFloat(Math.round($achivePercent)); 3273 var $progressText = $progressType == 'percent' ? $totalPercent : $cartTotal; 3274 var $elem = $fsbContainer.find('.ha-fsb-size'); 3275 $elem.text($progressText + $currencySymbol); 3276 var defaultWidth = $(window).width() <= 768 ? 12 : 5; 3277 $totalPercent > 0 ? $elem.css({ 3278 'width': $totalPercent + "%", 3279 'transition': 'width ' + $aimationSpeed + 'ms ease-in-out' 3280 }) : $elem.css('width', +defaultWidth + "%"); 3281 } 3282 } 3283 }; 3284 elementorFrontend.hooks.addAction('frontend/element_ready/ha-shipping-bar.default', FreeShippingBar); 3285 $('.fsb-close-icon').on('click', function () { 3286 document.cookie = "ha_close_fsb = yes;path=/"; 3287 $('.ha-fsb-container').hide(); 3288 }); 3289 elementorFrontend.hooks.addAction('frontend/element_ready/ha-flip-box.default', FlipBox
3289); 3290 var HaRemoteCarousel = function HaRemoteCarousel($scope) { 3291 var $rcContainer = $scope.find('.ha-remote-carousel-container'); 3292 if ($rcContainer) { 3293 var $rcBtn = $($rcContainer).find('.ha-custom-nav-remote-carousel'); 3294 if ($rcBtn) { 3295 var $prevSliderIndex = 0; 3296 var $slides_to_show = 0; 3297 var $ha_show_thumbnail = $($rcBtn).parent().data('show_thumbnail'); 3298 var $ha_rc_unique_id = $($rcBtn).parent().data('ha_rc_id'); 3299 var $haRcSelector = $ha_rc_unique_id ? $('[data-ha_rcc_uid="' + $ha_rc_unique_id + '"]') : ''; 3300 if ($ha_show_thumbnail && $ha_show_thumbnail == 'yes') { 3301 $haRcSelector.on('init', function (event, slick, currentSlide) { 3302 var $dataSettingsSelector = $haRcSelector.parent().parent(); 3303 var $dataSettings = $dataSettingsSelector.data('settings'); 3304 $slides_to_show = typeof $dataSettings === "undefined" ? $slides_to_show : $dataSettings.slides_to_show; 3305 $prevSliderIndex = (currentSlide ? currentSlide : 0) - 1; 3306 var $nextIndex = parseInt($slides_to_show) + parseInt($prevSliderIndex) + 1; 3307 var $nextItem = $haRcSelector.find('[data-slick-index="' + $nextIndex + '"]');
3308 var $nextImg = $nextItem.find('img').attr('src'); 3309 var $prevItem = $haRcSelector.find('[data-slick-index="' + $prevSliderIndex + '"]'); 3310 var $prevImg = $prevItem.find('img').attr('src'); 3311 var $nextBtn = $rcContainer.find('.ha-remote-carousel-btn-next'); 3312 var $prevBtn = $rcContainer.find('.ha-remote-carousel-btn-prev'); 3313 $nextBtn.css({ 3314 'background-image': 'url(' + $nextImg + ')', 3315 'background-position': 'center' 3316 }); 3317 $prevBtn.css({ 3318 'background-image': 'url(' + $prevImg + ')', 3319 'background-position': 'center' 3320 }); 3321 }); 3322 $haRcSelector.trigger('init'); 3323 $($rcBtn).on("click", function (e) { 3324 e.preventDefault(); 3325 $haRcSelector.on('afterChange', function (event, slick, currentSlideIndex) { 3326 var $dataSettingsSelector = $haRcSelector.parent().parent(); 3327 var $dataSettings = $dataSettingsSelector.data('settings'); 3328 var $slides_to_show = $dataSettings ? $dataSettings.slides_to_show : currentSlideIndex; 3329 $prevSliderIndex = parseInt(currentSlideIndex - 1); 3330 var $nextIndex = parseInt($slides_to_show) + parseInt($prevSliderIndex) + 1; 3331 var $nextItem = $haRcSelector.find('[data-slick-index="' + $nextIndex + '"]');
3332 var $nextImg = $nextItem.find('img').attr('src'); 3333 var $prevItem = $haRcSelector.find('[data-slick-index="' + $prevSliderIndex + '"]'); 3334 var $prevImg = $prevItem.find('img').attr('src'); 3335 var $nextBtn = $rcContainer.find('.ha-remote-carousel-btn-next'); 3336 var $prevBtn = $rcContainer.find('.ha-remote-carousel-btn-prev'); 3337 if ($nextBtn) { 3338 $nextBtn.css({ 3339 'background-image': 'url(' + $nextImg + ')', 3340 'background-position': 'center' 3341 }); 3342 } 3343 if ($prevBtn) { 3344 $prevBtn.css({ 3345 'background-image': 'url(' + $prevImg + ')', 3346 'background-position': 'center' 3347 }); 3348 } 3349 }); 3350 if ($(this).data("ha_rc_nav") == 'ha_rc_next_btn') { 3351 $haRcSelector.slick("slickNext"); 3352 } else if ($(this).data("ha_rc_nav") == 'ha_rc_prev_btn') { 3353 $haRcSelector.slick("slickPrev"); 3354 } 3355 }); 3356 } else { 3357 $($rcBtn).on("click", function (e) { 3358 e.preventDefault(); 3359 if ($(this).data("ha_rc_nav") == 'ha_rc_next_btn') { 3360 $haRcSelector.slick("slickNext"); 3361 } else if ($(this).data("ha_rc_nav") == 'ha_rc_prev_btn') { 3362 $haRcSelector.slick("slickPrev"); 3363 } 3364 }); 3365 } 3366 } 3367 } 3368 }; 3369 elementorFrontend.hooks.addAction('frontend/element_ready/ha-remote-carousel.default', HaRemoteCarousel); 3370 var HaTOC = elementorModules.frontend.handlers.Base.extend({ 3371 getDefaultSettings: function getDefaultSettings() { 3372 var elementSettings = this.getElementSettings(), 3373 listWrapperTag = "numbers" === elementSettings.marker_view ? "ol" : "ul"; 3374 return { 3375 selectors: { 3376 widgetContainer: ".ha-toc-wrapper", 3377 container: '.elementor:not([data-elementor-type="header"]):not([data-elementor-type="footer"])', 3378 expandButton: ".ha-toc__header", 3379 collapseButton: ".ha-toc__header", 3380 body: ".ha-toc__body", 3381 headerTitle: ".ha-toc__header-title", 3382 scrollTop: ".ha-toc__scroll-to-top--container" 3383 }, 3384 classes: { 3385 anchor: "ha-toc-menu-anchor", 3386 listWrapper: "ha-toc__list-wrapper", 3387 listItem: "ha-toc__list-item", 3388 listTextWrapper: "ha-toc__list-item-text-wrapper", 3389 firstLevelListItem: "ha-toc__top-level", 3390 listItemText: "ha-toc__list-item-text", 3391 activeItem: "ha-toc-item-active", 3392 headingAnchor: "ha-toc__heading-anchor", 3393 collapsed: "ha-toc--collapsed" 3394 }, 3395 listWrapperTag: listWrapperTag 3396 }; 3397 }, 3398 getDefaultElements: function getDefaultElements() { 3399 var settings = this.getSettings(), 3400 elementSettings = this.getElementSettings(); 3401 return { 3402 $pageContainer: jQuery(elementSettings.container || settings.selectors.container), 3403 $widgetContainer: this.$element.find(settings.selectors.widgetContainer), 3404 $expandButton: this.$element.find(settings.selectors.expandButton), 3405 $collapseButton: this.$element.find(settings.selectors.collapseButton), 3406 $tocBody: this.$element.find(settings.selectors.body), 3407 $listItems: this.$element.find("." + settings.classes.listItem), 3408 $scrollTop: this.$element.find(settings.selectors.scrollTop) 3409 }; 3410 }, 3411 bindEvents: function bindEvents() { 3412 var $self = this; 3413 var elementSettings = this.getElementSettings(); 3414 if (elementSettings.minimize_box) { 3415 this.elements.$expandButton.on("click", function () { 3416 if (!$($self.$element).hasClass($self.getSettings("classes.collapsed"))) { 3417 return $self.collapseBox(); 3418 } else { 3419 return $self.expandBox(); 3420 } 3421 }); 3422 } 3423 if (elementSettings.collapse_subitems) { 3424 this.elements.$listItems.hover(function (event) { 3425 return jQuery(event.target).slideToggle(); 3426 }); 3427 } 3428 if (elementSettings.sticky_toc_toggle) { 3429 elementorFrontend.elements.$window.on("resize", this.handleStickyToc); 3430 } 3431 if (elementSettings.scroll_to_top_toggle) { 3432 this.elements.$scrollTop.on("click", function () { 3433 $self.scrollToTop(); 3434 }); 3435 } 3436 }, 3437 getHeadings: function getHeadings() { 3438 // Get all headings from document by user-selected tags 3439 var elementSettings = this.getElementSettings(), 3440 tags = elementSettings.headings_by_tags.join(","),
3441 selectors = this.getSettings("selectors"), 3442 excludedSelectors = elementSettings.exclude_headings_by_selector; 3443 return this.elements.$pageContainer.find(tags).not(selectors.headerTitle).filter(function (index, heading) { 3444 return !jQuery(heading).closest(excludedSelectors).length; // Handle excluded selectors if there are any 3445 }); 3446 }, 3447 addAnchorsBeforeHeadings: function addAnchorsBeforeHeadings() { 3448 var $this = this; 3449 // Add an anchor element right before each TOC heading to create anchors for TOC links 3450 var classes = this.getSettings("classes"); 3451 this.elements.$headings.before(function (index) { 3452 var anchorLink = $this.getHeadingAnchorLink(index, classes); 3453 return '<span id="' + anchorLink + '" class="' + classes.anchor + ' "></span>'; 3454 }); 3455 }, 3456 activateItem: function activateItem($listItem) { 3457 var classes = this.getSettings("classes"); 3458 this.deactivateActiveItem($listItem); 3459 $listItem.addClass(classe
3459s.activeItem); 3460 this.$activeItem = $listItem; 3461 if (!this.getElementSettings("sticky_toc_toggle")) { 3462 //Note:- The "Collapse" option will not work unless you make the Table of Contents sticky. 3463 return; 3464 } 3465 if (!this.getElementSettings("collapse_subitems")) { 3466 return; 3467 } 3468 var $activeList = void 0; 3469 if ($listItem.hasClass(classes.firstLevelListItem)) { 3470 $activeList = $listItem.parent().next(); 3471 } else { 3472 $activeList = $listItem.parents("." + classes.listWrapper).eq(-2); 3473 } 3474 if (!$activeList.length) { 3475 delete this.$activeList; 3476 return; 3477 } 3478 this.$activeList = $activeList; 3479 this.$activeList.stop().slideDown(); 3480 }, 3481 deactivateActiveItem: function deactivateActiveItem($activeToBe) { 3482 if (!this.$activeItem || this.$activeItem.is($activeToBe)) { 3483 return; 3484 } 3485 var _getSettings = this.getSettings(), 3486 classes = _getSettings.classes; 3487 this.$activeItem.removeClass(classes.activeItem); 3488 if (this.$activeList && (!$activeToBe || !this.$activeList[0].contains($activeToBe[0]))) { 3489 this.$activeList.slideUp(); 3490 } 3491 }, 3492 followAnchor: function followAnchor($element, index) { 3493 var $self = this; 3494 var anchorSelector = $element[0].hash; 3495 var $anchor = void 0; 3496 try { 3497 // `decodeURIComponent` for UTF8 characters in the hash. 3498 $anchor = jQuery(decodeURIComponent(anchorSelector)); 3499 } catch (e) { 3500 return; 3501 } 3502 if (0 === index) { 3503 haObserveTarget($anchor[0], function (direction) { 3504 if ($self.itemClicked) { 3505 return; 3506 } 3507 if ("down" === direction) { 3508 $self.activateItem($element); 3509 } else { 3510 $self.deactivateActiveItem(); 3511 } 3512 }); 3513 } 3514 haObserveTarget($anchor[0], function (direction) { 3515 if ($self.itemClicked) { 3516 return; 3517 } 3518 if ("down" === direction) { 3519 $self.activateItem($self.$listItemTexts.eq(index + 1)); 3520 } else { 3521 $self.activateItem($element); 3522 } 3523 }); 3524 }, 3525 followAnchors: function followAnchors() { 3526 var $self = this; 3527 this.$listItemTexts.each(function (index, element) { 3528 return $self.followAnchor(jQuery(element), index); 3529 }); 3530 }, 3531 setOffset: function setOffset($listItem) { 3532 var $this = this; 3533 var settings = this.getSettings(); 3534 var list = this.$element.find("." + settings.classes.listItem); 3535 var offset = this.getCurrentDeviceSetting("scroll_offset"); 3536 list.each(function () { 3537 $('a', this).on('click', function (e) { 3538 e.preventDefault(); 3539 var hash = this.hash; 3540 $('html, body').animate({ 3541 scrollTop: $(hash).offset().top - parseInt(offset.size) 3542 }, 800); 3543 }); 3544 }); 3545 }, 3546 populateTOC: function populateTOC() { 3547 var $self = this; 3548 this.listItemPointer = 0; 3549 var elementSettings = this.getElementSettings(); 3550 if (elementSettings.custom_style == 'yes') { 3551 this.elements.$widgetContainer.html(this.createSideDot()); 3552 } else { 3553 if (elementSettings.hierarchical_view) { 3554 this.createNestedList(); 3555 } else { 3556 this.createFlatList(); 3557 } 3558 } 3559 this.$listItemTexts = this.$element.find(".ha-toc__list-item-text"); 3560 this.$listItemTexts.on("click", this.onListItemClick.bind(this)); 3561 if (!elementorFrontend.isEditMode()) { 3562 this.followAnchors(); 3563 } 3564 $(window).on('scroll', function () { 3565 if ("window_top" === elementSettings.scroll_to_top_option) { 3566 if ($(window).scrollTop() > 0) { 3567 $self.elements.$scrollTop.show(); 3568 } else { 3569 $self.elements.$scrollTop.hide(); 3570 } 3571 } else { 3572 var $id = $self.getID().parents('.elementor-element'); 3573 if ($id.offset().top >= $(window).scrollTop()) { 3574 $self.elements.$scrollTop.hide(); 3575 } else { 3576 $self.elements.$scrollTop.show(); 3577 } 3578 } 3579 }); 3580 }, 3581 createNestedList: function createNestedList() { 3582 var $self = this; 3583 this.headingsData.forEach(function (heading, index) { 3584 heading.level = 0; 3585 for (var i = index - 1; i >= 0; i--) { 3586 var currentOrderedItem = $self.headingsData[i]; 3587 if (currentOrderedItem.tag <= heading.tag) { 3588 heading.level = currentOrderedItem.level; 3589 if (currentOrderedItem.tag < heading.tag) {
3590 heading.level++; 3591 } 3592 break; 3593 } 3594 } 3595 }); 3596 this.elements.$tocBody.html(this.getNestedLevel(0)); 3597 }, 3598 createFlatList: function createFlatList() { 3599 this.elements.$tocBody.html(this.getNestedLevel()); 3600 }, 3601 createSideDot: function createSideDot(level) { 3602 var settings = this.getSettings(), 3603 elementSettings = this.getElementSettings(), 3604 icon = this.getElementSettings("icon"), 3605 htmlul = ''; 3606 if (elementSettings.custom_style == 'yes') { 3607 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>"); 3608 if (elementSettings.custom_style_list == 'hm-toc-slide-style') { 3609 htmlul += "<".concat(elementSettings.html_tag, " class=\"hm-toc-title\"><span>").concat(elementSettings.widget_title, "<span></").concat(elementSettings.html_tag, ">"); 3610 } else { 3611 htmlul += "<".concat(elementSettings.html_tag, " class=\"hm-toc-title\">").concat(elementSettings.widget_title, "</").concat(elementSettings.html_tag, ">"); 3612 } 3613 htmlul += "<".concat(settings.listWrapperTag, " class=\"hm-toc-items-inner\">"); 3614 for (var i = 0; i < this.headingsData.length; i++) { 3615 var list = ''; 3616 var currentItemDot = this.headingsData[i]; 3617 if (level > currentItemDot.level) { 3618 break; 3619 } 3620 var listItemTextClasses = settings.classes.listItemText; 3621 if (0 === currentItemDot.level) { 3622 // If the current list item is a top level item, give it the first level class 3623 listItemTextClasses += " " + settings.classes.firstLevelListItem; 3624 } 3625 if (level === currentItemDot.level) { 3626 list += "<li class=\"hm-toc-entry ".concat(settings.classes.listItem, "\">"); 3627 if ('bullets' === elementSettings.marker_view && icon && elementSettings.custom_style_list == 'hm-toc-slide-style') { 3628 list += "<i class=\"".concat(icon.value, "\"></i>"); 3629 } 3630 list += "<a href=\"#".concat(currentItemDot.anchorLink, "\" class=\"").concat(listItemTextClasses, "\"><span>").concat(currentItemDot.text, "</span></a>"); 3631 list += "</li>"; 3632 } 3633 htmlul += list; 3634 } 3635 htmlul += "</".concat(settings.listWrapperTag, ">"); 3636 htmlul += "</li>\n </ul>"; 3637 } 3638 return htmlul; 3639 }, 3640 getNestedLevel: function getNestedLevel(level) { 3641 var settings = this.getSettings(), 3642 elementSettings = this.getElementSettings(), 3643 icon = this.getElementSettings("icon"); 3644 var html = ''; 3645 3646 // Open new list/nested list 3647 html += "<" + settings.listWrapperTag + ' class="' + settings.classes.listWrapper + '">'; 3648 3649 // for each list item, build its markup. 3650 while (this.listItemPointer < this.headingsData.length) { 3651 var currentItem = this.headingsData[this.listItemPointer]; 3652 var listItemTextClasses = settings.classes.listItemText; 3653 if (0 === currentItem.level) { 3654 // If the current list item is a top level item, give it the first level class 3655 listItemTextClasses += " " + settings.classes.firstLevelListItem; 3656 } 3657 if (level > currentItem.level) { 3658 break; 3659 } 3660 if (level === currentItem.level) { 3661 html += '<li class="' + settings.classes.listItem + " " + "level-" + level + '">'; 3662 html += '<div class="' + settings.classes.listTextWrapper + '">'; 3663 var liContent = '<a href="#' + currentItem.anchorLink + '" class="' + listItemTextClasses + '">' + currentItem.text + "</a>"; 3664 3665 // If list type is bullets, add the bullet icon as an <i> tag 3666 if ("bullets" === elementSettings.marker_view && icon) { 3667 liContent = '<i class="' + icon.value + '"></i>' + liContent; 3668 } 3669 html += liContent; 3670 html += "</div>"; 3671 this.listItemPointer++; 3672 var nextItem = this.headingsData[this.listItemPointer]; 3673 if (nextItem && level < nextItem.level) { 3674 // If a new nested list has to be created under the current item, 3675 // this entire method is called recursively (outside the while loop, a list wrapper is created) 3676 html += this.getNestedLevel(nextItem.level); 3677 } 3678 html += "</li>"; 3679 } 3680 } 3681 html += "</" + settings.listWrapperTag + ">"; 3682 return html; 3683 }, 3684 handleNoHeadingsFound: function handleNoHeadingsFound() { 3685 var _messages = 'No headings were found on this page.'; 3686 if (elementorFrontend.isEditMode()) { 3687 return this.elements.$tocBody.html(_messages); 3688 } 3689 }, 3690 collapseOnInit: function collapseOnInit() { 3691 var $self = this; 3692 var minimizedOn = this.getElementSettings("minimized_on"), 3693 currentDeviceMode = elementorFrontend.getCurrentDeviceMode(); 3694 if ("" !== minimizedOn && "array" !== typeof minimizedOn) { 3695 minimizedOn = [minimizedOn]; 3696 } 3697 if (0 !== minimizedOn.length && "object" === _typeof(minimizedOn)) {
3698 minimizedOn.forEach(function (value) { 3699 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) { 3700 $self.collapseBox(); 3701 } 3702 }); 3703 } 3704 }, 3705 getHeadingAnchorLink: function getHeadingAnchorLink(index, classes) { 3706 var headingID = this.elements.$headings[index].id, 3707 wrapperID = this.elements.$headings[index].closest('.elementor-widget').id; 3708 var anchorLink = ''; 3709 if (headingID) { 3710 anchorLink = headingID; 3711 } else if (wrapperID) { 3712 // If the heading itself has an ID, we don't want to overwrite it 3713 anchorLink = wrapperID; 3714 } // If there is no existing ID, use the heading text to create a semantic ID 3715 3716 if (headingID || wrapperID) { 3717 jQuery(this.elements.$headings[index]).data('hasOwnID', true); 3718 } else { 3719 anchorLink = "".concat(classes.headingAnchor, "-").concat(index); 3720 } 3721 return anchorLink; 3722 }, 3723 setHeadingsData: function setHeadingsData() { 3724 var $this = this; 3725 this.headingsData = []; 3726 var classes = this.getSettings("classes"); 3727 3728 // Create an array for simplifying TOC list creation 3729 this.elements.$headings.each(function (index, element) { 3730 var anchorLink = $this.getHeadingAnchorLink(index, classes); 3731 $this.headingsData.push({ 3732 tag: +element.nodeName.slice(1), 3733 text: element.textContent, 3734 anchorLink: anchorLink 3735 }); 3736 }); 3737 }, 3738 run: function run() { 3739 var elementSettings = this.getElementSettings(); 3740 this.elements.$headings = this.getHeadings(); 3741 if (!this.elements.$headings.length) { 3742 return this.handleNoHeadingsFound(); 3743 } 3744 this.setHeadingsData(); 3745 if (!elementorFrontend.isEditMode()) { 3746 this.addAnchorsBeforeHeadings(); 3747 } 3748 this.populateTOC(); 3749 if (elementSettings.minimize_box) { 3750 this.collapseOnInit(); 3751 } 3752 if (elementSettings.sticky_toc_toggle) { 3753 this.handleStickyToc(); 3754 } 3755 if ("" !== elementSettings.scroll_offset.size) { 3756 this.setOffset(); 3757 } 3758 }, 3759 expandBox: function expandBox() { 3760 var boxHeight = this.getCurrentDeviceSetting("min_height"); 3761 this.$element.removeClass(this.getSettings("classes.collapsed")); 3762 this.elements.$tocBody.slideDown(); 3763 3764 // return container to the full height in case a min-height is defined by the user 3765 this.elements.$widgetContainer.css("min-height", boxHeight.size + boxHeight.unit); 3766 }, 3767 collapseBox: function collapseBox() { 3768 this.$element.addClass(this.getSettings("classes.collapsed")); 3769 this.elements.$tocBody.slideUp(); 3770 3771 // close container in case a min-height is defined by the user 3772 this.elements.$widgetContainer.css("min-height", "0px"); 3773 }, 3774 onInit: function onInit() { 3775 var $self = this; 3776 this.initElements(); 3777 this.bindEvents(); 3778 jQuery(document).ready(function () { 3779 $self.run(); 3780 }); 3781 }, 3782 onListItemClick: function onListItemClick(event) { 3783 var $self = this; 3784 this.itemClicked = true; 3785 setTimeout(function () { 3786 return $self.itemClicked = false; 3787 }, 2000); 3788 var $clickedItem = jQuery(event.target), 3789 $list = $clickedItem.parent().next(), 3790 collapseNestedList = this.getElementSettings("collapse_subitems"); 3791 if ("SPAN" == $clickedItem[0].tagName && 'yes' == this.getElementSettings("custom_style")) { 3792 $clickedItem = jQuery(event.currentTarget); 3793 } 3794 var listIsActive = void 0; 3795 if (collapseNestedList && $clickedItem.hasClass(this.getSettings("classes.firstLevelListItem"))) { 3796 if ($list.is(":visible")) { 3797 listIsActive = true; 3798 } 3799 } 3800 this.activateItem($clickedItem); 3801 if (collapseNestedList && listIsActive) { 3802 $list.slideUp(); 3803 } 3804 }, 3805 handleStickyToc: function handleStickyToc() { 3806 var elementSettings = this.getElementSettings(); 3807 var currentDeviceMode = elementorFrontend.getCurrentDeviceMode(); 3808 var $devices = elementSettings.sticky_toc_disable_on; 3809 var target = this.getID(); 3810 var type = elementSettings.sticky_toc_type; 3811 if ("in-place" === type) { 3812 var parentWidth = target.parent().parent().outerWidth(); 3813 target.css("width", parentWidth); 3814 } else if ("custom-position" === type) { 3815 var parentWidth = target.parent().parent().outerWidth(); 3816 target.css("width", parentWidth); 3817 } 3818 if (-1 == $.inArray(currentDeviceMode, $devices)) { 3819 target.removeClass('floating-toc'); 3820 $(window).off('scroll', this.stickyScroll); 3821 return; 3822 } 3823 $(window).on('scroll', $.proxy(this.stickyScroll, this)); 3824 }, 3825 stickyScroll: function stickyScroll() { 3826 var target = this.getID(); 3827 var elementSettings = this.getElementSettings(); 3828 var item = document.querySelector(".ha-table-of-contents"); 3829 var bound, tocHeight; 3830 bound = item.getBoundingClientRect(); 3831 tocHeight = target.outerHeight(); 3832 if (target.hasClass("floating-toc")) { 3833 target.parent().parent().css("height", tocHeight); 3834 } else { 3835 target.parent().parent().css("height", ''); 3836 } 3837 if (bound.y + bound.height / 2 < 0) { 3838 if (target.hasClass('floating-toc')) { 3839 return; 3840 } 3841 target.addClass("floating-toc"); 3842 } else { 3843 if (!target.hasClass('floating-toc')) { 3844 return; 3845 } 3846 target.removeClass("floating-toc"); 3847 } 3848 }, 3849 scrollToTop: function scrollToTop() { 3850 var $self = this; 3851 var scrollTo = this.getElementSettings("scroll_to_top_option"); 3852 if ("window_top" === scrollTo) { 3853 $("html, body").animate({ 3854 scrollTop: 0 3855 }, 250); 3856 } else { 3857 var $id = this.getID().parents('.ha-table-of-contents'); 3858 $("html, body").animate({ 3859 scrollTop: $($id).offset().top - 60 3860 }, 1000); 3861 } 3862 }, 3863 getID: function getID() { 3864 return $("#ha-toc-" + this.$element[0].attributes["data-id"].nodeValue); 3865 } 3866 }); 3867 elementorFrontend.hooks.addAction("frontend/element_ready/ha-table-of-contents.default", function ($scope) { 3868 elementorFrontend.elementsHandler.addHandler(HaTOC, { 3869 $element: $scope 3870 }); 3871 }); 3872 3873 //creativeSlider 3874 var HaCreativeSlider = function HaCreativeSlider($scope) { 3875 var $rcContainer = $scope.find('.ha-creative-slider-container'); 3876 if ($rcContainer) { 3877 // var $haCsWidth = window.innerWidth; 3878 var $haCsWidth = $(window).width(); 3879 var $haCsNextSelector = parseInt($haCsWidth) <= 767 ? $rcContainer.find('.ha_cs_mobile_next') : $rcContainer.find('.ha_cc_next_wrapper'); 3880 var $haCsPrevSelector = parseInt($haCsWidth) <= 767 ? $rcContainer.find('.ha_cs_mobile_prev') : $rcContainer.find('.ha_cc_prev_wrapper'); 3881 var csTextItemDelay = parseInt($haCsWidth) <= 767 ? 40 : 30; 3882 var csImageItemDelay = 40; 3883 var csPrevItemsOwl = $rcContainer.find('.ha_cc_prev_items'); 3884 var csTextItemsOwl = $rcContainer.find('.ha_cc_text_items'); 3885 var csImageItemsOwl = $rcContainer.find('.ha_cc_inner_image_items'); 3886 var csNextItemsOwl = $rcContainer.find('.ha_cc_next_items'); 3887 var csPrevNavOptions = { 3888 loop: true, 3889 dots: false, 3890 nav: false, 3891 items: 1, 3892 autoplay: false, 3893 smartSpeed: 500, 3894 touchDrag: false, 3895 mouseDrag: false, 3896 rewind: true, 3897 startPosition: -1 3898 }; 3899 var csNextNavOptions = { 3900 loop: true, 3901 dots: false, 3902 nav: false, 3903 items: 1, 3904 autoplay: false, 3905 smartSpeed: 500, 3906 touchDrag: false, 3907 mouseDrag: false, 3908 rewind: true, 3909 startPosition: 1 3910 }; 3911 var csGeneralOptions = { 3912 loop: true, 3913 dots: false, 3914 nav: false, 3915 items: 1, 3916 autoplay: false, 3917 smartSpeed: 1000, 3918 touchDrag: false, 3919 mouseDrag: false, 3920 singleItem: true, 3921 animateOut: 'fadeOutRight', 3922 animateIn: 'fadeInLeft', 3923 rewind: true 3924 }; 3925 } 3926 csPrevItemsOwl.owlCarousel(csPrevNavOptions); 3927 csNextItemsOwl.owlCarousel(csNextNavOptions); 3928 csTextItemsOwl.owlCarousel(csGeneralOptions); 3929 csImageItemsOwl.owlCarousel(csGeneralOptions); 3930 window.parent.addEventListener('message', function (e) { 3931 if ('ha_cs_reinit' == e.data) { 3932 csTextItemsOwl.owlCarousel('refresh'); 3933 csImageItemsOwl.owlCarousel('refresh'); 3934 } 3935 }); 3936 $($haCsPrevSelector).click(function (e) { 3937 e.preventDefault(); 3938 csPrevItemsOwl.trigger('prev.owl.carousel'); 3939 csNextItemsOwl.trigger('prev.owl.carousel'); 3940 setTimeout(function () { 3941 csTextItemsOwl.trigger('prev.owl.carousel'); 3942 }, csTextItemDelay); 3943 setTimeout(function () { 3944 csImageItemsOwl.trigger('prev.owl.carousel'); 3945 }, csTextItemDelay + csImageItemDelay); 3946 }); 3947 $($haCsNextSelector).click(function (e) { 3948 e.preventDefault(); 3949 csPrevItemsOwl.trigger('next.owl.carousel'); 3950 csNextItemsOwl.trigger('next.owl.carousel'); 3951 setTimeout(function () { 3952 csTextItemsOwl.trigger('next.owl.carousel'); 3953 }, csTextItemDelay); 3954 setTimeout(function () { 3955 csImageItemsOwl.trigger('next.owl.carousel'); 3956 }, csTextItemDelay + csImageItemDelay); 3957 }); 3958 }; 3959 elementorFrontend.hooks.addAction('frontend/element_ready/ha-creative-slider.default', HaCreativeSlider); 3960 3961 //Advanced Comparison Table 3962 var AdvancedComparisonTable = function AdvancedComparisonTable($scope) { 3963 var nav = $scope.find('ul.ha-adct-table-responsive-nav'); 3964 var rows = $scope.find(".ha-adct-row, .ha-adct-child-row"); 3965 var collapse = $scope.find(".ha-adct-collapse-icon-wrap"); 3966 3967 // console.log(rows); 3968 3969 var pos = 2; 3970 nav.on("click", "li", function () { 3971 var pos = $(this).index() + 2; 3972 // console.log( pos ); 3973 3974 rows.find(".ha-adct-column:not(:eq(0))").hide(); 3975 $scope.find(".ha-adct-column:nth-child(" + pos + ")").css("display", "flex"); 3976 nav.find("li").removeClass("active"); 3977 $(this).addClass("active"); 3978 }); 3979 collapse.on("click", function () { 3980 var row_wrap = $(this).closest('.ha-adct-row-wrap'); 3981 // console.log( row_wrap ); 3982 $(this).toggleClass('open'); 3983 row_wrap.find('.ha-adct-child-row-wrap').slideToggle("slow"); 3984 // row_wrap.find('.ha-adct-child-row-wrap .ha-adct-column').slideToggle("slow"); 3985 // $('.ha-adct-heading').slideToggle("slow"); 3986 }); 3987 3988 // Initialize the media query 3989 //var mediaQuery = window.matchMedia("(min-width: 767px)"); 3990 // console.log(mediaQuery); 3991 3992 $(window).on('resize', function () { 3993 var mode = $('body').attr('data-elementor-device-mode'); 3994 // console.log(mode); 3995 3996 if ('tablet' == mode || 'mobile_extra' == mode || 'mobile' == mode) { 3997 rows.find(".ha-adct-column:not(:eq(0))").hide(); 3998 $scope.find(".ha-adct-column:nth-child(" + pos + ")").css("display", "flex"); 3999 } else { 4000 rows.find(".ha-adct-column").removeAttr("style"); 4001 } 4002 }); 4003 }; 4004 elementorFrontend.hooks.addAction('frontend/element_ready/ha-advanced-comparison-table.default', AdvancedComparisonTable); 4005 4006 //Title Tips 4007 var TitleTips = function TitleTips($scope) { 4008 var element = $scope.find('.ha-flip-box-inner'); 4009 var items = $scope.find('.ha-title-tips-hover li > a'); 4010 var rect = $scope.find('.ha-title-tips-hover')[0].getBoundingClientRect(); 4011 if ($scope.find('.ha-title-tips-hover').hasClass('swap')) { 4012 var wrapper = $scope.find('.ha-title-tips-hover'); 4013 var anchor_item = $scope.find('.ha-title-tips-hover-item.have-image'); 4014 var figure = $scope.find('figure'); 4015 var Work = { 4016 _register: { 4017 hover: { 4018 active: !1, 4019 currentX: 0, 4020 currentY: 0, 4021 targetX: 0, 4022 targetY: 0 4023 } 4024 }, 4025 _init: function _init() { 4026 this._base(), this._events(); 4027 }, 4028 _base: function _base() { 4029 figure.find('img').each(function () { 4030 var item = $(this); 4031 // console.log( item.height() ); 4032 item.attr("height_ratio", item.height()); 4033 }); 4034 requestAnimationFrame(function () { 4035 Work._interaction.hover.move_image(); 4036 }); 4037 }, 4038 _events: function _events() { 4039 anchor_item.on("mouseenter", "a", function () { 4040 Work._interaction.hover.image($(this)); 4041 }); 4042 anchor_item.on("mouseleave", "a", function () { 4043 Work._interaction.hover.leave(); 4044 }); 4045 anchor_item.on("mousemove", "a", function (e) { 4046 Work._interaction.hover.move(e); 4047 }); 4048 }, 4049 _functions: { 4050 round: function round(e, t) { 4051 var t = void 0 === t ? 100 : Math.pow(10, t); 4052 return Math.round(e * t) / t; 4053 } 4054 }, 4055 _interaction: { 4056 hover: { 4057 image: function image(e) { 4058 e.parents("li").addClass("active").removeClass("not-selected").siblings().removeClass("active").addClass("not-selected"); 4059 if (!Work._register.hover.visible && (Work._register.hover.currentX || Work._register.hover.currentY)) { 4060 Work._register.hover.visible = !0; 4061 figure.addClass("visible"); 4062 } 4063 4064 // $img = $('#work-hover img[project="' + e.attr("href") + '"]');
4065 var $img = figure.find('img[data-filter-id="' + e.attr("data-filter-id") + '"]'); 4066 $img.addClass("active").siblings(".active").removeClass("active").addClass("was-active"); 4067 // console.log($img); 4068 // console.log($img.height()); 4069 // figure.get()[0].style.setProperty("--height_ratio", ( Math.floor(Math.random() * (500 - 150 + 1) ) + 150 ) + 'px' ); 4070 4071 // figure.get()[0].style.setProperty("--height_ratio", ( $img.height() ) + 'px' ); 4072 figure.get()[0].style.setProperty("--height_ratio", $img.attr("height_ratio") + 'px'); 4073 // .style.setProperty("--height_ratio", $img.attr("height_ratio")), 4074 4075 clearTimeout(figure.prop("leave")); 4076 clearTimeout(figure.prop("animate")); 4077 figure.addClass("animate").prop("animate", setTimeout(function () { 4078 figure.removeClass("animate").find("img.was-active").removeClass("was-active"); 4079 }, 400)); 4080 }, 4081 leave: function leave() { 4082 anchor_item.removeClass("active not-selected"); 4083 clearTimeout(figure.prop("leave")); 4084 clearTimeout(figure.prop("active")); 4085 figure.prop("leave", setTimeout(function () { 4086 // Work._register.hover.visible = !1; 4087 Work._register.hover.visible = false; 4088 figure.removeClass("visible"); 4089 }, 1)); 4090 figure.prop("active", setTimeout(function () { 4091 Work._register.hover.active = !1; 4092 }, 2e3)); 4093 }, 4094 move: function move(e) { 4095 var currentReact = e.currentTarget.getBoundingClientRect(); 4096 var currentWrapperReact = wrapper.get()[0].getBoundingClientRect(); 4097 var targetMiddle = currentReact.top + currentReact.height / 2; 4098 Work._register.hover.active || (Work._register.hover.active = !0, requestAnimationFrame(function () { 4099 Work._interaction.hover.move_image(); 4100 }), clearTimeout(figure.prop("active")), figure.prop("active", setTimeout(function () { 4101 Work._register.hover.active = !1; 4102 }, 2e3))); 4103 // var react = $("#work-projects").get()[0].getBoundingClientRect(); 4104 var s = 0; 4105 var targetItem = anchor_item.find('a').offset().left - 40; 4106 if ($scope.hasClass('ha_title_tips_img_pos--left')) { 4107 // Work._register.hover.targetX = currentReact.left - figure.width(); // for left side 4108 Work._register.hover.targetX = -(figure.width() + 10); // for left side 4109 } else { 4110 Work._register.hover.targetX = currentReact.width + 10; // for right side 4111 } 4112 // Work._register.hover.targetY = targetMiddle; 4113 Work._register.hover.targetY = e.pageY - (currentWrapperReact.top + window.scrollY); 4114 if (!Work._register.hover.visible && (Work._register.hover.currentX || Work._register.hover.currentY)) { 4115 Work._register.hover.visible = true; 4116 figure.addClass("visible"); 4117 } 4118 }, 4119 move_image: function move_image() { 4120 if (figure.length) { 4121 Work._register.hover.currentX += (Work._register.hover.targetX - Work._register.hover.currentX) * 0.09; 4122 Work._register.hover.currentY += (Work._register.hover.targetY - Work._register.hover.currentY) * 0.09; 4123 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)"); 4124 if (Work._register.hover.active) { 4125 requestAnimationFrame(function () { 4126 Work._interaction.hover.move_image(); 4127 }); 4128 } 4129 } 4130 } 4131 } 4132 } 4133 }; 4134 Work._init(); 4135 } 4136 }; 4137 elementorFrontend.hooks.addAction('frontend/element_ready/ha-title-tips.default', TitleTips); 4138 }); 4139})(jQuery, Happy, window);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.