( function( $, elementor ) { "use strict"; var JetElements = { addedScripts: {}, addedStyles: {}, addedAssetsPromises: [], init: function() { var widgets = { 'jet-carousel.default' : JetElements.widgetCarousel, 'jet-circle-progress.default' : JetElements.widgetProgress, 'jet-map.default' : JetElements.widgetMap, 'jet-countdown-timer.default' : JetElements.widgetCountdown, 'jet-posts.default' : JetElements.widgetPosts, 'jet-animated-text.default' : JetElements.widgetAnimatedText, 'jet-animated-box.default' : JetElements.widgetAnimatedBox, 'jet-images-layout.default' : JetElements.widgetImagesLayout, 'jet-slider.default' : JetElements.widgetSlider, 'jet-testimonials.default' : JetElements.widgetTestimonials, 'jet-image-comparison.default' : JetElements.widgetImageComparison, 'jet-instagram-gallery.default' : JetElements.widgetInstagramGallery, 'jet-scroll-navigation.default' : JetElements.widgetScrollNavigation, 'jet-subscribe-form.default' : JetElements.widgetSubscribeForm, 'jet-progress-bar.default' : JetElements.widgetProgressBar, 'jet-portfolio.default' : JetElements.widgetPortfolio, 'jet-timeline.default': JetElements.widgetTimeLine, 'jet-table.default': JetElements.widgetTable, 'jet-dropbar.default': JetElements.widgetDropbar, 'jet-video.default': JetElements.widgetVideo, 'jet-audio.default': JetElements.widgetAudio, 'jet-horizontal-timeline.default': JetElements.widgetHorizontalTimeline, 'mp-timetable.default': JetElements.widgetTimeTable, 'jet-pie-chart.default': JetElements.widgetPieChart, 'jet-bar-chart.default': JetElements.widgetBarChart, 'jet-line-chart.default': JetElements.widgetLineChart, 'jet-lottie.default': JetElements.widgetLottie, 'jet-pricing-table.default': JetElements.widgetPricingTable }; $.each( widgets, function( widget, callback ) { elementor.hooks.addAction( 'frontend/element_ready/' + widget, callback ); }); elementor.hooks.addAction( 'frontend/element_ready/section', JetElements.elementorSection ); elementor.hooks.addAction( 'frontend/element_ready/container', JetElements.elementorSection ); // Re-init widgets in nested tabs window.elementorFrontend.elements.$window.on( 'elementor/nested-tabs/activate', ( event, content ) => { const $content = $( content ); JetElements.reinitSlickSlider( $content ); JetElements.initWidgetsHandlers( $content ); } ); elementorFrontend.hooks.addAction( 'frontend/element_ready/loop-carousel.post', function( $scope, $ ) { $( window ).on( 'load', function() { var loopCarousel = $scope.find( '.swiper' ), swiperInstance = loopCarousel.data( 'swiper' ), audioPlayProgress = $scope.find( '.mejs-time-slider, .mejs-horizontal-volume-slider, .mejs-volume-button' ); if ( !loopCarousel.length || !audioPlayProgress.length ) { console.warn( "Swiper or audioPlayProgress not found!" ); return; } // Disable swipe when interacting with the audio progress audioPlayProgress.on( 'pointerdown', function( event ) { if ( event.button !== 0 ) { return; } if ( swiperInstance ) { swiperInstance.allowTouchMove = false; } event.stopPropagation(); }); // Re-enable swipe after interaction ends audioPlayProgress.on( 'pointerup', function( event ) { if ( event.button !== 0 ) { return; } if ( swiperInstance ) { setTimeout( function() { swiperInstance.allowTouchMove = true; }, 300 ); } event.stopPropagation(); }); }); }); }, reinitSlickSlider: function( $scope ) { var $slider = $scope.find('.slick-initialized'); if ( $slider.length ) { $slider.each( function() { $( this ).slick('unslick'); } ); } }, loadScriptAsync: function( script, uri ) { if ( JetElements.addedScripts.hasOwnProperty( script ) ) { return script; } if ( !uri ) { return; } JetElements.addedScripts[ script ] = uri; return new Promise( function( resolve, reject ) { var tag = document.createElement( 'script' ); tag.src = uri; tag.async = true; tag.onload = function() { resolve( script ); }; document.head.appendChild( tag ); }); }, loadStyle: function( style, uri ) { if ( JetElements.addedStyles.hasOwnProperty( style ) && JetElements.addedStyles[ style ] === uri) { return style; } if ( !uri ) { return; } JetElements.addedStyles[ style ] = uri; return new Promise( function( resolve, reject ) { var tag = document.createElement( 'link' ); tag.id = style; tag.rel = 'stylesheet'; tag.href = uri; tag.type = 'text/css'; tag.media = 'all'; tag.onload = function() { resolve( style ); }; document.head.appendChild( tag ); }); }, initWidgetsHandlers: function( $selector ) { $selector.find( '.elementor-widget-jet-slider, .elementor-widget-jet-testimonials, .elementor-widget-jet-carousel, .elementor-widget-jet-portfolio, .elementor-widget-jet-horizontal-timeline, .elementor-widget-jet-image-comparison, .elementor-widget-jet-posts, .jet-parallax-section' ).each( function() { var $this = $( this ), elementType = $this.data( 'element_type' ); if ( !elementType ) { return; } if ( 'widget' === elementType ) { elementType = $this.data( 'widget_type' ); window.elementorFrontend.hooks.doAction( 'frontend/element_ready/widget', $this, $ ); } window.elementorFrontend.hooks.doAction( 'frontend/element_ready/global', $this, $ ); window.elementorFrontend.hooks.doAction( 'frontend/element_ready/' + elementType, $this, $ ); } ); }, initElementsHandlers: function( $selector ) { $selector.find( '[data-element_type]' ).each( function() { var $this = $( this ), elementType = $this.data( 'element_type' ); if ( !elementType ) { return; } if ( 'widget' === elementType ) { elementType = $this.data( 'widget_type' ); window.elementorFrontend.hooks.doAction( 'frontend/element_ready/widget', $this, $ ); } window.elementorFrontend.hooks.doAction( 'frontend/element_ready/global', $this, $ ); window.elementorFrontend.hooks.doAction( 'frontend/element_ready/' + elementType, $this, $ ); } ); }, widgetCountdown: function( $scope ) { var timeInterval, $countdown = $scope.find( '.jet-countdown-timer' ), type = $countdown.data( 'type' ), endTime = null, dueDate = $countdown.data( 'due-date' ), startDate = $countdown.data( 'start-date' ), actions = $countdown.data( 'expire-actions' ), evergreenInterval = $countdown.data( 'evergreen-interval' ), restartInterval = $countdown.data( 'restart-interval' ), elements = { days: $countdown.find( '[data-value="days"]' ), hours: $countdown.find( '[data-value="hours"]' ), minutes: $countdown.find( '[data-value="minutes"]' ), seconds: $countdown.find( '[data-value="seconds"]' ) }; var initClock = function() { switch( type ) { case 'due_date': endTime = new Date( dueDate * 1000 ); break; case 'evergreen': if ( evergreenInterval > 0 ) { endTime = getEvergreenDate(); } break; case 'endless': var currentTime = new Date(), currentTimeTimezoneOffset = Math.abs( currentTime.getTimezoneOffset() ), startTime = new Date( startDate * 1000 ), startTimeTimezoneOffset = Math.abs( startTime.getTimezoneOffset() ), timeZoneOffsetDiff = startTimeTimezoneOffset - currentTimeTimezoneOffset; if ( currentTime > startTime ) { endTime = new Date( (startDate + restartInterval) * 1000 ); } if ( endTime && ( currentTime > endTime ) ) { endTime = endTime.setSeconds( endTime.getSeconds() + (Math.floor( (currentTime - endTime) / (restartInterval * 1000) ) + 1) * restartInterval ); } if ( 0 != timeZoneOffsetDiff ) { endTime -= timeZoneOffsetDiff * 60 * 1000; } break; } updateClock(); timeInterval = setInterval( updateClock, 1000 ); }; var updateClock = function() { if ( ! endTime ) { return; } var timeRemaining = getTimeRemaining( endTime, { days: elements.days.length, hours: elements.hours.length, minutes: elements.minutes.length } ); $.each( timeRemaining.parts, function( timePart ) { var $element = elements[ timePart ]; if ( $element.length ) { $element.html( this ); } } ); if ( timeRemaining.total <= 0 ) { clearInterval( timeInterval ); runActions(); } }; var splitNum = function( num ) { var num = num.toString(), arr = [], result = ''; if ( 1 === num.length ) { num = 0 + num; } arr = num.match(/\d{1}/g); $.each( arr, function( index, val ) { result += '' + val + ''; }); return result; }; var getTimeRemaining = function( endTime, visible ) { var timeRemaining = endTime - new Date(), seconds = Math.floor( ( timeRemaining / 1000 ) % 60 ), minutes = Math.floor( ( timeRemaining / 1000 / 60 ) % 60 ), hours = Math.floor( ( timeRemaining / ( 1000 * 60 * 60 ) ) % 24 ), days = Math.floor( timeRemaining / ( 1000 * 60 * 60 * 24 ) ); if ( days < 0 || hours < 0 || minutes < 0 ) { seconds = minutes = hours = days = 0; } if ( ! visible.days ) { hours += days * 24; days = 0; } if ( ! visible.hours ) { minutes += hours * 60; hours = 0; } if ( ! visible.minutes ) { seconds += minutes * 60; minutes = 0; } return { total: timeRemaining, parts: { days: splitNum( days ), hours: splitNum( hours ), minutes: splitNum( minutes ), seconds: splitNum( seconds ) } }; }; var runActions = function() { $scope.trigger( 'jetCountdownTimerExpire', $scope ); if ( ! actions ) { return; } $.each( actions, function( index, action ) { switch ( action ) { case 'redirect': var redirect_url = $countdown.data( 'expire-redirect-url' ); if ( redirect_url ) { window.location.href = redirect_url; } break; case 'message': $scope.find( '.jet-countdown-timer-message' ).show(); break; case 'hide': $countdown.hide(); break; case 'restart': endTime = new Date(); endTime = endTime.setSeconds( endTime.getSeconds() + restartInterval ); updateClock(); timeInterval = setInterval( updateClock, 1000 ); break; } } ); }; var getEvergreenDate = function() { var id = $scope.data( 'id' ), dueDateKey = 'jet_evergreen_countdown_due_date_' + id, intervalKey = 'jet_evergreen_countdown_interval_' + id, localDueDate = localStorage.getItem( dueDateKey ), localInterval = localStorage.getItem( intervalKey ), initEvergreenTimer = function(){ var dueDate = new Date(), _endTime = dueDate.setSeconds( dueDate.getSeconds() + evergreenInterval ); localStorage.setItem( dueDateKey, _endTime ); localStorage.setItem( intervalKey, evergreenInterval ); return _endTime; }; if ( null === localDueDate && null === localInterval ) { return initEvergreenTimer(); } if ( null !== localDueDate && evergreenInterval !== parseInt( localInterval, 10 ) ) { return initEvergreenTimer(); } if ( localDueDate > 0 && parseInt( localInterval, 10 ) === evergreenInterval ) { return localDueDate; } }; initClock(); }, widgetMap: function( $scope ) { var $container = $scope.find( '.jet-map' ), pinsOpenLimit = 0, map, init, pins, infowindows = [], pinsAutoClose; if ( ! window.google || ! $container.length ) { return; } init = $container.data( 'init' ); pins = $container.data( 'pins' ); pinsAutoClose = init.pinsAutoClose; if ( true === pinsAutoClose ) { pinsOpenLimit = 1; } if ( typeof console !== 'undefined' ) { const originalWarn = console.warn; console.warn = function ( message ) { if ( message && message.includes( 'google.maps.Marker is deprecated' )) { return; } originalWarn.apply( console, arguments ); }; } map = new google.maps.Map( $container[0], init ); if ( pins ) { $.each( pins, function( index, pin ) { var marker, infowindow, pinData = { position: pin.position, map: map, title: pin.address, }; if ( '' !== pin.image ) { if ( undefined !== pin.image_width && undefined !== pin.image_height ) { var icon = { url: pin.image, scaledSize: new google.maps.Size( pin.image_width, pin.image_height ), origin: new google.maps.Point( 0, 0 ), anchor: new google.maps.Point( pin.image_width/2, pin.image_height/2 ) } pinData.icon = icon; } else { pinData.icon = pin.image; } } marker = new google.maps.Marker( pinData ); if ( '' !== pin.desc || undefined !== pin.link_title ) { if ( undefined !== pin.link_title ) { var link_url = pin.link.url, link_is_external = 'on' === pin.link.is_external ? 'target="_blank"': '', link_nofollow = 'on' === pin.link.nofollow ? 'rel="nofollow"': '', link_custom_attributes = undefined !== parse_custom_attributes( pin.link.custom_attributes ) ? parse_custom_attributes( pin.link.custom_attributes ) : '', link_layout; link_layout = '
'; pin.desc += link_layout; } infowindow = new google.maps.InfoWindow({ content: pin.desc, disableAutoPan: true }); infowindows[index] = infowindow; } marker.addListener( 'click', function() { infowindow.setOptions({ disableAutoPan: false }); if ( true === pinsAutoClose ) { $.each( infowindows, function( index, item ) { item.close(); } ); } infowindow.open( map, marker ); }); if ( 1 === pinsOpenLimit ) { if ( 'visible' === pin.state && '' !== pin.desc ) { infowindow.open( map, marker ); pinsOpenLimit++; } } else if ( 0 === pinsOpenLimit ) { if ( 'visible' === pin.state && '' !== pin.desc ) { infowindow.open( map, marker ); } } }); } function parse_custom_attributes( attributes_string, delimiter = ',' ) { var attributes = attributes_string.split( delimiter ), result; result = attributes.reduce(function( res, attribute ) { var attr_key_value = attribute.split( '|' ), attr_key = attr_key_value[0].toLowerCase(), attr_value = '', regex = new RegExp(/[-_a-z0-9]+/); if( !regex.test( attr_key ) ) { return; } // Avoid Javascript events and unescaped href. if ( 'href' === attr_key || 'on' === attr_key.substring( 0, 2 ) ) { return; } if ( undefined !== attr_key_value[1] ) { attr_value = attr_key_value[1].trim(); } else { attr_value = ''; } return res + attr_key + '="' + attr_value + '" '; }, ''); return result; } }, observer: function( $elements, callback, options = {} ) { // Default options: activate a section when at least 50% of it is visible const defaultOptions = { threshold: 0.5, // Activate when the element is more than half visible triggerOnce: false, // Continuously observe the element }; // Merge custom options with defaults options = jQuery.extend( defaultOptions, options ); const observerOptions = { root: null, // Use the browser viewport as the container rootMargin: '0px', // No margin adjustment, relying solely on threshold threshold: options.threshold }; // To determine scroll direction, store the previous Y-coordinate for each element const previousY = new WeakMap(); const observer = new IntersectionObserver(( entries ) => { // First, determine the scroll direction for each entry entries.forEach( entry => { const currentY = entry.boundingClientRect.y; const prevY = previousY.get( entry.target ) || currentY; // Add a new property "direction" to the entry object entry.direction = currentY < prevY ? 'down' : 'up'; previousY.set( entry.target, currentY ); }); // Filter entries with an intersection ratio greater or equal to the threshold (e.g., 50%) const visibleEntries = entries.filter( entry => entry.intersectionRatio >= options.threshold ); // If there are visible entries, choose the one with the highest intersection ratio if ( visibleEntries.length > 0 ) { visibleEntries.sort(( a, b ) => b.intersectionRatio - a.intersectionRatio ); callback.call( visibleEntries[0].target, visibleEntries[0].direction, visibleEntries[0] ); } }, observerOptions ); // Attach the observer to every element in the collection $elements.each( function() { observer.observe( this ); }); return observer; }, prepareWaypointOptions: function( $scope, waypointOptions ) { var options = waypointOptions || {}, $parentPopup = $scope.closest( '.jet-popup__container-inner, .elementor-popup-modal .dialog-message' ); if ( $parentPopup[0] ) { options.context = $parentPopup[0]; } return options; }, widgetProgress: function( $scope ) { var $progress = $scope.find( '.circle-progress' ); if ( ! $progress.length ) { return; } var $value = $progress.find( '.circle-progress__value' ), $meter = $progress.find( '.circle-progress__meter' ), percent = parseInt( $value.data( 'value' ) ), progress = percent / 100, duration = $scope.find( '.circle-progress-wrap' ).data( 'duration' ), currentDeviceMode = elementorFrontend.getCurrentDeviceMode(), isAnimatedCircle = false, breakpoints = JetElementsTools.getElementorElementSettings( $scope ), breakpointsSettings = [], activeBreakpoints = elementor.config.responsive.activeBreakpoints; breakpointsSettings['desktop'] = []; var breakpointSize = breakpoints['circle_size']['size'] ? breakpoints['circle_size']['size'] : $progress[0].getAttribute( 'width' ), breakpointStrokeValue = breakpoints['value_stroke']['size'] ? breakpoints['value_stroke']['size'] : $progress[0].getElementsByClassName( 'circle-progress__value' )[0].getAttribute( 'stroke-width' ), breakpointStrokeBg = breakpoints['bg_stroke']['size'] ? breakpoints['bg_stroke']['size'] : $progress[0].getElementsByClassName( 'circle-progress__meter' )[0].getAttribute( 'stroke-width' ); breakpointSizes( 'desktop', breakpointSize, breakpointStrokeValue, breakpointStrokeBg ); Object.keys( activeBreakpoints ).reverse().forEach( function( breakpointName, index ) { if ( 'widescreen' === breakpointName ){ var breakpointSize = breakpoints['circle_size_' + breakpointName]['size'] ? breakpoints['circle_size_' + breakpointName]['size'] : breakpoints['circle_size']['size'], breakpointStrokeValue = breakpoints['value_stroke_' + breakpointName]['size'] ? breakpoints['value_stroke_' + breakpointName]['size'] : breakpoints['value_stroke']['size'], breakpointStrokeBg = breakpoints['bg_stroke_' + breakpointName]['size'] ? breakpoints['bg_stroke_' + breakpointName]['size'] : breakpoints['bg_stroke']['size']; breakpointsSettings[breakpointName] = []; breakpointSizes( breakpointName, breakpointSize, breakpointStrokeValue, breakpointStrokeBg ); } else { var breakpointSize = breakpoints['circle_size_' + breakpointName]['size'] ? breakpoints['circle_size_' + breakpointName]['size'] : $progress[0].getAttribute( 'width' ), breakpointStrokeValue = breakpoints['value_stroke_' + breakpointName]['size'] ? breakpoints['value_stroke_' + breakpointName]['size'] : $progress[0].getElementsByClassName( 'circle-progress__value' )[0].getAttribute( 'stroke-width' ), breakpointStrokeBg = breakpoints['bg_stroke_' + breakpointName]['size'] ? breakpoints['bg_stroke_' + breakpointName]['size'] : $progress[0].getElementsByClassName( 'circle-progress__meter' )[0].getAttribute( 'stroke-width' ); breakpointsSettings[breakpointName] = []; breakpointSizes( breakpointName, breakpointSize, breakpointStrokeValue, breakpointStrokeBg ); } } ); updateSvgSizes( breakpointsSettings[currentDeviceMode]['size'], breakpointsSettings[currentDeviceMode]['viewBox'], breakpointsSettings[currentDeviceMode]['center'], breakpointsSettings[currentDeviceMode]['radius'], breakpointsSettings[currentDeviceMode]['valStroke'], breakpointsSettings[currentDeviceMode]['bgStroke'], breakpointsSettings[currentDeviceMode]['circumference'] ); JetElements.observer( $scope, function() { // animate counter var $number = $scope.find( '.circle-counter__number' ), data = $number.data(); var decimalDigits = data.toValue.toString().match( /\.(.*)/ ); if ( decimalDigits ) { data.rounding = decimalDigits[1].length; } data.duration = duration; $number.numerator( data ); // animate progress var circumference = parseInt( $progress.data( 'circumference' ) ), dashoffset = circumference * (1 - progress); $value.css({ 'transitionDuration': duration + 'ms', 'strokeDashoffset': dashoffset }); isAnimatedCircle = true; }, JetElements.prepareWaypointOptions( $scope, { offset: 'bottom-in-view' } ) ); $( window ).on( 'resize.jetCircleProgress orientationchange.jetCircleProgress', JetElementsTools.debounce( 50, function() { currentDeviceMode = elementorFrontend.getCurrentDeviceMode(); if ( breakpointsSettings[currentDeviceMode] ) { updateSvgSizes( breakpointsSettings[currentDeviceMode]['size'], breakpointsSettings[currentDeviceMode]['viewBox'], breakpointsSettings[currentDeviceMode]['center'], breakpointsSettings[currentDeviceMode]['radius'], breakpointsSettings[currentDeviceMode]['valStroke'], breakpointsSettings[currentDeviceMode]['bgStroke'], breakpointsSettings[currentDeviceMode]['circumference'] ); } } ) ); function breakpointSizes( breakpointName, breakpointSize, breakpointStrokeValue, breakpointStrokeBg) { var max, radius; breakpointsSettings[breakpointName]['size'] = breakpointSize; breakpointsSettings[breakpointName]['viewBox'] = `0 0 ${breakpointSize} ${breakpointSize}`; breakpointsSettings[breakpointName]['center'] = breakpointSize / 2; radius = breakpointSize / 2; max = ( breakpointStrokeValue >= breakpointStrokeBg ) ? breakpointStrokeValue : breakpointStrokeBg; breakpointsSettings[breakpointName]['radius'] = radius - ( max / 2 ); breakpointsSettings[breakpointName]['circumference'] = 2 * Math.PI * breakpointsSettings[breakpointName]['radius']; breakpointsSettings[breakpointName]['valStroke'] = breakpointStrokeValue; breakpointsSettings[breakpointName]['bgStroke'] = breakpointStrokeBg; } function updateSvgSizes( size, viewBox, center, radius, valStroke, bgStroke, circumference ) { var dashoffset = circumference * (1 - progress); $progress.attr( { 'width': size, 'height': size, 'data-radius': radius, 'data-circumference': circumference } ); $progress[0].setAttribute( 'viewBox', viewBox ); $meter.attr( { 'cx': center, 'cy': center, 'r': radius, 'stroke-width': bgStroke } ); if ( isAnimatedCircle ) { $value.css( { 'transitionDuration': '' } ); } $value.attr( { 'cx': center, 'cy': center, 'r': radius, 'stroke-width': valStroke } ); $value.css( { 'strokeDasharray': circumference, 'strokeDashoffset': isAnimatedCircle ? dashoffset : circumference } ); } }, widgetCarousel: function( $scope ) { var $carousel = $scope.find( '.jet-carousel' ), fraction_nav = $carousel.find('.jet-carousel__fraction-navigation'); if ( ! $carousel.length ) { return; } if ( true === $carousel.data( 'slider_options' ).fractionNav ) { $carousel.find( '.elementor-slick-slider' ).on( 'init reInit afterChange', function ( event, slick, currentSlide, nextSlide ) { //currentSlide is undefined on init -- set it to 0 in this case (currentSlide is 0 based) var i = ( currentSlide ? currentSlide : 0 ) + 1; fraction_nav.html( '' + i + '' + '/' + '' + slick.slideCount + ''); } ); } JetElements.initCarousel( $carousel.find( '.elementor-slick-slider' ), $carousel.data( 'slider_options' ) ); }, widgetPosts: function ( $scope ) { var $target = $scope.find( '.jet-carousel' ), settings = $target.data( 'slider_options' ); if ( ! $target.length ) { return; } settings['slide'] = '.jet-posts__item'; JetElements.initCarousel( $target.find( '.jet-posts' ), settings ); }, widgetAnimatedText: function( $scope ) { var $target = $scope.find( '.jet-animated-text' ), instance = null, settings = {}; if ( ! $target.length ) { return; } settings = $target.data( 'settings' ); instance = new jetAnimatedText( $target, settings ); instance.init(); }, widgetAnimatedBox: function( $scope ) { JetElements.onAnimatedBoxSectionActivated( $scope ); var $target = $scope.find( '.jet-animated-box' ), defaultSettings = { widgetId: null, switchEventType: 'hover', paperFoldDirection: 'left', slideOutDirection: 'left', peelCornerPosition: 'right' }, settings = $target.data( 'settings' ), settings = $.extend( {}, defaultSettings, settings ), scrollOffset = $( window ).scrollTop(), firstMouseEvent = true, editMode = Boolean( elementor.isEditMode() ), backButton = $( '.jet-animated-box__button--back', $scope ); if ( ! $target.length ) { return; } backButton.on( 'touchend', function( event ) { event.stopPropagation(); } ); switch( settings['switchEventType'] ) { case 'hover': if ( ! editMode ) { hoverSwitchType(); } else { clickSwitchType(); } break; case 'click': clickSwitchType(); break; case 'toggle': toggleSwitchType(); break; case 'scratch': scratchSwitchTypeFunc(); break; case 'fold': foldSwitchType(); break; case 'peel': peelSwitchType( settings['peelCornerPosition'] ); break; case 'slide-out': slideOutSwitchType(); break; } function hoverSwitchType() { if ( 'ontouchend' in window || 'ontouchstart' in window ) { $target.on( 'touchstart', function( event ) { scrollOffset = $( window ).scrollTop(); } ); $target.on( 'touchend', function( event ) { if ( scrollOffset !== $( window ).scrollTop() ) { return false; } var $this = $( this ); if ( $this.hasClass( 'flipped-stop' ) ) { return; } setTimeout( function() { $this.toggleClass( 'flipped' ); }, 10 ); $this.find( backButton ).on( 'focus', function() { if ( ! $target.hasClass( 'flipped-stop' ) ) { $target.addClass( 'flipped' ); } } ); $this.find( backButton ).on( 'focusout', function() { $target.removeClass( 'flipped' ) } ); } ); $( document ).on( 'touchend', function( event ) { if ( $( event.target ).closest( $target ).length ) { return; } if ( $target.hasClass( 'flipped-stop' ) ) { return; } if ( ! $target.hasClass( 'flipped' ) ) { return; } $target.removeClass( 'flipped' ); } ); } else { $target.on( 'mouseenter mouseleave', function( event ) { if ( firstMouseEvent && 'mouseleave' === event.type ) { if ( ! $( this ).hasClass( 'flipped-stop' ) ) { $( this ).removeClass( 'flipped' ); } return; } if ( firstMouseEvent && 'mouseenter' === event.type ) { if ( ! $( this ).hasClass( 'flipped-stop' ) ) { $( this ).addClass( 'flipped' ); } //firstMouseEvent = false; } } ); backButton.on( 'focus', function() { if ( ! $target.hasClass( 'flipped-stop' ) ) { $target.addClass( 'flipped' ); } } ); backButton.on( 'focusout', function() { $target.removeClass( 'flipped' ) } ); } } function clickSwitchType() { if ( 'ontouchend' in window || 'ontouchstart' in window ) { $target.on( 'touchstart', function( event ) { scrollOffset = $( window ).scrollTop(); } ); $target.on( 'touchend', function( event ) { if ( scrollOffset !== $( window ).scrollTop() ) { return false; } var $this = $( this ); if ( $this.hasClass( 'flipped-stop' ) ) { return; } setTimeout( function() { $this.toggleClass( 'flipped' ); }, 10 ); } ); $( document ).on( 'touchend', function( event ) { if ( $( event.target ).closest( $target ).length ) { return; } if ( $target.hasClass( 'flipped-stop' ) ) { return; } if ( ! $target.hasClass( 'flipped' ) ) { return; } $target.removeClass( 'flipped' ); } ); } else { $target.on( 'click', function( event ) { if ( ! $target.hasClass( 'flipped-stop' ) ) { $target.toggleClass( 'flipped' ); } } ); backButton.on( 'focus', function() { if ( ! $target.hasClass( 'flipped-stop' ) ) { $target.addClass( 'flipped' ); } } ); backButton.on( 'focusout', function() { $target.removeClass( 'flipped' ) } ); } } function toggleSwitchType() { if ( 'ontouchend' in window || 'ontouchstart' in window ) { $target.on( 'touchstart', '.jet-animated-box__toggle', function( event ) { if ( ! $target.hasClass( 'flipped-stop' ) ) { $target.toggleClass( 'flipped' ); } } ); } else { $target.on( 'click', '.jet-animated-box__toggle', function( event ) { if ( ! $target.hasClass( 'flipped-stop' ) ) { $target.toggleClass( 'flipped' ); } } ); } backButton.on( 'focus', function() { if ( ! $target.hasClass( 'flipped-stop' ) ) { $target.addClass( 'flipped' ); } } ); backButton.on( 'focusout', function() { $target.removeClass( 'flipped' ) } ); } function scratchSwitchTypeFunc() { var settings = $( $target ).closest( '.jet-popup' ).data( 'settings' ); // Check if the target element is inside a `.jet-popup` if ( $( $target ).closest( '.jet-popup' ).length && ( settings && settings[ 'use-ajax' ] === false )) { // If inside a popup, trigger `scratchSwitchType` only once when the popup opens $( window ).one( 'jet-popup-open-trigger', function( event ) { scratchSwitchType(); }); } else { // If not inside a popup, call `scratchSwitchType` directly scratchSwitchType(); } } function scratchSwitchType() { var $container = document.querySelector( '#jet-animated-box-' + settings['widgetId'] ), rect = $container.getBoundingClientRect(), baseTopDistance = rect.top; if ( editMode ) { return false; } var windowWidth = $( window ).width(); $( 'html, body' ).scrollTop(0); html2canvas( document.querySelector( '#jet-animated-box__front-' + settings['widgetId'] ), { allowTaint: true, backgroundColor: null, windowWidth: $( window ).width(), windowHeight: $( window ).height(), scrollX: 0, scrollY: -window.scrollY, } ).then( function( canvas ) { canvas.setAttribute( 'id', 'jet-animated-box-canvas-' + settings['widgetId'] ); $target.prepend( canvas ); $( '.jet-animated-box__front', $target ).fadeOut( 300, function() { $( this ).remove(); }); $( window ).one( 'resize.jetScratch', function( e ) { if ( $( window ).width() !== windowWidth ) { windowWidth = $( window ).width(); $( canvas ).fadeOut( 250, function() { $( this ).remove(); }); } } ); var jetScratch = new jetScratchEffect( '#jet-animated-box-' + settings['widgetId'], '#jet-animated-box-canvas-' + settings['widgetId'], function() { $( canvas ).fadeOut( 300, function() { $( this ).remove(); $target.removeClass( 'back-events-inactive' ); } ); }, settings['scratchFillPercent'], baseTopDistance ); } ); } function foldSwitchType() { if ( editMode ) { $target.addClass( 'fold-init' ); return false; } var folded = null, frontSelector = '#jet-animated-box__front-' + settings['widgetId']; folded = new OriDomi( document.querySelector( frontSelector ), { vPanels: 5, hPanels: 5, speed: 500, ripple: true, shadingIntensity: .9, perspective: 1000, //maxAngle: 90, shading: false, gapNudge: 0, touchSensitivity: .25, touchMoveCallback: function( moveCoordinate, event ) { if ( 89.5 < moveCoordinate ) { $( frontSelector ).remove(); } } }).accordion( 0, settings['paperFoldDirection'] ); $target.addClass( 'fold-init' ); backButton.on( 'focus', function() { folded.foldUp(); } ); backButton.on( 'focusout', function() { folded.accordion( 0, settings['paperFoldDirection'] ); } ); } function peelSwitchType( peelCornerPosition ) { if ( editMode ) { $target.addClass( 'peel-ready' ); return false; } var $front = $( '.jet-animated-box__front', $target ), $frontClone = $front.clone(); $( '.jet-animated-box__front', $target ).addClass( 'peel-top' ); $frontClone.removeAttr('id'); $frontClone.addClass('peel-back'); $frontClone.insertAfter( '#jet-animated-box__front-' + settings['widgetId'] ); $( '.jet-animated-box__back', $target ).addClass( 'peel-bottom' ); var targetWidth = $target.width(), targetHeight = $target.height(); if ( 'left' === peelCornerPosition ) { var peel = new Peel( '#jet-animated-box-' + settings['widgetId'], { corner: Peel.Corners.TOP_LEFT } ); peel.setPeelPosition( 30, 40 ); } else { var peel = new Peel( '#jet-animated-box-' + settings['widgetId'], { corner: Peel.Corners.TOP_RIGHT } ); peel.setPeelPosition( targetWidth - 30, 40 ); } peel.setFadeThreshold(.8); backButton.on( 'focus', function() { peel.removeEvents(); $( '.peel-top, .peel-back, .peel-bottom-shadow', $target ).remove(); } ); peel.handleDrag( function( evt, x, y ) { var targetOffset = $target.offset(), offsetX = targetOffset.left, offsetY = targetOffset.top, deltaX = x - offsetX, deltaY = y - offsetY; deltaX = deltaX < 0 ? deltaX*=3 : deltaX; deltaY = deltaY < 0 ? deltaY*=3 : deltaY; if ( 0.98 < this.getAmountClipped() ) { this.removeEvents(); $( '.peel-top, .peel-back, .peel-bottom-shadow', $target ).remove(); } peel.setPeelPosition( Math.round( deltaX ), Math.round( deltaY ) ); }); } function slideOutSwitchType() { var $frontSide = $( '.jet-animated-box__front', $target ), $backSide = $( '.jet-animated-box__back', $target ), $targetWidth = $target.width(), $targetHeight = $target.height(), axis = ( 'left' === settings.slideOutDirection || 'right' === settings.slideOutDirection ) ? 'x' : 'y'; $frontSide.draggable( { axis: axis, drag: function( event, ui ) { var dragData = ui.position; switch( settings.slideOutDirection ) { case 'left': if ( dragData.left >= 0 ) { ui.position.left = 0; } break; case 'right': if ( dragData.left <= 0 ) { ui.position.left = 0; } break; case 'top': if ( dragData.top >= 0 ) { ui.position.top = 0; } break; case 'bottom': if ( dragData.top <= 0 ) { ui.position.top = 0; } break; } }, } ); backButton.on( 'focus', function() { $frontSide.draggable( "disable" ); $frontSide.hide(); } ); } }, onAnimatedBoxSectionActivated: function( $scope ) { if ( ! window.elementor ) { return; } if ( ! window.JetElementsEditor ) { return; } if ( ! window.JetElementsEditor.activeSection ) { return; } var section = window.JetElementsEditor.activeSection; var isBackSide = -1 !== [ 'section_back_content', 'section_action_button_style' ].indexOf( section ); if ( isBackSide ) { $scope.find( '.jet-animated-box' ).addClass( 'flipped' ); $scope.find( '.jet-animated-box' ).addClass( 'flipped-stop' ); } else { $scope.find( '.jet-animated-box' ).removeClass( 'flipped' ); $scope.find( '.jet-animated-box' ).removeClass( 'flipped-stop' ); } }, widgetImagesLayout: function( $scope ) { var $target = $scope.find( '.jet-images-layout' ), instance = null, settings = {}; if ( ! $target.length ) { return; } settings = $target.data( 'settings' ); instance = new jetImagesLayout( $target, settings ); instance.init(); }, widgetPortfolio: function( $scope ) { var $target = $scope.find( '.jet-portfolio' ), instance = null, eSettings = JetElementsTools.getElementorElementSettings( $scope ), settings = { id: $scope.data( 'id' ) }; if ( ! $target.length ) { return; } settings = $.extend( {}, settings, $target.data( 'settings' ), eSettings ); instance = new jetPortfolio( $target, settings ); instance.init(); }, widgetInstagramGallery: function( $scope ) { var $target = $scope.find( '.jet-instagram-gallery__instance' ), instance = null, defaultSettings = {}, settings = {}; if ( ! $target.length ) { return; } settings = $target.data( 'settings' ), /* * Default Settings */ defaultSettings = { layoutType: 'masonry', } /** * Checking options, settings and options merging */ $.extend( defaultSettings, settings ); if ( 'masonry' === settings.layoutType ) { salvattore.init(); $( window ).on( 'resize orientationchange', function() { salvattore.rescanMediaQueries(); } ) } }, widgetScrollNavigation: function( $scope ) { var $target = $scope.find( '.jet-scroll-navigation' ), instance = null, settings = $target.data( 'settings' ); instance = new jetScrollNavigation( $scope, $target, settings ); instance.init(); }, widgetSubscribeForm: function( $scope ) { var $target = $scope.find( '.jet-subscribe-form' ), scoreId = $scope.data( 'id' ), settings = $target.data( 'settings' ), jetSubscribeFormAjax = null, subscribeFormAjax = 'jet_subscribe_form_ajax', ajaxRequestSuccess = false, $subscribeForm = $( '.jet-subscribe-form__form', $target ), $fields = $( '.jet-subscribe-form__fields', $target ), $mailField = $( '.jet-subscribe-form__mail-field', $target ), $inputData = $mailField.data( 'instance-data' ), $submitButton = $( '.jet-subscribe-form__submit', $target ), $subscribeFormMessage = $( '.jet-subscribe-form__message', $target ), timeout = null, invalidMailMessage = window.jetElements.messages.invalidMail || 'Please specify a valid email'; $mailField.on( 'focus', function() { $mailField.removeClass( 'mail-invalid' ); } ); $( document ).keydown( function( event ) { if ( 13 === event.keyCode && $mailField.is( ':focus' ) ) { subscribeHandle(); return false; } } ); $submitButton.on( 'click', function() { subscribeHandle(); return false; } ); function subscribeHandle() { var inputValue = $mailField.val(), sendData = { 'email': inputValue, 'use_target_list_id': settings['use_target_list_id'] || false, 'target_list_id': settings['target_list_id'] || '', 'data': $inputData }, serializeArray = $subscribeForm.serializeArray(), additionalFields = {}; if ( JetElementsTools.validateEmail( inputValue ) ) { $.each( serializeArray, function( key, fieldData ) { if ( 'email' === fieldData.name ) { sendData[ fieldData.name ] = fieldData.value; } else { additionalFields[ fieldData.name ] = fieldData.value; } } ); sendData['additional'] = additionalFields; if ( ! ajaxRequestSuccess && jetSubscribeFormAjax ) { jetSubscribeFormAjax.abort(); } jetSubscribeFormAjax = $.ajax( { type: 'POST', url: window.jetElements.ajaxUrl, data: { action: subscribeFormAjax, data: sendData }, cache: false, beforeSend: function() { $submitButton.addClass( 'loading' ); ajaxRequestSuccess = false; }, success: function( data ){ var successType = data.type, message = data.message || '', responceClass = 'jet-subscribe-form--response-' + successType; $submitButton.removeClass( 'loading' ); ajaxRequestSuccess = true; $target.removeClass( 'jet-subscribe-form--response-error' ); $target.addClass( responceClass ); $( 'span', $subscribeFormMessage ).html( message ); $subscribeFormMessage.css( { 'visibility': 'visible' } ); timeout = setTimeout( function() { $subscribeFormMessage.css( { 'visibility': 'hidden' } ); $target.removeClass( responceClass ); }, 20000 ); if ( settings['redirect'] ) { window.location.href = settings['redirect_url']; } $( window ).trigger( { type: 'jet-elements/subscribe', elementId: scoreId, successType: successType, inputData: $inputData } ); } }); } else { $mailField.addClass( 'mail-invalid' ); $target.addClass( 'jet-subscribe-form--response-error' ); $( 'span', $subscribeFormMessage ).html( invalidMailMessage ); $subscribeFormMessage.css( { 'visibility': 'visible' } ); timeout = setTimeout( function() { $target.removeClass( 'jet-subscribe-form--response-error' ); $subscribeFormMessage.css( { 'visibility': 'hidden' } ); $mailField.removeClass( 'mail-invalid' ); }, 20000 ); } } }, widgetProgressBar: function( $scope ) { var $target = $scope.find( '.jet-progress-bar' ), percent = $target.data( 'percent' ), type = $target.data( 'type' ), deltaPercent = percent * 0.01; JetElements.observer( $target, function( direction ) { var $this = $( this ), animeObject = { charged: 0 }, $statusBar = $( '.jet-progress-bar__status-bar', $this ), $percent = $( '.jet-progress-bar__percent-value', $this ), currentValue = $target.data( 'current-value' ), maxValue = $target.data( 'max-value' ), animeProgress, animePercent; if ( currentValue && maxValue ) { if ( ( currentValue > maxValue ) ) { return; } else { animeObject = { Counter: 0 } } } if ( 'type-7' == type ) { $statusBar.css( { 'height': percent + '%' } ); } else { $statusBar.css( { 'width': percent + '%' } ); } animePercent = anime( { targets: animeObject, charged: percent, round: 1, duration: 1000, easing: 'easeInOutQuad', begin: function(){ if ( currentValue && maxValue ) { $( { Counter: 0 } ).animate( { Counter: currentValue }, { duration: 1000, easing: 'swing', step: function ( now ) { $percent.text( Math.round( now ) + '/' + maxValue ); } } ); } }, update: function() { $percent.html( animeObject.charged ); }, } ); }, JetElements.prepareWaypointOptions( $scope ) ); }, widgetSlider: function( $scope ) { var $target = $scope.find( '.jet-slider' ), $imagesTagList = $( '.sp-image', $target ), item = $( '.jet-slider__item', $target ), instance = null, item_url = '', item_url_target = '', defaultSettings = { imageScaleMode: 'cover', slideDistance: { size: 10, unit: 'px' }, slideDuration: 500, sliderAutoplay: true, sliderAutoplayDelay: 2000, sliderAutoplayOnHover: 'pause', sliderFadeMode: false, sliderFullScreen: true, sliderFullscreenIcon: '', sliderHeight: { size: 600, unit: 'px' }, sliderLoop: true, sliderNaviOnHover: false, sliderNavigation: true, sliderNavigationIcon: '', sliderPagination: false, sliderShuffle: false, sliderWidth: { size: 100, unit: '%' }, thumbnailWidth: 120, thumbnailHeight: 80, thumbnails: true, rightToLeft: false, }, instanceSettings = $target.data( 'settings' ) || {}, breakpoints = JetElementsTools.getElementorElementSettings( $scope ), breakpointsSettings = {}, defaultHeight, defaultThumbHeight, defaultThumbWidth, activeBreakpoints = elementor.config.responsive.activeBreakpoints, settings = $.extend( {}, defaultSettings, instanceSettings ), fraction_nav = $target.find( '.jet-slider__fraction-pagination' ), editMode = Boolean( elementor.isEditMode() ); if ( ! $target.length ) { return; } if ( !editMode ) { $target.on( 'mousedown touchstart', '.jet-slider__content[data-slide-url]', function( e ) { window.XPos = e.pageX || e.originalEvent.changedTouches[0].pageX; window.YPos = e.pageY || e.originalEvent.changedTouches[0].pageY; }); $target.on( 'mouseup touchend', '.jet-slider__content[data-slide-url]', function( e ) { var $this = $( this ), item_url = $this.data( 'slide-url' ), item_url_target = $this.data( 'slide-url-target' ), clickXPos = e.pageX || e.originalEvent.changedTouches[0].pageX, clickYPos = e.pageY || e.originalEvent.changedTouches[0].pageY; if ( window.XPos === clickXPos && window.YPos === clickYPos ) { e.preventDefault(); if ( '_blank' === item_url_target ) { window.open( item_url ); } else { window.location = item_url; } } } ); } defaultHeight = ( breakpoints['slider_height'] && 'custom' === breakpoints['slider_height']['unit'] ) ? breakpoints['slider_height']['size'] : ( '' != breakpoints['slider_height']['size'] ) ? breakpoints['slider_height']['size'] + breakpoints['slider_height']['unit'] : '600px'; defaultThumbHeight = ( 'thumbnail_height' in breakpoints && '' != breakpoints['thumbnail_height'] ) ? breakpoints['thumbnail_height'] : 80; defaultThumbWidth = ( 'thumbnail_width' in breakpoints && '' != breakpoints['thumbnail_width'] ) ? breakpoints['thumbnail_width'] : 120; var wHeight = $( window ).height(), dHeight = $( document ).height(), offsetfix = ( editMode && wHeight < dHeight ) ? 18 : 1; Object.keys( activeBreakpoints ).forEach( function( breakpointName ) { if ( 'widescreen' === breakpointName ) { var breakpoint = activeBreakpoints[breakpointName].value - offsetfix, breakpointHeight = ( breakpoints['slider_height_' + breakpointName] && 'custom' === breakpoints['slider_height_' + breakpointName]['unit'] ) ? breakpoints['slider_height']['size'] : ( '' != breakpoints['slider_height_' + breakpointName]['size'] ) ? breakpoints['slider_height_' + breakpointName]['size'] + breakpoints['slider_height_' + breakpointName]['unit'] : defaultHeight, breakpointThumbHeight = '' != breakpoints['thumbnail_height_' + breakpointName] ? breakpoints['thumbnail_height_' + breakpointName] : defaultThumbHeight, breakpointThumbWidth = '' != breakpoints['thumbnail_width_' + breakpointName] ? breakpoints['thumbnail_width_' + breakpointName] : defaultThumbWidth, desktopHeight = '' != breakpoints['slider_height']['size'] ? breakpoints['slider_height']['size'] + breakpoints['slider_height']['unit'] : settings['sliderHeight']['size'] + settings['sliderHeight']['unit'], desktopThumbHeight = '' != breakpoints['thumbnail_height'] ? breakpoints['thumbnail_height'] : settings['thumbnailHeight'], desktopThumbWidth = '' != breakpoints['thumbnail_width'] ? breakpoints['thumbnail_width'] : settings['thumbnailWidth']; if ( breakpointHeight || breakpointThumbHeight || breakpointThumbWidth ) { breakpointsSettings[breakpoint] = {}; } else { return; } if ( breakpointHeight ) { defaultHeight = breakpointHeight; breakpointsSettings[breakpoint]['height'] = desktopHeight; } if ( breakpointThumbHeight ) { defaultThumbHeight = breakpointThumbHeight; breakpointsSettings[breakpoint]['thumbnailHeight'] = desktopThumbHeight; } if ( breakpointThumbWidth ) { defaultThumbWidth = breakpointThumbWidth; breakpointsSettings[breakpoint]['thumbnailWidth'] = desktopThumbWidth; } } else { var breakpoint = activeBreakpoints[breakpointName].value - offsetfix, breakpointThumbHeight = breakpoints['thumbnail_height_' + breakpointName] ? breakpoints['thumbnail_height_' + breakpointName] : false, breakpointThumbWidth = breakpoints['thumbnail_width_' + breakpointName] ? breakpoints['thumbnail_width_' + breakpointName] : false; breakpointHeight = ( 'custom' === breakpoints['slider_height_' + breakpointName]['unit'] ) ? breakpoints['slider_height_' + breakpointName]['size'] : ( '' != breakpoints['slider_height_' + breakpointName]['size'] ) ? breakpoints['slider_height_' + breakpointName]['size'] + breakpoints['slider_height_' + breakpointName]['unit'] : false; if ( breakpointHeight || breakpointThumbHeight || breakpointThumbWidth ) { breakpointsSettings[breakpoint] = {}; } else { return; } if ( breakpointHeight ) { breakpointsSettings[breakpoint]['height'] = breakpointHeight; } if ( breakpointThumbHeight ) { breakpointsSettings[breakpoint]['thumbnailHeight'] = breakpointThumbHeight; } if ( breakpointThumbWidth ) { breakpointsSettings[breakpoint]['thumbnailWidth'] = breakpointThumbWidth; } } } ); $( '.slider-pro', $target ).sliderPro( { width: settings['sliderWidth']['size'] + settings['sliderWidth']['unit'], height: defaultHeight, arrows: settings['sliderNavigation'], fadeArrows: settings['sliderNaviOnHover'], buttons: settings['sliderPagination'], autoplay: settings['sliderAutoplay'], autoplayDelay: settings['sliderAutoplayDelay'], autoplayOnHover: settings['sliderAutoplayOnHover'], fullScreen: settings['sliderFullScreen'], shuffle: settings['sliderShuffle'], loop: settings['sliderLoop'], fade: settings['sliderFadeMode'], slideDistance: ( 'string' !== typeof settings['slideDistance']['size'] ) ? settings['slideDistance']['size'] : 0, slideAnimationDuration: +settings['slideDuration'], imageScaleMode: 'exact', waitForLayers: false, grabCursor: false, thumbnailWidth: defaultThumbWidth, thumbnailHeight: defaultThumbHeight, rightToLeft: settings['rightToLeft'], touchSwipe: settings['touchswipe'], init: function() { var fullscreenIconHtml = $( '.' + settings['sliderFullscreenIcon'] ).html(), arrowIconHtml = $( '.' + settings['sliderNavigationIcon'] ).html(); $( '.sp-full-screen-button', $target ).html( fullscreenIconHtml ); $( '.sp-previous-arrow', $target ).html( arrowIconHtml ); $( '.sp-next-arrow', $target ).html( arrowIconHtml ); $( '.slider-pro', $target ).addClass( 'slider-loaded' ); if ( settings.autoSliderHeight ) { var $slider = $('.slider-pro', $target); // Update mask, imageContainer and slide height function updateHeight() { var $slider = $( '.slider-pro', $target ), $activeSlide = $slider.find( '.jet-slider__item.sp-slide.sp-selected' ), $inner = $activeSlide.find( '.jet-slider__content-inner' ), $mask = $slider.find( '.sp-mask.sp-grab' ), $imageContainer = $activeSlide.find( '.sp-image-container' ), isFullscreen = $slider.hasClass( 'sp-full-screen' ); if ( $activeSlide.find( '.elementor' ).length > 0 ) { var $innerHeight = $inner.outerHeight(); if ( isFullscreen ) { // In fullscreen mode, use the window height var windowHeight = $( window ).height(); $mask.css( 'height', windowHeight + 'px' ); $imageContainer.css( 'height', windowHeight + 'px' ); $activeSlide.css( 'height', windowHeight + 'px' ); } else { $mask.css( 'height', $innerHeight + 'px' ); $imageContainer.css( 'height', $innerHeight + 'px' ); $activeSlide.css( 'height', $innerHeight + 'px' ); } } else { if ( isFullscreen ) { var windowHeight = $( window ).height(); $mask.css( 'height', windowHeight + 'px' ); $imageContainer.css( 'height', windowHeight + 'px' ); $activeSlide.css( 'height', windowHeight + 'px' ); } else { $mask.css( 'height', defaultHeight ); $imageContainer.css( 'height', defaultHeight ); $activeSlide.css( 'height', defaultHeight ); } } } // Initialize ResizeObserver var resizeObserver = new ResizeObserver( function( entries ) { for ( let entry of entries ) { updateHeight(); } }); function observeActiveSlide() { var $activeSlide = $slider.find( '.jet-slider__item.sp-slide.sp-selected' ), $inner = $activeSlide.find( '.jet-slider__content-inner' ); if ( $inner.length ) { resizeObserver.observe( $inner.get( 0 ) ); } } // Initialize all slides $slider.find( '.jet-slider__item.sp-slide' ).each( function() { var $this = $( this ), $inner = $this.find( '.jet-slider__content-inner' ), $imageContainer = $this.find( '.sp-image-container' ), $innerHeight = $inner.outerHeight(); if ($this.find( '.elementor' ).length > 0 ) { $this.css( 'height', $innerHeight + 'px' ); $imageContainer.css( 'height', $innerHeight + 'px' ); } }); updateHeight(); observeActiveSlide(); // On slide change $slider.on( 'gotoSlide', function() { resizeObserver.disconnect(); updateHeight(); observeActiveSlide(); }); } this.resize(); }, gotoSlideComplete: function() { if ( true === settings['fractionPag'] ) { var i = ( this.getSelectedSlide() ? this.getSelectedSlide() : 0 ) + 1; fraction_nav.html( '' + i + '' + '/' + '' + this.getTotalSlides() + ''); } elementorFrontend.elements.$window.trigger("elementor/bg-video/recalc"); }, update: function() { if ( true === settings['fractionPag'] ) { var i = ( this.getSelectedSlide() ? this.getSelectedSlide() : 0 ) + 1; fraction_nav.html( '' + i + '' + '/' + '' + this.getTotalSlides() + ''); } }, breakpoints: breakpointsSettings } ); $( '.slider-pro', $target ).on( 'gotoSlide', function() { $target.find( '[data-element_type]' ).each( function() { window.elementorFrontend.hooks.doAction( 'frontend/element_ready/global', $( this ), $ ); } ); } ); }, widgetTestimonials: function( $scope ) { var $target = $scope.find( '.jet-testimonials__instance' ), $imagesTagList = $( '.jet-testimonials__figure', $target ), targetContent = $( '.jet-testimonials__content', $target ), instance = null, settings = $target.data( 'settings' ), ratingSettings = $target.data( 'rating-settings' ); if ( ! $target.length ) { return; } targetContent.each( function() { var ratingList = $( '.jet-testimonials__rating', this ); if ( ratingList ) { var rating = ratingList.data('rating'); ratingList.each( function() { $( 'i', this ).each( function( index ) { if ( index <= rating - 1 ) { var itemClass = $( this ).data( 'active-star' ); $( this ).addClass( itemClass ); } else { var itemClass = $( this ).data( 'star' ); $( this ).addClass( itemClass ); } } ) } ) } } ) settings.adaptiveHeight = settings['adaptiveHeight']; settings['slide'] = '.jet-testimonials__item'; JetElements.initCarousel( $target, settings ); }, widgetImageComparison: function( $scope ) { var $target = $scope.find( '.jet-image-comparison__instance' ), instance = null, imageComparisonItems = $( '.jet-image-comparison__container', $target ), settings = $target.data( 'settings' ), elementId = $scope.data( 'id' ); if ( ! $target.length ) { return; } window.juxtapose.scanPage( '.jet-juxtapose' ); settings.draggable = false; settings.infinite = false; JetElements.initCarousel( $target, settings ); }, widgetTimeTable: function( $scope ) { var $mptt_shortcode_wrapper = $scope.find( '.mptt-shortcode-wrapper' ); if ( ( typeof typenow ) !== 'undefined' ) { if ( pagenow === typenow ) { switch ( typenow ) { case 'mp-event': Registry._get( 'Event' ).init(); break; case 'mp-column': Registry._get( 'Event' ).initDatePicker(); Registry._get( 'Event' ).columnRadioBox(); break; default: break; } } } if ( $mptt_shortcode_wrapper.length ) { Registry._get( 'Event' ).initTableData(); Registry._get( 'Event' ).filterShortcodeEvents(); Registry._get( 'Event' ).getFilterByHash(); $mptt_shortcode_wrapper.show(); } if ( $( '.upcoming-events-widget' ).length || $mptt_shortcode_wrapper.length ) { Registry._get( 'Event' ).setColorSettings(); } }, elementorSection: function( $scope ) { var $target = $scope, instance = null, editMode = Boolean( elementor.isEditMode() ); instance = new jetSectionParallax( $target ); instance.init(); }, initCarousel: function( $target, options ) { var defaultOptions, slickOptions, responsive = [], eTarget = $target.closest( '.elementor-widget' ), breakpoints = JetElementsTools.getElementorElementSettings( eTarget ), activeBreakpoints = elementor.config.responsive.activeBreakpoints, dotsEnable = options.dots, accessibility = true, prevDeviceToShowValue, prevDeviceToScrollValue, slidesCount, jetListing = eTarget.closest( '.jet-listing-grid' ).hasClass( 'jet-listing' ), jetListingItem = eTarget.closest( '.jet-listing-grid__item' ), jetnextArrow = eTarget.find( '.prev-arrow' ), jetprevArrow = eTarget.find( '.next-arrow' ), isMobileCheck = JetElementsTools.mobileAndTabletcheck(); // Compatibility slick carousel with jet listing if ( jetListing && jetListingItem ){ options.nextArrow = false; options.prevArrow = false; jetListingItem.find( jetnextArrow ).on( 'click', function () { $target.slick( 'slickPrev' ); }); jetListingItem.find( jetprevArrow ).on( 'click', function () { $target.slick( 'slickNext' ); }); } if ( $target.hasClass( 'jet-image-comparison__instance' ) ) { accessibility = false; setTimeout( function() { $target.on( 'beforeChange', function() { var _this = $( this ); _this.find( '.slick-slide' ).each( function() { $( this ).find( '.jx-controller' ).attr( 'tabindex', '' ); $( this ).find( '.jx-label').attr( 'tabindex', '' ); } ); } ); $target.on( 'afterChange', function() { var _this = $(this); _this.find( '.slick-slide.slick-active' ).each( function() { $( this ).find( '.jx-controller' ).attr( 'tabindex', '0' ); $( this ).find( '.jx-label').attr( 'tabindex', 0 ); } ); } ); }, 100 ); } if ( $target.hasClass( 'jet-posts' ) && $target.parent().hasClass( 'jet-carousel' ) ) { function renameKeys( obj, newKeys ) { const keyValues = Object.keys( obj ).map( key => { const newKey = newKeys[key] || key; return { [newKey]: obj[key] }; } ); return Object.assign( {}, ...keyValues ); } var newBreakpointsKeys = { columns: "slides_to_show", columns_widescreen: "slides_to_show_widescreen", columns_laptop: "slides_to_show_laptop", columns_tablet_extra: "slides_to_show_tablet_extra", columns_tablet: "slides_to_show_tablet", columns_mobile_extra: "slides_to_show_mobile_extra", columns_mobile: "slides_to_show_mobile" }; breakpoints = renameKeys( breakpoints, newBreakpointsKeys ); slidesCount = $( '> div.jet-posts__item', $target ).length; } else { slidesCount = $( '> div', $target ).length; } options.slidesToShow = +breakpoints.slides_to_show; options.slidesToScroll = breakpoints.slides_to_scroll ? +breakpoints.slides_to_scroll : 1; Object.keys( activeBreakpoints ).forEach( function( breakpointName ) { if ( 'widescreen' === breakpointName ) { options.slidesToShow = ( "slides_to_show_widescreen" in breakpoints ) && '' != breakpoints.slides_to_show_widescreen ? +breakpoints.slides_to_show_widescreen : +breakpoints.slides_to_show; if ( ( "slides_to_scroll_widescreen" in breakpoints ) && '' != breakpoints.slides_to_scroll_widescreen ) { options.slidesToScroll = +breakpoints.slides_to_scroll_widescreen; } else { if ( options.slidesToShow > +breakpoints.slides_to_scroll ) { options.slidesToScroll = +breakpoints.slides_to_scroll; } else { options.slidesToScroll = options.slidesToShow; } } } } ); if ( options.slidesToShow >= slidesCount ) { options.dots = false; } prevDeviceToShowValue = options.slidesToShow; prevDeviceToScrollValue = options.slidesToScroll; setTimeout( function() { $( '.slick-slide', $target ).each( function () { if ( $(this).attr('aria-describedby') != undefined ) { $( this ).attr('id', $( this ).attr( 'aria-describedby' ) ); } } ); $( '.jet-slick-dots', $target ).removeAttr( 'role' ); $( '.jet-slick-dots li', $target ).each( function() { $( this ).removeAttr( 'role' ); $( this ).attr( 'tabindex', '0' ); } ); }, 100 ); $target.on( 'init reInit', function() { $( '.jet-slick-dots', $target ).removeAttr( 'role' ); $( '.jet-slick-dots li', $( this ) ).each( function() { $( this ).removeAttr( 'role' ); $( this ).attr( 'tabindex', '0' ); } ); $( '.jet-slick-dots li', $( this ) ).keydown( function( e ) { var $this = $( this ), $which = e.which || e.keyCode; if ( $which == 13 || $which == 32 ) { $this.click(); } if ( $which == 37 ) { if ( 0 != $this.prev().length ) { $this.prev().focus(); $this.prev().click(); } } if ( $which == 39 ) { if ( 0 != $this.next().length ) { $this.next().focus(); $this.next().click(); } } } ); $( '.jet-arrow', eTarget ).attr( 'tabindex', 0 ); $( '.jet-arrow', eTarget ).keydown( function( e ) { var $this = $( this ), $which = e.which || e.keyCode; if ( $which == 13 || $which == 32 ) { $this.click(); } if ( $which == 37 ) { if ( 0 != $this.prev().length && $this.prev().hasClass( 'slick-arrow' ) ) { $this.prev().focus(); } } if ( $which == 39 && $this.next().hasClass( 'slick-arrow' ) ) { if ( 0 != $this.next().length ) { $this.next().focus(); } } } ); if ( $target.hasClass( 'jet-image-comparison__instance' ) ) { setTimeout( function() { $target.find( '.slick-slide.slick-active' ).each( function() { $( this ).find( '.jx-controller' ).attr( 'tabindex', '0' ); $( this ).find( '.jx-label').attr( 'tabindex', '0' ); } ); }, 100 ); } //fix lazyload image loading var slidesTrack = $( '.slick-track', $target ); slidesTrack.find( '.slick-slide' ).each( function() { var _this = $( this ), itemImg = $( '.jet-carousel__item-img', _this ); var observer = new IntersectionObserver( function( entries ) { if ( entries[0].isIntersecting === true ) { itemImg.each( function() { var attr = $( this ).attr( 'loading' ); if ( typeof attr !== 'undefined' && attr !== false ) { if ( 0 === $( this ).width() ) { $( this ).attr( 'loading', "" ); } } } ) observer.unobserve( entries[0].target ); } }, { threshold: [0] } ); observer.observe( _this[0] ); } ); if ( options.infinite ) { var $items = $( this ), $clonedSlides = $( '> .slick-list > .slick-track > .slick-cloned.jet-carousel__item', $items ); if ( !$clonedSlides.length ) { return; } JetElements.initElementsHandlers( $clonedSlides ); } } ); if ( $target.hasClass( 'slick-initialized' ) ) { $target.not('.slick-initialized').slick('refresh', true ); return; } Object.keys( activeBreakpoints ).reverse().forEach( function( breakpointName ) { if ( breakpoints['slides_to_show_' + breakpointName] || breakpoints['slides_to_scroll_' + breakpointName] ) { var breakpointSetting = { breakpoint: null, settings: {} } breakpointSetting.breakpoint = 'widescreen' != breakpointName ? activeBreakpoints[breakpointName].value : activeBreakpoints[breakpointName].value - 1; if ( 'widescreen' === breakpointName ) { breakpointSetting.settings.slidesToShow = +breakpoints['slides_to_show']; breakpointSetting.settings.slidesToScroll = +breakpoints['slides_to_scroll'] ? +breakpoints['slides_to_scroll']: 1; } else { breakpointSetting.settings.slidesToShow = breakpoints['slides_to_show_' + breakpointName] ? +breakpoints['slides_to_show_' + breakpointName] : prevDeviceToShowValue; breakpointSetting.settings.slidesToScroll = breakpoints['slides_to_scroll_' + breakpointName] ? +breakpoints['slides_to_scroll_' + breakpointName] : prevDeviceToScrollValue; } if ( breakpointSetting.settings.slidesToShow >= slidesCount ) { breakpointSetting.settings.dots = false; } else { if ( dotsEnable ) { breakpointSetting.settings.dots = true; } } prevDeviceToShowValue = breakpointSetting.settings.slidesToShow; prevDeviceToScrollValue = breakpointSetting.settings.slidesToScroll responsive.push( breakpointSetting ); } } ); options.responsive = responsive; if ( options.slidesToShow >= slidesCount ) { options.dots = false; } // Disable variableWidth on mobile if it was requested if ( isMobileCheck && options.variableWidth ) { options.variableWidth = false; options.centerMode = false; options.slidesToScroll = 1; options.slidesToShow = 1; } // Enable centerMode when variableWidth is active on desktop else if ( options.variableWidth ) { options.slidesToShow = 1; options.centerMode = true; } defaultOptions = { customPaging: function(slider, i) { return $( '' ).text( i + 1 ); }, dotsClass: 'jet-slick-dots', accessibility: accessibility }; slickOptions = $.extend( {}, defaultOptions, options ); $target.slick( slickOptions ); if ( $target.hasClass( 'jet-image-comparison__instance' ) ) { let juxtaposeSlidersLength = window.juxtapose.sliders.length; for ( let i = 0; i < juxtaposeSlidersLength; i++ ) { window.juxtapose.sliders[i].setWrapperDimensions(); } } }, widgetTimeLine : function ( $scope ){ var $target = $scope.find( '.jet-timeline' ), instance = null; if ( ! $target.length ) { return; } instance = new jetTimeLine( $target ); instance.init(); }, widgetTable: function( $scope ) { var $target = $scope.find( '.jet-table' ), options = { cssHeader: 'jet-table-header-sort', cssAsc: 'jet-table-header-sort--up', cssDesc: 'jet-table-header-sort--down', initWidgets: false }; if ( ! $target.length ) { return; } if ( $target.hasClass( 'jet-table--sorting' ) ) { $target.tablesorter( options ); } $( '.jet-table__body-row', $target ).each( function() { var _this = $( this ), itemsCounter = 0, emptyContents = 0; $( '.jet-table__cell', _this ).each( function() { var image = $( 'img', $( this ) ), svg = $( 'svg', $( this ) ), icon = $( 'i', $( this ) ), itemImages = 0; if ( 0 === svg.length && 0 === icon.length ) { image.each( function() { if ( '' != $( this ).attr( 'src' ) ) { itemImages++; } } ) if ( 0 === $( this ).text().length && 0 === itemImages ) { emptyContents++; } } itemsCounter++; } ) if( emptyContents === itemsCounter ) { _this.remove(); } } ) }, widgetDropbar: function( $scope ) { var $dropbar = $scope.find( '.jet-dropbar' ), $dropbar_inner = $dropbar.find( '.jet-dropbar__inner' ), $btn = $dropbar.find( '.jet-dropbar__button' ), $content = $dropbar.find( '.jet-dropbar__content' ), settings = $dropbar.data( 'settings' ) || {}, mode = settings['mode'] || 'hover', hide_delay = +settings['hide_delay'] || 0, activeClass = 'jet-dropbar-open', eContainer = $scope.parents( '.e-con' ), scrollOffset, timer, loader = $( '.jet-elements-loader', $content ), signature = settings['signature']; if ( 'click' === mode ) { $btn.on( 'click.jetDropbar', function( event ) { $dropbar.toggleClass( activeClass ); if ( $dropbar.hasClass( activeClass ) && 'yes' === settings['ajax_template'] ) { ajaxLoadTemplate( settings['template_id'] ); } } ); } else { if ( 'ontouchstart' in window || 'ontouchend' in window ) { $btn.on( 'touchend.jetDropbar', function( event ) { if ( $( window ).scrollTop() !== scrollOffset ) { return; } $dropbar.toggleClass( activeClass ); if ( $dropbar.hasClass( activeClass ) && 'yes' === settings['ajax_template'] ) { ajaxLoadTemplate( settings['template_id'] ); } } ); } else { $dropbar_inner.on( 'mouseenter.jetDropbar', function( event ) { clearTimeout( timer ); $( '.jet-dropbar' ).each( function() { $( this ).removeClass( activeClass ); $( this ).parents( '.e-con' ).css( 'z-index', '' ); } ); eContainer.css( 'z-index', '' ); if ( eContainer.css( 'z-index' ) === 'auto' ) { eContainer.css( 'z-index', 1 ); } $dropbar.addClass( activeClass ); if ( $dropbar.hasClass( activeClass ) && 'yes' === settings['ajax_template'] ) { ajaxLoadTemplate( settings['template_id'] ); } } ); $dropbar_inner.on( 'mouseleave.jetDropbar', function( event ) { timer = setTimeout( function() { $dropbar.removeClass( activeClass ); }, hide_delay ); } ); } } $( document ).on( 'touchstart.jetDropbar', function( event ) { scrollOffset = $( window ).scrollTop(); } ); $( document ).on( 'click.jetDropbar touchend.jetDropbar', function( event ) { if ( 'touchend' === event.type && $( window ).scrollTop() !== scrollOffset ) { return; } if ( $( event.target ).closest( $btn ).length || $( event.target ).closest( $content ).length ) { return; } if ( ! $dropbar.hasClass( activeClass ) ) { return; } $dropbar.removeClass( activeClass ); } ); function ajaxLoadTemplate( templateId ) { if ( $content.data( 'loaded' ) || false === templateId ) { return false; } $content.data( 'loaded', true ); if ( ! templateId ) { return; } $.ajax({ type: 'GET', url: window.jetElements.templateApiUrl, dataType: 'json', data: { 'id': templateId, 'dev': window.jetElements.devMode, 'signature' : signature }, success: function ( response, textStatus, jqXHR ) { var templateContent = response['template_content'], templateScripts = response['template_scripts'], templateStyles = response['template_styles']; for ( var scriptHandler in templateScripts ) { JetElements.addedAssetsPromises.push( JetElements.loadScriptAsync( scriptHandler, templateScripts[ scriptHandler ] ) ); } for ( var styleHandler in templateStyles ) { JetElements.addedAssetsPromises.push( JetElements.loadStyle( styleHandler, templateStyles[ styleHandler ] ) ); } Promise.all( JetElements.addedAssetsPromises ).then( function( value ) { loader.remove(); $content.append( templateContent ); JetElements.initElementsHandlers( $content ); }, function( reason ) { console.log( 'Script Loaded Error' ); }); }, error: function (jqXHR, textStatus, errorThrown) { console.error( 'Script Loaded Error:', textStatus, errorThrown ); } }); } }, widgetVideo: function( $scope ) { var $video = $scope.find( '.jet-video' ), $iframe = $scope.find( '.jet-video-iframe' ), $videoPlaer = $scope.find( '.jet-video-player' ), $mejsPlaer = $scope.find( '.jet-video-mejs-player' ), mejsPlaerControls = $mejsPlaer.data( 'controls' ) || ['playpause', 'current', 'progress', 'duration', 'volume', 'fullscreen'], $overlay = $scope.find( '.jet-video__overlay' ), playButton = $scope.find( '.jet-video__play-button' ), hasOverlay = $overlay.length > 0, settings = $video.data( 'settings' ) || {}, lightbox = settings.lightbox || false, autoplay = settings.autoplay || false; if ( $overlay[0] ) { playButton.keypress( function( e ) { if ( e.which == 13 ) { $overlay.click(); return false; } } ); $overlay.on( 'click.jetVideo', function( event ) { if ( $videoPlaer[0] ) { $videoPlaer[0].play(); $overlay.remove(); hasOverlay = false; return; } if ( $iframe[0] ) { iframeStartPlay(); } } ); } if ( autoplay && $iframe[0] && $overlay[0] ) { iframeStartPlay(); } function iframeStartPlay() { var lazyLoad = $iframe.data( 'lazy-load' ); if ( lazyLoad ) { $iframe.attr( 'src', lazyLoad ); } if ( ! autoplay ) { $iframe[0].src = $iframe[0].src.replace( '&autoplay=0', '&autoplay=1' ); } $overlay.remove(); hasOverlay = false; } if ( $videoPlaer[0] ) { $videoPlaer.on( 'play.jetVideo', function( event ) { if ( hasOverlay ) { $overlay.remove(); hasOverlay = false; } } ); if ( autoplay ) { $overlay.remove(); } } if ( $mejsPlaer[0] ) { $mejsPlaer.mediaelementplayer( { videoVolume: 'horizontal', hideVolumeOnTouchDevices: false, enableProgressTooltip: false, features: mejsPlaerControls, success: function( media ) { media.addEventListener( 'timeupdate', function( event ) { var $currentTime = $scope.find( '.mejs-time-current' ), inlineStyle = $currentTime.attr( 'style' ); if ( inlineStyle ) { var scaleX = inlineStyle.match(/scaleX\([0-9.]*\)/gi)[0].replace( 'scaleX(', '' ).replace( ')', '' ); if ( scaleX ) { $currentTime.css( 'width', scaleX * 100 + '%' ); } } }, false ); } } ); } }, widgetAudio: function( $scope ) { var $wrapper = $scope.find( '.jet-audio' ), $player = $scope.find( '.jet-audio-player' ), settings = $wrapper.data( 'audio-settings' ), unmuted = 0, hasVolume = false, startVolume; if ( ! $player[0] ) { return; } startVolume = settings['startVolume'] || 0.8; settings['controls'].map( function( control ) { if ( 'volume' === control ) { hasVolume = true; } } ); $player.each( function() { if ( ! $( this ).hasClass( 'mejs-container' ) ) { $( this ).mediaelementplayer({ features: settings['controls'] || ['playpause', 'current', 'progress', 'duration', 'volume'], audioVolume: settings['audioVolume'] || 'horizontal', startVolume: startVolume, hideVolumeOnTouchDevices: settings['hideVolumeOnTouchDevices'], enableProgressTooltip: false, success: function( media ) { var muteBtn = $scope.find( '.mejs-button button' ); media.addEventListener( 'timeupdate', function( event ) { var $currentTime = $scope.find( '.mejs-time-current' ), inlineStyle = $currentTime.attr( 'style' ); if ( inlineStyle ) { var scaleX = inlineStyle.match(/scaleX\([0-9.]*\)/gi)[0].replace( 'scaleX(', '' ).replace( ')', '' ); if ( scaleX ) { $currentTime.css( 'width', scaleX * 100 + '%' ); } } }, false ); if ( hasVolume && 'yes' === settings['hasVolumeBar'] && !settings['hideVolumeOnTouchDevices']) { media.setVolume( startVolume ); media.addEventListener( 'volumechange', function() { var volumeBar = 'horizontal' === settings['audioVolume'] ? $scope.find( '.mejs-horizontal-volume-current' ) : $scope.find( '.mejs-volume-current' ), volumeValue = 'horizontal' === settings['audioVolume'] ? parseInt( volumeBar[0].style.width, 10 ) / 100 : parseInt( volumeBar[0].style.height, 10 ) / 100, volumeBarTotal = 'horizontal' === settings['audioVolume'] ? $scope.find( '.mejs-horizontal-volume-total' ) : $scope.find( '.mejs-volume-slider .mejs-volume-total' ), playBrn = $scope.find( '.mejs-playpause-button' ), volumeCurrentValue = ''; volumeBarTotal.on( 'click', function() { if ( 'horizontal' === settings['audioVolume'] ) { volumeCurrentValue = parseInt( $scope.find( '.mejs-horizontal-volume-total .mejs-horizontal-volume-current' )[0].style.width, 10 ) / 100; } else { volumeCurrentValue = parseInt( $scope.find( '.mejs-volume-slider .mejs-volume-total .mejs-volume-current' )[0].style.height, 10 ) / 100; } } ) playBrn.on( 'click', function() { if ( '' !== volumeCurrentValue ) { media.setVolume( volumeCurrentValue ); } } ) muteBtn.on( 'click', function() { if ( ! media.muted ) { if ( 'yes' === settings['muted'] && 0 === unmuted && 0 === volumeValue ) { media.setVolume( startVolume ); unmuted = 1; } } } ) }, false ); } else if ( hasVolume && !settings['hideVolumeOnTouchDevices'] ) { muteBtn.on( 'click', function() { media.setVolume( startVolume ); } ) } } } ); $( this ).attr( 'preload', 'metadata' ); } }); }, widgetHorizontalTimeline: function( $scope ) { var $timeline = $scope.find( '.jet-hor-timeline' ), $timelineTrack = $scope.find( '.jet-hor-timeline-track' ), $items = $scope.find( '.jet-hor-timeline-item' ), $arrows = $scope.find( '.jet-arrow' ), $nextArrow = $scope.find( '.jet-next-arrow' ), $prevArrow = $scope.find( '.jet-prev-arrow' ), columns = {}, prevColumns, slidesToScroll = {}, prevSlidesToScroll, firstMouseEvent = true, currentDeviceMode = elementorFrontend.getCurrentDeviceMode(), prevDeviceMode = currentDeviceMode, eTarget = $timeline.closest( '.elementor-widget' ), breakpoints = JetElementsTools.getElementorElementSettings( eTarget ), activeBreakpoints = elementor.config.responsive.activeBreakpoints, itemsCount = $scope.find( '.jet-hor-timeline-list--middle .jet-hor-timeline-item' ).length, isRTL = JetElementsTools.isRTL(), currentTransform = 0, currentPosition = 0, transform = {}, maxPosition = {}; columns['desktop'] = breakpoints['columns']; prevColumns = columns['desktop']; transform['desktop'] = 100 / columns['desktop']; maxPosition['desktop'] = Math.max( 0, ( itemsCount - columns['desktop'] ) ); slidesToScroll['desktop'] = +breakpoints['slides_to_scroll']; prevSlidesToScroll = slidesToScroll['desktop']; Object.keys( activeBreakpoints ).reverse().forEach( function( breakpointName ) { if ( 'widescreen' === breakpointName ) { columns[breakpointName] = ( "columns_widescreen" in breakpoints ) && '' != breakpoints.columns_widescreen ? breakpoints['columns_' + breakpointName] : columns['desktop']; slidesToScroll[breakpointName] = ( "slides_to_scroll_widescreen" in breakpoints ) && '' != breakpoints.slides_to_scroll_widescreen ? +breakpoints['slides_to_scroll_' + breakpointName] : +slidesToScroll['desktop']; } else { columns[breakpointName] = ( "" != breakpoints['columns_' + breakpointName] && undefined != breakpoints['columns_' + breakpointName] ) ? breakpoints['columns_' + breakpointName] : prevColumns; prevColumns = columns[breakpointName]; slidesToScroll[breakpointName] = ( "" != breakpoints['slides_to_scroll_' + breakpointName] && undefined != breakpoints['slides_to_scroll_' + breakpointName] ) ? +breakpoints['slides_to_scroll_' + breakpointName] : +prevSlidesToScroll; prevSlidesToScroll = slidesToScroll[breakpointName]; } transform[breakpointName] = 100 / columns[breakpointName]; maxPosition[breakpointName] = Math.max( 0, ( itemsCount - columns[breakpointName] ) ); } ); if ( 'ontouchstart' in window || 'ontouchend' in window ) { $items.on( 'touchend.jetHorTimeline', function( event ) { var itemId = $( this ).data( 'item-id' ); $scope.find( '.elementor-repeater-item-' + itemId ).toggleClass( 'is-hover' ); } ); } else { $items.on( 'mouseenter.jetHorTimeline mouseleave.jetHorTimeline', function( event ) { if ( firstMouseEvent && 'mouseleave' === event.type ) { return; } if ( firstMouseEvent && 'mouseenter' === event.type ) { firstMouseEvent = false; } var itemId = $( this ).data( 'item-id' ); $scope.find( '.elementor-repeater-item-' + itemId ).toggleClass( 'is-hover' ); } ); } // Set Line Position setLinePosition(); $( window ).on( 'resize.jetHorTimeline orientationchange.jetHorTimeline', JetElementsTools.debounce( 50, setLinePosition ) ); function setLinePosition() { var $line = $scope.find( '.jet-hor-timeline__line' ), $firstPoint = $scope.find( '.jet-hor-timeline-item__point-content:first' ), $lastPoint = $scope.find( '.jet-hor-timeline-item__point-content:last' ), firstPointLeftPos = $firstPoint.position().left + parseInt( $firstPoint.css( 'marginLeft' ) ), lastPointLeftPos = $lastPoint.position().left + parseInt( $lastPoint.css( 'marginLeft' ) ), pointWidth = $firstPoint.outerWidth(); $line.css( { 'left': !isRTL ? ( firstPointLeftPos + pointWidth/2 ) : ( lastPointLeftPos + pointWidth/2 ), 'width': Math.abs( lastPointLeftPos - firstPointLeftPos ) } ); } // Arrows Navigation Type if ( $nextArrow[0] && maxPosition[ currentDeviceMode ] === 0 ) { $nextArrow.addClass( 'jet-arrow-disabled' ); } if ( $arrows[0] ) { var xPos = 0, yPos = 0, diffpos; $arrows.on( 'click.jetHorTimeline', function( event ){ var $this = $( this ), currentDeviceMode = elementorFrontend.getCurrentDeviceMode(), slidesScroll = slidesToScroll[ currentDeviceMode ], direction = $this.hasClass( 'jet-next-arrow' ) ? 'next' : 'prev', dirMultiplier = !isRTL ? -1 : 1; if ( slidesScroll > columns[ currentDeviceMode ] ) { slidesScroll = columns[ currentDeviceMode ]; } else { slidesScroll = slidesToScroll[ currentDeviceMode ] } $( window ).on( 'resize.jetHorTimeline orientationchange.jetHorTimeline', JetElementsTools.debounce( 50, function(){ currentDeviceMode = elementorFrontend.getCurrentDeviceMode(); slidesScroll = slidesToScroll[ currentDeviceMode ]; if ( slidesScroll > columns[ currentDeviceMode ] ) { slidesScroll = columns[ currentDeviceMode ]; } else { slidesScroll = slidesToScroll[ currentDeviceMode ] } } ) ); if ( 'next' === direction && currentPosition < maxPosition[ currentDeviceMode ] ) { currentPosition += slidesScroll; if ( currentPosition > maxPosition[ currentDeviceMode ] ) { currentPosition = maxPosition[ currentDeviceMode ]; } } if ( 'prev' === direction && currentPosition > 0 ) { currentPosition -= slidesScroll; if ( currentPosition < 0 ) { currentPosition = 0; } } if ( currentPosition > 0 ) { $prevArrow.removeClass( 'jet-arrow-disabled' ); } else { $prevArrow.addClass( 'jet-arrow-disabled' ); } if ( currentPosition === maxPosition[ currentDeviceMode ] ) { $nextArrow.addClass( 'jet-arrow-disabled' ); } else { $nextArrow.removeClass( 'jet-arrow-disabled' ); } if ( currentPosition === 0 ) { currentTransform = 0; } else { currentTransform = currentPosition * transform[ currentDeviceMode ]; } $timelineTrack.css({ 'transform': 'translateX(' + dirMultiplier * currentTransform + '%)' }); } ); $( $items ).on( 'touchstart', function( e ) { var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0]; xPos = touch.pageX; } ); $( $items ).on( 'touchend', function( e ) { var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0], currentDeviceMode = elementorFrontend.getCurrentDeviceMode(), slidesScroll = slidesToScroll[ currentDeviceMode ]; yPos = touch.pageX; diffpos = yPos - xPos; if ( diffpos < -50 ) { var dirMultiplier = !isRTL ? -1 : 1; if ( slidesScroll > columns[ currentDeviceMode ] ) { slidesScroll = columns[ currentDeviceMode ]; } if ( currentPosition < maxPosition[ currentDeviceMode ] ) { currentPosition += slidesScroll; if ( currentPosition > maxPosition[ currentDeviceMode ] ) { currentPosition = maxPosition[ currentDeviceMode ]; } } if ( currentPosition > 0 ) { $prevArrow.removeClass( 'jet-arrow-disabled' ); } else { $prevArrow.addClass( 'jet-arrow-disabled' ); } if ( currentPosition === maxPosition[ currentDeviceMode ] ) { $nextArrow.addClass( 'jet-arrow-disabled' ); } else { $nextArrow.removeClass( 'jet-arrow-disabled' ); } if ( currentPosition === 0 ) { currentTransform = 0; } else { currentTransform = currentPosition * transform[ currentDeviceMode ]; } $timelineTrack.css( { 'transform': 'translateX(' + dirMultiplier * currentTransform + '%)' } ); } else if ( diffpos > 50 ) { var dirMultiplier = !isRTL ? -1 : 1; if ( slidesScroll > columns[ currentDeviceMode ] ) { slidesScroll = columns[ currentDeviceMode ]; } if ( currentPosition > 0 ) { currentPosition -= slidesScroll; if ( currentPosition < 0 ) { currentPosition = 0; } } if ( currentPosition > 0 ) { $prevArrow.removeClass( 'jet-arrow-disabled' ); } else { $prevArrow.addClass( 'jet-arrow-disabled' ); } if ( currentPosition === maxPosition[ currentDeviceMode ] ) { $nextArrow.addClass( 'jet-arrow-disabled' ); } else { $nextArrow.removeClass( 'jet-arrow-disabled' ); } if ( currentPosition === 0 ) { currentTransform = 0; } else { currentTransform = currentPosition * transform[ currentDeviceMode ]; } $timelineTrack.css( { 'transform': 'translateX(' + dirMultiplier * currentTransform + '%)' } ); } } ); } setArrowPosition(); $( window ).on( 'resize.jetHorTimeline orientationchange.jetHorTimeline', JetElementsTools.debounce( 150, setArrowPosition ) ); $( window ).on( 'resize.jetHorTimeline orientationchange.jetHorTimeline', JetElementsTools.debounce( 50, timelineSliderResizeHandler ) ); function setArrowPosition() { if ( ! $arrows[0] ) { return; } var $middleList = $scope.find( '.jet-hor-timeline-list--middle' ), middleListTopPosition = $middleList.position().top, middleListHeight = $middleList.outerHeight(); $arrows.css({ 'top': middleListTopPosition + middleListHeight/2 }); } function timelineSliderResizeHandler( event ) { if ( ! $timeline.hasClass( 'jet-hor-timeline--arrows-nav' ) ) { return; } var currentDeviceMode = elementorFrontend.getCurrentDeviceMode(), resetSlider = function() { $prevArrow.addClass( 'jet-arrow-disabled' ); if ( $nextArrow.hasClass( 'jet-arrow-disabled' ) ) { $nextArrow.removeClass( 'jet-arrow-disabled' ); } if ( maxPosition[ currentDeviceMode ] === 0 ) { $nextArrow.addClass( 'jet-arrow-disabled' ); } currentTransform = 0; currentPosition = 0; $timelineTrack.css({ 'transform': 'translateX(0%)' }); }; if ( currentDeviceMode != prevDeviceMode ) { resetSlider(); prevDeviceMode = currentDeviceMode; } } }, widgetPieChart: function( $scope ) { var $container = $scope.find( '.jet-pie-chart-container' ), $canvas = $scope.find( '.jet-pie-chart' )[0], data = $container.data( 'chart' ) || {}, options = $container.data( 'options' ) || {}, tooltip = $container.data( 'tooltip' ) || '', defaultOptions = { maintainAspectRatio: false }; options = $.extend( {}, defaultOptions, options ); if ( true === options.tooltips.enabled ) { options.tooltips.callbacks = { label: function( tooltipItem, data ) { return ' ' + data.labels[tooltipItem.index] + ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index] + tooltip; } }; } JetElements.observer( $scope, function() { var chartInstance = new Chart( $canvas, { type: 'pie', data: data, options: options } ); }, JetElements.prepareWaypointOptions( $scope, { offset: 'bottom-in-view' } ) ); }, widgetBarChart: function( $scope ) { var $chart = $scope.find( '.jet-bar-chart-container' ), $chart_canvas = $chart.find( '.jet-bar-chart' ), settings = $chart.data( 'settings' ), tooltip_prefix = $chart.data( 'tooltip-prefix' ) || '', tooltip_suffix = $chart.data( 'tooltip-suffix' ) || '', tooltip_separator = $chart.data( 'tooltip-separator' ) || '', bar_type = settings['type'] || 'bar', axis_separator = $chart.data( 'axis-separator' ) || '', labels_length = $chart.data( 'labels-length' ) || 50; if ( true === settings.options.tooltips.enabled ) { settings.options.tooltips.callbacks = { label: function(tooltipItem, data) { return ' ' + data.datasets[tooltipItem.datasetIndex].label + ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index]; } } } if ( ! $chart.length ) { return; } if ( true === settings.options.tooltips.enabled ) { settings.options.tooltips.callbacks = { label: function( tooltipItem, data ) { var value = '' != tooltip_separator ? JetElementsTools.addThousandCommaSeparator( data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index], tooltip_separator) : data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index]; return ' ' + data.datasets[tooltipItem.datasetIndex].label + ': ' + tooltip_prefix + value + tooltip_suffix; } }; } if ( true === axis_separator ) { if ( 'bar' === bar_type ) { settings.options.scales.yAxes[0].ticks.callback = function(value, index, values){ return value.toLocaleString("en-US") } } else { settings.options.scales.xAxes[0].ticks.callback = function(value, index, values){ return value.toLocaleString("en-US") } } } JetElements.observer( $chart_canvas, function() { var $this = $( this ), ctx = $this[0].getContext( '2d' ), wrappedLabels = []; var wrap = ( label, limit ) => { // Ensure that label is a string label = String( label ); let words = label.split(" "); let labels = []; let concat = []; for ( let i = 0; i < words.length; i++ ) { concat.push( words[i] ); let join = concat.join(' '); if ( join.length > limit ) { labels.push( join ); concat = []; } } if ( concat.length ) { labels.push( concat.join(' ').trim() ); } return labels; } settings.data.labels.forEach( function( label ) { wrappedLabels.push( wrap( label, labels_length )); }); settings.data.labels = wrappedLabels; var myChart = new Chart( ctx, settings ); }, JetElements.prepareWaypointOptions( $scope, { offset: 'bottom-in-view' } ) ); }, widgetLineChart: function( $scope ) { var id = $scope.data( 'id' ), $line_chart = $scope.find( '.jet-line-chart-container' ), $line_chart_canvas = $line_chart.find( '.jet-line-chart' ), $compare = $line_chart.data( 'compare' ), previous_label = $line_chart.data( 'previous-label' ), current_label = $line_chart.data( 'current-label' ), settings = $line_chart.data( 'settings' ), compare_labels_type = $line_chart.data( 'compare-labels-type' ), tooltip_prefix = $line_chart.data( 'tooltip-prefix' ) || '', tooltip_suffix = $line_chart.data( 'tooltip-suffix' ) || '', tooltip_separator = $line_chart.data( 'tooltip-separator' ) || ''; if ( ! $line_chart.length ) { return; } JetElements.observer( $line_chart_canvas, function() { var $this = $( this ), ctx = $this[0].getContext( '2d' ), myLineChart = new Chart( ctx, settings ); myLineChart.options.tooltips = { enabled: false, mode: 'x-axis', intersect: false, callbacks: { label: function( tooltipItem, data ) { var colorBox = data.datasets[tooltipItem.datasetIndex].borderColor; colorBox = colorBox.replace( /"/g, '"' ); if ( true === $compare ) { var currentLabel = 'custom' === compare_labels_type ? current_label : data.labels[tooltipItem.index], title = data.datasets[tooltipItem.datasetIndex].label, currentVal = '' != tooltip_separator ? JetElementsTools.addThousandCommaSeparator( data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index], tooltip_separator ) : data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index], current = '