Ubuntu

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ /*! elementor - v3.4.4 - 13-09-2021 */ (self["webpackChunkelementor"] = self["webpackChunkelementor"] || []).push([["preloaded-modules"],{ /***/ "../assets/dev/js/frontend/handlers/accordion.js": /*!*******************************************************!*\ !*** ../assets/dev/js/frontend/handlers/accordion.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; var _baseTabs = _interopRequireDefault(__webpack_require__(/*! ./base-tabs */ "../assets/dev/js/frontend/handlers/base-tabs.js")); class Accordion extends _baseTabs.default { getDefaultSettings() { const defaultSettings = super.getDefaultSettings(); return { ...defaultSettings, showTabFn: 'slideDown', hideTabFn: 'slideUp' }; } } exports.default = Accordion; /***/ }), /***/ "../assets/dev/js/frontend/handlers/alert.js": /*!***************************************************!*\ !*** ../assets/dev/js/frontend/handlers/alert.js ***! \***************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; class Alert extends elementorModules.frontend.handlers.Base { getDefaultSettings() { return { selectors: { dismissButton: '.elementor-alert-dismiss' } }; } getDefaultElements() { const selectors = this.getSettings('selectors'); return { $dismissButton: this.$element.find(selectors.dismissButton) }; } bindEvents() { this.elements.$dismissButton.on('click', this.onDismissButtonClick.bind(this)); } onDismissButtonClick() { this.$element.fadeOut(); } } exports.default = Alert; /***/ }), /***/ "../assets/dev/js/frontend/handlers/base-tabs.js": /*!*******************************************************!*\ !*** ../assets/dev/js/frontend/handlers/base-tabs.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; class baseTabs extends elementorModules.frontend.handlers.Base { getDefaultSettings() { return { selectors: { tablist: '[role="tablist"]', tabTitle: '.elementor-tab-title', tabContent: '.elementor-tab-content' }, classes: { active: 'elementor-active' }, showTabFn: 'show', hideTabFn: 'hide', toggleSelf: true, hidePrevious: true, autoExpand: true, keyDirection: { ArrowLeft: elementorFrontendConfig.is_rtl ? 1 : -1, ArrowUp: -1, ArrowRight: elementorFrontendConfig.is_rtl ? -1 : 1, ArrowDown: 1 } }; } getDefaultElements() { const selectors = this.getSettings('selectors'); return { $tabTitles: this.findElement(selectors.tabTitle), $tabContents: this.findElement(selectors.tabContent) }; } activateDefaultTab() { const settings = this.getSettings(); if (!settings.autoExpand || 'editor' === settings.autoExpand && !this.isEdit) { return; } const defaultActiveTab = this.getEditSettings('activeItemIndex') || 1, originalToggleMethods = { showTabFn: settings.showTabFn, hideTabFn: settings.hideTabFn }; // Toggle tabs without animation to avoid jumping this.setSettings({ showTabFn: 'show', hideTabFn: 'hide' }); this.changeActiveTab(defaultActiveTab); // Return back original toggle effects this.setSettings(originalToggleMethods); } handleKeyboardNavigation(event) { const tab = event.currentTarget, $tabList = jQuery(tab.closest(this.getSettings('selectors').tablist)), $tabs = $tabList.find(this.getSettings('selectors').tabTitle), isVertical = 'vertical' === $tabList.attr('aria-orientation'); switch (event.key) { case 'ArrowLeft': case 'ArrowRight': if (isVertical) { return; } break; case 'ArrowUp': case 'ArrowDown': if (!isVertical) { return; } event.preventDefault(); break; case 'Home': event.preventDefault(); $tabs.first().focus(); return; case 'End': event.preventDefault(); $tabs.last().focus(); return; default: return; } const tabIndex = tab.getAttribute('data-tab') - 1, direction = this.getSettings('keyDirection')[event.key], nextTab = $tabs[tabIndex + direction]; if (nextTab) { nextTab.focus(); } else if (-1 === tabIndex + direction) { $tabs.last().focus(); } else { $tabs.first().focus(); } } deactivateActiveTab(tabIndex) { const settings = this.getSettings(), activeClass = settings.classes.active, activeFilter = tabIndex ? '[data-tab="' + tabIndex + '"]' : '.' + activeClass, $activeTitle = this.elements.$tabTitles.filter(activeFilter), $activeContent = this.elements.$tabContents.filter(activeFilter); $activeTitle.add($activeContent).removeClass(activeClass); $activeTitle.attr({ tabindex: '-1', 'aria-selected': 'false', 'aria-expanded': 'false' }); $activeContent[settings.hideTabFn](); $activeContent.attr('hidden', 'hidden'); } activateTab(tabIndex) { const settings = this.getSettings(), activeClass = settings.classes.active, $requestedTitle = this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]'), $requestedContent = this.elements.$tabContents.filter('[data-tab="' + tabIndex + '"]'), animationDuration = 'show' === settings.showTabFn ? 0 : 400; $requestedTitle.add($requestedContent).addClass(activeClass); $requestedTitle.attr({ tabindex: '0', 'aria-selected': 'true', 'aria-expanded': 'true' }); $requestedContent[settings.showTabFn](animationDuration, () => elementorFrontend.elements.$window.trigger('resize')); $requestedContent.removeAttr('hidden'); } isActiveTab(tabIndex) { return this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]').hasClass(this.getSettings('classes.active')); } bindEvents() { this.elements.$tabTitles.on({ keydown: event => { // Support for old markup that includes an `` tag in the tab if (jQuery(event.target).is('a') && `Enter` === event.key) { event.preventDefault(); } // We listen to keydowon event for these keys in order to prevent undesired page scrolling if (['End', 'Home', 'ArrowUp', 'ArrowDown'].includes(event.key)) { this.handleKeyboardNavigation(event); } }, keyup: event => { switch (event.key) { case 'ArrowLeft': case 'ArrowRight': this.handleKeyboardNavigation(event); break; case 'Enter': case 'Space': event.preventDefault(); this.changeActiveTab(event.currentTarget.getAttribute('data-tab')); break; } }, click: event => { event.preventDefault(); this.changeActiveTab(event.currentTarget.getAttribute('data-tab')); } }); } onInit(...args) { super.onInit(...args); this.activateDefaultTab(); } onEditSettingsChange(propertyName) { if ('activeItemIndex' === propertyName) { this.activateDefaultTab(); } } changeActiveTab(tabIndex) { const isActiveTab = this.isActiveTab(tabIndex), settings = this.getSettings(); if ((settings.toggleSelf || !isActiveTab) && settings.hidePrevious) { this.deactivateActiveTab(); } if (!settings.hidePrevious && isActiveTab) { this.deactivateActiveTab(tabIndex); } if (!isActiveTab) { this.activateTab(tabIndex); } } } exports.default = baseTabs; /***/ }), /***/ "../assets/dev/js/frontend/handlers/counter.js": /*!*****************************************************!*\ !*** ../assets/dev/js/frontend/handlers/counter.js ***! \*****************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; class Counter extends elementorModules.frontend.handlers.Base { getDefaultSettings() { return { selectors: { counterNumber: '.elementor-counter-number' } }; } getDefaultElements() { const selectors = this.getSettings('selectors'); return { $counterNumber: this.$element.find(selectors.counterNumber) }; } onInit() { super.onInit(); elementorFrontend.waypoint(this.elements.$counterNumber, () => { const data = this.elements.$counterNumber.data(), decimalDigits = data.toValue.toString().match(/\.(.*)/); if (decimalDigits) { data.rounding = decimalDigits[1].length; } this.elements.$counterNumber.numerator(data); }); } } exports.default = Counter; /***/ }), /***/ "../assets/dev/js/frontend/handlers/image-carousel.js": /*!************************************************************!*\ !*** ../assets/dev/js/frontend/handlers/image-carousel.js ***! \************************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; class ImageCarousel extends elementorModules.frontend.handlers.SwiperBase { getDefaultSettings() { return { selectors: { carousel: '.elementor-image-carousel-wrapper', slideContent: '.swiper-slide' } }; } getDefaultElements() { const selectors = this.getSettings('selectors'); const elements = { $swiperContainer: this.$element.find(selectors.carousel) }; elements.$slides = elements.$swiperContainer.find(selectors.slideContent); return elements; } getSwiperSettings() { const elementSettings = this.getElementSettings(), slidesToShow = +elementSettings.slides_to_show || 3, isSingleSlide = 1 === slidesToShow, elementorBreakpoints = elementorFrontend.config.responsive.activeBreakpoints, defaultSlidesToShowMap = { mobile: 1, tablet: isSingleSlide ? 1 : 2 }; const swiperOptions = { slidesPerView: slidesToShow, loop: 'yes' === elementSettings.infinite, speed: elementSettings.speed, handleElementorBreakpoints: true }; swiperOptions.breakpoints = {}; let lastBreakpointSlidesToShowValue = slidesToShow; Object.keys(elementorBreakpoints).reverse().forEach(breakpointName => { // Tablet has a specific default `slides_to_show`. const defaultSlidesToShow = defaultSlidesToShowMap[breakpointName] ? defaultSlidesToShowMap[breakpointName] : lastBreakpointSlidesToShowValue; swiperOptions.breakpoints[elementorBreakpoints[breakpointName].value] = { slidesPerView: +elementSettings['slides_to_show_' + breakpointName] || defaultSlidesToShow, slidesPerGroup: +elementSettings['slides_to_scroll_' + breakpointName] || 1 }; lastBreakpointSlidesToShowValue = +elementSettings['slides_to_show_' + breakpointName] || defaultSlidesToShow; }); if ('yes' === elementSettings.autoplay) { swiperOptions.autoplay = { delay: elementSettings.autoplay_speed, disableOnInteraction: 'yes' === elementSettings.pause_on_interaction }; } if (isSingleSlide) { swiperOptions.effect = elementSettings.effect; if ('fade' === elementSettings.effect) { swiperOptions.fadeEffect = { crossFade: true }; } } else { swiperOptions.slidesPerGroup = +elementSettings.slides_to_scroll || 1; } if (elementSettings.image_spacing_custom) { swiperOptions.spaceBetween = elementSettings.image_spacing_custom.size; } const showArrows = 'arrows' === elementSettings.navigation || 'both' === elementSettings.navigation, showDots = 'dots' === elementSettings.navigation || 'both' === elementSettings.navigation; if (showArrows) { swiperOptions.navigation = { prevEl: '.elementor-swiper-button-prev', nextEl: '.elementor-swiper-button-next' }; } if (showDots) { swiperOptions.pagination = { el: '.swiper-pagination', type: 'bullets', clickable: true }; } return swiperOptions; } async onInit(...args) { super.onInit(...args); const elementSettings = this.getElementSettings(); if (!this.elements.$swiperContainer.length || 2 > this.elements.$slides.length) { return; } const Swiper = elementorFrontend.utils.swiper; this.swiper = await new Swiper(this.elements.$swiperContainer, this.getSwiperSettings()); // Expose the swiper instance in the frontend this.elements.$swiperContainer.data('swiper', this.swiper); if ('yes' === elementSettings.pause_on_hover) { this.togglePauseOnHover(true); } } updateSwiperOption(propertyName) { const elementSettings = this.getElementSettings(), newSettingValue = elementSettings[propertyName], params = this.swiper.params; // Handle special cases where the value to update is not the value that the Swiper library accepts. switch (propertyName) { case 'image_spacing_custom': params.spaceBetween = newSettingValue.size || 0; break; case 'autoplay_speed': params.autoplay.delay = newSettingValue; break; case 'speed': params.speed = newSettingValue; break; } this.swiper.update(); } getChangeableProperties() { return { pause_on_hover: 'pauseOnHover', autoplay_speed: 'delay', speed: 'speed', image_spacing_custom: 'spaceBetween' }; } onElementChange(propertyName) { const changeableProperties = this.getChangeableProperties(); if (changeableProperties[propertyName]) { // 'pause_on_hover' is implemented by the handler with event listeners, not the Swiper library. if ('pause_on_hover' === propertyName) { const newSettingValue = this.getElementSettings('pause_on_hover'); this.togglePauseOnHover('yes' === newSettingValue); } else { this.updateSwiperOption(propertyName); } } } onEditSettingsChange(propertyName) { if ('activeItemIndex' === propertyName) { this.swiper.slideToLoop(this.getEditSettings('activeItemIndex') - 1); } } } exports.default = ImageCarousel; /***/ }), /***/ "../assets/dev/js/frontend/handlers/progress.js": /*!******************************************************!*\ !*** ../assets/dev/js/frontend/handlers/progress.js ***! \******************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; class Progress extends elementorModules.frontend.handlers.Base { getDefaultSettings() { return { selectors: { progressNumber: '.elementor-progress-bar' } }; } getDefaultElements() { const selectors = this.getSettings('selectors'); return { $progressNumber: this.$element.find(selectors.progressNumber) }; } onInit() { super.onInit(); elementorFrontend.waypoint(this.elements.$progressNumber, () => { const $progressbar = this.elements.$progressNumber; $progressbar.css('width', $progressbar.data('max') + '%'); }); } } exports.default = Progress; /***/ }), /***/ "../assets/dev/js/frontend/handlers/tabs.js": /*!**************************************************!*\ !*** ../assets/dev/js/frontend/handlers/tabs.js ***! \**************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; var _baseTabs = _interopRequireDefault(__webpack_require__(/*! ./base-tabs */ "../assets/dev/js/frontend/handlers/base-tabs.js")); class Tabs extends _baseTabs.default { getDefaultSettings() { const defaultSettings = super.getDefaultSettings(); return { ...defaultSettings, toggleSelf: false }; } } exports.default = Tabs; /***/ }), /***/ "../assets/dev/js/frontend/handlers/text-editor.js": /*!*********************************************************!*\ !*** ../assets/dev/js/frontend/handlers/text-editor.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; class TextEditor extends elementorModules.frontend.handlers.Base { getDefaultSettings() { return { selectors: { paragraph: 'p:first' }, classes: { dropCap: 'elementor-drop-cap', dropCapLetter: 'elementor-drop-cap-letter' } }; } getDefaultElements() { const selectors = this.getSettings('selectors'), classes = this.getSettings('classes'), $dropCap = jQuery('', { class: classes.dropCap }), $dropCapLetter = jQuery('', { class: classes.dropCapLetter }); $dropCap.append($dropCapLetter); return { $paragraph: this.$element.find(selectors.paragraph), $dropCap: $dropCap, $dropCapLetter: $dropCapLetter }; } wrapDropCap() { const isDropCapEnabled = this.getElementSettings('drop_cap'); if (!isDropCapEnabled) { // If there is an old drop cap inside the paragraph if (this.dropCapLetter) { this.elements.$dropCap.remove(); this.elements.$paragraph.prepend(this.dropCapLetter); this.dropCapLetter = ''; } return; } const $paragraph = this.elements.$paragraph; if (!$paragraph.length) { return; } const paragraphContent = $paragraph.html().replace(/ /g, ' '), firstLetterMatch = paragraphContent.match(/^ *([^ ] ?)/); if (!firstLetterMatch) { return; } const firstLetter = firstLetterMatch[1], trimmedFirstLetter = firstLetter.trim(); // Don't apply drop cap when the content starting with an HTML tag if ('<' === trimmedFirstLetter) { return; } this.dropCapLetter = firstLetter; this.elements.$dropCapLetter.text(trimmedFirstLetter); const restoredParagraphContent = paragraphContent.slice(firstLetter.length).replace(/^ */, match => { return new Array(match.length + 1).join(' '); }); $paragraph.html(restoredParagraphContent).prepend(this.elements.$dropCap); } onInit(...args) { super.onInit(...args); this.wrapDropCap(); } onElementChange(propertyName) { if ('drop_cap' === propertyName) { this.wrapDropCap(); } } } exports.default = TextEditor; /***/ }), /***/ "../assets/dev/js/frontend/handlers/toggle.js": /*!****************************************************!*\ !*** ../assets/dev/js/frontend/handlers/toggle.js ***! \****************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; var _baseTabs = _interopRequireDefault(__webpack_require__(/*! ./base-tabs */ "../assets/dev/js/frontend/handlers/base-tabs.js")); class Toggle extends _baseTabs.default { getDefaultSettings() { const defaultSettings = super.getDefaultSettings(); return { ...defaultSettings, showTabFn: 'slideDown', hideTabFn: 'slideUp', hidePrevious: false, autoExpand: 'editor' }; } } exports.default = Toggle; /***/ }), /***/ "../assets/dev/js/frontend/handlers/video.js": /*!***************************************************!*\ !*** ../assets/dev/js/frontend/handlers/video.js ***! \***************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; class Video extends elementorModules.frontend.handlers.Base { getDefaultSettings() { return { selectors: { imageOverlay: '.elementor-custom-embed-image-overlay', video: '.elementor-video', videoIframe: '.elementor-video-iframe' } }; } getDefaultElements() { const selectors = this.getSettings('selectors'); return { $imageOverlay: this.$element.find(selectors.imageOverlay), $video: this.$element.find(selectors.video), $videoIframe: this.$element.find(selectors.videoIframe) }; } handleVideo() { if (this.getElementSettings('lightbox')) { return; } if ('youtube' === this.getElementSettings('video_type')) { this.apiProvider.onApiReady(apiObject => { this.elements.$imageOverlay.remove(); this.prepareYTVideo(apiObject, true); }); } else { this.elements.$imageOverlay.remove(); this.playVideo(); } } playVideo() { if (this.elements.$video.length) { // this.youtubePlayer exists only for YouTube videos, and its play function is different. if (this.youtubePlayer) { this.youtubePlayer.playVideo(); } else { this.elements.$video[0].play(); } return; } const $videoIframe = this.elements.$videoIframe, lazyLoad = $videoIframe.data('lazy-load'); if (lazyLoad) { $videoIframe.attr('src', lazyLoad); } $videoIframe[0].src = this.apiProvider.getAutoplayURL($videoIframe[0].src); } async animateVideo() { const lightbox = await elementorFrontend.utils.lightbox; lightbox.setEntranceAnimation(this.getCurrentDeviceSetting('lightbox_content_animation')); } async handleAspectRatio() { const lightbox = await elementorFrontend.utils.lightbox; lightbox.setVideoAspectRatio(this.getElementSettings('aspect_ratio')); } async hideLightbox() { const lightbox = await elementorFrontend.utils.lightbox; lightbox.getModal().hide(); } prepareYTVideo(YT, onOverlayClick) { const elementSettings = this.getElementSettings(), playerOptions = { videoId: this.videoID, events: { onReady: () => { if (elementSettings.mute) { this.youtubePlayer.mute(); } if (elementSettings.autoplay || onOverlayClick) { this.youtubePlayer.playVideo(); } }, onStateChange: event => { if (event.data === YT.PlayerState.ENDED && elementSettings.loop) { this.youtubePlayer.seekTo(elementSettings.start || 0); } } }, playerVars: { controls: elementSettings.controls ? 1 : 0, rel: elementSettings.rel ? 1 : 0, playsinline: elementSettings.play_on_mobile ? 1 : 0, modestbranding: elementSettings.modestbranding ? 1 : 0, autoplay: elementSettings.autoplay ? 1 : 0, start: elementSettings.start, end: elementSettings.end } }; // To handle CORS issues, when the default host is changed, the origin parameter has to be set. if (elementSettings.yt_privacy) { playerOptions.host = 'https://www.youtube-nocookie.com'; playerOptions.origin = window.location.hostname; } this.youtubePlayer = new YT.Player(this.elements.$video[0], playerOptions); } bindEvents() { this.elements.$imageOverlay.on('click', this.handleVideo.bind(this)); } onInit() { super.onInit(); const elementSettings = this.getElementSettings(); if (elementorFrontend.utils[elementSettings.video_type]) { this.apiProvider = elementorFrontend.utils[elementSettings.video_type]; } else { this.apiProvider = elementorFrontend.utils.baseVideoLoader; } if ('youtube' !== elementSettings.video_type) { // Currently the only API integration in the Video widget is for the YT API return; } this.videoID = this.apiProvider.getVideoIDFromURL(elementSettings.youtube_url); // If there is an image overlay, the YouTube video prep method will be triggered on click if (!this.videoID) { return; } // If the user is using an image overlay, loading the API happens on overlay click instead of on init. if (elementSettings.show_image_overlay && elementSettings.image_overlay.url) { return; } if (elementSettings.lazy_load) { this.intersectionObserver = elementorModules.utils.Scroll.scrollObserver({ callback: event => { if (event.isInViewport) { this.intersectionObserver.unobserve(this.elements.$video.parent()[0]); this.apiProvider.onApiReady(apiObject => this.prepareYTVideo(apiObject)); } } }); // We observe the parent, since the video container has a height of 0. this.intersectionObserver.observe(this.elements.$video.parent()[0]); return; } // When Optimized asset loading is set to off, the video type is set to 'Youtube', and 'Privacy Mode' is set // to 'On', there might be a conflict with other videos that are loaded WITHOUT privacy mode, such as a // video bBackground in a section. In these cases, to avoid the conflict, a timeout is added to postpone the // initialization of the Youtube API object. if (!elementorFrontend.config.experimentalFeatures['e_optimized_assets_loading']) { setTimeout(() => { this.apiProvider.onApiReady(apiObject => this.prepareYTVideo(apiObject)); }, 0); } else { this.apiProvider.onApiReady(apiObject => this.prepareYTVideo(apiObject)); } } onElementChange(propertyName) { if (0 === propertyName.indexOf('lightbox_content_animation')) { this.animateVideo(); return; } const isLightBoxEnabled = this.getElementSettings('lightbox'); if ('lightbox' === propertyName && !isLightBoxEnabled) { this.hideLightbox(); return; } if ('aspect_ratio' === propertyName && isLightBoxEnabled) { this.handleAspectRatio(); } } } exports.default = Video; /***/ }), /***/ "../assets/dev/js/frontend/preloaded-modules.js": /*!******************************************************!*\ !*** ../assets/dev/js/frontend/preloaded-modules.js ***! \******************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); var _accordion = _interopRequireDefault(__webpack_require__(/*! ./handlers/accordion */ "../assets/dev/js/frontend/handlers/accordion.js")); var _alert = _interopRequireDefault(__webpack_require__(/*! ./handlers/alert */ "../assets/dev/js/frontend/handlers/alert.js")); var _counter = _interopRequireDefault(__webpack_require__(/*! ./handlers/counter */ "../assets/dev/js/frontend/handlers/counter.js")); var _progress = _interopRequireDefault(__webpack_require__(/*! ./handlers/progress */ "../assets/dev/js/frontend/handlers/progress.js")); var _tabs = _interopRequireDefault(__webpack_require__(/*! ./handlers/tabs */ "../assets/dev/js/frontend/handlers/tabs.js")); var _toggle = _interopRequireDefault(__webpack_require__(/*! ./handlers/toggle */ "../assets/dev/js/frontend/handlers/toggle.js")); var _video = _interopRequireDefault(__webpack_require__(/*! ./handlers/video */ "../assets/dev/js/frontend/handlers/video.js")); var _imageCarousel = _interopRequireDefault(__webpack_require__(/*! ./handlers/image-carousel */ "../assets/dev/js/frontend/handlers/image-carousel.js")); var _textEditor = _interopRequireDefault(__webpack_require__(/*! ./handlers/text-editor */ "../assets/dev/js/frontend/handlers/text-editor.js")); var _lightbox = _interopRequireDefault(__webpack_require__(/*! elementor-frontend/utils/lightbox/lightbox */ "../assets/dev/js/frontend/utils/lightbox/lightbox.js")); elementorFrontend.elements.$window.on('elementor/frontend/init', () => { elementorFrontend.elementsHandler.elementsHandlers = { 'accordion.default': _accordion.default, 'alert.default': _alert.default, 'counter.default': _counter.default, 'progress.default': _progress.default, 'tabs.default': _tabs.default, 'toggle.default': _toggle.default, 'video.default': _video.default, 'image-carousel.default': _imageCarousel.default, 'text-editor.default': _textEditor.default }; elementorFrontend.on('components:init', () => { // We first need to delete the property because by default it's a getter function that cannot be overwritten. delete elementorFrontend.utils.lightbox; elementorFrontend.utils.lightbox = new _lightbox.default(); }); }); /***/ }), /***/ "../assets/dev/js/frontend/utils/lightbox/lightbox.js": /*!************************************************************!*\ !*** ../assets/dev/js/frontend/utils/lightbox/lightbox.js ***! \************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); var _screenfull = _interopRequireDefault(__webpack_require__(/*! ./screenfull */ "../assets/dev/js/frontend/utils/lightbox/screenfull.js")); module.exports = elementorModules.ViewModule.extend({ oldAspectRatio: null, oldAnimation: null, swiper: null, player: null, getDefaultSettings: function () { return { classes: { aspectRatio: 'elementor-aspect-ratio-%s', item: 'elementor-lightbox-item', image: 'elementor-lightbox-image', videoContainer: 'elementor-video-container', videoWrapper: 'elementor-fit-aspect-ratio', playButton: 'elementor-custom-embed-play', playButtonIcon: 'fa', playing: 'elementor-playing', hidden: 'elementor-hidden', invisible: 'elementor-invisible', preventClose: 'elementor-lightbox-prevent-close', slideshow: { container: 'swiper-container', slidesWrapper: 'swiper-wrapper', prevButton: 'elementor-swiper-button elementor-swiper-button-prev', nextButton: 'elementor-swiper-button elementor-swiper-button-next', prevButtonIcon: 'eicon-chevron-left', nextButtonIcon: 'eicon-chevron-right', slide: 'swiper-slide', header: 'elementor-slideshow__header', footer: 'elementor-slideshow__footer', title: 'elementor-slideshow__title', description: 'elementor-slideshow__description', counter: 'elementor-slideshow__counter', iconExpand: 'eicon-frame-expand', iconShrink: 'eicon-frame-minimize', iconZoomIn: 'eicon-zoom-in-bold', iconZoomOut: 'eicon-zoom-out-bold', iconShare: 'eicon-share-arrow', shareMenu: 'elementor-slideshow__share-menu', shareLinks: 'elementor-slideshow__share-links', hideUiVisibility: 'elementor-slideshow--ui-hidden', shareMode: 'elementor-slideshow--share-mode', fullscreenMode: 'elementor-slideshow--fullscreen-mode', zoomMode: 'elementor-slideshow--zoom-mode' } }, selectors: { image: '.elementor-lightbox-image', links: 'a, [data-elementor-lightbox]', slideshow: { activeSlide: '.swiper-slide-active', prevSlide: '.swiper-slide-prev', nextSlide: '.swiper-slide-next' } }, modalOptions: { id: 'elementor-lightbox', entranceAnimation: 'zoomIn', videoAspectRatio: 169, position: { enable: false } } }; }, getModal: function () { if (!module.exports.modal) { this.initModal(); } return module.exports.modal; }, initModal: function () { const modal = module.exports.modal = elementorFrontend.getDialogsManager().createWidget('lightbox', { className: 'elementor-lightbox', closeButton: true, closeButtonOptions: { iconClass: 'eicon-close', attributes: { tabindex: 0, role: 'button', 'aria-label': elementorFrontend.config.i18n.close + ' (Esc)' } }, selectors: { preventClose: '.' + this.getSettings('classes.preventClose') }, hide: { onClick: true } }); modal.on('hide', function () { modal.setMessage(''); }); }, showModal: function (options) { if (options.url && !options.url.startsWith('http')) { return; } this.elements.$closeButton = this.getModal().getElements('closeButton'); this.$buttons = this.elements.$closeButton; this.focusedButton = null; const self = this, defaultOptions = self.getDefaultSettings().modalOptions; self.id = options.id; self.setSettings('modalOptions', jQuery.extend(defaultOptions, options.modalOptions)); const modal = self.getModal(); modal.setID(self.getSettings('modalOptions.id')); modal.onShow = function () { DialogsManager.getWidgetType('lightbox').prototype.onShow.apply(modal, arguments); self.setEntranceAnimation(); }; modal.onHide = function () { DialogsManager.getWidgetType('lightbox').prototype.onHide.apply(modal, arguments); modal.getElements('message').removeClass('animated'); if (_screenfull.default.isFullscreen) { self.deactivateFullscreen(); } self.unbindHotKeys(); }; switch (options.type) { case 'video': self.setVideoContent(options); break; case 'image': const slides = [{ image: options.url, index: 0, title: options.title, description: options.description }]; options.slideshow = { slides, swiper: { loop: false, pagination: false } }; case 'slideshow': self.setSlideshowContent(options.slideshow); break; default: self.setHTMLContent(options.html); } modal.show(); }, createLightbox: function (element) { let lightboxData = {}; if (element.dataset.elementorLightbox) { lightboxData = JSON.parse(element.dataset.elementorLightbox); } if (lightboxData.type && 'slideshow' !== lightboxData.type) { this.showModal(lightboxData); return; } if (!element.dataset.elementorLightboxSlideshow) { const slideshowID = 'single-img'; this.showModal({ type: 'image', id: slideshowID, url: element.href, title: element.dataset.elementorLightboxTitle, description: element.dataset.elementorLightboxDescription, modalOptions: { id: 'elementor-lightbox-slideshow-' + slideshowID } }); return; } const initialSlideURL = element.dataset.elementorLightboxVideo || element.href; this.openSlideshow(element.dataset.elementorLightboxSlideshow, initialSlideURL); }, setHTMLContent: function (html) { if (window.elementorCommon) { elementorCommon.helpers.hardDeprecated('elementorFrontend.utils.lightbox.setHTMLContent', '3.1.4'); } this.getModal().setMessage(html); }, setVideoContent: function (options) { const $ = jQuery, classes = this.getSettings('classes'), $videoContainer = $('
', { class: `${classes.videoContainer} ${classes.preventClose}` }), $videoWrapper = $('
', { class: classes.videoWrapper }), modal = this.getModal(); let $videoElement; if ('hosted' === options.videoType) { const videoParams = $.extend({ src: options.url, autoplay: '' }, options.videoParams); $videoElement = $('