/*! elementor - v1.9.3 - 21-01-2018 */ (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o wait ) { if ( timeout ) { clearTimeout( timeout ); timeout = null; } previous = now; result = func.apply( context, args ); if ( ! timeout ) { context = args = null; } } else if ( ! timeout ) { timeout = setTimeout( later, remaining ); } return result; }; }; this.addListenerOnce = function( listenerID, event, callback, to ) { if ( ! to ) { to = self.getElements( '$window' ); } if ( ! self.isEditMode() ) { to.on( event, callback ); return; } if ( to instanceof jQuery ) { var eventNS = event + '.' + listenerID; to.off( eventNS ).on( eventNS, callback ); } else { to.off( event, null, listenerID ).on( event, callback, listenerID ); } }; this.getCurrentDeviceMode = function() { return getComputedStyle( elements.$elementor[ 0 ], ':after' ).content.replace( /"/g, '' ); }; this.waypoint = function( $element, callback, options ) { var defaultOptions = { offset: '100%', triggerOnce: true }; options = $.extend( defaultOptions, options ); var correctCallback = function() { var element = this.element || this, result = callback.apply( element, arguments ); // If is Waypoint new API and is frontend if ( options.triggerOnce && this.destroy ) { this.destroy(); } return result; }; return $element.elementorWaypoint( correctCallback, options ); }; }; window.elementorFrontend = new ElementorFrontend(); } )( jQuery ); if ( ! elementorFrontend.isEditMode() ) { jQuery( elementorFrontend.init ); } },{"../utils/hooks":21,"./handler-module":3,"elementor-frontend/elements-handler":1,"elementor-frontend/modules/stretch-element":17,"elementor-frontend/utils/anchors":18,"elementor-frontend/utils/lightbox":19,"elementor-frontend/utils/youtube":20,"elementor-utils/hot-keys":22}],3:[function(require,module,exports){ var ViewModule = require( '../utils/view-module' ), HandlerModule; HandlerModule = ViewModule.extend( { $element: null, onElementChange: null, onEditSettingsChange: null, onGeneralSettingsChange: null, onPageSettingsChange: null, isEdit: null, __construct: function( settings ) { this.$element = settings.$element; this.isEdit = this.$element.hasClass( 'elementor-element-edit-mode' ); if ( this.isEdit ) { this.addEditorListener(); } }, findElement: function( selector ) { var $mainElement = this.$element; return $mainElement.find( selector ).filter( function() { return jQuery( this ).closest( '.elementor-element' ).is( $mainElement ); } ); }, getUniqueHandlerID: function( cid, $element ) { if ( ! cid ) { cid = this.getModelCID(); } if ( ! $element ) { $element = this.$element; } return cid + $element.attr( 'data-element_type' ) + this.getConstructorID(); }, addEditorListener: function() { var self = this, uniqueHandlerID = self.getUniqueHandlerID(); if ( self.onElementChange ) { var elementName = self.getElementName(), eventName = 'change'; if ( 'global' !== elementName ) { eventName += ':' + elementName; } elementorFrontend.addListenerOnce( uniqueHandlerID, eventName, function( controlView, elementView ) { var elementViewHandlerID = self.getUniqueHandlerID( elementView.model.cid, elementView.$el ); if ( elementViewHandlerID !== uniqueHandlerID ) { return; } self.onElementChange( controlView.model.get( 'name' ), controlView, elementView ); }, elementor.channels.editor ); } if ( self.onEditSettingsChange ) { elementorFrontend.addListenerOnce( uniqueHandlerID, 'change:editSettings', function( changedModel, view ) { if ( view.model.cid !== self.getModelCID() ) { return; } self.onEditSettingsChange( Object.keys( changedModel.changed )[0] ); }, elementor.channels.editor ); } [ 'page', 'general' ].forEach( function( settingsType ) { var listenerMethodName = 'on' + settingsType.charAt( 0 ).toUpperCase() + settingsType.slice( 1 ) + 'SettingsChange'; if ( self[ listenerMethodName ] ) { elementorFrontend.addListenerOnce( uniqueHandlerID, 'change', function( model ) { self[ listenerMethodName ]( model.changed ); }, elementor.settings[ settingsType ].model ); } } ); }, getElementName: function() { return this.$element.data( 'element_type' ).split( '.' )[0]; }, getID: function() { return this.$element.data( 'id' ); }, getModelCID: function() { return this.$element.data( 'model-cid' ); }, getElementSettings: function( setting ) { var elementSettings = {}, modelCID = this.getModelCID(); if ( this.isEdit && modelCID ) { var settings = elementorFrontend.config.elements.data[ modelCID ], settingsKeys = elementorFrontend.config.elements.keys[ settings.attributes.widgetType || settings.attributes.elType ]; jQuery.each( settings.getActiveControls(), function( controlKey ) { if ( -1 !== settingsKeys.indexOf( controlKey ) ) { elementSettings[ controlKey ] = settings.attributes[ controlKey ]; } } ); } else { elementSettings = this.$element.data( 'settings' ) || {}; } return this.getItems( elementSettings, setting ); }, getEditSettings: function( setting ) { var attributes = {}; if ( this.isEdit ) { attributes = elementorFrontend.config.elements.editSettings[ this.getModelCID() ].attributes; } return this.getItems( attributes, setting ); } } ); module.exports = HandlerModule; },{"../utils/view-module":24}],4:[function(require,module,exports){ var TabsModule = require( 'elementor-frontend/handlers/base-tabs' ); module.exports = function( $scope ) { new TabsModule( { $element: $scope, showTabFn: 'slideDown', hideTabFn: 'slideUp' } ); }; },{"elementor-frontend/handlers/base-tabs":6}],5:[function(require,module,exports){ module.exports = function( $scope, $ ) { $scope.find( '.elementor-alert-dismiss' ).on( 'click', function() { $( this ).parent().fadeOut(); } ); }; },{}],6:[function(require,module,exports){ var HandlerModule = require( 'elementor-frontend/handler-module' ); module.exports = HandlerModule.extend( { $activeContent: null, getDefaultSettings: function() { return { selectors: { tabTitle: '.elementor-tab-title', tabContent: '.elementor-tab-content' }, classes: { active: 'elementor-active' }, showTabFn: 'show', hideTabFn: 'hide', toggleSelf: true, hidePrevious: true, autoExpand: true }; }, getDefaultElements: function() { var selectors = this.getSettings( 'selectors' ); return { $tabTitles: this.findElement( selectors.tabTitle ), $tabContents: this.findElement( selectors.tabContent ) }; }, activateDefaultTab: function() { var settings = this.getSettings(); if ( ! settings.autoExpand || 'editor' === settings.autoExpand && ! this.isEdit ) { return; } var 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 ); }, deactivateActiveTab: function( tabIndex ) { var 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 ); $activeContent[ settings.hideTabFn ](); }, activateTab: function( tabIndex ) { var settings = this.getSettings(), activeClass = settings.classes.active, $requestedTitle = this.elements.$tabTitles.filter( '[data-tab="' + tabIndex + '"]' ), $requestedContent = this.elements.$tabContents.filter( '[data-tab="' + tabIndex + '"]' ); $requestedTitle.add( $requestedContent ).addClass( activeClass ); $requestedContent[ settings.showTabFn ](); }, isActiveTab: function( tabIndex ) { return this.elements.$tabTitles.filter( '[data-tab="' + tabIndex + '"]' ).hasClass( this.getSettings( 'classes.active' ) ); }, bindEvents: function() { var self = this; self.elements.$tabTitles.on( 'focus', function( event ) { self.changeActiveTab( event.currentTarget.dataset.tab ); } ); if ( self.getSettings( 'toggleSelf' ) ) { self.elements.$tabTitles.on( 'mousedown', function( event ) { if ( jQuery( event.currentTarget ).is( ':focus' ) ) { self.changeActiveTab( event.currentTarget.dataset.tab ); } } ); } }, onInit: function() { HandlerModule.prototype.onInit.apply( this, arguments ); this.activateDefaultTab(); }, onEditSettingsChange: function( propertyName ) { if ( 'activeItemIndex' === propertyName ) { this.activateDefaultTab(); } }, changeActiveTab: function( tabIndex ) { var 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 ); } } } ); },{"elementor-frontend/handler-module":3}],7:[function(require,module,exports){ module.exports = function( $scope, $ ) { elementorFrontend.waypoint( $scope.find( '.elementor-counter-number' ), function() { var $number = $( this ), data = $number.data(); var decimalDigits = data.toValue.toString().match( /\.(.*)/ ); if ( decimalDigits ) { data.rounding = decimalDigits[1].length; } $number.numerator( data ); } ); }; },{}],8:[function(require,module,exports){ var HandlerModule = require( 'elementor-frontend/handler-module' ), GlobalHandler; GlobalHandler = HandlerModule.extend( { getElementName: function() { return 'global'; }, animate: function() { var $element = this.$element, animation = this.getAnimation(), elementSettings = this.getElementSettings(), animationDelay = elementSettings._animation_delay || elementSettings.animation_delay || 0; $element.removeClass( animation ); setTimeout( function() { $element.removeClass( 'elementor-invisible' ).addClass( animation ); }, animationDelay ); }, getAnimation: function() { var elementSettings = this.getElementSettings(); return elementSettings.animation || elementSettings._animation; }, onInit: function() { HandlerModule.prototype.onInit.apply( this, arguments ); var animation = this.getAnimation(); if ( ! animation ) { return; } this.$element.removeClass( animation ); elementorFrontend.waypoint( this.$element, this.animate.bind( this ) ); }, onElementChange: function( propertyName ) { if ( /^_?animation/.test( propertyName ) ) { this.animate(); } } } ); module.exports = function( $scope ) { new GlobalHandler( { $element: $scope } ); }; },{"elementor-frontend/handler-module":3}],9:[function(require,module,exports){ var HandlerModule = require( 'elementor-frontend/handler-module' ), ImageCarouselHandler; ImageCarouselHandler = HandlerModule.extend( { getDefaultSettings: function() { return { selectors: { carousel: '.elementor-image-carousel' } }; }, getDefaultElements: function() { var selectors = this.getSettings( 'selectors' ); return { $carousel: this.$element.find( selectors.carousel ) }; }, onInit: function() { HandlerModule.prototype.onInit.apply( this, arguments ); var elementSettings = this.getElementSettings(), slidesToShow = +elementSettings.slides_to_show || 3, isSingleSlide = 1 === slidesToShow; var slickOptions = { slidesToShow: slidesToShow, autoplay: 'yes' === elementSettings.autoplay, autoplaySpeed: elementSettings.autoplay_speed, infinite: 'yes' === elementSettings.infinite, pauseOnHover: 'yes' === elementSettings.pause_on_hover, speed: elementSettings.speed, arrows: -1 !== [ 'arrows', 'both' ].indexOf( elementSettings.navigation ), dots: -1 !== [ 'dots', 'both' ].indexOf( elementSettings.navigation ), rtl: 'rtl' === elementSettings.direction, responsive: [ { breakpoint: 1025, settings: { slidesToShow: +elementSettings.slides_to_show_tablet || ( isSingleSlide ? 1 : 2 ), slidesToScroll: 1 } }, { breakpoint: 768, settings: { slidesToShow: +elementSettings.slides_to_show_mobile || 1, slidesToScroll: 1 } } ] }; if ( isSingleSlide ) { slickOptions.fade = 'fade' === elementSettings.effect; } else { slickOptions.slidesToScroll = +elementSettings.slides_to_scroll; } this.elements.$carousel.slick( slickOptions ); } } ); module.exports = function( $scope ) { new ImageCarouselHandler( { $element: $scope } ); }; },{"elementor-frontend/handler-module":3}],10:[function(require,module,exports){ module.exports = function( $scope, $ ) { elementorFrontend.waypoint( $scope.find( '.elementor-progress-bar' ), function() { var $progressbar = $( this ); $progressbar.css( 'width', $progressbar.data( 'max' ) + '%' ); } ); }; },{}],11:[function(require,module,exports){ var HandlerModule = require( 'elementor-frontend/handler-module' ); var BackgroundVideo = HandlerModule.extend( { player: null, isYTVideo: null, getDefaultSettings: function() { return { selectors: { backgroundVideoContainer: '.elementor-background-video-container', backgroundVideoEmbed: '.elementor-background-video-embed', backgroundVideoHosted: '.elementor-background-video-hosted' } }; }, getDefaultElements: function() { var selectors = this.getSettings( 'selectors' ), elements = { $backgroundVideoContainer: this.$element.find( selectors.backgroundVideoContainer ) }; elements.$backgroundVideoEmbed = elements.$backgroundVideoContainer.children( selectors.backgroundVideoEmbed ); elements.$backgroundVideoHosted = elements.$backgroundVideoContainer.children( selectors.backgroundVideoHosted ); return elements; }, calcVideosSize: function() { var containerWidth = this.elements.$backgroundVideoContainer.outerWidth(), containerHeight = this.elements.$backgroundVideoContainer.outerHeight(), aspectRatioSetting = '16:9', //TEMP aspectRatioArray = aspectRatioSetting.split( ':' ), aspectRatio = aspectRatioArray[ 0 ] / aspectRatioArray[ 1 ], ratioWidth = containerWidth / aspectRatio, ratioHeight = containerHeight * aspectRatio, isWidthFixed = containerWidth / containerHeight > aspectRatio; return { width: isWidthFixed ? containerWidth : ratioHeight, height: isWidthFixed ? ratioWidth : containerHeight }; }, changeVideoSize: function() { var $video = this.isYTVideo ? jQuery( this.player.getIframe() ) : this.elements.$backgroundVideoHosted, size = this.calcVideosSize(); $video.width( size.width ).height( size.height ); }, prepareYTVideo: function( YT, videoID ) { var self = this, $backgroundVideoContainer = self.elements.$backgroundVideoContainer; $backgroundVideoContainer.addClass( 'elementor-loading elementor-invisible' ); self.player = new YT.Player( self.elements.$backgroundVideoEmbed[ 0 ], { videoId: videoID, events: { onReady: function() { self.player.mute(); self.changeVideoSize(); self.player.playVideo(); }, onStateChange: function( event ) { switch ( event.data ) { case YT.PlayerState.PLAYING: $backgroundVideoContainer.removeClass( 'elementor-invisible elementor-loading' ); break; case YT.PlayerState.ENDED: self.player.seekTo( 0 ); } } }, playerVars: { controls: 0, showinfo: 0, rel: 0 } } ); elementorFrontend.getElements( '$window' ).on( 'resize', self.changeVideoSize ); }, activate: function() { var self = this, videoLink = self.getElementSettings( 'background_video_link' ), videoID = elementorFrontend.utils.youtube.getYoutubeIDFromURL( videoLink ); self.isYTVideo = !! videoID; if ( videoID ) { elementorFrontend.utils.youtube.onYoutubeApiReady( function( YT ) { setTimeout( function() { self.prepareYTVideo( YT, videoID ); }, 1 ); } ); } else { self.elements.$backgroundVideoHosted.attr( 'src', videoLink ).one( 'canplay', self.changeVideoSize ); } }, deactivate: function() { if ( this.isYTVideo && this.player.getIframe() ) { this.player.destroy(); } else { this.elements.$backgroundVideoHosted.removeAttr( 'src' ); } }, run: function() { var elementSettings = this.getElementSettings(); if ( 'video' === elementSettings.background_background && elementSettings.background_video_link ) { this.activate(); } else { this.deactivate(); } }, onInit: function() { HandlerModule.prototype.onInit.apply( this, arguments ); this.run(); }, onElementChange: function( propertyName ) { if ( 'background_background' === propertyName ) { this.run(); } } } ); var StretchedSection = HandlerModule.extend( { stretchElement: null, bindEvents: function() { elementorFrontend.addListenerOnce( this.$element.data( 'model-cid' ), 'resize', this.stretchSection ); }, initStretch: function() { this.stretchElement = new elementorFrontend.modules.StretchElement( { element: this.$element } ); }, stretchSection: function() { var isStretched = this.$element.hasClass( 'elementor-section-stretched' ); if ( elementorFrontend.isEditMode() || isStretched ) { this.stretchElement.reset(); } if ( isStretched ) { this.stretchElement.setSettings( 'selectors.container', elementorFrontend.getGeneralSettings( 'elementor_stretched_section_container' ) || window ); this.stretchElement.stretch(); } }, onInit: function() { HandlerModule.prototype.onInit.apply( this, arguments ); this.initStretch(); this.stretchSection(); }, onGeneralSettingsChange: function( changed ) { if ( 'elementor_stretched_section_container' in changed ) { this.stretchSection(); } } } ); var Shapes = HandlerModule.extend( { getDefaultSettings: function() { return { selectors: { container: '> .elementor-shape-%s' }, svgURL: elementorFrontend.config.urls.assets + 'shapes/' }; }, getDefaultElements: function() { var elements = {}, selectors = this.getSettings( 'selectors' ); elements.$topContainer = this.$element.find( selectors.container.replace( '%s', 'top' ) ); elements.$bottomContainer = this.$element.find( selectors.container.replace( '%s', 'bottom' ) ); return elements; }, buildSVG: function( side ) { var self = this, baseSettingKey = 'shape_divider_' + side, shapeType = self.getElementSettings( baseSettingKey ), $svgContainer = this.elements[ '$' + side + 'Container' ]; $svgContainer.empty().attr( 'data-shape', shapeType ); if ( ! shapeType ) { return; } var fileName = shapeType; if ( self.getElementSettings( baseSettingKey + '_negative' ) ) { fileName += '-negative'; } var svgURL = self.getSettings( 'svgURL' ) + fileName + '.svg'; jQuery.get( svgURL, function( data ) { $svgContainer.append( data.childNodes[0] ); } ); this.setNegative( side ); }, setNegative: function( side ) { this.elements[ '$' + side + 'Container' ].attr( 'data-negative', !! this.getElementSettings( 'shape_divider_' + side + '_negative' ) ); }, onInit: function() { var self = this; HandlerModule.prototype.onInit.apply( self, arguments ); [ 'top', 'bottom' ].forEach( function( side ) { if ( self.getElementSettings( 'shape_divider_' + side ) ) { self.buildSVG( side ); } } ); }, onElementChange: function( propertyName ) { var shapeChange = propertyName.match( /^shape_divider_(top|bottom)$/ ); if ( shapeChange ) { this.buildSVG( shapeChange[1] ); return; } var negativeChange = propertyName.match( /^shape_divider_(top|bottom)_negative$/ ); if ( negativeChange ) { this.buildSVG( negativeChange[1] ); this.setNegative( negativeChange[1] ); } } } ); module.exports = function( $scope ) { if ( elementorFrontend.isEditMode() || $scope.hasClass( 'elementor-section-stretched' ) ) { new StretchedSection( { $element: $scope } ); } if ( elementorFrontend.isEditMode() ) { new Shapes( { $element: $scope } ); } new BackgroundVideo( { $element: $scope } ); }; },{"elementor-frontend/handler-module":3}],12:[function(require,module,exports){ var TabsModule = require( 'elementor-frontend/handlers/base-tabs' ); module.exports = function( $scope ) { new TabsModule( { $element: $scope, toggleSelf: false } ); }; },{"elementor-frontend/handlers/base-tabs":6}],13:[function(require,module,exports){ var HandlerModule = require( 'elementor-frontend/handler-module' ), TextEditor; TextEditor = HandlerModule.extend( { dropCapLetter: '', getDefaultSettings: function() { return { selectors: { paragraph: 'p:first' }, classes: { dropCap: 'elementor-drop-cap', dropCapLetter: 'elementor-drop-cap-letter' } }; }, getDefaultElements: function() { var 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 }; }, getElementName: function() { return 'text-editor'; }, wrapDropCap: function() { var 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; } var $paragraph = this.elements.$paragraph; if ( ! $paragraph.length ) { return; } var paragraphContent = $paragraph.html().replace( / /g, ' ' ), firstLetterMatch = paragraphContent.match( /^ *([^ ] ?)/ ); if ( ! firstLetterMatch ) { return; } var 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 ); var restoredParagraphContent = paragraphContent.slice( firstLetter.length ).replace( /^ */, function( match ) { return new Array( match.length + 1 ).join( ' ' ); }); $paragraph.html( restoredParagraphContent ).prepend( this.elements.$dropCap ); }, onInit: function() { HandlerModule.prototype.onInit.apply( this, arguments ); this.wrapDropCap(); }, onElementChange: function( propertyName ) { if ( 'drop_cap' === propertyName ) { this.wrapDropCap(); } } } ); module.exports = function( $scope ) { new TextEditor( { $element: $scope } ); }; },{"elementor-frontend/handler-module":3}],14:[function(require,module,exports){ var TabsModule = require( 'elementor-frontend/handlers/base-tabs' ); module.exports = function( $scope ) { new TabsModule( { $element: $scope, showTabFn: 'slideDown', hideTabFn: 'slideUp', hidePrevious: false, autoExpand: 'editor' } ); }; },{"elementor-frontend/handlers/base-tabs":6}],15:[function(require,module,exports){ var HandlerModule = require( 'elementor-frontend/handler-module' ), VideoModule; VideoModule = HandlerModule.extend( { getDefaultSettings: function() { return { selectors: { imageOverlay: '.elementor-custom-embed-image-overlay', videoWrapper: '.elementor-wrapper', videoFrame: 'iframe' } }; }, getDefaultElements: function() { var selectors = this.getSettings( 'selectors' ); var elements = { $imageOverlay: this.$element.find( selectors.imageOverlay ), $videoWrapper: this.$element.find( selectors.videoWrapper ) }; elements.$videoFrame = elements.$videoWrapper.find( selectors.videoFrame ); return elements; }, getLightBox: function() { return elementorFrontend.utils.lightbox; }, handleVideo: function() { if ( ! this.getElementSettings( 'lightbox' ) ) { this.elements.$imageOverlay.remove(); this.playVideo(); } }, playVideo: function() { var $videoFrame = this.elements.$videoFrame, newSourceUrl = $videoFrame[0].src.replace( '&autoplay=0', '' ); $videoFrame[0].src = newSourceUrl + '&autoplay=1'; }, animateVideo: function() { this.getLightBox().setEntranceAnimation( this.getElementSettings( 'lightbox_content_animation' ) ); }, handleAspectRatio: function() { this.getLightBox().setVideoAspectRatio( this.getElementSettings( 'aspect_ratio' ) ); }, bindEvents: function() { this.elements.$imageOverlay.on( 'click', this.handleVideo ); }, onElementChange: function( propertyName ) { if ( 'lightbox_content_animation' === propertyName ) { this.animateVideo(); return; } var isLightBoxEnabled = this.getElementSettings( 'lightbox' ); if ( 'lightbox' === propertyName && ! isLightBoxEnabled ) { this.getLightBox().getModal().hide(); return; } if ( 'aspect_ratio' === propertyName && isLightBoxEnabled ) { this.handleAspectRatio(); } } } ); module.exports = function( $scope ) { new VideoModule( { $element: $scope } ); }; },{"elementor-frontend/handler-module":3}],16:[function(require,module,exports){ module.exports = function( $scope, $ ) { if ( ! elementorFrontend.isEditMode() ) { return; } if ( $scope.hasClass( 'elementor-widget-edit-disabled' ) ) { return; } $scope.find( '.elementor-element' ).each( function() { elementorFrontend.elementsHandler.runReadyTrigger( $( this ) ); } ); }; },{}],17:[function(require,module,exports){ var ViewModule = require( '../../utils/view-module' ); module.exports = ViewModule.extend( { getDefaultSettings: function() { return { element: null, direction: elementorFrontend.config.is_rtl ? 'right' : 'left', selectors: { container: window } }; }, getDefaultElements: function() { return { $element: jQuery( this.getSettings( 'element' ) ) }; }, stretch: function() { var containerSelector = this.getSettings( 'selectors.container' ), $element = this.elements.$element, $container = jQuery( containerSelector ), isSpecialContainer = window !== $container[0]; this.reset(); var containerWidth = $container.outerWidth(), elementWidth = $element.outerWidth(), elementOffset = $element.offset().left, correctOffset = elementOffset; if ( isSpecialContainer ) { var containerOffset = $container.offset().left; if ( elementOffset > containerOffset ) { correctOffset = elementOffset - containerOffset; } else { correctOffset = 0; } } if ( elementorFrontend.config.is_rtl ) { correctOffset = containerWidth - ( elementWidth + correctOffset ); } var css = {}; css.width = containerWidth + 'px'; css[ this.getSettings( 'direction' ) ] = -correctOffset + 'px'; $element.css( css ); }, reset: function() { var css = {}; css.width = 'auto'; css[ this.getSettings( 'direction' ) ] = 0; this.elements.$element.css( css ); } } ); },{"../../utils/view-module":24}],18:[function(require,module,exports){ var ViewModule = require( '../../utils/view-module' ); module.exports = ViewModule.extend( { getDefaultSettings: function() { return { scrollDuration: 500, selectors: { links: 'a[href*="#"]', targets: '.elementor-element, .elementor-menu-anchor', scrollable: 'html, body', wpAdminBar: '#wpadminbar' } }; }, getDefaultElements: function() { var $ = jQuery, selectors = this.getSettings( 'selectors' ); return { $scrollable: $( selectors.scrollable ), $wpAdminBar: $( selectors.wpAdminBar ) }; }, bindEvents: function() { elementorFrontend.getElements( '$document' ).on( 'click', this.getSettings( 'selectors.links' ), this.handleAnchorLinks ); }, handleAnchorLinks: function( event ) { var clickedLink = event.currentTarget, isSamePathname = ( location.pathname === clickedLink.pathname ), isSameHostname = ( location.hostname === clickedLink.hostname ); if ( ! isSameHostname || ! isSamePathname || clickedLink.hash.length < 2 ) { return; } var $anchor = jQuery( clickedLink.hash ).filter( this.getSettings( 'selectors.targets' ) ); if ( ! $anchor.length ) { return; } var hasAdminBar = ( 1 <= this.elements.$wpAdminBar.length ), scrollTop = $anchor.offset().top; if ( hasAdminBar ) { scrollTop -= this.elements.$wpAdminBar.height(); } event.preventDefault(); scrollTop = elementorFrontend.hooks.applyFilters( 'frontend/handlers/menu_anchor/scroll_top_distance', scrollTop ); this.elements.$scrollable.animate( { scrollTop: scrollTop }, this.getSettings( 'scrollDuration' ), 'linear' ); }, onInit: function() { ViewModule.prototype.onInit.apply( this, arguments ); this.bindEvents(); } } ); },{"../../utils/view-module":24}],19:[function(require,module,exports){ var ViewModule = require( '../../utils/view-module' ), LightboxModule; LightboxModule = ViewModule.extend( { oldAspectRatio: null, oldAnimation: null, swiper: 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' } }, selectors: { 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 ( ! LightboxModule.modal ) { this.initModal(); } return LightboxModule.modal; }, initModal: function() { var modal = LightboxModule.modal = elementorFrontend.getDialogsManager().createWidget( 'lightbox', { className: 'elementor-lightbox', closeButton: true, closeButtonClass: 'eicon-close', selectors: { preventClose: '.' + this.getSettings( 'classes.preventClose' ) }, hide: { onClick: true } } ); modal.on( 'hide', function() { modal.setMessage( '' ); } ); }, showModal: function( options ) { var self = this, defaultOptions = self.getDefaultSettings().modalOptions; self.setSettings( 'modalOptions', jQuery.extend( defaultOptions, options.modalOptions ) ); var modal = self.getModal(); modal.setID( self.getSettings( 'modalOptions.id' ) ); modal.onShow = function() { DialogsManager.getWidgetType( 'lightbox' ).prototype.onShow.apply( modal, arguments ); setTimeout( function() { self.setEntranceAnimation(); }, 10 ); }; modal.onHide = function() { DialogsManager.getWidgetType( 'lightbox' ).prototype.onHide.apply( modal, arguments ); modal.getElements( 'widgetContent' ).removeClass( 'animated' ); }; switch ( options.type ) { case 'image': self.setImageContent( options.url ); break; case 'video': self.setVideoContent( options.url ); break; case 'slideshow': self.setSlideshowContent( options.slideshow ); break; default: self.setHTMLContent( options.html ); } modal.show(); }, setHTMLContent: function( html ) { this.getModal().setMessage( html ); }, setImageContent: function( imageURL ) { var self = this, classes = self.getSettings( 'classes' ), $item = jQuery( '
', { 'class': classes.item } ), $image = jQuery( '', { src: imageURL, 'class': classes.image + ' ' + classes.preventClose } ); $item.append( $image ); self.getModal().setMessage( $item ); }, setVideoContent: function( videoEmbedURL ) { videoEmbedURL = videoEmbedURL.replace( '&autoplay=0', '' ) + '&autoplay=1'; var classes = this.getSettings( 'classes' ), $videoContainer = jQuery( '
', { 'class': classes.videoContainer } ), $videoWrapper = jQuery( '
', { 'class': classes.videoWrapper } ), $videoFrame = jQuery( '