1!function (e) { 2 window.alpusFlexbox = window.alpusFlexbox || {}, 3 e(window).on("elementor/frontend/init", (function () { 4 if (elementorFrontend && elementorModules.frontend) { 5 class e extends elementorModules.frontend.handlers.SwiperBase { 6 getDefaultSettings() { 7 return { 8 selectors: { 9 slider: ".elementor-slides-wrapper", 10 slide: ".swiper-slide", 11 slideInnerContents: ".swiper-slide-contents", 12 activeSlide: ".swiper-slide-active", 13 activeDuplicate: ".swiper-slide-duplicate-active" 14 }, 15 classes: { 16 animated: "animated", 17 kenBurnsActive: "elementor-ken-burns--active", 18 slideBackground: "swiper-slide-bg" 19 }, 20 attributes: { 21 dataSliderOptions: "slider_options", 22 dataAnimation: "animation" 23 } 24 } 25 } 26 getDefaultElements() { 27 const e = this.getSettings("selectors") 28 , t = { 29 $swiperContainer: this.$element.find(e.slider) 30 }; 31 return t.$slides = t.$swiperContainer.find(e.slide), 32 t 33 } 34 getSwiperOptions() { 35 const e = this.getElementSettings() 36 , t = +e.slides_to_show || 1 37 , s = 1 === t 38 , i = elementorFrontend.config.responsive.activeBreakpoints 39 , n = { 40 mobile: 1, 41 tablet: s ? 1 : 2 42 } 43 , a = { 44 autoplay: this.getAutoplayConfig(), 45 grabCursor: !0, 46 initialSlide: this.getInitialSlide(), 47 slidesPerView: t, 48 slidesPerGroup: 1, 49 parallax: "parallax" === e.transition, 50 loop: "yes" === e.infinite, 51 centeredSlides: "yes" === e.center_mode, 52 speed: e.transition_speed, 53 effect: e.transition, 54 observeParents: !0, 55 observer: !0, 56 handleElementorBreakpoints: 0, 57 watchSlidesProgress: true, 58 on: { 59 slideChange: () => { 60 this.handleKenBurns() 61 } 62 }, 63 breakpoints: {} 64 }; 65 let o = t; 66 Object.keys(i).reverse().forEach((t => { 67 const s = n[t] ? n[t] : o; 68 a.breakpoints[i[t].value + 1] = { 69 slidesPerView: +e["slides_to_show_" + t] || s, 70 slidesPerGroup: +e["slides_to_scroll_" + t] || 1 71 }, 72 e.slide_spacing && (a.breakpoints[i[t].value + 1].spaceBetween = this.getSpaceBetween(t)), 73 o = +e["slides_to_show_" + t] || s 74 } 75 )), 76 e.slide_spacing && (a.spaceBetween = this.get
76SpaceBetween()); 77 const r = "arrows" === e.navigation || "both" === e.navigation 78 , l = "dots" === e.navigation || "both" === e.navigation; 79 return r && (a.navigation = { 80 prevEl: ".elementor-swiper-button-prev", 81 nextEl: ".elementor-swiper-button-next" 82 }), 83 e.autoheight && (a.autoHeight = 1), 84 e.disable_drag && (a.allowTouchMove = !1), 85 l && e.pagination && (a.pagination = { 86 el: ".swiper-pagination", 87 type: e.pagination, 88 clickable: !0 89 }, 90 "dynamic" == e.pagination && (a.pagination.dynamicBullets = !0, 91 delete a.pagination.type)), 92 !0 === a.loop && (a.loopedSlides = this.getSlidesCount()), 93 s ? "fade" === a.effect && (a.fadeEffect = { 94 crossFade: !0 95 }) : a.slidesPerGroup = +e.slides_to_scroll || 1, 96 "coverflow" == a.effect ? a.coverflowEffect = { 97 rotate: 50, 98 stretch: 0, 99 depth: 100, 100 modifier: 1, 101 slideShadows: !0 102 } : "creative" == a.effect ? a.creativeEffect = { 103 prev: { 104 shadow: !0, 105 translate: [0, 0, -400] 106 }, 107 next: { 108 translate: ["100%", 0, 0] 109 } 110 } : "creative2" == a.effect ? (a.effect = "creative", 111 a.creativeEffect = { 112 perspective: !0, 113 limitProgress: 2, 114 shadowPerProgress: !0, 115 prev: { 116 shadow: !0, 117 translate: ["-10%", 0, -200], 118 rotate: [0, 0, -2] 119 }, 120 next: { 121 shadow: !1, 122 translate: ["120%", 0, 0] 123 } 124 }) : "creative3" == a.effect ? (a.effect = "creative", 125 a.creativeEffect = { 126 prev: { 127 shadow: !0, 128 translate: ["-125%", 0, -800], 129 rotate: [0, 0, -90] 130 }, 131 next: { 132 shadow: !0, 133 translate: ["125%", 0, -800], 134 rotate: [0, 0, 90] 135 } 136 }) : "creative4" == a.effect ? (a.effect = "creative", 137 a.creativeEffect = { 138 prev: { 139 shadow: !0, 140 origin: "left center", 141 translate: ["-5%", 0, -200], 142 rotate: [0, 100, 0] 143 }, 144 next: { 145 origin: "right center", 146 translate: ["5%", 0, -200], 147 rotate: [0, -100, 0] 148 } 149 }) : "cube" == a.effect ? a.cubeEffect = { 150 shadow: !0, 151 slideShadows: !0, 152 shadowOffset: 20, 153 shadowScale: .94 154 } : "coverflow2" == a.effect && (a.effect = "coverflow", 155 a.coverflowEffect = { 156 rotate: 0, 157 stretch: 0, 158 depth: 100, 159 modifier: 3, 160 slideShadows: !0 161 }), 162 a 163 } 164 getAutoplayConfig() { 165 const e = this.getElementSettings();
166 return "yes" === e.autoplay && { 167 stopOnLastSlide: !0, 168 delay: e.autoplay_speed, 169 disableOnInteraction: "yes" === e.pause_on_interaction 170 } 171 } 172 initSingleSlideAnimations() { 173 const e = this.getSettings() 174 , t = this.elements.$swiperContainer.data(e.attributes.dataAnimation); 175 this.elements.$swiperContainer.find("." + e.classes.slideBackground).addClass(e.classes.kenBurnsActive), 176 t && this.elements.$swiperContainer.find(e.selectors.slideInnerContents).addClass(e.classes.animated + " " + t) 177 } 178 adjustConfig(config) { 179 const elementorBreakpoints = elementorFrontend.config.responsive.activeBreakpoints, 180 elementorBreakpointValues = elementorFrontend.breakpoints.getBreakpointValues(); 181 Object.keys(config.breakpoints).forEach(configBPKey => { 182 const configBPKeyInt = parseInt(configBPKey); 183 let breakpointToUpdate; 184 185 // The `configBPKeyInt + 1` is a BC Fix for Elementor Pro Carousels from 2.8.0-2.8.3 used with Elementor >= 2.9.0 186 if (configBPKeyInt === elementorBreakpoints.mobile.value + 1 || configBPKeyInt + 1 === elementorBreakpoints.mobile.value + 1) { 187 // This handles the mobile breakpoint. Elementor's default sm breakpoint is never actually used, 188 // so the mobile breakpoint (md) needs to be handled separately and set to the 0 breakpoint (xs) 189 breakpointToUpdate = 0; 190 } else if (elementorBreakpoints.widescreen && (configBPKeyInt === elementorBreakpoints.widescreen.value + 1 || configBPKeyInt + 1 === elementorBreakpoints.widescreen.value + 1)) {
191 // Widescreen is a min-width breakpoint. Since in Swiper >5.0 the breakpoint system is min-width based, 192 // the value we pass to the Swiper instance in this case is the breakpoint from the user, unchanged. 193 breakpointToUpdate = configBPKeyInt; 194 } else { 195 // Find the index of the current config breakpoint in the Elementor Breakpoints array 196 const currentBPIndexInElementorBPs = elementorBreakpointValues.findIndex(elementorBP => { 197 // BC Fix for Elementor Pro Carousels from 2.8.0-2.8.3 used with Elementor >= 2.9.0 198 return configBPKeyInt === elementorBP + 1 || configBPKeyInt + 1 === elementorBP + 1; 199 }); 200 201 // For all other Swiper config breakpoints, move them one breakpoint down on the breakpoint list, 202 // according to the array of Elementor's global breakpoints 203 breakpointToUpdate = elementorBreakpointValues[currentBPIndexInElementorBPs - 1] + 1; 204 } 205 config.breakpoints[breakpointToUpdate] = config.breakpoints[configBPKey]; 206 207 // Then reset the settings in the original breakpoint key to the default values 208 config.breakpoints[configBPKey] = { 209 slidesPerView: config.slidesPerView, 210 slidesPerGroup: config.slidesPerGroup ? config.slidesPerGroup : 1 211 }; 212 }); 213 return config; 214 } 215 async initSlider() { 216 const e = this.elements.$swiperContainer; 217 if (!e.length) 218 return; 219 if (1 >= this.getSlidesCount()) 220 return; 221 const t = elementorFrontend.utils.swiper; 222 var s = this.getSwiperOptions(); 223 this.adjustConfig(s); 224 this.swiper = await new t(e, s), 225 e.data("swiper", this.swiper), 226 this.handleKenBurns(); 227 const i = this.getElementSettings(); 228 "creative2" == i.transition && this.elements.$swiperContainer.css("overflow", "visible"), 229 i.pause_on_hover && this.togglePauseOnHover(!0); 230 const n = this.getSettings() 231 , a = e.data(n.attributes.dataAnimation); 232 this.$element.filter(function () { 233 var $anim_obj = jQuery(this).find('.elementor-invisible'); 234 if ($anim_obj.length) { 235 $anim_obj.addClass('slide-animate'); 236 return true; 237 } 238 return false; 239 }) 240 var timers = []; 241 this.swiper.on("slideChangeTransitionStart", (function () { 242 e.find(n.selectors.slideInnerContents).removeClass(n.classes.animated + " " + a).hide() 243 244 if (timers.length) { 245 for (var i = 0; i < timers.length; i++) { 246 clearTimeout(timers[i]); 247 } 248 timers = []; 249 } 250 251 // Hide elements inside carousel 252 e.find('[data-plugin-animated-letters]').addClass('invisible'); 253 // Animated Letters 254 e.find('[data-plugin-animated-letters]').trigger('animated.letters.destroy'); 255 256 var $active = jQuery(this.$el).find('.swiper-slide-active'); 257 $active.find('.elementor-invisible').each(function () { 258 var $animation_item = jQuery(this), 259 settings = $animation_item.data('settings');
260 if (settings && (settings._animation || settings.animation)) { 261 var animation = settings._animation || settings.animation, 262 delay = settings._animation_delay || settings.animation_delay || 0; 263 var _resTimer = setTimeout(function () { 264 $animation_item.removeClass('elementor-invisible').addClass('animated ' + animation); 265 }, delay); 266 timers.push(_resTimer); 267 } 268 }); 269 } 270 )), 271 this.swiper.on("slideChangeTransitionEnd", (function () { 272 e.find(n.selectors.slideInnerContents).show().addClass(n.classes.animated + " " + a) 273 // Animated Letters 274 e.find('[data-plugin-animated-letters]').removeClass('invisible'); 275 e.find('.swiper-slide-active [data-plugin-animated-letters]').trigger('animated.letters.initialize'); 276 // if ( timers.length ) { 277 // for (var i = 0; i < timers.length; i++) { 278 // clearTimeout(timers[i]); 279 // } 280 // timers = []; 281 // } 282 var $this = jQuery(this.$el); 283 $this.find('.swiper-slide:not(.swiper-slide-active) .slide-animate').addClass('elementor-invisible').each(function () { 284 var $animation_item = jQuery(this), 285 settings = $animation_item.data('settings'); 286 if (settings._animation || settings.animation) { 287 $animation_item.removeClass(settings._animation || settings.animation).removeClass('animated'); 288 } 289 }); 290 } 291 )) 292 if (typeof jQuery.fn.themePluginLazyLoad == 'function') { 293 this.$element.find('.swiper-slide-duplicate .porto-lazyload:not(.lazy-load-loaded)').themePluginLazyLoad({ effect: 'fadeIn', effect_speed: 400 }) 294 } 295 } 296 onInit() { 297 let index = 1; 298 var $slider = this.$element; 299 elementorFrontend.isEditMode() && this.findElement(".alpus-nested-slider>.e-con").each((function () { 300 if (!jQuery(this).parent().hasClass('swiper-slide')) { 301 $slider.find('.swiper-slide:nth-child(' + index + ')').append(jQuery(this)); 302 } 303 index++; 304 } 305 )); 306 elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments), 307 2 > this.getSlidesCount() ? this.initSingleSlideAnimations() : this.initSlider() 308 } 309 getChangeableProperties() { 310 return { 311 pause_on_hover: "pauseOnHover", 312 pause_on_interaction: "disableOnInteraction", 313 autoplay_speed: "delay", 314 transition_speed: "speed" 315 } 316 } 317 updateSwiperOption(e) { 318 if (0 === e.indexOf("width")) 319 return void this.swiper.update(); 320 const t = this.getElementSettings() 321 , s = t[e]; 322 let i = this.getChangeableProperties()[e] 323 , n = s; 324 switch (e) { 325 case "autoplay_speed": 326 i = "autoplay", 327 n = { 328 stopOnLastSlide: !0, 329 delay: s, 330 disableOnInteraction: "yes" === t.pause_on_interaction 331 }; 332 break; 333 case "pause_on_hover": 334 this.togglePauseOnHover("yes" === s); 335 break; 336 case "pause_on_interaction": 337 n = "yes" === s 338 } 339 "pause_on_hover" !== e && (this.swiper.params[i] = n),
340 this.swiper.update() 341 } 342 onElementChange(e) { 343 if (0 === e.indexOf("slide_spacing")) 344 return void this.updateSpaceBetween(e); 345 if (1 >= this.getSlidesCount()) 346 return; 347 const t = this.getChangeableProperties(); 348 Object.prototype.hasOwnProperty.call(t, e) && (this.updateSwiperOption(e), 349 this.swiper.autoplay.start()) 350 } 351 getSpaceBetween() { 352 let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null; 353 return elementorFrontend.utils.controls.getResponsiveControlValue(this.getElementSettings(), "slide_spacing", "size", e) || 0 354 } 355 updateSpaceBetween(e) { 356 const t = e.match("slide_spacing_(.*)") 357 , s = t ? t[1] : "desktop" 358 , i = this.getSpaceBetween(s); 359 if ("desktop" !== s) { 360 if (typeof this.swiper.params.breakpoints[elementorFrontend.config.responsive.activeBreakpoints[s].value] == 'undefined') { 361 this.swiper.params.breakpoints[elementorFrontend.config.responsive.activeBreakpoints[s].value] = []; 362 } 363 this.swiper.params.breakpoints[elementorFrontend.config.responsive.activeBreakpoints[s].value].spaceBetween = i 364 } 365 this.swiper.params.spaceBetween = i; 366 this.swiper.update(); 367 } 368 onEditSettingsChange(e) { 369 1 >= this.getSlidesCount() || "activeItemIndex" === e && (this.swiper.slideToLoop(this.getEditSettings("activeItemIndex") - 1), 370 this.swiper.autoplay.stop()) 371 } 372 } 373 alpusFlexbox.SlidesHandler = e, 374 elementorFrontend.elementsHandler.attachHandler("alpus-nested-slider", e) 375 } 376 } 377 )) 378}(window.jQuery);
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.