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.