PageSourceSearch

https://sos-wp.it/wp-content/plugins/happy-elementor-addons-pro/assets/js/happy-addons-pro.js?ver=2.16.4

js sos-wp.it collected 2026-10-02 03:16:23 UTC 166,748 bytes, 4,144 lines download raw bytes

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

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.