PageSourceSearch

https://www.ladianasiena.it/wp-content/plugins/skt-addons-for-elementor/assets/js/skt-addons.js?ver=4.1

js ladianasiena.it collected 2026-09-24 11:36:51 UTC 196,618 bytes, 5,237 lines download raw bytes

1"use strict";
2
3;
4
5(function ($) {
6  'use strict';
7
8  var $window = $(window);
9
10  $.fn.getSktSettings = function () {
11    return this.data('skt-settings');
12  };
13
14  function debounce(func, wait, immediate) {
15    var timeout;
16    return function () {
17      var context = this,
18          args = arguments;
19
20      var later = function later() {
21        timeout = null;
22        if (!immediate) func.apply(context, args);
23      };
24
25      var callNow = immediate && !timeout;
26      clearTimeout(timeout);
27      timeout = setTimeout(later, wait);
28      if (callNow) func.apply(context, args);
29    };
30  }
31
32  function initFilterNav($scope, filterFn) {
33    var $filterNav = $scope.find('.sktjs-filter'),
34        defaultFilter = $filterNav.data('default-filter');
35
36    if ($filterNav.length) {
37      $filterNav.on('click.onFilterNav', 'button', function (event) {
38        event.stopPropagation();
39        var $current = $(this);
40        $current.addClass('skt-filter__item--active').siblings().removeClass('skt-filter__item--active');
41        filterFn($current.data('filter'));
42      });
43      $filterNav.find('[data-filter="' + defaultFilter + '"]').click();
44    }
45  }
46  /**
47   * Initialize magnific lighbox gallery
48   *
49   * @param {$element, selector, isEnabled, key} settings
50   */
51
52
53  function initPopupGallery(settings) {
54    settings.$element.on('click', settings.selector, function (event) {
55      event.preventDefault();
56    });
57
58    if (!$.fn.magnificPopup) {
59      return;
60    }
61
62    if (!settings.isEnabled) {
63      $.magnificPopup.close();
64      return;
65    }
66
67    var windowWidth = $(window).width(),
68        mobileWidth = elementorFrontendConfig.breakpoints.md,
69        tabletWidth = elementorFrontendConfig.breakpoints.lg;
70    settings.$element.find(settings.selector).magnificPopup({
71      key: settings.key,
72      type: 'image',
73      image: {
74        titleSrc: function titleSrc(item) {
75          return item.el.attr('title') ? item.el.attr('title') : item.el.find('img').attr('alt');
76        }
77      },
78      gallery: {
79        enabled: true,
80        preload: [1, 2]
81      },
82      zoom: {
83        enabled: true,
84        duration: 300,
85        easing: 'ease-in-out',
86        opener: function opener(openerElement) {
87          return openerElement.is('img') ? openerElement : openerElement.find('img');
88        }
89      },
90      disableOn: function disableOn() {
91        if (settings.disableOnMobile && windowWidth < mobileWidth) {
92          return false;
93        }
94
95        if (settings.disableOnTablet && windowWidth >= mobileWidth && windowWidth < tabletWidth) {
96          return false;
97        }
98
99        return true;
100      }
101    });
102  }
103
104  var HandleImageCompare = function HandleImageCompare($scope) {
105    var $item = $scope.find('.sktjs-image-comparison'),
106        settings = $item.getSktSettings(),
107        fieldMap = {
108      on_hover: 'move_slider_on_hover',
109      on_swipe: 'move_with_handle_only',
110      on_click: 'click_to_move'
111    };
112    settings[fieldMap[settings.move_handle || 'on_swipe']] = true;
113    delete settings.move_handle;
114    $item.imagesLoaded().done(function () {
115      $item.twentytwenty(settings);
116      var t = setTimeout(function () {
117        $window.trigger('resize.twentytwenty');
118        clearTimeout(t);
119      }, 400);
120    });
121  };
122
123  $window.on('elementor/frontend/init', function () {
124    var ModuleHandler = elementorModules.frontend.handlers.Base;
125    var SliderBase = ModuleHandler.extend({
126      bindEvents: function bindEvents() {
127        this.removeArrows();
128        this.run();
129      },
130      removeArrows: function removeArrows() {
131        var _this = this;
132
133        this.elements.$container.on('init', function () {
134          _this.elements.$container.siblings().hide();
135        });
136      },
137      getDefaultSettings: function getDefaultSettings() {
138        return {
139          autoplay: true,
140          arrows: false,
141          checkVisible: false,
142          container: '.sktjs-slick',
143          dots: false,
144          infinite: true,
145          rows: 0,
146          slidesToShow: 1,
147          prevArrow: $('<div />').append(this.findElement('.slick-prev').clone().show()).html(),
148          nextArrow: $('<div />').append(this.findElement('.slick-next').clone().show()).html()
149        };
150      },
151      getDefaultElements: function getDefaultElements() {
152        return {
153          $container: this.findElement(this.getSettings('container'))
154        };
155      },
156      onElementChange: debounce(function () {
157        this.elements.$container.slick('unslick');
158        this.run();
159      }, 200),
160      getSlickSettings: function getSlickSettings() {
161        var settings = {
162          infinite: !!this.getElementSettings('loop'),
163          autoplay: !!this.getElementSettings('autoplay'),
164          autoplaySpeed: this.getElementSettings('autoplay_speed'),
165          speed: this.getElementSettings('animation_speed'),
166          centerMode: !!this.getElementSettings('center'),
167          vertical: !!this.getElementSettings('vertical'),
168          slidesToScroll: 1
169        };
170
171        switch (this.getElementSettings('navigation')) {
172          case 'arrow':
173            settings.arrows = true;
174            break;
175
176          case 'dots':
177            settings.dots = true;
178            break;
179
180          case 'both':
181            settings.arrows = true;
182            settings.dots = true;
183            break;
184        }
185
186        settings.slidesToShow = parseInt(this.getElementSettings('slides_to_show')) || 1;
187        settings.responsive = [{
188          breakpoint: elementorFrontend.config.breakpoints.lg,
189          settings: {
190            slidesToShow: parseInt(this.getElementSettings('slides_to_show_tablet')) || settings.slidesToShow
191          }
192        }, {
193          breakpoint: elementorFrontend.config.breakpoints.md,
194          settings: {
195            slidesToShow: parseInt(this.getElementSettings('slides_to_show_mobile')) || parseInt(this.getElementSettings('slides_to_show_tablet')) || settings.slidesToShow
196          }
197        }];
198        return $.extend({}
198, this.getSettings(), settings);
199      },
200      run: function run() {
201        this.elements.$container.slick(this.getSlickSettings());
202      }
203    });
204var NumberHandler = function NumberHandler($scope) {
205    var $number = $scope.find('.skt-number-text');
206
207    // Check if browser supports IntersectionObserver
208    if ('IntersectionObserver' in window) {
209        var observer = new IntersectionObserver(function(entries) {
210            entries.forEach(function(entry) {
211                if (entry.isIntersecting) {
212                    $number.numerator($number.data('animation'));
213                    observer.unobserve(entry.target);  // Stop observing once animation is triggered
214                }
215            });
216        });
217
218        observer.observe($scope[0]); // Start observing the scope
219    } else {
220        // Fallback if IntersectionObserver is not supported
221        elementorFrontend.elements.$window.on('scroll', function () {
222            if ($scope.isOnScreen()) {
223                $number.numerator($number.data('animation'));
224            }
225        });
226    }
227};
228
229// Helper function for fallback to check if element is visible in the viewport
230$.fn.isOnScreen = function() {
231    var win = $(window);
232    var viewport = {
233        top: win.scrollTop(),
234        left: win.scrollLeft()
235    };
236    viewport.right = viewport.left + win.width();
237    viewport.bottom = viewport.top + win.height();
238
239    var bounds = this.offset();
240    bounds.right = bounds.left + this.outerWidth();
241    bounds.bottom = bounds.top + this.outerHeight();
242
243    return !(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom);
244};
245
246
247
248
249	var SkillHandler = function SkillHandler($scope) {
250		let observer = new IntersectionObserver(function(entries) {
251			entries.forEach(entry => {
252				if (entry.isIntersecting) {
253					$scope.find('.skt-skill-level').each(function () {
254						var $current = $(this),
255							$lt = $current.find('.skt-skill-level-text'),
256							lv = $current.data('level');
257						
258						// Animate the skill level bar width
259						$current.animate({
260							width: lv + '%'
261						}, 500);
262						
263						// Animate the skill level number
264						$lt.numerator({
265							toValue: lv,
266							duration: 1300,
267							onStep: function() {
268								$lt.text(lv + '%');  // Update the text with %
269							}
270						});
271					});
272					observer.unobserve($scope[0]); // Stop observing once animation is triggered
273				}
274			});
275		});
276	
277		observer.observe($scope[0]); // Start observing the element
278	};
279
280    var ImageGrid = ModuleHandler.extend({
281      onInit: function onInit() {
282        ModuleHandler.prototype.onInit.apply(this, arguments);
283        this.run();
284        this.runFilter();
285        $window.on('resize', debounce(this.run.bind(this), 100));
286      },
287      getLayoutMode: function getLayoutMode() {
288        var layout = this.getElementSettings('layout');
289        return layout === 'even' ? 'masonry' : layout;
290      },
291      getDefaultSettings: function getDefaultSettings() {
292        return {
293          itemSelector: '.skt-image-grid__item',
294          percentPosition: true,
295          layoutMode: this.getLayoutMode()
296        };
297      },
298      getDefaultElements: function getDefaultElements() {
299        return {
300          $container: this.findElement('.sktjs-isotope')
301        };
302      },
303      getLightBoxSettings: function getLightBoxSettings() {
304        return {
305          key: 'imagegrid',
306          $element: this.$element,
307          selector: '.skt-js-lightbox',
308          isEnabled: !!this.getElementSettings('enable_popup'),
309          disableOnTablet: !!this.getElementSettings('disable_lightbox_on_tablet'),
310          disableOnMobile: !!this.getElementSettings('disable_lightbox_on_mobile')
311        };
312      },
313      runFilter: function runFilter() {
314        var self = this,
315            lbSettings = this.getLightBoxSettings();
316        initFilterNav(this.$element, function (filter) {
317          self.elements.$container.isotope({
318            filter: filter
319          });
320
321          if (filter !== '*') {
322            lbSettings.selector = filter;
323          }
324
325          initPopupGallery(lbSettings);
326        });
327      },
328      onElementChange: function onElementChange(changedProp) {
329        if (['layout', 'image_height', 'columns', 'image_margin', 'enable_popup'].indexOf(changedProp) !== -1) {
330          this.run();
331        }
332      },
333      run: function run() {
334        var self = this;
335        self.elements.$container.isotope(self.getDefaultSettings()).imagesLoaded().progress(function () {
336          self.elements.$container.isotope('layout');
337        });
338        initPopupGallery(self.getLightBoxSettings());
339      }
340    });
341    var JustifiedGrid = ModuleHandler.extend({
342      onInit: function onInit() {
343        ModuleHandler.prototype.onInit.apply(this, arguments);
344        this.run();
345        this.runFilter();
346        $window.on('resize', debounce(this.run.bind(this), 100));
347      },
348      getDefaultSettings: function getDefaultSettings() {
349        return {
350          rowHeight: +this.getElementSettings('row_height.size') || 150,
351          lastRow: this.getElementSettings('last_row'),
352          margins: +this.getElementSettings('margins.size'),
353          captions: !!this.getElementSettings('show_caption')
354        };
355      },
356      getDefaultElements: function getDefaultElements() {
357        return {
358          $container: this.findElement('.sktjs-justified-grid')
359        };
360      },
361      getLightBoxSettings: function getLightBoxSettings() {
362        return {
363          key: 'justifiedgallery',
364          $element: this.$element,
365          selector: '.skt-js-lightbox',
366          isEnabled: !!this.getElementSettings('enable_popup'),
367          disableOnTablet: !!this.getElementSettings('disable_lightbox_on_tablet'),
368          disableOnMobile: !!this.getElementSettings('disable_lightbox_on_mobile')
369        };
370      },
371      runFilter: function runFilter() {
372        var self = this,
373            lbSettings = this.getLightBoxSettings(),
374            settings = {
375          lastRow: this.getElementSettings('last_row')
376        };
377        initFilterNav(self.$element, function (filter) {
378          if (filter !== '*') {
379            settings.lastRow = 'nojustify';
380            lbSettings.selector = filter;
381          }
382
383          settings.filter = filter;
384          self.elements.$container.justifiedGallery(settings);
385          initPopupGallery(lbSettings);
386        });
387      },
388      onElementChange: function onElementChange(changedProp) {
389        if (['row_height', 'last_row', 'margins', 'show_caption', 'enable_popup'].indexOf(changedProp) !== -1) {
390          this.run();
391        }
392      },
393      run: function run() {
394        this.elements.$container.justifiedGallery(this.getDefaultSettings());
395        initPopupGallery(this.getLightBoxSettings());
396      }
397    }); // NewsTicker
398
399    var NewsTicker = ModuleHandler.extend({
400      onInit: function onInit() {
401        ModuleHandler.prototype.onInit.apply(this, arguments);
402        this.wrapper = this.$element.find('.skt-news-ticker-wrapper');
403        this.run();
404      },
405      onElementChange: function onElementChange(changed_prop) {
406        if (changed_prop === 'item_space' || changed_prop === 'title_typography_font_size') {
407          this.run();
408        }
409      },
410      run: function run() {
411        if (0 == this.wrapper.length) {
412          return;
413        }
414
415        var wrapper_height = this.wrapper.innerHeight(),
416            wrapper_width = this.wrapper.innerWidth(),
417            container = this.wrapper.find('.skt-news-ticker-container'),
418            single_item = container.find('.skt-news-ticker-item'),
419            scroll_direction = this.wrapper.data('scroll-direction'),
420            scroll = "scroll" + scroll_direction + parseInt(wrapper_height) + parseInt(wrapper_width),
421            duration = this.wrapper.data('duration'),
422            direction = 'normal',
423            all_title_width = 10;
424        var start = {
425          'transform': 'translateX(0' + wrapper_width + 'px)'
426        },
427            end = {
428          'transform': 'translateX(-101%)'
429        };
430
431        if ('right' === scroll_direction) {
432          direction = 'reverse';
433        }
434
435        single_item.each(function () {
436          all_title_width += $(this).outerWidth(true);
437        });
438        container.css({
439          'width': all_title_width,
440          'display': 'flex'
441        });
442        $.keyframe.define([{
443          name: scroll,
444          '0%': start,
445          '100%': end
446        }]);
447        container.playKeyframe({
448          name: scroll,
449          duration: duration.toString() + "ms",
450          timingFunction: 'linear',
451          delay: '0s',
452          iterationCount: 'infinite',
453          direction: direction,
454          fillMode: 'none',
455          complete: function complete() {}
456        });
457      }
458    }); // Fun factor
459
460    var FunFactor = function FunFactor($scope) {
461    var $fun_factor = $scope.find('.skt-fun-factor__content-number');
462    
463    // Check if browser supports IntersectionObserver
464    if ('IntersectionObserver' in window) {
465        var observer = new IntersectionObserver(function(entries) {
466            entries.forEach(function(entry) {
467                if (entry.isIntersecting) {
468                    $fun_factor.numerator($fun_factor.data('animation'));
469                    observer.unobserve(entry.target);  // Stop observing once animation is triggered
470                }
471            });
472        });
473
474        observer.observe($fun_factor[0]); // Start observing the element
475    } else {
476        // Fallback for older browsers without IntersectionObserver support
477        elementorFrontend.elements.$window.on('scroll', function () {
478            if ($scope.isOnScreen()) {
479                $fun_factor.numerator($fun_factor.data('animation'));
480            }
481        });
482    }
483};
484
485// Helper function for the fallback to check if element is in the viewport
486$.fn.isOnScreen = function() {
487    var win = $(window);
488    var viewport = {
489        top: win.scrollTop(),
490        left: win.scrollLeft()
491    };
492    viewport.right = viewport.left + win.width();
493    viewport.bottom = viewport.top + win.height();
494
495    var bounds = this.offset();
496    bounds.right = bounds.left + this.outerWidth();
497    bounds.bottom = bounds.top + this.outerHeight();
498
499    return !(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom);
500};
501
502
503   var BarChart = function BarChart($scope) {
504		// Use IntersectionObserver instead of elementorFrontend.waypoint
505		let observer = new IntersectionObserver(function(entries) {
506			entries.forEach(entry => {
507				if (entry.isIntersecting) {
508					var $chart = $scope,
509						$container = $chart.find('.skt-bar-chart-container'),
510						$chart_canvas = $chart.find('#skt-bar-chart'),
511						settings = $container.data('settings');
512	
513					if ($container.length) {
514						new Chart($chart_canvas, settings);
515					}
516	
517					// Stop observing once the chart is initialized
518					observer.unobserve($scope[0]);
519				}
520			});
521		});
522	
523		observer.observe($scope[0]); // Start observing the element
524	};
525 	//twitter Feed
526
527
528    var TwitterFeed = function TwitterFeed($scope) {
529      var button = $scope.find('.skt-twitter-load-more');
530      var twitter_wrap = $scope.find('.skt-tweet-items');
531      button.on("click", function (e) {
532        e.preventDefault();
533        var $self = $(this),
534            query_settings = $self.data("settings"),
535            total = $self.data("total"),
536            items = $scope.find('.skt-tweet-item').length;
537        $.ajax({
538          url: SktLocalize.ajax_url,
539          type: 'POST',
540          data: {
541            action: "skt_addons_elementor_twitter_feed_action",
542            security: SktLocalize.nonce,
543            query_settings: query_settings,
544            loaded_item: items
545          },
546          success: function success(response) {
547            if (total > items) {
548              $(response).appendTo(twitter_wrap);
549            } else {
550              $self.text('All Loaded').addClass('loaded');
551              setTimeout(function () {
552                $self.css({
553                  "display": "none"
554                });
555              }, 800);
556            }
557          },
558          error: function error(_error) {}
559        });
560      });
561    }; //PostTab
562
563
564    var PostTab = ModuleHandler.extend({
565      onInit: function onInit() {
566        ModuleHandler.prototype.onInit.apply(this, arguments);
567        this.wrapper = this.$element.find('.skt-post-tab');
568        this.run();
569      },
570      run: function run() {
571        var filter_wrap = this.wrapper.find('.skt-post-tab-filter'),
572            filter = filter_wrap.find('li'),
573            event = this.wrapper.data('event'),
574            args = this.wrapper.data('query-args');
575        filter.on(event, debounce(function (e) {
576          e.preventDefault();
577          var $self = $(this),
578              term_id = $self.data("term"),
579              $wrapper = $self.closest(".skt-post-tab"),
580              content = $wrapper.find('.skt-post-tab-content'),
581              loading = content.find('.skt-post-tab-loading'),
582              tab_item = content.find('.skt-post-tab-item-wrapper'),
583              $content_exist = false;
584
585          if (0 === loading.length) {
586            filter.removeClass('active');
587            tab_item.removeClass('active');
588            $self.addClass('active');
589            tab_item.each(function () {
590              var $self = $(this),
591                  $content_id = $self.data("term");
592
593              if (term_id === $content_id) {
594                $self.addClass('active');
595                $content_exist = true;
596              }
597            });
598
599            if (false === $content_exist) {
600              $.ajax({
601                url: SktLocalize.ajax_url,
602                type: 'POST',
603                data: {
604                  action: "skt_addons_elementor_post_tab_action",
605                  security: SktLocalize.nonce,
606                  post_tab_query: args,
607                  term_id: term_id
608                },
609                beforeSend: function beforeSend() {
610                  content.append('<span class="skt-post-tab-loading"><i class="eicon-spinner eicon-animation-spin"></i></span>');
611                },
612                success: function success(response) {
613                  content.find('.skt-post-tab-loading').remove();
614                  content.append(response);
615                },
616                error: function error(_error2) {}
617              });
618            }
619          }
620        }, 200));
621      }
622    });
623
624    var DataTable = function DataTable($scope) {
625      var columnTH = $scope.find('.skt-table__head-column-cell');
626      var rowTR = $scope.find('.skt-table__body-row');
627      rowTR.each(function (i, tr) {
628        var th = $(tr).find('.skt-table__body-row-cell');
629        th.each(function (index, th) {
630          $(th).prepend('<div class="skt-table__head-column-cell">' + columnTH.eq(index).html() + '</div>');
631        });
632      });
633    }; //Threesixty Rotation
634
635
636    var Threesixty_Rotation = function Threesixty_Rotation($scope) {
637      var skt_addons_elementor_circlr = $scope.find('.skt-threesixty-rotation-inner');
638      var cls = skt_addons_elementor_circlr.data('selector');
639      var autoplay = skt_addons_elementor_circlr.data('autoplay');
640      var glass_on = $scope.find('.skt-threesixty-rotation-magnify');
641      var t360 = $scope.find('.skt-threesixty-rotation-360img');
642      var zoom = glass_on.data('zoom');
643      var playb = $scope.find('.skt-threesixty-rotation-play');
644      var crl = circlr(cls, {
645        play: true
646      });
647
648      if ('on' === autoplay) {
649        var autoplay_btn = $scope.find('.skt-threesixty-rotation-autoplay');
650        autoplay_btn.on('click', function (el) {
651          el.preventDefault();
652          crl.play();
653          t360.remove();
654        });
655        setTimeout(function () {
656          autoplay_btn.trigger('click');
657          autoplay_btn.remove();
658        }, 1000);
659      } else {
660        playb.on('click', function (el) {
661          el.preventDefault();
662          var $self = $(this);
663          var $i = $self.find('i');
664
665          if ($i.hasClass('skti-play-button')) {
666            $i.removeClass('skti-play-button');
667            $i.addClass('skti-stop');
668            crl.play();
669          } else {
670            $i.removeClass('skti-stop');
671            $i.addClass('skti-play-button');
672            crl.stop();
673          }
674
675          t360.remove();
676        });
677      }
678
679      glass_on.on('click', function (el) {
680        var img_block = $scope.find('img');
681        img_block.each(function () {
682          var style = $(this).attr('style');
683
684          if (-1 !== style.indexOf("block")) {
685            SktSimplaMagnify($(this)[0], zoom);
686            glass_on.css('display', 'none');
687            t360.remove();
688          }
689        });
690      });
691      $(document).on('click', function (e) {
692        var t = $(e.target);
693        var magnifier = $scope.find('.skt-img-magnifier-glass');
694        var i = glass_on.find('i');
695
696        if (magnifier.length && t[0] !== i[0]) {
697          magnifier.remove();
698          glass_on.removeAttr('style');
699        }
700
701        if (t[0] === skt_addons_elementor_circlr[0]) {
702          t360.remove();
703        }
704      });
705      skt_addons_elementor_circlr.on('mouseup mousedown', function (e) {
706        t360.remove();
707      });
708    }; //Event Calendar
709
710
711    var Event_Calendar = function Event_Calendar($scope) {
712      var calendarEl  = $scope.find('.skt-ec');
713      var popup       = $scope.find('.skt-ec-popup-wrapper');
714      var popupClose  = $scope.find(".skt-ec-popup-close");
715      var events      = calendarEl.data('events');
716      var initialview = calendarEl.data('initialview');
717      var firstday    = calendarEl.data('firstday');
718      var locale      = calendarEl.data('locale');
719      var showPopup   = calendarEl.data('show-popup');
720      var allday_text = calendarEl.data('allday-text');
721
722      if ('undefined' == typeof events) {
723        return;
724      }
725
726      var option = {
727        stickyHeaderDates: false,
728        locale: locale,
729        headerToolbar: {
730          left: "prev,next today",
731          center: "title",
732          right: "dayGridMonth,timeGridWeek,timeGridDay,listMonth"
733        },
734        initialView: initialview,
735        firstDay: firstday,
736        eventTimeFormat: {
737          // like '7pm'
738          hour: 'numeric',
739          minute: '2-digit',
740          meridiem: 'short'
741        },
742        events: events,
743        height: 'auto',
744        eventClick: function eventClick(info) {
745          info.jsEvent.preventDefault(); // don't let the browser navigate
746
747          if ('yes' != showPopup) {
748            return;
749          }
750
751          function getTheDate(timeString) {
752            return new Date(timeString);
753          }
754
755          function timeFormat(date) {
756            var hours   = date.getHours();
757            var minutes = date.getMinutes();
758            var ampm    = hours >= 12 ? 'pm' : 'am';
759            hours       = hours % 12;
760            hours       = hours ? hours : 12; // the hour '0' should be '12'
761
762            minutes = minutes < 10 ? '0' + minutes : minutes;
763            var strTime = hours + ':' + minutes + '' + ampm;
764            return strTime;
765          }
766          var todayDateString = info.view.calendar.currentData.currentDate.toString(),
767              allDay       = info.event.allDay,
768              title        = info.event.title,
769              startDate    = info.event.startStr,
770              endDate      = info.event.endStr,
771              guest        = info.event.extendedProps.guest,
772              location     = info.event.extendedProps.location,
773              description  = info.event.extendedProps.description,
774              detailsUrl   = info.event.url,
775              imageUrl     = info.event.extendedProps.image;
776          var titleWrap    = popup.find('.skt-ec-event-title'),
777              timeWrap     = popup.find('.skt-ec-event-time-wrap'),
778              guestWrap    = popup.find('.skt-ec-event-guest-wrap'),
779              locationWrap = popup.find('.skt-ec-event-location-wrap'),
780              descWrap     = popup.find('.skt-ec-popup-desc'),
781              detailsWrap  = popup.find('.skt-ec-popup-readmore-link'),
782              imageWrap    = popup.find('.skt-ec-popup-image'); // display none
783
784          imageWrap.css('display', 'none');
785          titleWrap.css('display', 'none');
786          timeWrap.css('display', 'none');
787          guestWrap.css('display', 'none');
788          locationWrap.css('display', 'none');
789          descWrap.css('display', 'none');
790          detailsWrap.css('display', 'none');
791          popup.addClass("skt-ec-popup-ready"); // image markup
792
793          if (imageUrl) {
794            imageWrap.removeAttr("style");
795            imageWrap.find('img').attr("src", imageUrl);
796            imageWrap.find('img').attr("alt", title);
797          } // title markup
798
799
800          if (title) {
801            titleWrap.removeAttr("style");
802            titleWrap.html(title);
803          } // guest markup
804
805
806          if (guest) {
807            guestWrap.removeAttr("style");
808            guestWrap.find('span.skt-ec-event-guest').html(guest);
809          } // location markup
810
811
812          if (location) {
813            locationWrap.removeAttr("style");
814            locationWrap.find('span.skt-ec-event-location').html(location);
815          } // description markup
816
817
818          if (description) {
819            descWrap.removeAttr("style");
820            descWrap.html(description);
821          } // time markup
822
823
824          if (allDay !== true) {
825            timeWrap.removeAttr("style");
826            startDate = Date.parse(getTheDate(startDate));
827            endDate = Date.parse(getTheDate(endDate));
828            var startTimeText = timeFormat(getTheDate(startDate));
829            var endTimeText = 'Invalid Data';
830
831            if (startDate < endDate) {
832              endTimeText = timeFormat(getTheDate(endDate));
833            }
834
835            timeWrap.find('span.skt-ec-event-time').html(startTimeText + ' - ' + endTimeText);
836          } else {
837            timeWrap.removeAttr("style");
838            timeWrap.find('span.skt-ec-event-time').html(allday_text);
839          } // read more markup
840
841
842
843          if (detailsUrl && /^https?:\/\//i.test(detailsUrl)) {
844            detailsWrap.removeAttr("style");
845            detailsWrap.attr("href", detailsUrl);
846
847            if ("on" === info.event.extendedProps.external) {
848              detailsWrap.attr("target", "_blank");
849            }
850
851            if ("on" === info.event.extendedProps.nofollow) {
852              detailsWrap.attr("rel", "nofollow");
853            }
854          } else {
855            // Optionally, hide the link or set to '#'
856            detailsWrap.attr("href", "#");
857            detailsWrap.hide(); // or .addClass('disabled')
858          }
859        },
860        dateClick: function dateClick(arg) {
861          itemDate = arg.date.toUTCString();
862        }
863      };
864      var calendar = new FullCalendar.Calendar(calendarEl[0], option);
865      calendar.render();
866      $scope.find(".skt-ec-popup-wrapper").on("click", function (e) {
867        e.stopPropagation();
868
869        if (e.target === e.currentTarget || e.target == popupClose[0] || e.target == popupClose.find(".eicon-editor-close")[0]) {
870          popup.addClass("skt-ec-popup-removing").removeClass("skt-ec-popup-ready");
871        }
872      });
873    }; //Image Accordion
874
875
876    var Image_Accordion = function Image_Accordion($scope) {
877      if ($scope.hasClass('skt-image-accordion-click')) {
878        var items = $scope.find('.skt-ia-item');
879        items.each(function (inx, btn) {
880          $(this).on('click', function (e) {
881            // e.preventDefault();
882            if ($(this).hasClass('active')) {
883              return;
884            } else {
885              items.removeClass('active');
886              $(this).addClass('active');
887            }
888          });
889        });
890      }
891    }; //Content Switcher
892
893
894    var Content_Switcher = function Content_Switcher($scope) {
895      var parent = $scope.find('.skt-content-switcher-wrapper'),
896          designType = parent.data('design-type');
897
898      if (designType == 'button') {
899        var buttons = parent.find('.skt-cs-button'),
900            contents = parent.find('.skt-cs-content-section');
901        buttons.each(function (inx, btn) {
902          $(this).on('click', function (e) {
903            e.preventDefault();
904
905            if ($(this).hasClass('active')) {
906              return;
907            } else {
908              buttons.removeClass('active');
909              $(this).addClass('active');
910              contents.removeClass('active');
911              var contentId = $(this).data('content-id');
912              parent.find('#' + contentId).addClass('active');
913            }
914          });
915        });
916      } else {
917        var toggleSwitch = parent.find('.skt-cs-switch.skt-input-label'),
918            input = parent.find('input.skt-cs-toggle-switch'),
919            primarySwitcher = parent.find('.skt-cs-switch.primary'),
920            secondarySwitcher = parent.find('.skt-cs-switch.secondary'),
921            primaryContent = parent.find('.skt-cs-content-section.primary'),
922            secondaryContent = parent.find('.skt-cs-content-section.secondary');
923        toggleSwitch.on('click', function (e) {
924          if (input.is(':checked')) {
925            primarySwitcher.removeClass('active');
926            primaryContent.removeClass('active');
927            secondarySwitcher.addClass('active');
928            secondaryContent.addClass('active');
929          } else {
930            secondarySwitcher.removeClass('active');
931            secondaryContent.removeClass('active');
932            primarySwitcher.addClass('active');
933            primaryContent.addClass('active');
934          }
935        });
936      }
937    };
938
939    var MailChimp = elementorModules.frontend.handlers.Base.extend({
940      onInit: function onInit() {
941        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
942        this.elForm = this.$element.find('.skt-mailchimp-form');
943        this.elMessage = this.$element.find('.skt-mc-response-message');
944        this.successMessage = this.elForm.data('success-message');
945        this.run();
946      },
947      getReadySettings: function getReadySettings() {
948        var settings = {
949          formAlign: this.getElementSettings('form_alignment'),
950          formAlignTablet: this.getElementSettings('form_alignment_tablet') || this.getElementSettings('form_alignment'),
951          formAlignMobile: this.getElementSettings('form_alignment_mobile') || this.getElementSettings('form_alignment_tablet') || this.getElementSettings('form_alignment')
952        };
953        return $.extend({}, settings);
954      },
955      onElementChange: function onElementChange() {
956        this.run();
957      },
958      run: function run() {
959        var settings = this.getReadySettings();
960        var elForm = this.elForm;
961        var elMessage = this.elMessage;
962        var successMessage = this.successMessage;
963        elForm.on('submit', function (e) {
964          e.preventDefault();
965          var data = {
966            action: 'skt_addons_elementor_mailchimp_ajax',
967            security: SktLocalize.nonce,
968            subscriber_info: elForm.serialize(),
969            list_id: elForm.data('list-id'),
970            post_id: elForm.parent().data('post-id'),
971            widget_id: elForm.parent().data('widget-id')
972          };
973          $.ajax({
974            type: 'post',
975            url: SktLocalize.ajax_url,
976            data: data,
977            success: function success(response) {
978              elForm.trigger('reset');
979
980              if (response.status) {
981                elMessage.removeClass('error');
982                elMessage.addClass('success');
983                elMessage.text(successMessage);
984              } else {
985                elMessage.addClass('error');
986                elMessage.removeClass('success');
987                elMessage.text(response.msg);
988              }
989            },
990            error: function error(_error3) {}
991          });
992        });
993        var mobileWidth = elementorFrontendConfig.breakpoints.sm;
994        var tabletWidth = elementorFrontendConfig.breakpoints.md;
995
996        function responsiveClass() {
997          var windowWidth = $(window).width();
998
999          if (windowWidth > tabletWidth) {
1000            elForm.removeClass('vertical');
1001            elForm.removeClass('horizontal');
1002            elForm.addClass(settings.formAlign);
1003          } else if (windowWidth > mobileWidth && windowWidth <= tabletWidth) {
1004            elForm.removeClass('vertical');
1005            elForm.removeClass('horizontal');
1006            elForm.addClass(settings.formAlignTablet);
1007          } else if (windowWidth <= mobileWidth) {
1008            elForm.removeClass('vertical');
1009            elForm.removeClass('horizontal');
1010
1011            if (elForm.hasClass('multiple_form_fields')) {
1012              elForm.addClass('vertical');
1013            } else {
1014              elForm.addClass(settings.formAlignMobile);
1015            }
1016          }
1017        }
1018
1019        ;
1020        responsiveClass();
1021        $(window).on('load, resize', responsiveClass);
1022      }
1023    }); //Team Member
1024
1025    var Team_Member = function Team_Member($scope) {
1026      var btn = $scope.find('.skt-btn');
1027      var lightBox = $scope.find('.skt-member-lightbox');
1028
1029      if (lightBox.length > 0) {
1030        var close = lightBox.find('.skt-member-lightbox-close');
1031        btn.on('click', function () {
1032          lightBox.addClass('skt-member-lightbox-show');
1033        });
1034        lightBox.on('click', function (e) {
1035          if (lightBox.hasClass('skt-member-lightbox-show')) {
1036            if (e.target == lightBox[0]) {
1037              lightBox.removeClass('skt-member-lightbox-show');
1038            } else if (e.target == close[0]) {
1039              lightBox.removeClass('skt-member-lightbox-show');
1040            } else if (e.target == close.find('i.eicon-editor-close')[0]) {
1041              lightBox.removeClass('skt-member-lightbox-show');
1042            }
1043          }
1044        });
1045      }
1046    }; //Creative Button
1047
1048
1049    var Creative_Button = function Creative_Button($scope) {
1050      var btn_wrap = $scope.find('.skt-creative-btn-wrap');
1051      var magnetic = btn_wrap.data('magnetic');
1052      var btn = btn_wrap.find('a.skt-creative-btn');
1053
1054      if ('yes' == magnetic) {
1055        btn_wrap.on('mousemove', function (e) {
1056          var x = e.pageX - (btn_wrap.offset().left + btn_wrap.outerWidth() / 2);
1057          var y = e.pageY - (btn_wrap.offset().top + btn_wrap.outerHeight() / 2);
1058          btn.css("transform", "translate(" + x * 0.3 + "px, " + y * 0.5 + "px)");
1059        });
1060        btn_wrap.on('mouseout', function (e) {
1061          btn.css("transform", "translate(0px, 0px)");
1062        });
1063      } //For expandable button style only
1064
1065
1066      var expandable = $scope.find('.skt-eft--expandable');
1067      var text = expandable.find('.text');
1068
1069      if (expandable.length > 0 && text.length > 0) {
1070        text[0].addEventListener("transitionend", function () {
1071          if (text[0].style.width) {
1072            text[0].style.width = "auto";
1073          }
1074        });
1075        expandable[0].addEventListener("mouseenter", function (e) {
1076          e.currentTarget.classList.add('hover');
1077          text[0].style.width = "auto";
1078          var predicted_answer = text[0].offsetWidth;
1079          text[0].style.width = "0";
1080          window.getComputedStyle(text[0]).transform;
1081          text[0].style.width = "".concat(predicted_answer, "px");
1082        });
1083        expandable[0].addEventListener("mouseleave", function (e) {
1084          e.currentTarget.classList.remove('hover');
1085          text[0].style.width = "".concat(text[0].offsetWidth, "px");
1086          window.getComputedStyle(text[0]).transform;
1087          text[0].style.width = "";
1088        });
1089      }
1090    };
1091
1092    var PDF_View = function PDF_View($scope) {
1093      var $id = $scope.data('id');
1094      var $settings = $scope.find(".viewer-" + $id).data('pdf-settings');
1095      var options = {
1096        width: $settings.width,
1097        height: $settings.height,
1098        page: $settings.page_number
1099      };
1100      PDFObject.embed($settings.pdf_url, "#" + $settings.unique_id, options);
1101    };
1102
1103    var Comparison_Table = function Comparison_Table($scope) {
1104      var $table = $scope.find('.skt-comparison-table-wrapper');
1105      var $table_head = $scope.find('.skt-comparison-table__head');
1106      var $sticky_header = $table_head.data('sticky-header');
1107      var $section_height = $scope.height();
1108      var $table_height = $table.innerHeight();
1109      var $tableOffsetTop = $table.offset().top;
1110
1111      if ($sticky_header === 'yes') {
1112        $window.scroll(function () {
1113          var offset = $(this).scrollTop();
1114
1115          if (offset >= $tableOffsetTop) {
1116            $table_head.addClass('table-sticky');
1117          } else if (offset > $table_height) {
1118            $table_head.removeClass('table-sticky');
1119          }
1120        });
1121      }
1122    }; // Slider
1123
1124
1125    elementorFrontend.hooks.addAction('frontend/element_ready/skt-slider.default', function ($scope) {
1126      elementorFrontend.elementsHandler.addHandler(SliderBase, {
1127        $element: $scope
1128      });
1129    }); // Carousel
1130
1131    elementorFrontend.hooks.addAction('frontend/element_ready/skt-carousel.default', function ($scope) {
1132      elementorFrontend.elementsHandler.addHandler(SliderBase, {
1133        $element: $scope
1134      });
1135    }); //Horizontal Timeline
1136
1137    elementorFrontend.hooks.addAction('frontend/element_ready/skt-horizontal-timeline.default', function ($scope) {
1138      elementorFrontend.elementsHandler.addHandler(SliderBase, {
1139        $element: $scope,
1140        autoplay: false,
1141        container: '.skt-horizontal-timeline-wrapper',
1142        navigation: 'arrow',
1143        arrows: true
1144      });
1145      var img_wrap = $scope.find(".skt-horizontal-timeline-image");
1146      var magnific_popup = img_wrap.data("mfp-src");
1147
1148      if (undefined !== magnific_popup) {
1149        img_wrap.magnificPopup({
1150          type: "image",
1151          gallery: {
1152            enabled: true
1153          }
1154        });
1155      }
1156    });
1157    elementorFrontend.hooks.addAction('frontend/element_ready/skt-mailchimp.default', function ($scope) {
1158      elementorFrontend.elementsHandler.addHandler(MailChimp, {
1159        $element: $scope
1160      });
1161    });
1162    $('body').on('click.onWrapperLink', '[data-skt-element-link]', function () {
1163      var $wrapper = $(this),
1164          data = $wrapper.data('skt-element-link'),
1165          id = $wrapper.data('id'),
1166          anchor = document.createElement('a'),
1167          anchorReal,
1168          timeout;
1169      anchor.id = 'skt-addons-wrapper-link-' + id;
1170      anchor.href = data.url;
1171      anchor.target = data.is_external ? '_blank' : '_self';
1172      anchor.rel = data.nofollow ? 'nofollow noreferer' : '';
1173      anchor.style.display = 'none';
1174      document.body.appendChild(anchor);
1175      anchorReal = document.getElementById(anchor.id);
1176      anchorReal.click();
1177      timeout = setTimeout(function () {
1178        document.body.removeChild(anchorReal);
1179        clearTimeout(timeout);
1180      });
1181    }); // Background overlay extension
1182
1183    var BackgroundOverlay = function BackgroundOverlay($scope) {
1184      $scope.hasClass('elementor-element-edit-mode') && $scope.addClass('skt-has-bg-overlay');
1185    };
1186
1187    var fnHanlders = {
1188      'skt-image-compare.default': HandleImageCompare,
1189      'skt-number.default': NumberHandler,
1190      'skt-skills.default': SkillHandler,
1191      'skt-fun-factor.default': FunFactor,
1192      'skt-bar-chart.default': BarChart,
1193      'skt-threesixty-rotation.default': Threesixty_Rotation,
1194      'skt-data-table.default': DataTable,
1195      'widget': BackgroundOverlay,
1196      'skt-event-calendar.default': Event_Calendar,
1197      'skt-image-accordion.default': Image_Accordion,
1198      'skt-content-switcher.default': Content_Switcher,
1199      'skt-member.default': Team_Member,
1200      'skt-creative-button.default': Creative_Button,
1201      'skt-pdf-view.default': PDF_View,
1202      'skt-comparison-table.default': Comparison_Table
1203    };
1204    $.each(fnHanlders, function (widgetName, handlerFn) {
1205      elementorFrontend.hooks.addAction('frontend/element_ready/' + widgetName, handlerFn);
1206    });
1207    var classHandlers = {
1208      'skt-image-grid.default': ImageGrid,
1209      'skt-justified-gallery.default': JustifiedGrid,
1210      'skt-news-ticker.default': NewsTicker,
1211      'skt-post-tab.default': PostTab
1212    };
1213    $.each(classHandlers, function (widgetName, handlerClass) {
1214      elementorFrontend.hooks.addAction('frontend/element_ready/' + widgetName, function ($scope) {
1215        elementorFrontend.elementsHandler.addHandler(handlerClass, {
1216          $element: $scope
1217        });
1218      });
1219    });
1220  });
1221})(jQuery);
1222
1223"use strict";
1224
1225window.Skt = window.Skt || {};
1226
1227(function ($, Skt, w) {
1228  var $window = $(w);
1229
1230  function debounce(func, wait, immediate) {
1231    var timeout;
1232    return function () {
1233      var context = this,
1234          args = arguments;
1235
1236      var later = function later() {
1237        timeout = null;
1238        if (!immediate) func.apply(context, args);
1239      };
1240
1241      var callNow = immediate && !timeout;
1242      clearTimeout(timeout);
1243      timeout = setTimeout(later, wait);
1244      if (callNow) func.apply(context, args);
1245    };
1246  }
1247
1248  $window.on("elementor/frontend/init", function () {
1249    if (typeof haDisplayCondition != "undefined" && haDisplayCondition.status == "true") {
1250      // Set user time in cookie
1251      var SktLocalTimeZone = new Date().toString().match(/([A-Z]+[\+-][0-9]+.*)/)[1];
1252      var skt_addons_elementor_secure = document.location.protocol === "https:" ? "secure" : "";
1253      document.cookie = "SktLocalTimeZone=" + SktLocalTimeZone + ";SameSite=Strict;" + skt_addons_elementor_secure;
1254    }
1255
1256    var CountDown = function CountDown($scope) {
1257      var $item = $scope.find(".skt-countdown");
1258      var $countdown_item = $item.find(".skt-countdown-item");
1259      var $end_action = $item.data("end-action");
1260      var $redirect_link = $item.data("redirect-link");
1261      var $end_action_div = $item.find(".skt-countdown-end-action");
1262      var $editor_mode_on = $scope.hasClass("elementor-element-edit-mode");
1263      $item.countdown({
1264        end: function end() {
1265          if (("message" === $end_action || "img" === $end_action) && $end_action_div !== undefined) {
1266            $countdown_item.css("display", "none");
1267            $end_action_div.css("display", "block");
1268          } else if ("url" === $end_action && $redirect_link !== undefined && $editor_mode_on !== true) {
1269            window.location.replace($redirect_link);
1270          }
1271        }
1272      });
1273    };
1274
1275    var SliderBase = elementorModules.frontend.handlers.Base.extend({
1276      onInit: function onInit() {
1277        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
1278        this.run();
1279      },
1280      getDefaultSettings: function getDefaultSettings() {
1281        return {
1282          selectors: {
1283            container: ".skt-slider-container"
1284          }
1285        };
1286      },
1287      getDefaultElements: function getDefaultElements() {
1288        var selectors = this.getSettings("selectors");
1289        return {
1290          $container: this.$element.find(selectors.container)
1291        };
1292      },
1293      // onElementChange: function () {
1294      //  haSwiper.destroy(true, true);
1295      //  this.run();
1296      // },
1297      getReadySettings: function getReadySettings() {
1298        var $this = this;
1299        var slidesPerView = parseInt(this.getElementSettings("slides_per_view")) || 1;
1300
1301        if (this.getElementSettings("thumbs_navigation") == "yes") {
1302          var selectorThumbs = this.elements.$container.find(".skt-slider-gallery-thumbs");
1303          var haGallaryThumbs = new HaSwiper(selectorThumbs[0], {
1304            spaceBetween: this.getElementSettings("space_between_thumbs"),
1305            // slidesPerView: this.getElementSettings('thumbs_per_view'),
1306            // loop: this.getElementSettings('infinity_loop'),
1307            freeMode: true,
1308            watchSlidesVisibility: true,
1309            watchSlidesProgress: true
1310          });
1311        }
1312
1313        var settings = {
1314          direction: this.getElementSettings("slider_direction"),
1315          slidesPerView: slidesPerView || 1,
1316          spaceBetween: parseInt(this.getElementSettings("space_between_slides")) || 0,
1317          loop: !!(this.getElementSettings("infinity_loop") || false),
1318          speed: parseInt(this.getElementSettings("effect_speed")),
1319          effect: this.getElementSettings("slider_type") == "multiple" ? this.getElementSettings("effect_multiple") : this.getElementSettings("effect"),
1320          skt_addons_elementor_animation: this.getElementSettings("slider_content_animation"),
1321          sliderType: this.getElementSettings("slider_type")
1322        };
1323
1324        if (this.getElementSettings("effect") == "flip") {
1325          settings.flipEffect = {
1326            limitRotation: true,
1327            slideShadows: true
1328          };
1329        }
1330
1331        if (this.getElementSettings("effect") == "cube") {
1332          settings.cubeEffect = {
1333            shadow: true,
1334            slideShadows: true,
1335            shadowOffset: 20,
1336            shadowScale: 0.94
1337          };
1338        }
1339
1340        if (this.getElementSettings("effect_multiple") == "coverflow") {
1341          settings.coverflowEffect = {
1342            rotate: 50,
1343            stretch: 0,
1344            depth: 100,
1345            modifier: 1,
1346            slideShadows: true
1347          };
1348        }
1349
1350        if (this.getElementSettings("slider_type") == "multiple") {
1351          var bpObj = {
1352            desktop: {
1353              slidesPerView: slidesPerView || 1,
1354              spaceBetween: parseInt(this.getElementSettings("space_between_slides")) || 0
1355            }
1356          };
1357          var breakpoints = elementorFrontend.config.responsive.breakpoints;
1358          $.each(breakpoints, function (idx, val) {
1359            if (val.is_enabled) {
1360              bpObj[idx] = {
1361                screenSize: val.value,
1362                slidesPerView: parseInt($this.getElementSettings("slides_per_view_" + idx)) || slidesPerView,
1363                spaceBetween: parseInt($this.getElementSettings("space_between_slides_" + idx)) || 0
1364              };
1365            }
1366          });
1367          settings.customBreakpoints = bpObj;
1368          settings.customMultiple = true;
1369        }
1370
1371        if (this.getElementSettings("autoplay") == "yes") {
1372          settings.autoplay = {
1373            delay: this.getElementSettings("autoplay_speed"),
1374            disableOnInteraction: false,
1375            stopOnLastSlide: !(this.getElementSettings("infinity_loop") || false)
1376          };
1377        }
1378
1379        if (this.getElementSettings("arrow_navigation") == "yes") {
1380          var selectorNext = this.elements.$container.find(".skt-slider-next");
1381          var selectorPrev = this.elements.$container.find(".skt-slider-prev");
1382          settings.navigation = {
1383            nextEl: selectorNext[0],
1384            prevEl: selectorPrev[0]
1385          };
1386        }
1387
1388        if (this.getElementSettings("pagination_type") == "dots") {
1389          var selectorPagi = this.elements.$container.find(".skt-slider-pagination");
1390          settings.pagination = {
1391            el: selectorPagi[0],
1392            clickable: true
1393          };
1394        }
1395
1396        if (this.getElementSettings("pagination_type") == "progressbar") {
1397          var selectorPagi = this.elements.$container.find(".skt-slider-pagination");
1398          settings.pagination = {
1399            el: selectorPagi[0],
1400            clickable: true,
1401            type: "progressbar"
1402          };
1403        }
1404
1405        if (this.getElementSettings("pagination_type") == "numbers") {
1406          var selectorPagi = this.elements.$container.find(".skt-slider-pagination");
1407          settings.pagination = {
1408            el: selectorPagi[0],
1409            clickable: true,
1410            type: this.getElementSettings("number_pagination_type"),
1411            renderBullet: function renderBullet(index, className) {
1412              return '<span class="' + className + '">' + (index + 1) + "</span>";
1413            },
1414            renderFraction: function renderFraction(currentClass, totalClass) {
1415              return '<span class="' + currentClass + '"></span>' + "<span>/</span>" + '<span class="' + totalClass + '"></span>';
1416            }
1417          };
1418        }
1419
1420        if (this.getElementSettings("scroll_bar") == "yes") {
1421          var selectorScroll = this.elements.$container.find(".skt-slider-scrollbar");
1422          settings.scrollbar = {
1423            el: selectorScroll[0],
1424            hide: this.getElementSettings("scroll_bar_visibility") == "true",
1425            draggable: true
1426          };
1427        }
1428
1429        if (this.getElementSettings("thumbs_navigation") == "yes") {
1430          settings.thumbs = {
1431            swiper: haGallaryThumbs
1432          };
1433        }
1434
1435        return $.extend({}, settings);
1436      },
1437      run: function run() {
1438        var elContainer = this.elements.$container;
1439        var slider = elContainer.find(".skt-slider-container");
1440        var readySettings = this.getReadySettings();
1441        var sliderObj = new HaSwiper(slider[0], readySettings);
1442        sliderObj.on("slideChange", function () {
1443          console.log("slide change");
1444
1445          if (readySettings.sliderType == "multiple") {
1446            return;
1447          }
1448
1449          var aI = sliderObj.activeIndex;
1450          var elSlide = elContainer.find(".skt-slider-slide");
1451          var elSlideContent = elContainer.find(".skt-slider-content");
1452          var currentSlide = elSlideContent.eq(aI);
1453          currentSlide.hide();
1454
1455          if (currentSlide.length <= 0) {// elSlide.eq(aI).find('.elementor-invisible').css('visibility', 'visible');
1456          }
1457
1458          setTimeout(function () {
1459            currentSlide.show();
1460          }, readySettings.speed);
1461          if (elSlide.eq(aI).find(".elementor-invisible, .animated").each(function (e, t) {
1462            var i = $(this).data("settings");
1463
1464            if (i && (i._animation || i.animation)) {
1465              var n = i._animation_delay ? i._animation_delay : 0,
1466                  a = i._animation || i.animation;
1467              $(this).removeClass("elementor-invisible");
1468              $(this).addClass(a + " animated");
1469              console.log($(this));
1470            }
1471          })) ;
1472        });
1473        sliderObj.on("transitionEnd", function () {
1474          console.log("transitionEnd event call");
1475          var aI = sliderObj.activeIndex;
1476          var elSlide = elContainer.find(".skt-slider-slide");
1477          var elSlideContent = elContainer.find(".skt-slider-content");
1478          var currentSlide = elSlideContent.eq(aI);
1479          setTimeout(function () {
1480            if (elSlide.eq(aI).find(".animated").each(function (e, t) {
1481              var i = $(this).data("settings");
1482
1483              if (i && (i._animation || i.animation)) {
1484                var n = i._animation_delay ? i._animation_delay : 0,
1485                    a = i._animation || i.animation; // $(this).removeClass("animated");
1486
1487                $(this).removeClass(a); // $(this).addClass("elementor-invisible");
1488                // $(this).css("visibility", "visible");
1489
1490                console.log($(this));
1491              }
1492            })) ;
1493          }, readySettings.speed);
1494        });
1495      }
1496    });
1497    var CarouselBase = elementorModules.frontend.handlers.Base.extend({
1498      onInit: function onInit() {
1499        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
1500        this.run();
1501      },
1502      getDefaultSettings: function getDefaultSettings() {
1503        return {
1504          selectors: {
1505            container: ".skt-carousel-container"
1506          },
1507          arrows: false,
1508          dots: false,
1509          checkVisible: false,
1510          infinite: true,
1511          slidesToShow: 3,
1512          rows: 0,
1513          prevArrow: '<button type="button" class="slick-prev"><i class="fa fa-chevron-left"></i></button>',
1514          nextArrow: '<button type="button" class="slick-next"><i class="fa fa-chevron-right"></i></button>'
1515        };
1516      },
1517      getDefaultElements: function getDefaultElements() {
1518        var selectors = this.getSettings("selectors");
1519        return {
1520          $container: this.findElement(selectors.container)
1521        };
1522      },
1523      onElementChange: function onElementChange() {
1524        this.elements.$container.slick("unslick");
1525        this.run();
1526      },
1527      getReadySettings: function getReadySettings() {
1528        var settings = {
1529          infinite: !!this.getElementSettings("loop"),
1530          autoplay: !!this.getElementSettings("autoplay"),
1531          autoplaySpeed: this.getElementSettings("autoplay_speed"),
1532          speed: this.getElementSettings("animation_speed"),
1533          centerMode: !!this.getElementSettings("center"),
1534          vertical: !!this.getElementSettings("vertical"),
1535          slidesToScroll: 1
1536        };
1537
1538        switch (this.getElementSettings("navigation")) {
1539          case "arrow":
1540            settings.arrows = true;
1541            break;
1542
1543          case "dots":
1544            settings.dots = true;
1545            break;
1546
1547          case "both":
1548            settings.arrows = true;
1549            settings.dots = true;
1550            break;
1551        }
1552
1553        settings.slidesToShow = parseInt(this.getElementSettings("slides_to_show")) || 1;
1554        settings.responsive = [{
1555          breakpoint: elementorFrontend.config.breakpoints.lg,
1556          settings: {
1557            slidesToShow: parseInt(this.getElementSettings("slides_to_show_tablet")) || settings.slidesToShow
1558          }
1559        }, {
1560          breakpoint: elementorFrontend.config.breakpoints.md,
1561          settings: {
1562            slidesToShow: parseInt(this.getElementSettings("slides_to_show_mobile")) || parseInt(this.getElementSettings("slides_to_show_tablet")) || settings.slidesToShow
1563          }
1564        }];
1565        return $.extend({}, this.getSettings(), settings);
1566      },
1567      run: function run() {
1568        this.elements.$container.slick(this.getReadySettings());
1569      }
1570    }); // Source Code
1571
1572    var SourceCode = function SourceCode($scope) {
1573      var $item = $scope.find(".skt-source-code");
1574      var $lng_type = $item.data("lng-type");
1575      var $after_copy_text = $item.data("after-copy");
1576      var $code = $item.find("code.language-" + $lng_type);
1577      var $copy_btn = $scope.find(".skt-copy-code-button");
1578      $copy_btn.on("click", function () {
1579        var $temp = $("<textarea>");
1580        $(this).append($temp);
1581        $temp.val($code.text()).select();
1582        document.execCommand("copy");
1583        $temp.remove();
1584
1585        if ($after_copy_text.length) {
1586          $(this).text($after_copy_text);
1587        }
1588      });
1589
1590      if ($lng_type !== undefined && $code !== undefined) {
1591        Prism.highlightElement($code.get(0));
1592      }
1593    }; // Animated text
1594
1595
1596    var AnimatedText = function AnimatedText($scope) {
1597      var $item = $scope.find(".cd-headline"),
1598          $animationDelay = $item.data("animation-delay");
1599      sktAnimatedText({
1600        selector: $item,
1601        animationDelay: $animationDelay
1602      });
1603    }; //Instagram Feed
1604
1605
1606    var InstagramFeed = function InstagramFeed($scope) {
1607      var button = $scope.find(".skt-insta-load-more");
1608      var instagram_wrap = $scope.find(".skt-insta-default");
1609      button.on("click", function (e) {
1610        e.preventDefault();
1611        var $self = $(this),
1612            query_settings = $self.data("settings"),
1613            total = $self.data("total"),
1614            items = $scope.find(".skt-insta-item").length;
1615        $.ajax({
1616          url: SktProLocalize.ajax_url,
1617          type: "POST",
1618          data: {
1619            action: "skt_addons_elementor_instagram_feed_action",
1620            security: SktProLocalize.nonce,
1621            query_settings: query_settings,
1622            loaded_item: items
1623          },
1624          success: function success(response) {
1625            if (total > items) {
1626              $(response).appendTo(instagram_wrap);
1627            } else {
1628              $self.text("All Loaded").addClass("loaded");
1629              setTimeout(function () {
1630                $self.css({
1631                  display: "none"
1632                });
1633              }, 800);
1634            }
1635          },
1636          error: function error(_error) {}
1637        });
1638      });
1639    }; //Scrolling Image
1640
1641
1642    var ScrollingImage = elementorModules.frontend.handlers.Base.extend({
1643      onInit: function onInit() {
1644        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
1645        this.wrapper = this.$element.find(".skt-scrolling-image-wrapper");
1646        this.run();
1647      },
1648      onElementChange: function onElementChange() {
1649        this.run();
1650      },
1651      run: function run() {
1652        var container_height = this.wrapper.innerHeight(),
1653            container_width = this.wrapper.innerWidth(),
1654            image_align = this.wrapper.data("align"),
1655            scroll_direction = this.wrapper.data("scroll-direction"),
1656            items = this.wrapper.find(".skt-scrolling-image-container"),
1657            single_image_box = items.find(".skt-scrolling-image-item"),
1658            scroll = "scroll" + image_align + scroll_direction + parseInt(container_height) + parseInt(container_width),
1659            duration = this.wrapper.data("duration"),
1660            direction = "normal",
1661            horizontal_align_width = 10,
1662            vertical_align_height = 10;
1663        var start = {
1664          transform: "translateY(" + container_height + "px)"
1665        },
1666            end = {
1667          transform: "translateY(-101%)"
1668        };
1669
1670        if ("bottom" === scroll_direction || "right" === scroll_direction) {
1671          direction = "reverse";
1672        }
1673
1674        if ("skt-horizontal" === image_align) {
1675          start = {
1676            transform: "translateX(" + container_width + "px)"
1677          };
1678          end = {
1679            transform: "translateX(-101%)"
1680          };
1681          single_image_box.each(function () {
1682            horizontal_align_width += $(this).outerWidth(true);
1683          });
1684          items.css({
1685            width: horizontal_align_width,
1686            display: "flex"
1687          });
1688          items.find("img").css({
1689            "max-width": "100%"
1690          });
1691          single_image_box.css({
1692            display: "inline-flex"
1693          });
1694        }
1695
1696        if ("skt-vertical" === image_align) {
1697          single_image_box.each(function () {
1698            vertical_align_height += $(this).outerHeight(true);
1699          });
1700        }
1701
1702        $.keyframe.define([{
1703          name: scroll,
1704          "0%": start,
1705          "100%": end
1706        }]);
1707        items.playKeyframe({
1708          name: scroll,
1709          duration: duration.toString() + "ms",
1710          timingFunction: "linear",
1711          delay: "0s",
1712          iterationCount: "infinite",
1713          direction: direction,
1714          fillMode: "none",
1715          complete: function complete() {}
1716        });
1717      }
1718    }); //Pricing Table ToolTip
1719
1720    var PricingTableToolTip = function PricingTableToolTip($scope) {
1721      var tooltip_area = $scope.find(".skt-pricing-table-feature-tooltip");
1722      tooltip_area.on({
1723        mouseenter: function mouseenter(e) {
1724          var $this = $(this),
1725              direction = $this[0].getBoundingClientRect(),
1726              tooltip = $this.find(".skt-pricing-table-feature-tooltip-text"),
1727              tooltipW = tooltip.outerWidth(true),
1728              tooltipH = tooltip.outerHeight(true),
1729              W_width = $(window).width(),
1730              W_height = $(window).height();
1731          tooltip.css({
1732            left: "0",
1733            right: "auto",
1734            top: "calc(100% + 1px)",
1735            bottom: "auto"
1736          });
1737
1738          if (W_width - direction.left < tooltipW && direction.r
1738ight < tooltipW) {
1739            tooltip.css({
1740              left: "calc(50% - (" + tooltipW + "px/2))"
1741            });
1742          } else if (W_width - direction.left < tooltipW) {
1743            tooltip.css({
1744              left: "auto",
1745              right: "0"
1746            });
1747          }
1748
1749          if (W_height - direction.bottom < tooltipH) {
1750            tooltip.css({
1751              top: "auto",
1752              bottom: "calc(100% + 1px)"
1753            });
1754          }
1755        }
1756      });
1757    };
1758
1759    var TabHandlerBase = elementorModules.frontend.handlers.Base.extend({
1760      $activeContent: null,
1761      getDefaultSettings: function getDefaultSettings() {
1762        return {
1763          selectors: {
1764            tabTitle: ".skt-tab__title",
1765            tabContent: ".skt-tab__content"
1766          },
1767          classes: {
1768            active: "skt-tab--active"
1769          },
1770          showTabFn: "show",
1771          hideTabFn: "hide",
1772          toggleSelf: false,
1773          hidePrevious: true,
1774          autoExpand: true
1775        };
1776      },
1777      getDefaultElements: function getDefaultElements() {
1778        var selectors = this.getSettings("selectors");
1779        return {
1780          $tabTitles: this.findElement(selectors.tabTitle),
1781          $tabContents: this.findElement(selectors.tabContent)
1782        };
1783      },
1784      activateDefaultTab: function activateDefaultTab() {
1785        var settings = this.getSettings();
1786
1787        if (!settings.autoExpand || "editor" === settings.autoExpand && !this.isEdit) {
1788          return;
1789        }
1790
1791        var defaultActiveTab = this.getEditSettings("activeItemIndex") || 1,
1792            originalToggleMethods = {
1793          showTabFn: settings.showTabFn,
1794          hideTabFn: settings.hideTabFn
1795        }; // Toggle tabs without animation to avoid jumping
1796
1797        this.setSettings({
1798          showTabFn: "show",
1799          hideTabFn: "hide"
1800        });
1801        this.changeActiveTab(defaultActiveTab); // Return back original toggle effects
1802
1803        this.setSettings(originalToggleMethods);
1804      },
1805      deactivateActiveTab: function deactivateActiveTab(tabIndex) {
1806        var settings = this.getSettings(),
1807            activeClass = settings.classes.active,
1808            activeFilter = tabIndex ? '[data-tab="' + tabIndex + '"]' : "." + activeClass,
1809            $activeTitle = this.elements.$tabTitles.filter(activeFilter),
1810            $activeContent = this.elements.$tabContents.filter(activeFilter);
1811        $activeTitle.add($activeContent).removeClass(activeClass);
1812        $activeContent[settings.hideTabFn]();
1813      },
1814      activateTab: function activateTab(tabIndex) {
1815        var settings = this.getSettings(),
1816            activeClass = settings.classes.active,
1817            $requestedTitle = this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]'),
1818            $requestedContent = this.elements.$tabContents.filter('[data-tab="' + tabIndex + '"]');
1819        $requestedTitle.add($requestedContent).addClass(activeClass);
1820        $requestedContent[settings.showTabFn]();
1821      },
1822      isActiveTab: function isActiveTab(tabIndex) {
1823        return this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]').hasClass(this.getSettings("classes.active"));
1824      },
1825      bindEvents: function bindEvents() {
1826        var _this = this;
1827
1828        this.elements.$tabTitles.on({
1829          keydown: function keydown(event) {
1830            if ("Enter" === event.key) {
1831              event.preventDefault();
1832
1833              _this.changeActiveTab(event.currentTarget.getAttribute("data-tab"));
1834            }
1835          },
1836          click: function click(event) {
1837            event.preventDefault();
1838
1839            _this.changeActiveTab(event.currentTarget.getAttribute("data-tab"));
1840          }
1841        });
1842      },
1843      onInit: function onInit() {
1844        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
1845        this.activateDefaultTab();
1846      },
1847      onEditSettingsChange: function onEditSettingsChange(propertyName) {
1848        if ("activeItemIndex" === propertyName) {
1849          this.activateDefaultTab();
1850        }
1851      },
1852      changeActiveTab: function changeActiveTab(tabIndex) {
1853        var isActiveTab = this.isActiveTab(tabIndex),
1854            settings = this.getSettings();
1855
1856        if ((settings.toggleSelf || !isActiveTab) && settings.hidePrevious) {
1857          this.deactivateActiveTab();
1858        }
1859
1860        if (!settings.hidePrevious && isActiveTab) {
1861          this.deactivateActiveTab(tabIndex);
1862        }
1863
1864        if (!isActiveTab) {
1865          this.activateTab(tabIndex);
1866        }
1867
1868        $(window).trigger("resize");
1869      }
1870    }); // TimeLine
1871
1872    var TimeLine = function TimeLine($scope) {
1873      var T_ID = $scope.data("id");
1874      var timeline = $scope.find(".skt-timeline-wrap");
1875      var dataScroll = timeline.data("scroll");
1876      var timeline_block = timeline.find(".skt-timeline-block");
1877      var event = "scroll.timelineScroll" + T_ID + " resize.timelineScroll" + T_ID;
1878
1879      function scroll_tree() {
1880        timeline_block.each(function () {
1881          var block_height = $(this).outerHeight(true);
1882          var $offsetTop = $(this).offset().top;
1883          var window_middle_p = $window.scrollTop() + $window.height() / 2;
1884
1885          if ($offsetTop < window_middle_p) {
1886            $(this).addClass("skt-timeline-scroll-tree");
1887          } else {
1888            $(this).removeClass("skt-timeline-scroll-tree");
1889          }
1890
1891          var scroll_tree_wrap = $(this).find(".skt-timeline-tree-inner");
1892          var scroll_height = $window.scrollTop() - scroll_tree_wrap.offset().top + $window.outerHeight() / 2;
1893
1894          if ($offsetTop < window_middle_p && timeline_block.hasClass("skt-timeline-scroll-tree")) {
1895            if (block_height > scroll_height) {
1896              scroll_tree_wrap.css({
1897                height: scroll_height * 1.5 + "px"
1898              });
1899            } else {
1900              scroll_tree_wrap.css({
1901                height: block_height * 1.2 + "px"
1902              });
1903            }
1904          } else {
1905            scroll_tree_wrap.css("height", "0px");
1906          }
1907        });
1908      }
1909
1910      if ("yes" === dataScroll) {
1911        scroll_tree();
1912        $window.on(event, scroll_tree);
1913      } else {
1914        $window.off(event);
1915      }
1916    };
1917
1918    var HotSpots = elementorModules.frontend.handlers.Base.extend({
1919      onInit: function onInit() {
1920        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
1921        this.init();
1922      },
1923      bindEvents: function bindEvents() {
1924        if (!this.isEdit) {
1925          this.elements.$items.on("click.spotClick", function (e) {
1926            e.preventDefault();
1927          });
1928        }
1929      },
1930      getDefaultSettings: function getDefaultSettings() {
1931        return {
1932          selectors: {
1933            item: ".skt-hotspots__item"
1934          }
1935        };
1936      },
1937      getDefaultElements: function getDefaultElements() {
1938        return {
1939          $items: this.findElement(this.getSettings("selectors.item"))
1940        };
1941      },
1942      onElementChange: function onElementChange(changedProp) {
1943        if (!this.hasTipso()) {
1944          return;
1945        }
1946
1947        if (changedProp.indexOf("tooltip_") === 0) {
1948          this.elements.$items.tipso("destroy");
1949          this.init();
1950        }
1951      },
1952      hasTipso: function hasTipso() {
1953        return $.fn["tipso"];
1954      },
1955      init: function init() {
1956        var position = this.getElementSettings("tooltip_position"),
1957            width = this.getElementSettings("tooltip_width"),
1958            background = this.getElementSettings("tooltip_bg_color"),
1959            color = this.getElementSettings("tooltip_color"),
1960            speed = this.getElementSettings("tooltip_speed"),
1961            delay = this.getElementSettings("tooltip_delay"),
1962            hideDelay = this.getElementSettings("tooltip_hide_delay"),
1963            hideArrow = this.getElementSettings("tooltip_hide_arrow"),
1964            hover = this.getElementSettings("tooltip_hover"),
1965            elementId = this.getID();
1966
1967        if (!this.hasTipso()) {
1968          return;
1969        }
1970
1971        this.elements.$items.each(function (index, item) {
1972          var $item = $(item),
1973              target = $item.data("target"),
1974              settings = $item.data("settings"),
1975              classes = ["skt-hotspots--" + elementId, "elementor-repeater-item-" + target];
1976          $item.tipso({
1977            color: color,
1978            width: width.size || 200,
1979            position: settings.position || position,
1980            speed: speed,
1981            delay: delay,
1982            showArrow: !hideArrow,
1983            tooltipHover: !!hover,
1984            hideDelay: hideDelay,
1985            background: background,
1986            useTitle: false,
1987            content: $("#skt-" + target).html(),
1988            onBeforeShow: function onBeforeShow($e, e, tooltip) {
1989              tooltip.tipso_bubble.addClass(classes.join(" "));
1990            }
1991          });
1992        });
1993      }
1994    });
1995
1996    var LineChart = function LineChart($scope) {
1997        var $chart = $scope,
1998            $container = $chart.find(".skt-line-chart-container"),
1999            $chart_canvas = $chart.find("#skt-line-chart"),
2000            settings = $container.data("settings");
2001
2002        if ($container.length) {
2003          var chart = new Chart($chart_canvas, settings);
2004        }
2005    };
2006
2007	var RadarChart = function RadarChart($scope) {
2008	  var $chart = $scope,
2009		  $container = $chart.find(".skt-radar-chart-container"),
2010		  $chart_canvas = $chart.find("#skt-radar-chart"),
2011		  settings = $container.data("settings");
2012	
2013	  if ($container.length) {
2014		var chart = new Chart($chart_canvas, settings);
2015	  }
2016	};
2017	
2018    var PolarChart = function PolarChart($scope) {
2019        var $chart = $scope,
2020            $container = $chart.find(".skt-polar-chart-container"),
2021            $chart_canvas = $chart.find("#skt-polar-chart"),
2022            settings = $container.data("settings");
2023
2024        if ($container.length) {
2025          var chart = new Chart($chart_canvas, settings);
2026        }
2027    };
2028
2029    var PieChart = function PieChart($scope) {
2030        var $chart = $scope,
2031            $container = $chart.find(".skt-pie-chart-container"),
2032            $chart_canvas = $chart.find("#skt-pie-chart"),
2033            settings = $container.data("settings");
2034
2035        if ($container.length) {
2036          var chart = new Chart($chart_canvas, settings);
2037        }
2038    };
2039
2040    var StickyVideoArray = [];
2041
2042    var StickyVideo = function StickyVideo($scope) {
2043      var $id = "#skt-sticky-video-player-" + $scope.data("id"),
2044          $wrap = $scope.find(".skt-sticky-video-wrap"),
2045          $settting = $wrap.data("skt-player"),
2046          $box = $wrap.find(".skt-sticky-video-box"),
2047          $overlay_box = $wrap.find(".skt-sticky-video-overlay"),
2048          $overlay_play = $overlay_box.find(".skt-sticky-video-overlay-icon"),
2049          $sticky_close = $wrap.find(".skt-sticky-video-close i"),
2050          $all_box = $(".skt-sticky-video-box"),
2051          event = "scroll.haStickyVideo" + $scope.data("id"),
2052          //event = "scroll.haStickyVideo"+$scope.data('id')+" resize.haStickyVideo"+$scope.data('id'),
2053      set; //console.log(StickyVideoArray);
2054
2055      var option = {
2056        autoplay: $settting.autoplay,
2057        muted: $settting.muted,
2058        loop: $settting.loop,
2059        clickToPlay: false,
2060        hideControls: false // youtube: {
2061        //  start: '30',
2062        //  end: '45',
2063        // },
2064
2065      };
2066      /* var playerAbc = new Plyr('#player', {
2067          title: 'Example Title',
2068          // autoplay: true,
2069          youtube: {
2070            start: '30',
2071            end: '45',
2072          },
2073          }); */
2074
2075      var playerAbc = new Plyr($id);
2076      var StickyVideoObject = {
2077        player: playerAbc,
2078        event: event,
2079        player_box: $box
2080      };
2081      StickyVideoArray.push(StickyVideoObject); //on overlay click
2082
2083      if (0 !== $overlay_box.length) {
2084        var $el = 0 !== $overlay_play.length ? $overlay_play : $overlay_box;
2085        $el.on("click", function () {
2086          playerAbc.play();
2087        });
2088      } //on close sticky
2089
2090
2091      $sticky_close.on("click", function () {
2092        $box.removeClass("sticky");
2093        $box.addClass("sticky-close");
2094        playerAbc.pause();
2095      }); //on Play
2096
2097      playerAbc.on("play", function (e) {
2098        //console.log(e,StickyVideoArray);
2099        $overlay_box.css("display", "none");
2100
2101        if ($box.hasClass("sticky-close")) {
2102          $box.removeClass("sticky-close");
2103        }
2104
2105        StickyVideoArray.forEach(function (item, index) {
2106          //console.log( item );
2107          if (item.player !== playerAbc) {
2108            //console.log('push');
2109            item.player.pause();
2110          }
2111
2112          if (item.event !== event) {
2113            $window.off(item.event); //console.log('event');
2114          }
2115
2116          if (item.player_box !== $box) {
2117            item.player_box.removeClass("sticky"); //console.log('removeClass');
2118          }
2119        }); //$all_box.removeClass("sticky");
2120        //console.log($settting,$id);
2121
2122        if (true === $settting.sticky) {
2123          $window.on(event, function () {
2124            var height = $box.outerHeight(true);
2125            var $offsetTop = $wrap.offset().top;
2126            var videoBoxTopPoint = $window.scrollTop();
2127            var videoBoxMiddlePoint = $offsetTop + height / 2;
2128
2129            if (!$box.hasClass("sticky-close")) {
2130              if (videoBoxMiddlePoint < videoBoxTopPoint) {
2131                $box.addClass("sticky");
2132              } else {
2133                $box.removeClass("sticky");
2134              }
2135            }
2136          });
2137        } else {
2138          $window.off(event);
2139        }
2140      }); // on pause
2141
2142      playerAbc.on("pause", function (e) {
2143        $window.off(event);
2144      });
2145      $window.on("load resize", debounce(function () {
2146        //console.log($box.find( 'iframe' ));
2147        // cannot rely on iframe here cause iframe has extra height
2148        var height = $box.find(".plyr").height();
2149        $wrap.css("min-height", height + "px");
2150      }, 100));
2151      /* var event = "scroll.timelineScroll"+T_ID+" resize.timelineScroll"+T_ID;
2152        function scroll_tree() {
2153        timeline_block.each(function () {
2154          var block_height = $(this).outerHeight(true);
2155          var $offsetTop = $(this).offset().top;
2156          var window_middle_p = $window.scrollTop() + $window.height() / 2;
2157          if ($offsetTop < window_middle_p) {
2158            $(this).addClass("skt-timeline-scroll-tree");
2159          } else {
2160            $(this).removeClass("skt-timeline-scroll-tree");
2161          }
2162          var scroll_tree_wrap = $(this).find('.skt-timeline-tree-inner');
2163          var scroll_height = ($window.scrollTop() - scroll_tree_wrap.offset().top) + ($window.outerHeight() / 2);
2164            if ($offsetTop < window_middle_p && timeline_block.hasClass('skt-timeline-scroll-tree')) {
2165            if (block_height > scroll_height) {
2166              scroll_tree_wrap.css({"height": scroll_height * 1.5 + "px",});
2167            } else {
2168              scroll_tree_wrap.css({"height": block_height * 1.2 + "px",});
2169            }
2170          } else {
2171            scroll_tree_wrap.css("height", "0px");
2172          }
2173        });
2174      }
2175        if( 'yes' === dataScroll) {
2176        scroll_tree();
2177        $window.on(event, scroll_tree);
2178      }else{
2179        $window.off(event);
2180      } */
2181    }; //facebook feed
2182
2183
2184    var FacebookFeed = function FacebookFeed($scope) {
2185      var button = $scope.find(".skt-facebook-load-more");
2186      var facebook_wrap = $scope.find(".skt-facebook-items");
2187      button.on("click", function (e) {
2188        e.preventDefault();
2189        var $self = $(this),
2190            query_settings = $self.data("settings"),
2191            total = $self.data("total"),
2192            items = $scope.find(".skt-facebook-item").length;
2193        $.ajax({
2194          url: SktProLocalize.ajax_url,
2195          type: "POST",
2196          data: {
2197            action: "skt_addons_elementor_facebook_feed_action",
2198            security: SktProLocalize.nonce,
2199            query_settings: query_settings,
2200            loaded_item: items
2201          },
2202          success: function success(response) {
2203            if (total > items) {
2204              $(response).appendTo(facebook_wrap);
2205            } else {
2206              $self.text("All Loaded").addClass("loaded");
2207              setTimeout(function () {
2208                $self.css({
2209                  display: "none"
2210                });
2211              }, 800);
2212            }
2213          },
2214          error: function error(_error2) {}
2215        });
2216      });
2217    }; //SmartPostList
2218
2219
2220    var SmartPostList = function SmartPostList($scope) {
2221      var filterWrap = $scope.find(".skt-spl-filter"),
2222          customSelect = $scope.find(".skt-spl-custom-select"),
2223          gridWrap = $scope.find(".skt-spl-grid-area"),
2224          mainWrapper = $scope.find(".skt-spl-wrapper"),
2225          querySettings = mainWrapper.data("settings"),
2226          dataOffset = mainWrapper.attr("data-offset"),
2227          nav = $scope.find(".skt-spl-pagination button"),
2228          navPrev = $scope.find(".skt-spl-pagination button.prev"),
2229          navNext = $scope.find(".skt-spl-pagination button.next"),
2230          filter = $scope.find("ul.skt-spl-filter-list li span"),
2231          event;
2232      customSelect.niceSelect();
2233      var select = $scope.find(".skt-spl-custom-select li");
2234
2235      function afterClick(e) {
2236        e.preventDefault();
2237        var $self = $(this),
2238            dataFilter = filterWrap.attr("data-active"),
2239            dataTotalOffset = mainWrapper.attr("data-total-offset"),
2240            offset = "",
2241            termId = "";
2242
2243        if (e.target.classList.contains("prev") || e.target.classList.contains("fa-angle-left")) {
2244          if (0 == parseInt(dataTotalOffset)) {
2245            navPrev.attr("disabled", true);
2246            return;
2247          }
2248
2249          offset = 0 !== parseInt(dataTotalOffset) ? parseInt(dataTotalOffset) - parseInt(dataOffset) : "0";
2250
2251          if (undefined !== dataFilter) {
2252            termId = dataFilter;
2253          }
2254        } else if (e.target.classList.contains("next") || e.target.classList.contains("fa-angle-right")) {
2255          offset = parseInt(dataTotalOffset) + parseInt(dataOffset);
2256
2257          if (undefined !== dataFilter) {
2258            termId = dataFilter;
2259          }
2260        }
2261
2262        if (e.target.hasAttribute("data-value")) {
2263          termId = e.target.dataset["value"];
2264          filterWrap[0].setAttribute("data-active", termId);
2265
2266          if ("SPAN" === e.target.tagName) {
2267            filter.removeClass("skt-active");
2268            e.target.classList.toggle("skt-active");
2269          }
2270
2271          offset = 0;
2272          navPrev.attr("disabled", true);
2273          navNext.removeAttr("disabled");
2274        }
2275
2276        $.ajax({
2277          url: SktProLocalize.ajax_url,
2278          type: "POST",
2279          data: {
2280            action: "skt_addons_elementor_smart_post_list_action",
2281            security: SktProLocalize.nonce,
2282            querySettings: querySettings,
2283            offset: offset,
2284            termId: termId
2285          },
2286          success: function success(response) {
2287            if ($(response).length > 0) {
2288              gridWrap.css("height", gridWrap.outerHeight(true) + "px");
2289              gridWrap.html("");
2290              $(response).appendTo(gridWrap);
2291              gridWrap.css("height", "");
2292              mainWrapper[0].attributes["data-total-offset"].value = offset;
2293
2294              if (e.target.classList.contains("prev") || e.target.classList.contains("fa-angle-left")) {
2295                navNext.removeAttr("disabled");
2296              }
2297
2298              if (e.target.classList.contains("next") || e.target.classList.contains("fa-angle-right")) {
2299                navPrev.removeAttr("disabled");
2300              }
2301            } else {
2302              if (e.target.classList.contains("next") || e.target.classList.contains("fa-angle-right")) {
2303                navNext.attr("disabled", true);
2304              }
2305            }
2306          },
2307          error: function error(_error3) {}
2308        });
2309      }
2310
2311      nav.on("click", afterClick);
2312      filter.on("click", afterClick);
2313      select.on("click", afterClick);
2314    }; //PostGrid
2315
2316
2317    var postGridSkins = ["classic", "hawai", "standard", "monastic", "stylica", "outbox", "crossroad"];
2318
2319    var PostGrid = function PostGrid($scope) {
2320      var wrapper = $scope.find(".skt-pg-wrapper"),
2321          gridWrap = wrapper.find(".skt-pg-grid-wrap"),
2322          button = wrapper.find("button.skt-pg-loadmore");
2323      button.on("click", function (e) {
2324        e.preventDefault();
2325        var $self = $(this),
2326            querySettings = $self.data("settings"),
2327            items = wrapper.find(".skt-pg-item").length;
2328        $self.attr("disabled", true);
2329        $.ajax({
2330          url: SktProLocalize.ajax_url,
2331          type: "POST",
2332          data: {
2333            action: "sktaddonselementorextra_post_grid_action",
2334            security: SktProLocalize.nonce,
2335            querySettings: querySettings,
2336            loadedItem: items
2337          },
2338          beforeSend: function beforeSend() {
2339            $self.find(".eicon-loading").css({
2340              display: "inline-block"
2341            });
2342          },
2343          success: function success(response) {
2344            if (response) {
2345              $(response).each(function () {
2346                var $self = $(this); // every item
2347
2348                if ($self.hasClass("skt-pg-item")) {
2349                  $self.addClass("skt-pg-item-loaded").appendTo(gridWrap);
2350                } else {
2351                  $self.appendTo(gridWrap);
2352                }
2353              });
2354            } else {
2355              $self.text("All Loaded").addClass("loaded");
2356              setTimeout(function () {
2357                $self.css({
2358                  display: "none"
2359                });
2360              }, 800);
2361            }
2362
2363            $self.find(".eicon-loading").css({
2364              display: "none"
2365            });
2366            $self.removeAttr("disabled");
2367          },
2368          error: function error(_error4) {}
2369        });
2370      });
2371    }; // Advanced Data Table
2372
2373
2374    var DataTable = function DataTable($scope) {
2375      var dataTable = $scope.find(".skt-advanced-table");
2376      var widgetWrapper = $scope.find(".elementor-widget-container");
2377      var row_td = $scope.find(".skt-advanced-table__body-row-cell");
2378      var search = dataTable.data("search") == true ? true : false;
2379      var paging = dataTable.data("paging") == true ? true : false;
2380      var scrollX = dataTable.data("scroll-x") == undefined ? false : true;
2381
2382      if (window.innerWidth <= 767) {
2383        var scrollX = true;
2384      } // DataTables.js settings
2385
2386
2387      $(dataTable).DataTable({
2388        searching: search,
2389        paging: paging,
2390        orderCellsTop: true,
2391        scrollX: scrollX
2392      });
2393      var column_th = $scope.find(".skt-advanced-table__head-column-cell");
2394      column_th.each(function (index, v) {
2395        $(column_th[index]).css("width", "");
2396      }); // export table button
2397
2398      if (dataTable.data("export-table") == true) {
2399        widgetWrapper.prepend('<div class="skt-advanced-table-btn-wrap"><button class="skt-advanced-table-btn">' + dataTable.data("export-table-text") + "</button></div>");
2400        var dataTableBtn = $scope.find(".skt-advanced-table-btn");
2401        dataTableBtn.on("click", function () {
2402          var oldDownloadNode = document.querySelector(".skt-advanced-data-table-export");
2403
2404          if (oldDownloadNode) {
2405            oldDownloadNode.parentNode.removeChild(oldDownloadNode);
2406          }
2407
2408          var csv = [];
2409          dataTable.find("tr").each(function (index, tr) {
2410            var data = [];
2411            $(tr).find("th").each(function (index, th) {
2412              data.push(th.textContent);
2413            });
2414            $(tr).find("td").each(function (index, td) {
2415              data.push(td.textContent);
2416            });
2417            csv.push(data.join(","));
2418          });
2419          var csvFile = new Blob([csv.join("\n")], {
2420            type: "text/csv"
2421          });
2422          var downloadNode = document.createElement("a");
2423          var url = URL.createObjectURL(csvFile);
2424          var date = new Date();
2425          var options = {
2426            day: "2-digit",
2427            month: "short",
2428            year: "numeric",
2429            hour: "numeric",
2430            minute: "numeric",
2431            second: "numeric"
2432          };
2433          var formatedDate = date.toLocaleDateString("en-BD", options);
2434          var dateString = JSON.stringify(formatedDate.replace(/[ , :]/g, "-"));
2435          downloadNode.download = "advanced-data-table-" + dateString + "~" + dataTable.data("widget-id") + ".csv";
2436          downloadNode.setAttribute("href", url);
2437          downloadNode.classList.add("skt-advanced-data-table-export");
2438          downloadNode.style.visibility = "hidden";
2439          document.body.appendChild(downloadNode);
2440          downloadNode.click();
2441        });
2442      }
2443    }; // ModalPopup
2444
2445
2446    var ModalPopup = function ModalPopup($scope) {
2447      var boxWrapper = $scope.find(".skt-modal-popup-box-wrapper");
2448      var triggerType = boxWrapper.data("trigger-type");
2449      var trigger = $scope.find(".skt-modal-popup-trigger");
2450      var overlayClose = $scope.find(".skt-modal-popup-overlay");
2451      var iconClose = $scope.find(".skt-modal-popup-content-close");
2452      var modal = $scope.find(".skt-modal-popup-content-wrapper");
2453      var modalAnimation = modal.data("animation");
2454      var modalDelay = modal.data("display-delay"); // var videoSrc;
2455
2456      if ("pageload" == triggerType) {
2457        if (!modal.hasClass("skt-modal-show")) {
2458          setTimeout(function () {
2459            modal.addClass("skt-modal-show");
2460            modal.find(".skt-modal-animation").addClass(modalAnimation);
2461          }, parseInt(modalDelay));
2462        }
2463      } else {
2464        trigger.on("click", function (e) {
2465          e.preventDefault();
2466          var wrapper = $(this).closest(".skt-modal-popup-box-wrapper"),
2467              modal = wrapper.find(".skt-modal-popup-content-wrapper"),
2468              modalAnimation = modal.data("animation"),
2469              modalContent = modal.find(".skt-modal-animation");
2470
2471          if (!modal.hasClass("skt-modal-show")) {
2472            modal.addClass("skt-modal-show");
2473            modalContent.addClass(modalAnimation);
2474          }
2475        });
2476      }
2477
2478      overlayClose.on("click", close_modal);
2479      iconClose.on("click", close_modal);
2480
2481      function close_modal(el) {
2482        var wrap = $(this).closest(".skt-modal-popup-content-wrapper"),
2483            modalAnimation = wrap.data("animation");
2484
2485        if (wrap != null && wrap.hasClass("skt-modal-show")) {
2486          var doSetTimeout = function doSetTimeout(target, source) {
2487            setTimeout(function () {
2488              target.attr("src", source);
2489            }, 500);
2490          };
2491
2492          var nVideo = wrap.find("iframe, video");
2493          $.each(nVideo, function (idx, val) {
2494            var videoSrc = $(this).attr("src");
2495            $(this).attr("src", "#");
2496            doSetTimeout($(this), videoSrc);
2497          });
2498          wrap.removeClass("skt-modal-show");
2499          wrap.find("." + modalAnimation).removeClass(modalAnimation);
2500        }
2501      }
2502    }; //Mini Cart
2503
2504
2505    var miniCart = function miniCart($scope) {
2506      $scope.find(".skt-mini-cart-inner").on("click mouseenter mouseleave", function (e) {
2507        var cart_btn = $(this),
2508            on_click = cart_btn.hasClass("skt-mini-cart-on-click"),
2509            on_hover = cart_btn.hasClass("skt-mini-cart-on-hover"),
2510            popup = cart_btn.find(".skt-mini-cart-popup");
2511
2512        if (popup.length == 0) {
2513          return;
2514        }
2515
2516        if ("click" === e.type && on_click) {
2517          popup.fadeToggle();
2518        }
2519
2520        if ("mouseenter" === e.type && on_hover) {
2521          popup.fadeIn();
2522        }
2523
2524        if ("mouseleave" === e.type && on_hover) {
2525          popup.fadeOut();
2526        }
2527      });
2528
2529      if ($scope.find(".skt-mini-cart-popup").length > 0 && $scope.find(".skt-mini-cart-on-click").length > 0) {
2530        $("body").on("click", function (e) {
2531          if ($(e.target).hasClass("skt-mini-cart-popup") || $(e.target).parents().hasClass("skt-mini-cart-popup") || $(e.target).hasClass("skt-mini-cart-button") || $(e.target).parents().hasClass("skt-mini-cart-button")) {
2532            return;
2533          } else {
2534            $scope.find(".skt-mini-cart-popup").removeAttr("style");
2535          }
2536        });
2537      }
2538    }; //Image Scroller
2539
2540
2541    var ImageScroller = elementorModules.frontend.handlers.Base.extend({
2542      onInit: function onInit() {
2543        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
2544        this.wrapper = this.$element.find(".skt-image-scroller-wrapper");
2545        this.run();
2546      },
2547      onElementChange: function onElementChange() {
2548        this.run();
2549      },
2550      run: function run() {
2551        // var widgetID = $scope.data('id');
2552        // var wrapper = $scope.find('.skt-image-scroller-wrapper');
2553        var triggerType = this.wrapper.data("trigger-type");
2554
2555        if ("hover" !== triggerType) {
2556          return;
2557        }
2558
2559        var figure = this.wrapper.find(".skt-image-scroller-container");
2560        var scrollType = this.wrapper.data("scroll-type");
2561        var scrollDirection = this.wrapper.data("scroll-direction");
2562        var imageScroll = figure.find("img");
2563        var transformY = imageScroll.height() - figure.height();
2564        var transformX = imageScroll.width() - figure.width(); // console.log(scrollType,transformY,transformX);
2565
2566        if (scrollType === "vertical" && transformY > 0) {
2567          if ("top" === scrollDirection) {
2568            mouseEvent("translateY", transformY);
2569          } else {
2570            imageScroll.css("transform", "translateY" + "( -" + transformY + "px)");
2571            mouseEventRevers("translateY", transformY);
2572          }
2573        }
2574
2575        if (scrollType === "horizontal" && transformX > 0) {
2576          if ("left" === scrollDirection) {
2577            mouseEvent("translateX", transformX);
2578          } else {
2579            imageScroll.css("transform", "translateX" + "( -" + transformX + "px)");
2580            mouseEventRevers("translateX", transformX);
2581          }
2582        }
2583
2584        function mouseEvent(cssProperty, value) {
2585          figure.on("mouseenter", function () {
2586            imageScroll.css("transform", cssProperty + "( -" + value + "px)");
2587          });
2588          figure.on("mouseleave", function () {
2589            imageScroll.css("transform", cssProperty + "( 0px)");
2590          });
2591        }
2592
2593        function mouseEventRevers(cssProperty, value) {
2594          figure.on("mouseenter", function () {
2595            imageScroll.css("transform", cssProperty + "( 0px)");
2596          });
2597          figure.on("mouseleave", function () {
2598            imageScroll.css("transform", cssProperty + "( -" + value + "px)");
2599          });
2600        }
2601      }
2602    }); // Mega Menu
2603
2604    var NavMenu = function _init($scope) {
2605      if ($scope.find(".skt-menu-container").length > 0) {
2606        var additionalDigits = $scope.find(".skt-wid-con").data("responsive-breakpoint");
2607        var sidebar_mousemove = $scope.find(".skt-megamenu-has");
2608        var tabPadding = $scope.find(".skt-menu-container").outerHeight();
2609        $(window).on("resize", function () {
2610          $scope.find(".skt-megamenu-panel").css({
2611            top: tabPadding
2612          });
2613        }).trigger("resize");
2614        sidebar_mousemove.on("mouseenter", function () {
2615          var q = $(this).data("vertical-menu");
2616          var jqel = $(this).children(".skt-megamenu-panel"); // console.log(q);
2617
2618          if ($(this).hasClass("skt-dropdown-menu-full_width") && $(this).hasClass("top_position")) {
2619            /** @type {number} */
2620            var ffleft = Math.floor($(this).position().left - $(this).offset().left);
2621            var $sharepreview = $(this);
2622            $sharepreview.find(".skt-megamenu-panel").css("max-width", $(window).width());
2623            $(window).on("resize", function () {
2624              $sharepreview.find(".skt-megamenu-panel").css({
2625                left: ffleft + "px"
2626              });
2627            }).trigger("resize");
2628          }
2629
2630          if (!$(this).hasClass("skt-dropdown-menu-full_width") && $(this).hasClass("top_position")) {
2631            $(this).on({
2632              mouseenter: function setup() {
2633                if (0 === $(".default_menu_position").length) {
2634                  $(this).parents(".elementor-section-wrap").addClass("default_menu_position");
2635                }
2636              },
2637              mouseleave: function setup() {
2638                if (0 !== $(".default_menu_position").length) {
2639                  $(this).parents(".elementor-section-wrap").removeClass("default_menu_position");
2640                }
2641              }
2642            });
2643          }
2644
2645          if (q && q !== undefined) {
2646            // console.log("trigger 1");
2647            if ("string" == typeof q) {
2648              // console.log("trigger 2");
2649              if (/^[0-9]/.test(q)) {
2650                $(window).on("resize", function () {
2651                  // console.log("trigger 2-1");
2652                  jqel.css({
2653                    width: q
2654                  });
2655
2656                  if (!($(document).width() > Number(additionalDigits))) {
2657                    // console.log("trigger 2-2");
2658                    jqel.removeAttr("style");
2659                  }
2660                }).trigger("resize");
2661              } else {
2662                // console.log("trigger 3");
2663                $(window).on("resize", function () {
2664                  // console.log("trigger 3-1");
2665                  jqel.css({
2666                    width: q + "px"
2667                  });
2668
2669                  if (!($(document).width() > Number(additionalDigits))) {
2670                    // console.log("trigger 3-2");
2671                    jqel.removeAttr("style");
2672                  }
2673                }).trigger("resize");
2674              }
2675            } else {
2676              // console.log("trigger 4");
2677              jqel.css({
2678                width: q + "px"
2679              });
2680            }
2681          } else {
2682            // console.log("trigger 5");
2683            $(window).on("resize", function () {
2684              // console.log("trigger 5-1");
2685              jqel.css({
2686                width: q + "px"
2687              });
2688
2689              if (!($(document).width() > Number(additionalDigits))) {
2690                // console.log("trigger 5-2");
2691                jqel.removeAttr("style");
2692              }
2693            }).trigger("resize");
2694          }
2695        });
2696        sidebar_mousemove.trigger("mouseenter");
2697      }
2698    };
2699
2700    elementorFrontend.hooks.addAction("frontend/element_ready/skt-countdown.default", CountDown);
2701    elementorFrontend.hooks.addAction("frontend/element_ready/skt-team-carousel.default", function ($scope) {
2702      elementorFrontend.elementsHandler.addHandler(CarouselBase, {
2703        $element: $scope,
2704        selectors: {
2705          container: ".skt-team-carousel-wrap"
2706        },
2707        prevArrow: '<button type="button" class="slick-prev"><i class="skti skti-arrow-left"></i></button>',
2708        nextArrow: '<button type="button" class="slick-next"><i class="skti skti-arrow-right"></i></button>'
2709      });
2710    });
2711    elementorFrontend.hooks.addAction("frontend/element_ready/skt-source-code.default", SourceCode);
2712    elementorFrontend.hooks.addAction("frontend/element_ready/skt-animated-text.default", AnimatedText);
2713    elementorFrontend.hooks.addAction("frontend/element_ready/skt-logo-carousel.default", function ($scope) {
2714      elementorFrontend.elementsHandler.addHandler(CarouselBase, {
2715        $element: $scope,
2716        selectors: {
2717          container: ".skt-logo-carousel-wrap"
2718        }
2719      });
2720    });
2721    elementorFrontend.hooks.addAction("frontend/element_ready/skt-testimonial-carousel.default", function ($scope) {
2722      elementorFrontend.elementsHandler.addHandler(CarouselBase, {
2723        $element: $scope,
2724        selectors: {
2725          container: ".skt-testimonial-carousel__wrap"
2726        }
2727      });
2728    });
2729    elementorFrontend.hooks.addAction("frontend/element_ready/skt-advanced-tabs.default", function ($scope) {
2730      elementorFrontend.elementsHandler.addHandler(TabHandlerBase, {
2731        $element: $scope
2732      });
2733    });
2734    elementorFrontend.hooks.addAction("frontend/element_ready/skt-scrolling-image.default", function ($scope) {
2735      elementorFrontend.elementsHandler.addHandler(ScrollingImage, {
2736        $element: $scope
2737      });
2738    });
2739    elementorFrontend.hooks.addAction("frontend/element_ready/skt-pricing-table.default", PricingTableToolTip);
2740    elementorFrontend.hooks.addAction("frontend/element_ready/skt-accordion.default", function ($scope) {
2741      elementorFrontend.elementsHandler.addHandler(TabHandlerBase, {
2742        $element: $scope,
2743        selectors: {
2744          tabTitle: ".skt-accordion__item-title",
2745          tabContent: ".skt-accordion__item-content"
2746        },
2747        classes: {
2748          active: "skt-accordion__item--active"
2749        },
2750        showTabFn: "slideDown",
2751        hideTabFn: "slideUp"
2752      });
2753    });
2754    elementorFrontend.hooks.addAction("frontend/element_ready/skt-toggle.default", function ($scope) {
2755      elementorFrontend.elementsHandler.addHandler(TabHandlerBase, {
2756        $element: $scope,
2757        selectors: {
2758          tabTitle: ".skt-toggle__item-title",
2759          tabContent: ".skt-toggle__item-content"
2760        },
2761        classes: {
2762          active: "skt-toggle__item--active"
2763        },
2764        hidePrevious: false,
2765        autoExpand: "editor",
2766        showTabFn: "slideDown",
2767        hideTabFn: "slideUp"
2768      });
2769    });
2770    elementorFrontend.hooks.addAction("frontend/element_ready/skt-timeline.default", TimeLine);
2771    elementorFrontend.hooks.addAction("frontend/element_ready/skt-hotspots.default", function ($scope) {
2772      elementorFrontend.elementsHandler.addHandler(HotSpots, {
2773        $element: $scope
2774      });
2775    });
2776    elementorFrontend.hooks.addAction("frontend/element_ready/skt-line-chart.default", LineChart);
2777    elementorFrontend.hooks.addAction("frontend/element_ready/skt-pie-chart.default", PieChart);
2778    elementorFrontend.hooks.addAction("frontend/element_ready/skt-polar-chart.default", PolarChart);
2779    elementorFrontend.hooks.addAction("frontend/element_ready/skt-radar-chart.default", RadarChart);
2780    elementorFrontend.hooks.addAction("frontend/element_ready/skt-smart-post-list.default", SmartPostList);
2781    elementorFrontend.hooks.addAction("frontend/element_ready/skt-advanced-data-table.default", DataTable);
2782
2783    elementorFrontend.hooks.addAction("frontend/element_ready/skt-post-carousel.default", function ($scope) {
2784      elementorFrontend.elementsHandler.addHandler(CarouselBase, {
2785        $element: $scope,
2786        selectors: {
2787          container: ".skt-posts-carousel-wrapper"
2788        },
2789        prevArrow: '<button type="button" class="slick-prev"><i class="skti skti-arrow-left"></i></button>',
2790        nextArrow: '<button type="button" class="slick-next"><i class="skti skti-arrow-right"></i></button>'
2791      });
2792    });
2793
2794	// EDD Download product carousel
2795
2796    function initEddCarousel($scope) {
2797      elementorFrontend.elementsHandler.addHandler(CarouselBase, {
2798        $element: $scope,
2799        selectors: {
2800          container: ".skt-edd-product-carousel-wrapper"
2801        },
2802        prevArrow: '<button type="button" class="slick-prev"><i class="skti skti-arrow-left"></i></button>',
2803        nextArrow: '<button type="button" class="slick-next"><i class="skti skti-arrow-right"></i></button>'
2804      });
2805    }
2806
2807    function eddCarouselHandlerCallback($scope) {
2808      initEddCarousel($scope);
2809      initProductQuickView($scope); // if (
2810      // 	$scope
2811      // 		.find(".skt-edd-product-carousel-wrapper")
2812      // 		.hasClass("skt-layout-classic")
2813      // ) {
2814      // 	$scope
2815      // 		.find(".skt-product-carousel-add-to-cart a")
2816      // 		.html('<i class="fas fa-shopping-cart"></i>');
2817      // }
2818    } //  Carousel
2819
2820
2821    elementorFrontend.hooks.addAction("frontend/element_ready/skt-edd-product-carousel.default", eddCarouselHandlerCallback);
2822
2823    function initProductCarousel($scope) {
2824      elementorFrontend.elementsHandler.addHandler(CarouselBase, {
2825        $element: $scope,
2826        selectors: {
2827          container: ".skt-product-carousel-wrapper"
2828        },
2829        prevArrow: '<button type="button" class="slick-prev"><i class="skti skti-arrow-left"></i></button>',
2830        nextArrow: '<button type="button" class="slick-next"><i class="skti skti-arrow-right"></i></button>'
2831      });
2832    }
2833
2834    function productCarouselHandlerCallback($scope) {
2835      initProductCarousel($scope);
2836      initProductQuickView($scope);
2837
2838      if ($scope.find(".skt-product-carousel-wrapper").hasClass("skt-layout-modern")) {
2839        $scope.find(".skt-product-carousel-add-to-cart a").html('<i class="fas fa-shopping-cart"></i>');
2840      }
2841    }
2842
2843    elementorFrontend.hooks.addAction("frontend/element_ready/skt-product-carousel.classic", productCarouselHandlerCallback);
2844    elementorFrontend.hooks.addAction("frontend/element_ready/skt-product-carousel.modern", productCarouselHandlerCallback);
2845    elementorFrontend.hooks.addAction("frontend/element_ready/skt-product-carousel-new.default", productCarouselHandlerCallback); // product category carousel
2846
2847    var productCategoryCarouselSkins = ["classic", "minimal"];
2848
2849    function initProductCategoryCarousel($scope) {
2850      elementorFrontend.elementsHandler.addHandler(CarouselBase, {
2851        $element: $scope,
2852        selectors: {
2853          container: ".skt-product-cat-carousel"
2854        },
2855        prevArrow: '<button type="button" class="slick-prev"><i class="skti skti-arrow-left"></i></button>',
2856        nextArrow: '<button type="button" class="slick-next"><i class="skti skti-arrow-right"></i></button>'
2857      });
2858    }
2859
2860    productCategoryCarouselSkins.forEach(function (index) {
2861      elementorFrontend.hooks.addAction("frontend/element_ready/skt-product-category-carousel." + index, initProductCategoryCarousel);
2862    });
2863    elementorFrontend.hooks.addAction("frontend/element_ready/skt-product-category-carousel-new.default", initProductCategoryCarousel);
2864	
2865	elementorFrontend.hooks.addAction("frontend/element_ready/skt-edd-category-carousel.default", initProductCategoryCarousel);
2866	
2867    postGridSkins.forEach(function (index) {
2868      elementorFrontend.hooks.addAction("frontend/element_ready/skt-post-grid." + index, PostGrid);
2869    });
2870    elementorFrontend.hooks.addAction("frontend/element_ready/skt-post-grid-new.default", PostGrid);
2871    elementorFrontend.hooks.addAction("frontend/element_ready/skt-sticky-video.default", StickyVideo);
2872    elementorFrontend.hooks.addAction("frontend/element_ready/skt-modal-popup.default", ModalPopup);
2873
2874    function initProductQuickView($scope) {
2875      var $button = $scope.find(".skt-pqv-btn");
2876
2877      if (!$.fn["magnificPopup"]) {
2878        return;
2879      }
2880
2881      $button.magnificPopup({
2882        type: "ajax",
2883        ajax: {
2884          settings: {
2885            cache: true,
2886            dataType: "html"
2887          },
2888          cursor: "mfp-ajax-cur",
2889          tError: "The product could not be loaded."
2890        },
2891        callbacks: {
2892          ajaxContentAdded: function ajaxContentAdded() {
2893            $(this.content).addClass(this.currItem.el.data("modal-class"));
2894          }
2895        }
2896      });
2897    }
2898
2899    var initOnePageNav = elementorModules.frontend.handlers.Base.extend({
2900      onInit: function onInit() {
2901        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
2902        this.run();
2903      },
2904      onElementChange: function onElementChange(e) {
2905        if (e == "scroll_wheel" || e == "touch_swipe" || e == "scroll_keys") {
2906          this.run();
2907        }
2908      },
2909      getReadySettings: function getReadySettings() {
2910        var settings = {
2911          design: this.getElementSettings("select_design"),
2912          speed: this.getElementSettings("scrolling_speed") || 700,
2913          offset: this.getElementSettings("row_to_offset") || 0,
2914          scrollWheel: this.getElementSettings("scroll_wheel") == "yes",
2915          touchSwipe: this.getElementSettings("touch_swipe") == "yes",
2916          scrollKeys: this.getElementSettings("scroll_keys") == "yes"
2917        };
2918        return $.extend({}
2918, this.getSettings(), settings);
2919      },
2920      scroll: function scroll(id, speed, offset) {
2921        $("html, body").animate({
2922          scrollTop: $("#" + id).offset().top - offset
2923        }, speed);
2924      },
2925      run: function run() {
2926        var $this = this;
2927        var settings = this.getReadySettings();
2928        var $navWrapper = settings.design == "skt-opn-design-default" ? this.$element.find(".skt-opn-dotted-item") : this.$element.find(".skt_addons_elementor_opn__item");
2929        $navWrapper.on("click", function (e) {
2930          e.preventDefault();
2931          var targetId = $(this).find("a").data("section-id");
2932
2933          if ($("#" + targetId).length > 0) {
2934            $this.scroll(targetId, settings.speed, settings.offset);
2935            $navWrapper.removeClass("skt_addons_elementor_opn__item--current");
2936            $(this).addClass("skt_addons_elementor_opn__item--current");
2937          }
2938        });
2939        var sections = [];
2940        var navItems = {};
2941
2942        if ($navWrapper.length > 0) {
2943          $.each($navWrapper, function (index, nav) {
2944            var targetId = $(this).find("a").data("section-id");
2945            var targetSection = $("#" + targetId);
2946            sections.push(targetSection[0]);
2947            navItems[targetId] = $(this)[0];
2948          });
2949        }
2950
2951        var observerOptions = {
2952          root: null,
2953          rootMargin: "0px",
2954          threshold: 0.2
2955        };
2956        var currentEvent;
2957        var observer = new IntersectionObserver(function (entries) {
2958          entries.forEach(function (entry) {
2959            if (entry.isIntersecting) {
2960              var navItem = navItems[entry.target.id];
2961              navItem.classList.add("skt_addons_elementor_opn__item--current");
2962              Object.values(navItems).forEach(function (item) {
2963                if (item != navItem) {
2964                  item.classList.remove("skt_addons_elementor_opn__item--current");
2965                }
2966              });
2967
2968              if (typeof elementor === "undefined") {
2969                if (settings.scrollWheel && currentEvent == "scroll") {
2970                  $this.scroll(entry.target.id, settings.speed, settings.offset);
2971                }
2972
2973                if (settings.scrollKeys && currentEvent == "keys") {
2974                  $this.scroll(entry.target.id, settings.speed, settings.offset);
2975                }
2976
2977                if (settings.touchSwipe && currentEvent == "touch") {
2978                  $this.scroll(entry.target.id, settings.speed, settings.offset);
2979                }
2980              }
2981            }
2982          });
2983        }, observerOptions);
2984        $("body").on("mousewheel DOMMouseScroll", debounce(function (e) {
2985          if (sections.length > 0) {
2986            sections.forEach(function (sec) {
2987              if (!(sec == undefined)) {
2988                currentEvent = "scroll";
2989                observer.observe(sec);
2990              }
2991            });
2992          }
2993        }, 200));
2994
2995        if (typeof elementor === "undefined") {
2996          if (settings.scrollKeys) {
2997            $("body").on("keydown", debounce(function (evt) {
2998              var code = parseInt(evt.keyCode); // code == 38 for arrow up key
2999              // code == 40 for arrow up key
3000
3001              if (sections.length > 0) {
3002                sections.forEach(function (sec) {
3003                  if (!(sec == undefined)) {
3004                    currentEvent = "keys";
3005                    observer.observe(sec);
3006                  }
3007                });
3008              }
3009            }, 200));
3010          }
3011
3012          if (settings.touchSwipe) {
3013            $("body").on("touchmove", debounce(function (evt) {
3014              if (sections.length > 0) {
3015                sections.forEach(function (sec) {
3016                  if (!(sec == undefined)) {
3017                    currentEvent = "touch";
3018                    observer.observe(sec);
3019                  }
3020                });
3021              }
3022            }, 200));
3023          }
3024        }
3025      }
3026    }); // elementorFrontend.hooks.addAction('frontend/element_ready/skt-product-grid.classic', initProductQuickView);
3027    // elementorFrontend.hooks.addAction('frontend/element_ready/skt-product-grid.hover', initProductQuickView);
3028
3029    elementorFrontend.hooks.addAction("frontend/element_ready/skt-one-page-nav.default", function ($scope) {
3030      elementorFrontend.elementsHandler.addHandler(initOnePageNav, {
3031        $element: $scope
3032      });
3033    }); // advancedSliderHandler
3034
3035    elementorFrontend.hooks.addAction("frontend/element_ready/skt-advanced-slider.default", function ($scope) {
3036      elementorFrontend.elementsHandler.addHandler(SliderBase, {
3037        $element: $scope,
3038        selectors: {
3039          container: ".skt-slider-widget-wrapper"
3040        }
3041      });
3042    });
3043    elementorFrontend.hooks.addAction("frontend/element_ready/skt-product-grid.classic", initProductQuickView);
3044    elementorFrontend.hooks.addAction("frontend/element_ready/skt-product-grid.hover", initProductQuickView);
3045    elementorFrontend.hooks.addAction("frontend/element_ready/skt-product-grid-new.default", initProductQuickView);
3046    elementorFrontend.hooks.addAction("frontend/element_ready/skt-single-product.classic", initProductQuickView);
3047    elementorFrontend.hooks.addAction("frontend/element_ready/skt-single-product.standard", initProductQuickView);
3048    elementorFrontend.hooks.addAction("frontend/element_ready/skt-single-product.landscape", initProductQuickView);
3049    elementorFrontend.hooks.addAction("frontend/element_ready/skt-single-product-new.default", initProductQuickView);
3050	elementorFrontend.hooks.addAction("frontend/element_ready/skt-edd-single-product.default", initProductQuickView);
3051    elementorFrontend.hooks.addAction("frontend/element_ready/skt-edd-product-grid.default", initProductQuickView);
3052    $(document.body).on("added_to_cart", function (event, fragment, hash, $addToCart) {
3053      $addToCart.parent(".skt-product-grid__btns").removeClass("skt-is--adding").addClass("skt-is--added");
3054    });
3055    elementorFrontend.hooks.addAction("frontend/element_ready/skt-mini-cart.default", miniCart);
3056    elementorFrontend.hooks.addAction("frontend/element_ready/skt-mini-cart.default", miniCart);
3057    elementorFrontend.hooks.addAction("frontend/element_ready/skt-image-scroller.default", function ($scope) {
3058      elementorFrontend.elementsHandler.addHandler(ImageScroller, {
3059        $element: $scope
3060      });
3061    });
3062    elementorFrontend.hooks.addAction("frontend/element_ready/skt-nav-menu.default", NavMenu); // Off Canvas
3063
3064    var $trigger;
3065
3066    var OffCanvas = function OffCanvas($scope) {
3067      this.node = $scope;
3068      this.wrap = $scope.find(".skt-offcanvas-content-wrap");
3069      this.cart_wrap = $scope.find(".skt-offcanvas-cart-container");
3070      this.content = $scope.find(".skt-offcanvas-content");
3071      this.button = $scope.find(".skt-offcanvas-toggle");
3072      this.settings = this.wrap.data("settings");
3073      this.toggle_source = this.settings.toggle_source;
3074      this.id = this.settings.content_id;
3075      this.toggle_id = this.settings.toggle_id;
3076      this.toggle_class = this.settings.toggle_class;
3077      this.transition = this.settings.transition;
3078      this.esc_close = this.settings.esc_close;
3079      this.body_click_close = this.settings.body_click_close;
3080      this.links_click_close = this.settings.links_click_close;
3081      this.direction = this.settings.direction;
3082      this.buttons_position = this.settings.buttons_position;
3083      this.duration = 500;
3084      this.destroy();
3085      this.init();
3086    };
3087
3088    OffCanvas.prototype = {
3089      id: "",
3090      node: "",
3091      wrap: "",
3092      content: "",
3093      button: "",
3094      settings: {},
3095      transition: "",
3096      duration: 400,
3097      initialized: false,
3098      animations: ["slide", "slide-along", "reveal", "push"],
3099      init: function init() {
3100        if (!this.wrap.length) {
3101          return;
3102        }
3103
3104        $("html").addClass("skt-offcanvas-content-widget");
3105
3106        if ($(".skt-offcanvas-container").length === 0) {
3107          var faProJs = $("#font-awesome-pro-js").length > 0 ? $("#font-awesome-pro-js").attr("src") : false;
3108
3109          if (faProJs) {
3110            $("#font-awesome-pro-js").remove();
3111          }
3112
3113          $("body").wrapInner('<div class="skt-offcanvas-container" />');
3114          this.content.insertBefore(".skt-offcanvas-container");
3115
3116          if (faProJs) {
3117            $("body").append('<script type="text/javascript" id="font-awesome-pro-js" src="' + faProJs + '"></script>');
3118          }
3119        }
3120
3121        if (this.wrap.find(".skt-offcanvas-content").length > 0) {
3122          if ($(".skt-offcanvas-container > .skt-offcanvas-content-" + this.id).length > 0) {
3123            $(".skt-offcanvas-container > .skt-offcanvas-content-" + this.id).remove();
3124          }
3125
3126          if ($("body > .skt-offcanvas-content-" + this.id).length > 0) {
3127            $("body > .skt-offcanvas-content-" + this.id).remove();
3128          }
3129
3130          $("body").prepend(this.wrap.find(".skt-offcanvas-content"));
3131        }
3132
3133        this.bindEvents();
3134      },
3135      destroy: function destroy() {
3136        this.close();
3137        this.animations.forEach(function (animation) {
3138          if ($("html").hasClass("skt-offcanvas-content-" + animation)) {
3139            $("html").removeClass("skt-offcanvas-content-" + animation);
3140          }
3141        });
3142
3143        if ($("body > .skt-offcanvas-content-" + this.id).length > 0) {//$('body > .skt-offcanvas-content-' + this.id ).remove();
3144        }
3145      },
3146      setTrigger: function setTrigger() {
3147        var $trigger = false;
3148
3149        if (this.toggle_source == "element-id" && this.toggle_id != "") {
3150          $trigger = $("#" + this.toggle_id);
3151        } else if (this.toggle_source == "element-class" && this.toggle_class != "") {
3152          $trigger = $("." + this.toggle_class);
3153        } else {
3154          $trigger = this.node.find(".skt-offcanvas-toggle");
3155        }
3156
3157        return $trigger;
3158      },
3159      bindEvents: function bindEvents() {
3160        $trigger = this.setTrigger();
3161
3162        if ($trigger) {
3163          $trigger.on("click", $.proxy(this.toggleContent, this));
3164        }
3165
3166        $("body").delegate(".skt-offcanvas-content .skt-offcanvas-close", "click", $.proxy(this.close, this));
3167
3168        if (this.links_click_close === "yes") {
3169          $("body").delegate(".skt-offcanvas-content .skt-offcanvas-body a", "click", $.proxy(this.close, this));
3170        }
3171
3172        if (this.esc_close === "yes") {
3173          this.closeESC();
3174        }
3175
3176        if (this.body_click_close === "yes") {
3177          this.closeClick();
3178        }
3179
3180        $(window).resize($.proxy(this._resize, this));
3181      },
3182      toggleContent: function toggleContent(e) {
3183        e.preventDefault();
3184
3185        if (!$("html").hasClass("skt-offcanvas-content-open")) {
3186          this.show();
3187        } else {
3188          this.close();
3189        }
3190
3191        this._resize();
3192      },
3193      show: function show() {
3194        $(".skt-offcanvas-content-" + this.id).addClass("skt-offcanvas-content-visible"); // init animation class.
3195
3196        $("html").addClass("skt-offcanvas-content-" + this.transition);
3197        $("html").addClass("skt-offcanvas-content-" + this.direction);
3198        $("html").addClass("skt-offcanvas-content-open");
3199        $("html").addClass("skt-offcanvas-content-" + this.id + "-open");
3200        $("html").addClass("skt-offcanvas-content-reset");
3201        this.button.addClass("skt-is-active");
3202
3203        this._resize();
3204      },
3205      close: function close() {
3206        $("html").removeClass("skt-offcanvas-content-open");
3207        $("html").removeClass("skt-offcanvas-content-" + this.id + "-open");
3208        setTimeout($.proxy(function () {
3209          $("html").removeClass("skt-offcanvas-content-reset");
3210          $("html").removeClass("skt-offcanvas-content-" + this.transition);
3211          $("html").removeClass("skt-offcanvas-content-" + this.direction);
3212          $(".skt-offcanvas-content-" + this.id).removeClass("skt-offcanvas-content-visible");
3213        }, this), 500);
3214        this.button.removeClass("skt-is-active");
3215      },
3216      closeESC: function closeESC() {
3217        var self = this;
3218
3219        if ("" === self.settings.esc_close) {
3220          return;
3221        } // menu close on ESC key
3222
3223
3224        $(document).on("keydown", function (e) {
3225          if (e.keyCode === 27) {
3226            // ESC
3227            self.close();
3228          }
3229        });
3230      },
3231      closeClick: function closeClick() {
3232        var self = this;
3233
3234        if (this.toggle_source == "element-id" && this.toggle_id != "") {
3235          $trigger = "#" + this.toggle_id;
3236        } else if (this.toggle_source == "element-class" && this.toggle_class != "") {
3237          $trigger = "." + this.toggle_class;
3238        } else {
3239          $trigger = ".skt-offcanvas-toggle";
3240        }
3241
3242        $(document).on("click", function (e) {
3243          if ($(e.target).is(".skt-offcanvas-content") || $(e.target).parents(".skt-offcanvas-content").length > 0 || $(e.target).is(".skt-offcanvas-toggle") || $(e.target).parents(".skt-offcanvas-toggle").length > 0 || $(e.target).is($trigger) || $(e.target).parents($trigger).length > 0 || !$(e.target).is(".skt-offcanvas-container")) {
3244            return;
3245          } else {
3246            self.close();
3247          }
3248        });
3249      },
3250      _resize: function _resize() {
3251        if (!this.cart_wrap.length) {
3252          return;
3253        }
3254
3255        var off_canvas = $(".skt-offcanvas-content-" + this.id);
3256
3257        if (off_canvas && off_canvas.length > 0) {
3258          if (this.buttons_position === "bottom") {
3259            var winHeight = window.innerHeight;
3260            var offset = 0;
3261
3262            if ($("body").hasClass("admin-bar")) {
3263              offset = 32;
3264            }
3265
3266            winHeight = winHeight - offset;
3267            off_canvas.find(".skt-offcanvas-inner").css({
3268              height: winHeight + "px",
3269              top: offset
3270            });
3271            headerHeight = off_canvas.find(".skt-offcanvas-cart-header").outerHeight(true);
3272            wrapHeight = off_canvas.find(".skt-offcanvas-wrap").outerHeight();
3273            cartTotalHeight = off_canvas.find(".woocommerce-mini-cart__total").outerHeight();
3274            cartButtonsHeight = off_canvas.find(".woocommerce-mini-cart__buttons").outerHeight();
3275            cartMessageHeight = off_canvas.find(".skt-woo-menu-cart-message").outerHeight();
3276            itemsHeight = winHeight - (headerHeight + cartTotalHeight + cartButtonsHeight + cartMessageHeight);
3277            finalItemsHeight = itemsHeight - (winHeight - wrapHeight);
3278            finalItemsHeight += "px";
3279          } else {
3280            finalItemsHeight = "auto";
3281          }
3282
3283          var style = '<style id="skt-woo-style-' + this.id + '">';
3284          style += "#" + off_canvas.attr("id") + " .woocommerce-mini-cart.cart_list {";
3285          style += "height: " + finalItemsHeight;
3286          style += "}";
3287          style += "</style>";
3288
3289          if ($("#skt-woopack-style-" + this.id).length > 0) {
3290            $("#skt-woopack-style-" + this.id).remove();
3291          }
3292
3293          $("head").append(style);
3294        }
3295      }
3296    };
3297
3298    var initOffCanvas = function initOffCanvas($scope, $) {
3299      var content_wrap = $scope.find(".skt-offcanvas-content-wrap");
3300
3301      if ($(content_wrap).length > 0) {
3302        new OffCanvas($scope);
3303      }
3304    };
3305
3306    elementorFrontend.hooks.addAction("frontend/element_ready/skt-off-canvas.default", initOffCanvas);
3307    
3308	var Unfold = elementorModules.frontend.handlers.Base.extend({
3309      onInit: function onInit() {
3310        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
3311        this.run();
3312      },
3313      onElementChange: function onElementChange(e) {
3314        if (e == "unfold_text" || e == "unfold_icon" || e == "fold_text" || e == "fold_icon" || e == "fold_height" || e == "transition_duration" || e == "trigger") {
3315          this.run();
3316
3317          if (e == "fold_height") {
3318            this.$element.find(".skt-unfold-data").css("height", this.getCollapseHeight() + "px");
3319          }
3320        }
3321      },
3322      getReadySettings: function getReadySettings() {
3323        var settings = {
3324          collapse_height: this.getElementSettings("fold_height") || 50,
3325          collapse_height_tablet: this.getElementSettings("fold_height_tablet") || this.getElementSettings("fold_height") || 50,
3326          collapse_height_mobile: this.getElementSettings("fold_height_mobile") || this.getElementSettings("fold_height_tablet") || this.getElementSettings("fold_height") || 50,
3327          trigger: this.getElementSettings("trigger"),
3328          transition_duration: this.getElementSettings("transition_duration") || 500,
3329          collapse_text: this.getElementSettings("unfold_text"),
3330          collapse_icon: this.getElementSettings("unfold_icon"),
3331          expand_text: this.getElementSettings("fold_text"),
3332          expand_icon: this.getElementSettings("fold_icon")
3333        };
3334        return $.extend({}, settings);
3335      },
3336      getCollapseHeight: function getCollapseHeight() {
3337        var body = this.$element.parents("body");
3338        var unfoldSettings = this.getReadySettings();
3339        var collapse_height = 50;
3340
3341        if (body.attr("data-elementor-device-mode") == "desktop") {
3342          collapse_height = unfoldSettings.collapse_height;
3343        }
3344
3345        if (body.attr("data-elementor-device-mode") == "tablet") {
3346          collapse_height = unfoldSettings.collapse_height_tablet;
3347        }
3348
3349        if (body.attr("data-elementor-device-mode") == "mobile") {
3350          collapse_height = unfoldSettings.collapse_height_mobile;
3351        }
3352
3353        return collapse_height;
3354      },
3355      fold: function fold(unfoldData, button, collapse_height, unfoldRender) {
3356        var unfoldSettings = this.getReadySettings();
3357        var html = unfoldSettings.collapse_icon ? unfoldSettings.collapse_icon.value ? '<i aria-hidden="true" class="' + unfoldSettings.collapse_icon.value + '"></i>' : "" : "";
3358        html += unfoldSettings.collapse_text ? "<span>" + unfoldSettings.collapse_text + "</span>" : "";
3359        unfoldData.css({
3360          "transition-duration": unfoldSettings.transition_duration + "ms",
3361          "height": unfoldRender.outerHeight(true) + 'px'
3362        });
3363        unfoldData.animate({
3364          height: collapse_height
3365        }, 0);
3366        var timeOut = setTimeout(function () {
3367          button.html(html);
3368          clearTimeout(timeOut);
3369        }, unfoldSettings.transition_duration);
3370        unfoldData.removeClass("folded");
3371      },
3372      unfold: function unfold(unfoldData, unfoldRender, button) {
3373        var unfoldSettings = this.getReadySettings();
3374        var html = unfoldSettings.expand_icon ? unfoldSettings.expand_icon.value ? '<i aria-hidden="true" class="' + unfoldSettings.expand_icon.value + '"></i>' : "" : "";
3375        html += unfoldSettings.expand_text ? "<span>" + unfoldSettings.expand_text + "</span>" : "";
3376        unfoldData.css("transition-duration", unfoldSettings.transition_duration + "ms");
3377        unfoldData.animate({
3378          height: unfoldRender.outerHeight(true)
3379        }, 0);
3380        var timeOut = setTimeout(function () {
3381          unfoldData.css("height", 'auto');
3382          button.html(html);
3383          clearTimeout(timeOut);
3384        }, unfoldSettings.transition_duration);
3385        unfoldData.addClass("folded");
3386      },
3387      run: function run() {
3388        var $this = this;
3389        var button = this.$element.find(".skt-unfold-btn"),
3390            unfoldData = this.$element.find(".skt-unfold-data"),
3391            unfoldRender = this.$element.find(".skt-unfold-data-render");
3392        var unfoldSettings = this.getReadySettings();
3393        var collapse_height = $this.getCollapseHeight();
3394        unfoldData.css("height", collapse_height + "px");
3395
3396        if (unfoldSettings.trigger == "click") {
3397          button.on("click", function () {
3398            collapse_height = $this.getCollapseHeight();
3399
3400            if (unfoldData.hasClass("folded")) {
3401              $this.fold(unfoldData, button, collapse_height, unfoldRender);
3402            } else {
3403              $this.unfold(unfoldData, unfoldRender, button);
3404            }
3405          });
3406        } else if (unfoldSettings.trigger == "hover") {
3407          unfoldData.on("mouseenter", function () {
3408            $this.unfold(unfoldData, unfoldRender, button);
3409          });
3410          unfoldData.on("mouseleave", function () {
3411            collapse_height = $this.getCollapseHeight();
3412            $this.fold(unfoldData, button, collapse_height, unfoldRender);
3413          });
3414        }
3415      }
3416    });
3417	
3418    var Maps = elementorModules.frontend.handlers.Base.extend({
3419      onInit: function onInit() {
3420        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
3421        this.runMap();
3422      },
3423      defaultStyle: function defaultStyle() {
3424        var defaultStyles = {
3425          standard: "",
3426          silver: [{
3427            elementType: "geometry",
3428            stylers: [{
3429              color: "#f5f5f5"
3430            }]
3431          }, {
3432            elementType: "labels.icon",
3433            stylers: [{
3434              visibility: "off"
3435            }]
3436          }, {
3437            elementType: "labels.text.fill",
3438            stylers: [{
3439              color: "#616161"
3440            }]
3441          }, {
3442            elementType: "labels.text.stroke",
3443            stylers: [{
3444              color: "#f5f5f5"
3445            }]
3446          }, {
3447            featureType: "administrative.land_parcel",
3448            elementType: "labels.text.fill",
3449            stylers: [{
3450              color: "#bdbdbd"
3451            }]
3452          }, {
3453            featureType: "poi",
3454            elementType: "geometry",
3455            stylers: [{
3456              color: "#eeeeee"
3457            }]
3458          }, {
3459            featureType: "poi",
3460            elementType: "labels.text.fill",
3461            stylers: [{
3462              color: "#757575"
3463            }]
3464          }, {
3465            featureType: "poi.park",
3466            elementType: "geometry",
3467            stylers: [{
3468              color: "#e5e5e5"
3469            }]
3470          }, {
3471            featureType: "poi.park",
3472            elementType: "labels.text.fill",
3473            stylers: [{
3474              color: "#9e9e9e"
3475            }]
3476          }, {
3477            featureType: "road",
3478            elementType: "geometry",
3479            stylers: [{
3480              color: "#ffffff"
3481            }]
3482          }, {
3483            featureType: "road.arterial",
3484            elementType: "labels.text.fill",
3485            stylers: [{
3486              color: "#757575"
3487            }]
3488          }, {
3489            featureType: "road.highway",
3490            elementType: "geometry",
3491            stylers: [{
3492              color: "#dadada"
3493            }]
3494          }, {
3495            featureType: "road.highway",
3496            elementType: "labels.text.fill",
3497            stylers: [{
3498              color: "#616161"
3499            }]
3500          }, {
3501            featureType: "road.local",
3502            elementType: "labels.text.fill",
3503            stylers: [{
3504              color: "#9e9e9e"
3505            }]
3506          }, {
3507            featureType: "transit.line",
3508            elementType: "geometry",
3509            stylers: [{
3510              color: "#e5e5e5"
3511            }]
3512          }, {
3513            featureType: "transit.station",
3514            elementType: "geometry",
3515            stylers: [{
3516              color: "#eeeeee"
3517            }]
3518          }, {
3519            featureType: "water",
3520            elementType: "geometry",
3521            stylers: [{
3522              color: "#c9c9c9"
3523            }]
3524          }, {
3525            featureType: "water",
3526            elementType: "labels.text.fill",
3527            stylers: [{
3528              color: "#9e9e9e"
3529            }]
3530          }],
3531          retro: [{
3532            elementType: "geometry",
3533            stylers: [{
3534              color: "#ebe3cd"
3535            }]
3536          }, {
3537            elementType: "labels.text.fill",
3538            stylers: [{
3539              color: "#523735"
3540            }]
3541          }, {
3542            elementType: "labels.text.stroke",
3543            stylers: [{
3544              color: "#f5f1e6"
3545            }]
3546          }, {
3547            featureType: "administrative",
3548            elementType: "geometry.stroke",
3549            stylers: [{
3550              color: "#c9b2a6"
3551            }]
3552          }, {
3553            featureType: "administrative.land_parcel",
3554            elementType: "geometry.stroke",
3555            stylers: [{
3556              color: "#dcd2be"
3557            }]
3558          }, {
3559            featureType: "administrative.land_parcel",
3560            elementType: "labels.text.fill",
3561            stylers: [{
3562              color: "#ae9e90"
3563            }]
3564          }, {
3565            featureType: "landscape.natural",
3566            elementType: "geometry",
3567            stylers: [{
3568              color: "#dfd2ae"
3569            }]
3570          }, {
3571            featureType: "poi",
3572            elementType: "geometry",
3573            stylers: [{
3574              color: "#dfd2ae"
3575            }]
3576          }, {
3577            featureType: "poi",
3578            elementType: "labels.text.fill",
3579            stylers: [{
3580              color: "#93817c"
3581            }]
3582          }, {
3583            featureType: "poi.park",
3584            elementType: "geometry.fill",
3585            stylers: [{
3586              color: "#a5b076"
3587            }]
3588          }, {
3589            featureType: "poi.park",
3590            elementType: "labels.text.fill",
3591            stylers: [{
3592              color: "#447530"
3593            }]
3594          }, {
3595            featureType: "road",
3596            elementType: "geometry",
3597            stylers: [{
3598              color: "#f5f1e6"
3599            }]
3600          }, {
3601            featureType: "road.arterial",
3602            elementType: "geometry",
3603            stylers: [{
3604              color: "#fdfcf8"
3605            }]
3606          }, {
3607            featureType: "road.highway",
3608            elementType: "geometry",
3609            stylers: [{
3610              color: "#f8c967"
3611            }]
3612          }, {
3613            featureType: "road.highway",
3614            elementType: "geometry.stroke",
3615            stylers: [{
3616              color: "#e9bc62"
3617            }]
3618          }, {
3619            featureType: "road.highway.controlled_access",
3620            elementType: "geometry",
3621            stylers: [{
3622              color: "#e98d58"
3623            }]
3624          }, {
3625            featureType: "road.highway.controlled_access",
3626            elementType: "geometry.stroke",
3627            stylers: [{
3628              color: "#db8555"
3629            }]
3630          }, {
3631            featureType: "road.local",
3632            elementType: "labels.text.fill",
3633            stylers: [{
3634              color: "#806b63"
3635            }]
3636          }, {
3637            featureType: "transit.line",
3638            elementType: "geometry",
3639            stylers: [{
3640              color: "#dfd2ae"
3641            }]
3642          }, {
3643            featureType: "transit.line",
3644            elementType: "labels.text.fill",
3645            stylers: [{
3646              color: "#8f7d77"
3647            }]
3648          }, {
3649            featureType: "transit.line",
3650            elementType: "labels.text.stroke",
3651            stylers: [{
3652              color: "#ebe3cd"
3653            }]
3654          }, {
3655            featureType: "transit.station",
3656            elementType: "geometry",
3657            stylers: [{
3658              color: "#dfd2ae"
3659            }]
3660          }, {
3661            featureType: "water",
3662            elementType: "geometry.fill",
3663            stylers: [{
3664              color: "#b9d3c2"
3665            }]
3666          }, {
3667            featureType: "water",
3668            elementType: "labels.text.fill",
3669            stylers: [{
3670              color: "#92998d"
3671            }]
3672          }],
3673          dark: [{
3674            elementType: "geometry",
3675            stylers: [{
3676              color: "#212121"
3677            }]
3678          }, {
3679            elementType: "labels.icon",
3680            stylers: [{
3681              visibility: "off"
3682            }]
3683          }, {
3684            elementType: "labels.text.fill",
3685            stylers: [{
3686              color: "#757575"
3687            }]
3688          }, {
3689            elementType: "labels.text.stroke",
3690            stylers: [{
3691              color: "#212121"
3692            }]
3693          }, {
3694            featureType: "administrative",
3695            elementType: "geometry",
3696            stylers: [{
3697              color: "#757575"
3698            }]
3699          }, {
3700            featureType: "administrative.country",
3701            elementType: "labels.text.fill",
3702            stylers: [{
3703              color: "#9e9e9e"
3704            }]
3705          }, {
3706            featureType: "administrative.land_parcel",
3707            stylers: [{
3708              visibility: "off"
3709            }]
3710          }, {
3711            featureType: "administrative.locality",
3712            elementType: "labels.text.fill",
3713            stylers: [{
3714              color: "#bdbdbd"
3715            }]
3716          }, {
3717            featureType: "poi",
3718            elementType: "labels.text.fill",
3719            stylers: [{
3720              color: "#757575"
3721            }]
3722          }, {
3723            featureType: "poi.park",
3724            elementType: "geometry",
3725            stylers: [{
3726              color: "#181818"
3727            }]
3728          }, {
3729            featureType: "poi.park",
3730            elementType: "labels.text.fill",
3731            stylers: [{
3732              color: "#616161"
3733            }]
3734          }, {
3735            featureType: "poi.park",
3736            elementType: "labels.text.stroke",
3737            stylers: [{
3738              color: "#1b1b1b"
3739            }]
3740          }, {
3741            featureType: "road",
3742            elementType: "geometry.fill",
3743            stylers: [{
3744              color: "#2c2c2c"
3745            }]
3746          }, {
3747            featureType: "road",
3748            elementType: "labels.text.fill",
3749            stylers: [{
3750              color: "#8a8a8a"
3751            }]
3752          }, {
3753            featureType: "road.arterial",
3754            elementType: "geometry",
3755            stylers: [{
3756              color: "#373737"
3757            }]
3758          }, {
3759            featureType: "road.highway",
3760            elementType: "geometry",
3761            stylers: [{
3762              color: "#3c3c3c"
3763            }]
3764          }, {
3765            featureType: "road.highway.controlled_access",
3766            elementType: "geometry",
3767            stylers: [{
3768              color: "#4e4e4e"
3769            }]
3770          }, {
3771            featureType: "road.local",
3772            elementType: "labels.text.fill",
3773            stylers: [{
3774              color: "#616161"
3775            }]
3776          }, {
3777            featureType: "transit",
3778            elementType: "labels.text.fill",
3779            stylers: [{
3780              color: "#757575"
3781            }]
3782          }, {
3783            featureType: "water",
3784            elementType: "geometry",
3785            stylers: [{
3786              color: "#000000"
3787            }]
3788          }, {
3789            featureType: "water",
3790            elementType: "labels.text.fill",
3791            stylers: [{
3792              color: "#3d3d3d"
3793            }]
3794          }],
3795          night: [{
3796            elementType: "geometry",
3797            stylers: [{
3798              color: "#242f3e"
3799            }]
3800          }, {
3801            elementType: "labels.text.fill",
3802            stylers: [{
3803              color: "#746855"
3804            }]
3805          }, {
3806            elementType: "labels.text.stroke",
3807            stylers: [{
3808              color: "#242f3e"
3809            }]
3810          }, {
3811            featureType: "administrative.locality",
3812            elementType: "labels.text.fill",
3813            stylers: [{
3814              color: "#d59563"
3815            }]
3816          }, {
3817            featureType: "poi",
3818            elementType: "labels.text.fill",
3819            stylers: [{
3820              color: "#d59563"
3821            }]
3822          }, {
3823            featureType: "poi.park",
3824            elementType: "geometry",
3825            stylers: [{
3826              color: "#263c3f"
3827            }]
3828          }, {
3829            featureType: "poi.park",
3830            elementType: "labels.text.fill",
3831            stylers: [{
3832              color: "#6b9a76"
3833            }]
3834          }, {
3835            featureType: "road",
3836            elementType: "geometry",
3837            stylers: [{
3838              color: "#38414e"
3839            }]
3840          }, {
3841            featureType: "road",
3842            elementType: "geometry.stroke",
3843            stylers: [{
3844              color: "#212a37"
3845            }]
3846          }, {
3847            featureType: "road",
3848            elementType: "labels.text.fill",
3849            stylers: [{
3850              color: "#9ca5b3"
3851            }]
3852          }, {
3853            featureType: "road.highway",
3854            elementType: "geometry",
3855            stylers: [{
3856              color: "#746855"
3857            }]
3858          }, {
3859            featureType: "road.highway",
3860            elementType: "geometry.stroke",
3861            stylers: [{
3862              color: "#1f2835"
3863            }]
3864          }, {
3865            featureType: "road.highway",
3866            elementType: "labels.text.fill",
3867            stylers:
3867 [{
3868              color: "#f3d19c"
3869            }]
3870          }, {
3871            featureType: "transit",
3872            elementType: "geometry",
3873            stylers: [{
3874              color: "#2f3948"
3875            }]
3876          }, {
3877            featureType: "transit.station",
3878            elementType: "labels.text.fill",
3879            stylers: [{
3880              color: "#d59563"
3881            }]
3882          }, {
3883            featureType: "water",
3884            elementType: "geometry",
3885            stylers: [{
3886              color: "#17263c"
3887            }]
3888          }, {
3889            featureType: "water",
3890            elementType: "labels.text.fill",
3891            stylers: [{
3892              color: "#515c6d"
3893            }]
3894          }, {
3895            featureType: "water",
3896            elementType: "labels.text.stroke",
3897            stylers: [{
3898              color: "#17263c"
3899            }]
3900          }],
3901          aubergine: [{
3902            elementType: "geometry",
3903            stylers: [{
3904              color: "#1d2c4d"
3905            }]
3906          }, {
3907            elementType: "labels.text.fill",
3908            stylers: [{
3909              color: "#8ec3b9"
3910            }]
3911          }, {
3912            elementType: "labels.text.stroke",
3913            stylers: [{
3914              color: "#1a3646"
3915            }]
3916          }, {
3917            featureType: "administrative.country",
3918            elementType: "geometry.stroke",
3919            stylers: [{
3920              color: "#4b6878"
3921            }]
3922          }, {
3923            featureType: "administrative.land_parcel",
3924            elementType: "labels.text.fill",
3925            stylers: [{
3926              color: "#64779e"
3927            }]
3928          }, {
3929            featureType: "administrative.province",
3930            elementType: "geometry.stroke",
3931            stylers: [{
3932              color: "#4b6878"
3933            }]
3934          }, {
3935            featureType: "landscape.man_made",
3936            elementType: "geometry.stroke",
3937            stylers: [{
3938              color: "#334e87"
3939            }]
3940          }, {
3941            featureType: "landscape.natural",
3942            elementType: "geometry",
3943            stylers: [{
3944              color: "#023e58"
3945            }]
3946          }, {
3947            featureType: "poi",
3948            elementType: "geometry",
3949            stylers: [{
3950              color: "#283d6a"
3951            }]
3952          }, {
3953            featureType: "poi",
3954            elementType: "labels.text.fill",
3955            stylers: [{
3956              color: "#6f9ba5"
3957            }]
3958          }, {
3959            featureType: "poi",
3960            elementType: "labels.text.stroke",
3961            stylers: [{
3962              color: "#1d2c4d"
3963            }]
3964          }, {
3965            featureType: "poi.park",
3966            elementType: "geometry.fill",
3967            stylers: [{
3968              color: "#023e58"
3969            }]
3970          }, {
3971            featureType: "poi.park",
3972            elementType: "labels.text.fill",
3973            stylers: [{
3974              color: "#3C7680"
3975            }]
3976          }, {
3977            featureType: "road",
3978            elementType: "geometry",
3979            stylers: [{
3980              color: "#304a7d"
3981            }]
3982          }, {
3983            featureType: "road",
3984            elementType: "labels.text.fill",
3985            stylers: [{
3986              color: "#98a5be"
3987            }]
3988          }, {
3989            featureType: "road",
3990            elementType: "labels.text.stroke",
3991            stylers: [{
3992              color: "#1d2c4d"
3993            }]
3994          }, {
3995            featureType: "road.highway",
3996            elementType: "geometry",
3997            stylers: [{
3998              color: "#2c6675"
3999            }]
4000          }, {
4001            featureType: "road.highway",
4002            elementType: "geometry.stroke",
4003            stylers: [{
4004              color: "#255763"
4005            }]
4006          }, {
4007            featureType: "road.highway",
4008            elementType: "labels.text.fill",
4009            stylers: [{
4010              color: "#b0d5ce"
4011            }]
4012          }, {
4013            featureType: "road.highway",
4014            elementType: "labels.text.stroke",
4015            stylers: [{
4016              color: "#023e58"
4017            }]
4018          }, {
4019            featureType: "transit",
4020            elementType: "labels.text.fill",
4021            stylers: [{
4022              color: "#98a5be"
4023            }]
4024          }, {
4025            featureType: "transit",
4026            elementType: "labels.text.stroke",
4027            stylers: [{
4028              color: "#1d2c4d"
4029            }]
4030          }, {
4031            featureType: "transit.line",
4032            elementType: "geometry.fill",
4033            stylers: [{
4034              color: "#283d6a"
4035            }]
4036          }, {
4037            featureType: "transit.station",
4038            elementType: "geometry",
4039            stylers: [{
4040              color: "#3a4762"
4041            }]
4042          }, {
4043            featureType: "water",
4044            elementType: "geometry",
4045            stylers: [{
4046              color: "#0e1626"
4047            }]
4048          }, {
4049            featureType: "water",
4050            elementType: "labels.text.fill",
4051            stylers: [{
4052              color: "#4e6d70"
4053            }]
4054          }]
4055        };
4056        return defaultStyles;
4057      },
4058      settings: function settings(wrapper) {
4059        var item = document.querySelector(wrapper);
4060        var settings = {
4061          latitude: parseFloat(item.dataset.latitude),
4062          longitude: parseFloat(item.dataset.longitude),
4063          mapType: item.dataset.mapType,
4064          markers: item.dataset.markers,
4065          polylines: item.dataset.polylines,
4066          mapZoom: parseInt(item.dataset.mapZoom),
4067          mapZoomMobile: parseInt(item.dataset.mapZoomMobile),
4068          mapZoomTablet: parseInt(item.dataset.mapZoomTablet),
4069          scrollWheelZoom: item.dataset.scrollWheelZoom,
4070          zoomControl: item.dataset.zoomControl,
4071          fullscreenControl: item.dataset.fullScreen,
4072          mapDraggable: item.dataset.disableMapDrag,
4073          showLegend: item.dataset.showLegend,
4074          showRoute: item.dataset.showRoute,
4075          googleMapType: item.dataset.googleMapType,
4076          mapTypeControl: item.dataset.mapTypeControl,
4077          streetViewControl: item.dataset.streetView,
4078          infoOpen: item.dataset.infoOpen,
4079          infoOpenHover: item.dataset.infoOpenHover,
4080          mapStyle: item.dataset.mapStyle,
4081          customMapStyles: item.dataset.customMapStyle,
4082          defaultStyle: this.defaultStyle(),
4083          strokeColor: item.dataset.strokeColor,
4084          strokeOpacity: item.dataset.strokeOpacity,
4085          strokeWeight: item.dataset.strokeWeight,
4086          strokeFill: item.dataset.strokeFill,
4087          strokeFillOpacity: item.dataset.strokeFillOpacity,
4088          originLat: item.dataset.originLat,
4089          originLng: item.dataset.originLng,
4090          destLat: item.dataset.destLat,
4091          destLng: item.dataset.destLng,
4092          travelMode: item.dataset.travelMode
4093        };
4094        return settings;
4095      },
4096      isValidJsonString: function isValidJsonString(jsonString) {
4097        try {
4098          JSON.parse(jsonString);
4099        } catch (e) {
4100          return false;
4101        }
4102
4103        return true;
4104      },
4105      mapInit: function mapInit(wrapper) {
4106        var settings = this.settings(wrapper);
4107        var markersOptionsArray = JSON.parse(settings.markers);
4108        var map;
4109        var directionsService = new google.maps.DirectionsService();
4110        var directionsRenderer = new google.maps.DirectionsRenderer();
4111        var finalZoomLevel = settings.mapZoom;
4112        window.addEventListener("resize", function () {
4113          if (elementorFrontend.getCurrentDeviceMode() == "mobile") {
4114            finalZoomLevel = settings.mapZoomMobile;
4115          } else if (elementorFrontend.getCurrentDeviceMode() == "tablet") {
4116            finalZoomLevel = settings.mapZoomTablet;
4117          } else {
4118            finalZoomLevel = settings.mapZoom;
4119          }
4120        });
4121        map = new google.maps.Map(document.querySelector(".skt-adv-google-map__wrapper" + wrapper), {
4122          center: {
4123            lat: settings.latitude === "" ? -34.391 : settings.latitude,
4124            lng: settings.longitude === "" ? 150.644 : settings.longitude
4125          },
4126          zoom: finalZoomLevel,
4127          mapTypeId: settings.mapType,
4128          zoomControl: settings.zoomControl === "yes",
4129          mapTypeControl: settings.mapTypeControl === "yes",
4130          fullscreenControl: settings.fullscreenControl === "yes",
4131          streetViewControl: settings.streetViewControl === "yes",
4132          gestureHandling: settings.scrollWheelZoom === "yes" ? "greedy" : "cooperative",
4133          draggable: settings.mapDraggable !== "yes",
4134          styles: settings.mapStyle !== "custom" ? settings.defaultStyle[settings.mapStyle] : !this.isValidJsonString(settings.customMapStyles) ? "" : JSON.parse(settings.customMapStyles)
4135        });
4136
4137        if (settings.mapDraggable === "yes") {
4138          map.setOptions({
4139            draggableCursor: "default"
4140          });
4141        } // adding markers and info window on map
4142
4143
4144        markersOptionsArray.forEach(function (option) {
4145          var marker = new google.maps.Marker({
4146            icon: option.pin_icon.url === "" ? "" : {
4147              url: option.pin_icon.url,
4148              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)
4149            },
4150            map: map,
4151            position: {
4152              lat: +option.pin_latitude,
4153              lng: +option.pin_longitude
4154            }
4155          });
4156          var infoWindow = new google.maps.InfoWindow({
4157            content: '<div class="skt-adv-google-map__marker-wrapper">' + '<div class="skt-adv-google-map__marker-title-wrapper">' + '<div class="skt-adv-google-map__marker-title" style="display: inline-block">' + option.pin_item_title + "</div>" + "</div>" + '<div class="skt-adv-google-map__marker-description-wrapper">' + '<div class="skt-adv-google-map__marker-description">' + option.pin_item_description + "</div>" + "</div>" + "</div>"
4158          });
4159
4160          if (settings.infoOpen === "yes") {
4161            infoWindow.open(map, marker);
4162          }
4163
4164          if (settings.infoOpenHover === "yes") {
4165            marker.addListener("mouseover", function (e) {
4166              infoWindow.open(map, marker);
4167            });
4168            marker.addListener("mouseout", function (e) {
4169              var timeOut = setTimeout(function () {
4170                infoWindow.close();
4171                clearTimeout(timeOut);
4172              }, 1000);
4173            });
4174          } else {
4175            marker.addListener("click", function () {
4176              infoWindow.open(map, marker);
4177            });
4178          }
4179        }); // adding map legend
4180
4181        if (settings.showLegend === "yes") {
4182          var legend = document.querySelector(wrapper).nextElementSibling;
4183          map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(legend);
4184        }
4185
4186        if (settings.googleMapType == "polyline") {
4187          var polylines_data = JSON.parse(settings.polylines);
4188          var polylines_arr = [];
4189          polylines_data.forEach(function (polyline) {
4190            polylines_arr.push({
4191              lat: parseFloat(polyline.skt_gmap_polyline_lat),
4192              lng: parseFloat(polyline.skt_gmap_polyline_lng)
4193            });
4194          });
4195          var polyLinePath = JSON.parse(JSON.stringify(polylines_arr));
4196          var polyPath = new google.maps.Polyline({
4197            path: polyLinePath,
4198            strokeColor: settings.strokeColor,
4199            strokeOpacity: settings.strokeOpacity,
4200            strokeWeight: settings.strokeWeight
4201          });
4202          polyPath.setMap(map);
4203        }
4204
4205        if (settings.googleMapType == "polygon") {
4206          var polylines_data = JSON.parse(settings.polylines);
4207          var polylines_arr = [];
4208          polylines_data.forEach(function (polyline) {
4209            polylines_arr.push({
4210              lat: parseFloat(polyline.skt_gmap_polyline_lat),
4211              lng: parseFloat(polyline.skt_gmap_polyline_lng)
4212            });
4213          });
4214          var polyLinePath = JSON.parse(JSON.stringify(polylines_arr));
4215          var polygon = new google.maps.Polygon({
4216            path: polyLinePath,
4217            strokeColor: settings.strokeColor,
4218            strokeOpacity: settings.strokeOpacity,
4219            strokeWeight: settings.strokeWeight,
4220            fillColor: settings.strokeFill,
4221            fillOpacity: settings.strokeFillOpacity
4222          });
4223          polygon.setMap(map);
4224        }
4225
4226        if (settings.googleMapType == "routes") {
4227          this.routeDraw(directionsService, directionsRenderer, settings);
4228          directionsRenderer.setMap(map);
4229        }
4230
4231        google.maps.event.addDomListener(window, "resize", function () {
4232          var center = map.getCenter();
4233          google.maps.event.trigger(map, "resize");
4234          map.setCenter(center);
4235          map.setZoom(finalZoomLevel);
4236        });
4237      },
4238      routeDraw: function routeDraw(directionsService, directionsRenderer, settings) {
4239        var start = settings.originLat + "," + settings.originLng;
4240        var end = settings.destLat + "," + settings.destLng;
4241        directionsService.route({
4242          origin: {
4243            query: start
4244          },
4245          destination: {
4246            query: end
4247          },
4248          travelMode: settings.travelMode.toUpperCase()
4249        }, function (response, status) {
4250          if (status === "OK") {
4251            directionsRenderer.setDirections(response);
4252          } else {}
4253        });
4254      },
4255      runMap: function runMap() {
4256        var gmaper = document.querySelectorAll(".skt-adv-google-map__wrapper");
4257
4258        for (var i = 0; i < gmaper.length; i++) {
4259          gmaper[i].classList.add("skt-adv-google-map__wrapper--item" + i);
4260          this.mapInit(".skt-adv-google-map__wrapper--item" + i);
4261        }
4262      }
4263    });
4264    elementorFrontend.hooks.addAction("frontend/element_ready/skt-google-map.default", function ($scope) {
4265      elementorFrontend.elementsHandler.addHandler(Maps, {
4266        $element: $scope,
4267        selectors: {
4268          container: ".skt-adv-google-map__wrapper"
4269        }
4270      });
4271    });
4272	
4273    elementorFrontend.hooks.addAction("frontend/element_ready/skt-unfold.default", function ($scope) {
4274      elementorFrontend.elementsHandler.addHandler(Unfold, {
4275        $element: $scope
4276      });
4277    });
4278	
4279	var EddCart = function EddCart($scope) {
4280      var optionEL = $scope.find('.skt-edd-table-wrap');
4281      var settings = optionEL.data('options');
4282      var removeEl = $scope.find('.edd-remove-from-cart');
4283
4284      if (settings.cart_btn_type == 'icon') {
4285        removeEl.html("<i class=\"".concat(settings.icon.value, "\"></i>"));
4286      } else {
4287        removeEl.text(settings.btn_text);
4288      }
4289    };
4290
4291    elementorFrontend.hooks.addAction('frontend/element_ready/skt-edd-cart.default', EddCart);
4292
4293    var EddCheckout = function EddCheckout($scope) {
4294      var optionEL = $scope.find('.skt-edd-table-wrap');
4295      var settings = optionEL.data('options');
4296      var removeEl = $scope.find('.edd_cart_remove_item_btn');
4297
4298      if (settings.cart_btn_type == 'icon') {
4299        removeEl.html("<i class=\"".concat(settings.icon.value, "\"></i>"));
4300      } else {
4301        removeEl.text(settings.btn_text);
4302      }
4303    };
4304
4305    elementorFrontend.hooks.addAction('frontend/element_ready/skt-edd-checkout.default', EddCheckout);
4306
4307    var EddAjaxBtn = function EddAjaxBtn($scope) {
4308      var btn = $scope.find(".skt_edd_ajax_btn");
4309      btn.on('click', function (event) {
4310        event.preventDefault();
4311        var $self = $(this),
4312            download_id = $self.data('download-id'),
4313            nonce = $self.data('nonce');
4314        $.ajax({
4315          url: SktProLocalize.ajax_url,
4316          type: "POST",
4317          data: {
4318            action: "skt_edd_ajax_add_to_cart_link",
4319            security: SktProLocalize.nonce,
4320            download_id: download_id
4321          },
4322          success: function success(response) {
4323            if (response.success == true) {
4324              $self.html("<i class=\"fas fa-cart-plus\"></i>");
4325            }
4326          }
4327        });
4328      });
4329    };
4330
4331    elementorFrontend.hooks.addAction('frontend/element_ready/skt-edd-product-grid.default', EddAjaxBtn);
4332    elementorFrontend.hooks.addAction('frontend/element_ready/skt-edd-product-carousel.default', EddAjaxBtn);
4333    elementorFrontend.hooks.addAction('frontend/element_ready/skt-edd-single-product.default', EddAjaxBtn);
4334	
4335	    var Image_Swap = function Image_Swap($scope) {
4336      var element = $scope.find('.skt-image-swap-wrapper');
4337      var trigger_type = element.data('trigger');
4338      var status;
4339
4340      if (trigger_type === 'click') {
4341        element.on('click', element, function () {
4342          var self = $(this);
4343          var click = self.attr('data-click');
4344
4345          if ('inactive' == click) {
4346            status = 'active';
4347          } else {
4348            status = 'inactive';
4349          }
4350
4351          self.attr('data-click', status);
4352          var first_img = self.find('.img_swap_first');
4353          var second_img = self.find('.img_swap_second');
4354        });
4355      }
4356
4357      var elm = $scope.find('.skt-image-swap-ctn');
4358      var elm_img = $scope.find('.skt-image-swap-item');
4359      var trigger = elm.data('trigger');
4360
4361      if (elm.length > 0) {
4362        $('.skt-image-swap-ctn').on('click', '.skt-image-swap-item', function (e) {
4363          var elem = $(this);
4364          var parent = elem.parent('.skt-image-swap-insider');
4365          var firstChild = parent.children('.skt-image-swap-item:first-of-type');
4366          var secondChild = parent.children('.skt-image-swap-item:nth-of-type(2)');
4367
4368          if (!elem.is(':first-child')) {
4369            parent.addClass('changed');
4370            setTimeout(function () {
4371              firstChild.remove();
4372              parent.append(firstChild);
4373              parent.removeClass('changed');
4374            }, 400);
4375          }
4376        });
4377      } // if( trigger == 'hover'){
4378      //     elm.hover(function (e){
4379      //         var target = e.target;
4380      //         if(!$(target).hasClass('active')){
4381      //             var $self = $(this);
4382      //             var parent = $self.find('.skt-image-swap-insider');
4383      //             var firstChild = parent.children('.skt-image-swap-item:first-of-type');
4384      //             var secondChild = parent.children('.skt-image-swap-item:nth-of-type(2)');
4385      //             firstChild.toggleClass('active');
4386      //             secondChild.toggleClass('active');
4387      //         }
4388      //     });
4389      // }
4390
4391    };
4392
4393    var FlipBox = function FlipBox($scope) {
4394      var element = $scope.find('.skt-flip-box-inner'); // touchstart
4395
4396      element.on('mouseenter mouseleave touchstart', function (e) {
4397        if (('mouseenter' == e.type || 'touchstart' == e.type) && !$(this).hasClass('flip')) {
4398          $(this).addClass('flip');
4399        } else if (('mouseleave' == e.type || 'touchstart' == e.type) && $(this).hasClass('flip')) {
4400          $(this).removeClass('flip');
4401        } else if ('touchstart' == e.type && $(this).hasClass('flip')) {
4402          $(this).removeClass('flip');
4403        }
4404      });
4405    };
4406
4407    elementorFrontend.hooks.addAction('frontend/element_ready/skt-image-swap.default', Image_Swap);
4408	
4409	var AgeGate = function AgeGate($scope, $) {
4410      if (elementorFrontend.isEditMode()) {
4411        localStorage.removeItem("skt-age-gate-expire-time");
4412        if ($scope.find('.skt-age-gate-wrapper').length) {
4413          var editor_mood = $scope.find('.skt-age-gate-wrapper').data('editor_mood');
4414          if ('no' == editor_mood) {
4415            $scope.find('.skt-age-gate-wrapper').hide();
4416          }
4417        }
4418      } else if (!elementorFrontend.isEditMode()) {
4419        var container = $scope.find('.skt-age-gate-wrapper'),
4420          cookies_time = container.data('age_gate_cookies_time'),
4421          exd = localStorage.getItem("skt-age-gate-expire-time");
4422        //container.closest("body").find("header").css("display","none");
4423        container.closest("body").css("overflow", "hidden");
4424        var cdate = new Date();
4425        var endDate = new Date();
4426        endDate.setDate(cdate.getDate() + cookies_time);
4427        if (exd != '' && exd != undefined && new Date(cdate) <= new Date(exd)) {
4428          $('.skt-age-gate-wrapper').hide();
4429          container.closest("body").css("overflow", "");
4430        } else if (exd != '' && exd != undefined && new Date(cdate) > new Date(exd)) {
4431          localStorage.removeItem("skt-age-gate-expire-time");
4432          $('.skt-age-gate-wrapper').show();
4433        } else {
4434          $('.skt-age-gate-wrapper').show();
4435        }
4436
4437        /*confirm-age*/
4438        if ($scope.find('.skt-age-gate-wrapper.skt-age-gate-confirm-age').length) {
4439          $(".skt-age-gate-confirm-age-btn").on("click", function () {
4440            localStorage.setItem("skt-age-gate-expire-time", endDate);
4441            $(this).closest(".skt-age-gate-wrapper").hide();
4442            //$(this).closest("body").find("header").css("display","block");
4443            $(this).closest("body").css("overflow", "");
4444          });
4445        }
4446
4447        /*confirm-dob*/
4448        if ($scope.find('.skt-age-gate-wrapper.skt-age-gate-confirm-dob').length) {
4449          $(".skt-age-gate-confirm-dob-btn").on("click", function () {
4450            var birthYear = new Date(Date.parse($(this).closest('.skt-age-gate-form-body').find('.skt-age-gate-date-input').val())),
4451              agebirth = birthYear.getFullYear(),
4452              currentYear = cdate.getFullYear(),
4453              userage = currentYear - agebirth,
4454              agelimit = $(this).closest('.skt-age-gate-wrapper').data("userbirth");
4455            if (userage < agelimit) {
4456              $(this).closest('.skt-age-gate-boxes').find('.skt-age-gate-warning-msg').show();
4457            } else {
4458              localStorage.setItem("skt-age-gate-expire-time", endDate);
4459              $(this).closest('.skt-age-gate-wrapper').hide();
4460              //$(this).closest("body").find("header").css("display","block");
4461              $(this).closest("body").css("overflow", "");
4462            }
4463          });
4464        }
4465
4466        /*confirm-by-boolean*/
4467        if ($scope.find('.skt-age-gate-wrapper.skt-age-gate-confirm-by-boolean').length) {
4468          $(".skt-age-gate-wrapper .skt-age-gate-confirm-yes-btn").on("click", function () {
4469            localStorage.setItem("skt-age-gate-expire-time", endDate);
4470            $(this).closest('.skt-age-gate-wrapper').hide();
4471            //$(this).closest("body").find("header").css("display","block");
4472            $(this).closest("body").css("overflow", "");
4473          });
4474          $(".skt-age-gate-wrapper .skt-age-gate-confirm-no-btn").on("click", function () {
4475            $(this).closest('.skt-age-gate-boxes').find('.skt-age-gate-warning-msg').show();
4476          });
4477        }
4478      }
4479    };
4480    elementorFrontend.hooks.addAction("frontend/element_ready/skt-age-gate.default", AgeGate);
4481	
4482	var SktCreativeSlider = function SktCreativeSlider($scope) {
4483      var $rcContainer = $scope.find('.skt-creative-slider-container');
4484
4485      if ($rcContainer) {
4486        var $haCsWidth = window.innerWidth;
4487        var $haCsNextSelector = parseInt($haCsWidth) <= 767 ? $rcContainer.find('.skt_cs_mobile_next') : $rcContainer.find('.skt_cc_next_wrapper');
4488        var $haCsPrevSelector = parseInt($haCsWidth) <= 767 ? $rcContainer.find('.skt_cs_mobile_prev') : $rcContainer.find('.skt_cc_prev_wrapper');
4489        var csTextItemDelay = parseInt($haCsWidth) <= 767 ? 40 : 30;
4490        var csImageItemDelay = 40;
4491        var csPrevItemsOwl = $rcContainer.find('.skt_cc_prev_items');
4492        var csTextItemsOwl = $rcContainer.find('.skt_cc_text_items');
4493        var csImageItemsOwl = $rcContainer.find('.skt_cc_inner_image_items');
4494        var csNextItemsOwl = $rcContainer.find('.skt_cc_next_items');
4495        var csPrevNavOptions = {
4496          loop: true,
4497          dots: false,
4498          nav: false,
4499          items: 1,
4500          autoplay: false,
4501          smartSpeed: 500,
4502          touchDrag: false,
4503          mouseDrag: false,
4504          rewind: true,
4505          startPosition: -1
4506        };
4507        var csNextNavOptions = {
4508          loop: true,
4509          dots: false,
4510          nav: false,
4511          items: 1,
4512          autoplay: false,
4513          smartSpeed: 500,
4514          touchDrag: false,
4515          mouseDrag: false,
4516          rewind: true,
4517          startPosition: 1
4518        };
4519        var csGeneralOptions = {
4520          loop: true,
4521          dots: false,
4522          nav: false,
4523          items: 1,
4524          autoplay: false,
4525          smartSpeed: 1000,
4526          touchDrag: false,
4527          mouseDrag: false,
4528          singleItem: true,
4529          animateOut: 'fadeOutRight',
4530          animateIn: 'fadeInLeft',
4531          rewind: true
4532        };
4533      }
4534
4535      csPrevItemsOwl.owlCarousel(csPrevNavOptions);
4536      csNextItemsOwl.owlCarousel(csNextNavOptions);
4537      csTextItemsOwl.owlCarousel(csGeneralOptions);
4538      csImageItemsOwl.owlCarousel(csGeneralOptions);
4539      window.parent.addEventListener('message', function (e) {
4540        if ('skt_cs_reinit' == e.data) {
4541          csTextItemsOwl.owlCarousel('refresh');
4542          csImageItemsOwl.owlCarousel('refresh');
4543        }
4544      });
4545      $($haCsPrevSelector).click(function (e) {
4546        e.preventDefault();
4547        csPrevItemsOwl.trigger('prev.owl.carousel');
4548        csNextItemsOwl.trigger('prev.owl.carousel');
4549        setTimeout(function () {
4550          csTextItemsOwl.trigger('prev.owl.carousel');
4551        }, csTextItemDelay);
4552        setTimeout(function () {
4553          csImageItemsOwl.trigger('prev.owl.carousel');
4554        }, csTextItemDelay + csImageItemDelay);
4555      });
4556      $($haCsNextSelector).click(function (e) {
4557        e.preventDefault();
4558        csPrevItemsOwl.trigger('next.owl.carousel');
4559        csNextItemsOwl.trigger('next.owl.carousel');
4560        setTimeout(function () {
4561          csTextItemsOwl.trigger('next.owl.carousel');
4562        }, csTextItemDelay);
4563        setTimeout(function () {
4564          csImageItemsOwl.trigger('next.owl.carousel');
4565        }, csTextItemDelay + csImageItemDelay);
4566      });
4567    };
4568
4569    elementorFrontend.hooks.addAction('frontend/element_ready/skt-creative-slider.default', SktCreativeSlider);
4570	
4571	var HaRemoteCarousel = function HaRemoteCarousel($scope) {
4572      var $rcContainer = $scope.find('.skt-remote-carousel-container');
4573
4574      if ($rcContainer) {
4575        var $rcBtn = $($rcContainer).find('.skt-custom-nav-remote-carousel');
4576
4577        if ($rcBtn) {
4578          var $prevSliderIndex = 0;
4579          var $slides_to_show = 0;
4580          var $skt_show_thumbnail = $($rcBtn).parent().data('show_thumbnail');
4581          var $skt_rc_unique_id = $($rcBtn).parent().data('skt_rc_id');
4582          var $haRcSelector = $skt_rc_unique_id ? $('[data-skt_rcc_uid="' + $skt_rc_unique_id + '"]') : '';
4583
4584          if ($skt_show_thumbnail && $skt_show_thumbnail == 'yes') {
4585            $haRcSelector.on('init', function (event, slick, currentSlide) {
4586              var $dataSettingsSelector = $haRcSelector.parent().parent();
4587              var $dataSettings = $dataSettingsSelector.data('settings');
4588              $slides_to_show = typeof $dataSettings === "undefined" ? $slides_to_show : $dataSettings.slides_to_show;
4589              $prevSliderIndex = (currentSlide ? currentSlide : 0) - 1;
4590              var $nextIndex = parseInt($slides_to_show) + parseInt($prevSliderIndex) + 1;
4591              var $nextItem = $haRcSelector.find('[data-slick-index="' + $nextIndex + '"]');
4592              var $nextImg = $nextItem.find('img').attr('src');
4593              var $prevItem = $haRcSelector.find('[data-slick-index="' + $prevSliderIndex + '"]');
4594              var $prevImg = $prevItem.find('img').attr('src');
4595              var $nextBtn = $rcContainer.find('.skt-remote-carousel-btn-next');
4596              var $prevBtn = $rcContainer.find('.skt-remote-carousel-btn-prev');
4597              $nextBtn.css({
4598                'background-image': 'url(' + $nextImg + ')',
4599                'background-position': 'center'
4600              });
4601              $prevBtn.css({
4602                'background-image': 'url(' + $prevImg + ')',
4603                'background-position': 'center'
4604              });
4605            });
4606            $haRcSelector.trigger('init');
4607            $($rcBtn).on("click", function (e) {
4608              e.preventDefault();
4609              $haRcSelector.on('afterChange', function (event, slick, currentSlideIndex) {
4610                var $dataSettingsSelector = $haRcSelector.parent().parent();
4611                var $dataSettings = $dataSettingsSelector.data('settings');
4612                var $slides_to_show = $dataSettings ? $dataSettings.slides_to_show : currentSlideIndex;
4613                $prevSliderIndex = parseInt(currentSlideIndex - 1);
4614                var $nextIndex = parseInt($slides_to_show) + parseInt($prevSliderIndex) + 1;
4615                var $nextItem = $haRcSelector.find('[data-slick-index="' + $nextIndex + '"]');
4616                var $nextImg = $nextItem.find('img').attr('src');
4617                var $prevItem = $haRcSelector.find('[data-slick-index="' + $prevSliderIndex + '"]');
4618                var $prevImg = $prevItem.find('img').attr('src');
4619                var $nextBtn = $rcContainer.find('.skt-remote-carousel-btn-next');
4620                var $prevBtn = $rcContainer.find('.skt-remote-carousel-btn-prev');
4621
4622                if ($nextBtn) {
4623                  $nextBtn.css({
4624                    'background-image': 'url(' + $nextImg + ')',
4625                    'background-position': 'center'
4626                  });
4627                }
4628
4629                if ($prevBtn) {
4630                  $prevBtn.css({
4631                    'background-image': 'url(' + $prevImg + ')',
4632                    'background-position': 'center'
4633                  });
4634                }
4635              });
4636
4637              if ($(this).data("skt_rc_nav") == 'skt_rc_next_btn') {
4638                $haRcSelector.slick("slickNext");
4639              } else if ($(this).data("skt_rc_nav") == 'skt_rc_prev_btn') {
4640                $haRcSelector.slick("slickPrev");
4641              }
4642            });
4643          } else {
4644            $($rcBtn).on("click", function (e) {
4645              e.preventDefault();
4646
4647              if ($(this).data("skt_rc_nav") == 'skt_rc_next_btn') {
4648                $haRcSelector.slick("slickNext");
4649              } else if ($(this).data("skt_rc_nav") == 'skt_rc_prev_btn') {
4650                $haRcSelector.slick("slickPrev");
4651              }
4652            });
4653          }
4654        }
4655      }
4656    };
4657
4658    elementorFrontend.hooks.addAction('frontend/element_ready/skt-remote-carousel.default', HaRemoteCarousel);
4659	
4660	    var SktTOC = elementorModules.frontend.handlers.Base.extend({
4661      getDefaultSettings: function getDefaultSettings() {
4662        var elementSettings = this.getElementSettings(),
4663            listWrapperTag = "numbers" === elementSettings.marker_view ? "ol" : "ul";
4664        return {
4665          selectors: {
4666            widgetContainer: ".skt-toc-wrapper",
4667            container: '.elementor:not([data-elementor-type="header"]):not([data-elementor-type="footer"])',
4668            expandButton: ".skt-toc__header",
4669            collapseButton: ".skt-toc__header",
4670            body: ".skt-toc__body",
4671            headerTitle: ".skt-toc__header-title",
4672            scrollTop: ".skt-toc__scroll-to-top--container"
4673          },
4674          classes: {
4675            anchor: "skt-toc-menu-anchor",
4676            listWrapper: "skt-toc__list-wrapper",
4677            listItem: "skt-toc__list-item",
4678            listTextWrapper: "skt-toc__list-item-text-wrapper",
4679            firstLevelListItem: "skt-toc__top-level",
4680            listItemText: "skt-toc__list-item-text",
4681            activeItem: "skt-toc-item-active",
4682            headingAnchor: "skt-toc__heading-anchor",
4683            collapsed: "skt-toc--collapsed"
4684          },
4685          listWrapperTag: listWrapperTag
4686        };
4687      },
4688      getDefaultElements: function getDefaultElements() {
4689        var settings = this.getSettings(),
4690            elementSettings = this.getElementSettings();
4691        return {
4692          $pageContainer: jQuery(elementSettings.container || settings.selectors.container),
4693          $widgetContainer: this.$element.find(settings.selectors.widgetContainer),
4694          $expandButton: this.$element.find(settings.selectors.expandButton),
4695          $collapseButton: this.$element.find(settings.selectors.collapseButton),
4696          $tocBody: this.$element.find(settings.selectors.body),
4697          $listItems: this.$element.find("." + settings.classes.listItem),
4698          $scrollTop: this.$element.find(settings.selectors.scrollTop)
4699        };
4700      },
4701      bindEvents: function bindEvents() {
4702        var $self = this;
4703        var elementSettings = this.getElementSettings();
4704
4705        if (elementSettings.minimize_box) {
4706          this.elements.$expandButton.on("click", function () {
4707            if (!$($self.$element).hasClass($self.getSettings("classes.collapsed"))) {
4708              return $self.collapseBox();
4709            } else {
4710              return $self.expandBox();
4711            }
4712          });
4713        }
4714
4715        if (elementSettings.collapse_subitems) {
4716          this.elements.$listItems.hover(function (event) {
4717            return jQuery(event.target).slideToggle();
4718          });
4719        }
4720
4721        if (elementSettings.sticky_toc_toggle) {
4722          elementorFrontend.elements.$window.on("resize", this.handleStickyToc);
4723        }
4724
4725        if (elementSettings.scroll_to_top_toggle) {
4726          this.elements.$scrollTop.on("click", function () {
4727            $self.scrollToTop();
4728          });
4729        }
4730      },
4731      getHeadings: function getHeadings() {
4732        // Get all headings from document by user-selected tags
4733        var elementSettings = this.getElementSettings(),
4734            tags = elementSettings.headings_by_tags.join(","),
4735            selectors = this.getSettings("selectors"),
4736            excludedSelectors = elementSettings.exclude_headings_by_selector;
4737        return this.elements.$pageContainer.find(tags).not(selectors.headerTitle).filter(function (index, heading) {
4738          return !jQuery(heading).closest(excludedSelectors).length; // Handle excluded selectors if there are any
4739        });
4740      },
4741      addAnchorsBeforeHeadings: function addAnchorsBeforeHeadings() {
4742        var $this = this; // Add an anchor element right before each TOC heading to create anchors for TOC links
4743
4744        var classes = this.getSettings("classes");
4745        this.elements.$headings.before(function (index) {
4746          var anchorLink = $this.getHeadingAnchorLink(index, classes);
4747          return '<span id="' + anchorLink + '" class="' + classes.anchor + ' "></span>';
4748        });
4749      },
4750      activateItem: function activateItem($listItem) {
4751        var classes = this.getSettings("classes");
4752        this.deactivateActiveItem($listItem);
4753        $listItem.addClass(classes.activeItem);
4754        this.$activeItem = $listItem;
4755
4756        if (!this.getElementSettings("sticky_toc_toggle")) {
4757          //Note:- The "Collapse" option will not work unless you make the Table of Contents sticky.
4758          return;
4759        }
4760
4761        if (!this.getElementSettings("collapse_subitems")) {
4762          return;
4763        }
4764
4765        var $activeList = void 0;
4766
4767        if ($listItem.hasClass(classes.firstLevelListItem)) {
4768          $activeList = $listItem.parent().next();
4769        } else {
4770          $activeList = $listItem.parents("." + classes.listWrapper).eq(-2);
4771        }
4772
4773        if (!$activeList.length) {
4774          delete this.$activeList;
4775          return;
4776        }
4777
4778        this.$activeList = $activeList;
4779        this.$activeList.stop().slideDown();
4780      },
4781      deactivateActiveItem: function deactivateActiveItem($activeToBe) {
4782        if (!this.$activeItem || this.$activeItem.is($activeToBe)) {
4783          return;
4784        }
4785
4786        var _getSettings = this.getSettings(),
4787            classes = _getSettings.classes;
4788
4789        this.$activeItem.removeClass(classes.activeItem);
4790
4791        if (this.$activeList && (!$activeToBe || !this.$activeList[0].contains($activeToBe[0]))) {
4792          this.$activeList.slideUp();
4793        }
4794      },
4795      followAnchor: function followAnchor($element, index) {
4796        var $self = this;
4797        var anchorSelector = $element[0].hash;
4798        var $anchor = void 0;
4799
4800        try {
4801          // `decodeURIComponent` for UTF8 characters in the hash.
4802          $anchor = jQuery(decodeURIComponent(anchorSelector));
4803        } catch (e) {
4804          return;
4805        }
4806
4807        if (0 === index) {
4808          elementorFrontend.waypoint($anchor, function (direction) {
4809            if ($self.itemClicked) {
4810              return;
4811            }
4812
4813            if ("down" === direction) {
4814              $self.activateItem($element);
4815            } else {
4816              $self.deactivateActiveItem();
4817            }
4818          }, {
4819            offset: "bottom-in-view",
4820            triggerOnce: false
4821          });
4822        }
4823
4824        elementorFrontend.waypoint($anchor, function (direction) {
4825          if ($self.itemClicked) {
4826            return;
4827          }
4828
4829          if ("down" === direction) {
4830            $self.activateItem($self.$listItemTexts.eq(index + 1));
4831          } else {
4832            $self.activateItem($element);
4833          }
4834        }, {
4835          offset: 0,
4836          triggerOnce: false
4837        });
4838      },
4839      followAnchors: function followAnchors() {
4840        var $self = this;
4841        this.$listItemTexts.each(function (index, element) {
4842          return $self.followAnchor(jQuery(element), index);
4843        });
4844      },
4845      setOffset: function setOffset($listItem) {
4846        var $this = this;
4847        var settings = this.getSettings();
4848        var list = this.$element.find("." + settings.classes.listItem);
4849        var offset = this.getCurrentDeviceSetting("scroll_offset");
4850        list.each(function () {
4851          $('a', this).on('click', function (e) {
4852            e.preventDefault();
4853            var hash = this.hash;
4854            $('html, body').animate({
4855              scrollTop: $(hash).offset().top - parseInt(offset.size)
4856            }, 800);
4857          });
4858        });
4859      },
4860      populateTOC: function populateTOC() {
4861        var $self = this;
4862        this.listItemPointer = 0;
4863        var elementSettings = this.getElementSettings();
4864
4865        if (elementSettings.custom_style == 'yes') {
4866          this.elements.$widgetContainer.html(this.createSideDot());
4867        } else {
4868          if (elementSettings.hierarchical_view) {
4869            this.createNestedList();
4870          } else {
4871            this.createFlatList();
4872          }
4873        }
4874
4875        this.$listItemTexts = this.$element.find(".skt-toc__list-item-text");
4876        this.$listItemTexts.on("click", this.onListItemClick.bind(this));
4877
4878        if (!elementorFrontend.isEditMode()) {
4879          this.followAnchors();
4880        }
4881
4882        $(window).on('scroll', function () {
4883          if ("window_top" === elementSettings.scroll_to_top_option) {
4884            if ($(window).scrollTop() > 0) {
4885              $self.elements.$scrollTop.show();
4886            } else {
4887              $self.elements.$scrollTop.hide();
4888            }
4889          } else {
4890            var $id = $self.getID().parents('.elementor-widget-wrap');
4891
4892            if ($id.offset().top >= $(window).scrollTop()) {
4893              $self.elements.$scrollTop.hide();
4894            } else {
4895              $self.elements.$scrollTop.show();
4896            }
4897          }
4898        });
4899      },
4900      createNestedList: function createNestedList() {
4901        var $self = this;
4902        this.headingsData.forEach(function (heading, index) {
4903          heading.level = 0;
4904
4905          for (var i = index - 1; i >= 0; i--) {
4906            var currentOrderedItem = $self.headingsData[i];
4907
4908            if (currentOrderedItem.tag <= heading.tag) {
4909              heading.level = currentOrderedItem.level;
4910
4911              if (currentOrderedItem.tag < heading.tag) {
4912                heading.level++;
4913              }
4914
4915              break;
4916            }
4917          }
4918        });
4919        this.elements.$tocBody.html(this.getNestedLevel(0));
4920      },
4921      createFlatList: function createFlatList() {
4922        this.elements.$tocBody.html(this.getNestedLevel());
4923      },
4924      createSideDot: function createSideDot(level) {
4925        var settings = this.getSettings(),
4926            elementSettings = this.getElementSettings(),
4927            icon = this.getElementSettings("icon"),
4928            htmlul = '';
4929
4930        if (elementSettings.custom_style == 'yes') {
4931          htmlul += "<div class=\"".concat(elementSettings.custom_style_list, "\">\n                    <div class=\"skt-toc \">\n                    <ul class=\"skt-toc-items\" style=\"list-style: none;\">\n                        <li>");
4932
4933          if (elementSettings.custom_style_list == 'skt-toc-slide-style') {
4934            htmlul += "<".concat(elementSettings.html_tag, " class=\"skt-toc-title\"><span>").concat(elementSettings.widget_title, "<span></").concat(elementSettings.html_tag, ">");
4935          } else {
4936            htmlul += "<".concat(elementSettings.html_tag, " class=\"skt-toc-title\">").concat(elementSettings.widget_title, "</").concat(elementSettings.html_tag, ">");
4937          }
4938
4939          htmlul += "<".concat(settings.listWrapperTag, " class=\"skt-toc-items-inner\">");
4940
4941          for (var i = 0; i < this.headingsData.length; i++) {
4942            var list = '';
4943            var currentItemDot = this.headingsData[i];
4944
4945            if (level > currentItemDot.level) {
4946              break;
4947            }
4948
4949            var listItemTextClasses = settings.classes.listItemText;
4950
4951            if (0 === currentItemDot.level) {
4952              // If the current list item is a top level item, give it the first level class
4953              listItemTextClasses += " " + settings.classes.firstLevelListItem;
4954            }
4955
4956            if (level === currentItemDot.level) {
4957              list += "<li class=\"skt-toc-entry ".concat(settings.classes.listItem, "\">");
4958
4959              if ('bullets' === elementSettings.marker_view && icon && elementSettings.custom_style_list == 'skt-toc-slide-style') {
4960                list += "<i class=\"".concat(icon.value, "\"></i>");
4961              }
4962
4963              list += "<a href=\"#".concat(currentItemDot.anchorLink, "\" class=\"").concat(listItemTextClasses, "\"><span>").concat(currentItemDot.text, "</span></a>");
4964              list += "</li>";
4965            }
4966
4967            htmlul += list;
4968          }
4969
4970          htmlul += "</".concat(settings.listWrapperTag, ">");
4971          htmlul += "</li>\n                    </ul>";
4972        }
4973
4974        return htmlul;
4975      },
4976      getNestedLevel: function getNestedLevel(level) {
4977        var settings = this.getSettings(),
4978            elementSettings = this.getElementSettings(),
4979            icon = this.getElementSettings("icon");
4980        var html = ''; // Open new list/nested list
4981
4982        html += "<" + settings.listWrapperTag + ' class="' + settings.classes.listWrapper + '">'; // for each list item, build its markup.
4983
4984        while (this.listItemPointer < this.headingsData.length) {
4985          var currentItem = this.headingsData[this.listItemPointer];
4986          var listItemTextClasses = settings.classes.listItemText;
4987
4988          if (0 === currentItem.level) {
4989            // If the current list item is a top level item, give it the first level class
4990            listItemTextClasses += " " + settings.classes.firstLevelListItem;
4991          }
4992
4993          if (level > currentItem.level) {
4994            break;
4995          }
4996
4997          if (level === currentItem.level) {
4998            html += '<li class="' + settings.classes.listItem + " " + "level-" + level + '">';
4999            html += '<div class="' + settings.classes.listTextWrapper + '">';
5000            var liContent = '<a href="#' + currentItem.anchorLink + '" class="' + listItemTextClasses + '">' + currentItem.text + "</a>"; // If list type is bullets, add the bullet icon as an <i> tag
5001
5002            if ("bullets" === elementSettings.marker_view && icon) {
5003              liContent = '<i class="' + icon.value + '"></i>' + liContent;
5004            }
5005
5006            html += liContent;
5007            html += "</div>";
5008            this.listItemPointer++;
5009            var nextItem = this.headingsData[this.listItemPointer];
5010
5011            if (nextItem && level < nextItem.level) {
5012              // If a new nested list has to be created under the current item,
5013              // this entire method is called recursively (outside the while loop, a list wrapper is created)
5014              html += this.getNestedLevel(nextItem.level);
5015            }
5016
5017            html += "</li>";
5018          }
5019        }
5020
5021        html += "</" + settings.listWrapperTag + ">";
5022        return html;
5023      },
5024      handleNoHeadingsFound: function handleNoHeadingsFound() {
5025        var _messages = 'No headings were found on this page.';
5026
5027        if (elementorFrontend.isEditMode()) {
5028          return this.elements.$tocBody.html(_messages);
5029        }
5030      },
5031      collapseOnInit: function collapseOnInit() {
5032        var $self = this;
5033        var minimizedOn = this.getElementSettings("minimized_on"),
5034            currentDeviceMode = elementorFrontend.getCurrentDeviceMode();
5035
5036        if ("" !== minimizedOn && "array" !== typeof minimizedOn) {
5037          minimizedOn = [minimizedOn];
5038        }
5039
5040        if (0 !== minimizedOn.length && "object" === _typeof(minimizedOn)) {
5041          minimizedOn.forEach(function (value) {
5042            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) {
5043              $self.collapseBox();
5044            }
5045          });
5046        }
5047      },
5048      getHeadingAnchorLink: function getHeadingAnchorLink(index, classes) {
5049        var headingID = this.elements.$headings[index].id,
5050            wrapperID = this.elements.$headings[index].closest('.elementor-widget').id;
5051        var anchorLink = '';
5052
5053        if (headingID) {
5054          anchorLink = headingID;
5055        } else if (wrapperID) {
5056          // If the heading itself has an ID, we don't want to overwrite it
5057          anchorLink = wrapperID;
5058        } // If there is no existing ID, use the heading text to create a semantic ID
5059
5060
5061        if (headingID || wrapperID) {
5062          jQuery(this.elements.$headings[index]).data('hasOwnID', true);
5063        } else {
5064          anchorLink = "".concat(classes.headingAnchor, "-").concat(index);
5065        }
5066
5067        return anchorLink;
5068      },
5069      setHeadingsData: function setHeadingsData() {
5070        var $this = this;
5071        this.headingsData = [];
5072        var classes = this.getSettings("classes"); // Create an array for simplifying TOC list creation
5073
5074        this.elements.$headings.each(function (index, element) {
5075          var anchorLink = $this.getHeadingAnchorLink(index, classes);
5076          $this.headingsData.push({
5077            tag: +element.nodeName.slice(1),
5078            text: element.textContent,
5079            anchorLink: anchorLink
5080          });
5081        });
5082      },
5083      run: function run() {
5084        var elementSettings = this.getElementSettings();
5085        this.elements.$headings = this.getHeadings();
5086
5087        if (!this.elements.$headings.length) {
5088          return this.handleNoHeadingsFound();
5089        }
5090
5091        this.setHeadingsData();
5092
5093        if (!elementorFrontend.isEditMode()) {
5094          this.addAnchorsBeforeHeadings();
5095        }
5096
5097        this.populateTOC();
5098
5099        if (elementSettings.minimize_box) {
5100          this.collapseOnInit();
5101        }
5102
5103        if (elementSettings.sticky_toc_toggle) {
5104          this.handleStickyToc();
5105        }
5106
5107        if ("" !== elementSettings.scroll_offset.size) {
5108          this.setOffset();
5109        }
5110      },
5111      expandBox: function expandBox() {
5112        var boxHeight = this.getCurrentDeviceSetting("min_height");
5113        this.$element.removeClass(this.getSettings("classes.collapsed"));
5114        this.elements.$tocBody.slideDown(); // return container to the full height in case a min-height is defined by the user
5115
5116        this.elements.$widgetContainer.css("min-height", boxHeight.size + boxHeight.unit);
5117      },
5118      collapseBox: function collapseBox() {
5119        this.$element.addClass(this.getSettings("classes.collapsed"));
5120        this.elements.$tocBody.slideUp(); // close container in case a min-height is defined by the user
5121
5122        this.elements.$widgetContainer.css("min-height", "0px");
5123      },
5124      onInit: function onInit() {
5125        var $self = this;
5126        this.initElements();
5127        this.bindEvents();
5128        jQuery(document).ready(function () {
5129          $self.run();
5130        });
5131      },
5132      onListItemClick: function onListItemClick(event) {
5133        var $self = this;
5134        this.itemClicked = true;
5135        setTimeout(function () {
5136          return $self.itemClicked = false;
5137        }, 2000);
5138        var $clickedItem = jQuery(event.target),
5139            $list = $clickedItem.parent().next(),
5140            collapseNestedList = this.getElementSettings("collapse_subitems");
5141
5142        if ("SPAN" == $clickedItem[0].tagName && 'yes' == this.getElementSettings("custom_style")) {
5143          $clickedItem = jQuery(event.currentTarget);
5144        }
5145
5146        var listIsActive = void 0;
5147
5148        if (collapseNestedList && $clickedItem.hasClass(this.getSettings("classes.firstLevelListItem"))) {
5149          if ($list.is(":visible")) {
5150            listIsActive = true;
5151          }
5152        }
5153
5154        this.activateItem($clickedItem);
5155
5156        if (collapseNestedList && listIsActive) {
5157          $list.slideUp();
5158        }
5159      },
5160      handleStickyToc: function handleStickyToc() {
5161        var elementSettings = this.getElementSettings();
5162        var currentDeviceMode = elementorFrontend.getCurrentDeviceMode();
5163        var $devices = elementSettings.sticky_toc_disable_on;
5164        var target = this.getID();
5165        var type = elementSettings.sticky_toc_type;
5166
5167        if ("in-place" === type) {
5168          var parentWidth = target.parent().parent().outerWidth();
5169          target.css("width", parentWidth);
5170        } else if ("custom-position" === type) {
5171          var parentWidth = target.parent().parent().outerWidth();
5172          target.css("width", parentWidth);
5173        }
5174
5175        if (-1 == $.inArray(currentDeviceMode, $devices)) {
5176          target.removeClass('floating-toc');
5177          $(window).off('scroll', this.stickyScroll);
5178          return;
5179        }
5180
5181        $(window).on('scroll', $.proxy(this.stickyScroll, this));
5182      },
5183      stickyScroll: function stickyScroll() {
5184        var target = this.getID();
5185        var elementSettings = this.getElementSettings();
5186        var item = document.querySelector(".skt-table-of-contents");
5187        var bound, tocHeight;
5188        bound = item.getBoundingClientRect();
5189        tocHeight = target.outerHeight();
5190
5191        if (target.hasClass("floating-toc")) {
5192          target.parent().parent().css("height", tocHeight);
5193        } else {
5194          target.parent().parent().css("height", '');
5195        }
5196
5197        if (bound.y + bound.height / 2 < 0) {
5198          if (target.hasClass('floating-toc')) {
5199            return;
5200          }
5201
5202          target.addClass("floating-toc");
5203        } else {
5204          if (!target.hasClass('floating-toc')) {
5205            return;
5206          }
5207
5208          target.removeClass("floating-toc");
5209        }
5210      },
5211      scrollToTop: function scrollToTop() {
5212        var $self = this;
5213        var scrollTo = this.getElementSettings("scroll_to_top_option");
5214
5215        if ("window_top" === scrollTo) {
5216          $("html, body").animate({
5217            scrollTop: 0
5218          }, 250);
5219        } else {
5220          var $id = this.getID().parents('.skt-table-of-contents');
5221          $("html, body").animate({
5222            scrollTop: $($id).offset().top - 60
5223          }, 1000);
5224        }
5225      },
5226      getID: function getID() {
5227        return $("#skt-toc-" + this.$element[0].attributes["data-id"].nodeValue);
5228      }
5229    });
5230    elementorFrontend.hooks.addAction("frontend/element_ready/skt-table-of-contents.default", function ($scope) {
5231      elementorFrontend.elementsHandler.addHandler(SktTOC, {
5232        $element: $scope
5233      });
5234    });
5235	
5236  });
5237})(jQuery, Skt, 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.