/*! elementor-pro - v4.1.0 - 23-06-2026 */
"use strict";
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["slides"],{
/***/ "../modules/slides/assets/js/frontend/handlers/slides.js"
/*!***************************************************************!*\
!*** ../modules/slides/assets/js/frontend/handlers/slides.js ***!
\***************************************************************/
(__unused_webpack_module, exports) {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
class SlidesHandler extends elementorModules.frontend.handlers.SwiperBase {
getDefaultSettings() {
return {
selectors: {
slider: '.elementor-slides-wrapper',
slide: '.swiper-slide',
slideInnerContents: '.swiper-slide-contents',
activeSlide: '.swiper-slide-active',
activeDuplicate: '.swiper-slide-duplicate-active'
},
classes: {
animated: 'animated',
kenBurnsActive: 'elementor-ken-burns--active',
slideBackground: 'swiper-slide-bg'
},
attributes: {
dataSliderOptions: 'slider_options',
dataAnimation: 'animation'
}
};
}
getDefaultElements() {
const selectors = this.getSettings('selectors'),
elements = {
$swiperContainer: this.$element.find(selectors.slider)
};
elements.$slides = elements.$swiperContainer.find(selectors.slide);
return elements;
}
getSwiperOptions() {
const elementSettings = this.getElementSettings(),
swiperOptions = {
autoplay: this.getAutoplayConfig(),
grabCursor: true,
initialSlide: this.getInitialSlide(),
slidesPerView: 1,
slidesPerGroup: 1,
loop: 'yes' === elementSettings.infinite,
speed: elementSettings.transition_speed,
effect: elementSettings.transition,
observeParents: true,
observer: true,
handleElementorBreakpoints: true,
on: {
slideChange: () => {
this.handleKenBurns();
}
}
};
const showArrows = 'arrows' === elementSettings.navigation || 'both' === elementSettings.navigation,
pagination = 'dots' === elementSettings.navigation || 'both' === elementSettings.navigation;
if (showArrows) {
swiperOptions.navigation = {
prevEl: '.elementor-swiper-button-prev',
nextEl: '.elementor-swiper-button-next'
};
}
if (pagination) {
swiperOptions.pagination = {
el: '.swiper-pagination',
type: 'bullets',
clickable: true
};
}
if (true === swiperOptions.loop) {
swiperOptions.loopedSlides = this.getSlidesCount();
}
if ('fade' === swiperOptions.effect) {
swiperOptions.fadeEffect = {
crossFade: true
};
}
return swiperOptions;
}
getAutoplayConfig() {
const elementSettings = this.getElementSettings();
if ('yes' !== elementSettings.autoplay) {
return false;
}
return {
stopOnLastSlide: true,
// Has no effect in infinite mode by default.
delay: elementSettings.autoplay_speed,
disableOnInteraction: 'yes' === elementSettings.pause_on_interaction
};
}
initSingleSlideAnimations() {
const settings = this.getSettings(),
animation = this.elements.$swiperContainer.data(settings.attributes.dataAnimation);
this.elements.$swiperContainer.find('.' + settings.classes.slideBackground).addClass(settings.classes.kenBurnsActive);
// If there is an animation, get the container of the slide's inner contents and add the animation classes to it
if (animation) {
this.elements.$swiperContainer.find(settings.selectors.slideInnerContents).addClass(settings.classes.animated + ' ' + animation);
}
}
async initSlider() {
const $slider = this.elements.$swiperContainer;
if (!$slider.length) {
return;
}
if (1 >= this.getSlidesCount()) {
return;
}
const Swiper = elementorFrontend.utils.swiper;
this.swiper = await new Swiper($slider, this.getSwiperOptions());
// Expose the swiper instance in the frontend
$slider.data('swiper', this.swiper);
// The Ken Burns effect will only apply on the specific slides that toggled the effect ON,
// since it depends on an additional class besides 'elementor-ken-burns--active'
this.handleKenBurns();
const elementSettings = this.getElementSettings();
if (elementSettings.pause_on_hover) {
this.togglePauseOnHover(true);
}
const settings = this.getSettings();
const animation = $slider.data(settings.attributes.dataAnimation);
if (!animation) {
return;
}
this.swiper.on('slideChangeTransitionStart', function () {
const $sliderContent = $slider.find(settings.selectors.slideInnerContents);
$sliderContent.removeClass(settings.classes.animated + ' ' + animation).hide();
});
this.swiper.on('slideChangeTransitionEnd', function () {
const $currentSlide = $slider.find(settings.selectors.slideInnerContents);
$currentSlide.show().addClass(settings.classes.animated + ' ' + animation);
});
}
onInit() {
elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
if (2 > this.getSlidesCount()) {
this.initSingleSlideAnimations();
return;
}
this.initSlider();
}
getChangeableProperties() {
return {
pause_on_hover: 'pauseOnHover',
pause_on_interaction: 'disableOnInteraction',
autoplay_speed: 'delay',
transition_speed: 'speed'
};
}
updateSwiperOption(propertyName) {
if (0 === propertyName.indexOf('width')) {
this.swiper.update();
return;
}
const elementSettings = this.getElementSettings(),
newSettingValue = elementSettings[propertyName],
changeableProperties = this.getChangeableProperties();
let propertyToUpdate = changeableProperties[propertyName],
valueToUpdate = newSettingValue;
// Handle special cases where the value to update is not the value that the Swiper library accepts
switch (propertyName) {
case 'autoplay_speed':
propertyToUpdate = 'autoplay';
valueToUpdate = {
delay: newSettingValue,
disableOnInteraction: 'yes' === elementSettings.pause_on_interaction
};
break;
case 'pause_on_hover':
this.togglePauseOnHover('yes' === newSettingValue);
break;
case 'pause_on_interaction':
valueToUpdate = 'yes' === newSettingValue;
break;
}
// 'pause_on_hover' is implemented by the handler with event listeners, not the Swiper library
if ('pause_on_hover' !== propertyName) {
this.swiper.params[propertyToUpdate] = valueToUpdate;
}
this.swiper.update();
}
onElementChange(propertyName) {
if (1 >= this.getSlidesCount()) {
return;
}
const changeableProperties = this.getChangeableProperties();
if (Object.prototype.hasOwnProperty.call(changeableProperties, propertyName)) {
this.updateSwiperOption(propertyName);
this.swiper.autoplay.start();
}
}
onEditSettingsChange(propertyName) {
if (1 >= this.getSlidesCount()) {
return;
}
if ('activeItemIndex' === propertyName) {
this.swiper.slideToLoop(this.getEditSettings('activeItemIndex') - 1);
this.swiper.autoplay.stop();
}
}
}
exports["default"] = SlidesHandler;
/***/ }
}]);
//# sourceMappingURL=slides.d3c0669e9bff9567d186.bundle.js.map
Kwok One Joins Star-Studded Dutch Voice Cast of Kung Fu Panda 4 as Han
Kwok One has been tapped by Universal Studios to lend his voice to the Dutch version of Kung Fu Panda 4, bringing the character Han to life for audiences in the Netherlands. Han, a cunning Sunda pangolin and the leader of a notorious den of thieves, is originally voiced by Academy Award and Golden Globe winner Ke Huy Quan in the American release.
https://youtu.be/EB-0I096U0k?si=X6VOMsBm_om_CZFb
Dutch Voice Cast Shines with Familiar & New Talent
Fans of the franchise will be delighted to know that beloved voices return for the Dutch release, including Martijn Fischer reprising his role as Po and Rik Felderhof as Master Shifu. Joining them are fresh voices that inject new energy into the animated adventure:
- Linda Wagenmakers as Zhen
- Lucretia van der Vloot as the Chameleon
- Patty Brard as Granny Boar
- Kwok One as Han
- Phi Nguyen as Captain Fish
- Murth Mossel as Bear
https://youtu.be/kRhqWYF5CiY?si=jolYC8c1PgMMzg-g
Subscribe to newsletter
Enter your email to get exclusive updates.