( function( $, elementor ) {
"use strict";
var JetElements = {
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 );
},
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"]' )
};
JetElements.widgetCountdown.initClock = function() {
switch( type ) {
case 'due_date':
endTime = new Date( dueDate * 1000 );
break;
case 'evergreen':
if ( evergreenInterval > 0 ) {
endTime = JetElements.widgetCountdown.getEvergreenDate();
}
break;
case 'endless':
var currentTime = new Date(),
startTime = new Date( startDate * 1000 );
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 );
}
break;
}
JetElements.widgetCountdown.updateClock();
timeInterval = setInterval( JetElements.widgetCountdown.updateClock, 1000 );
};
JetElements.widgetCountdown.updateClock = function() {
if ( ! endTime ) {
return;
}
var timeRemaining = JetElements.widgetCountdown.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 );
JetElements.widgetCountdown.runActions();
}
};
JetElements.widgetCountdown.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 += '<span class="jet-countdown-timer__digit">' + val + '</span>';
});
return result;
};
JetElements.widgetCountdown.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: JetElements.widgetCountdown.splitNum( days ),
hours: JetElements.widgetCountdown.splitNum( hours ),
minutes: JetElements.widgetCountdown.splitNum( minutes ),
seconds: JetElements.widgetCountdown.splitNum( seconds )
}
};
};
JetElements.widgetCountdown.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 );
JetElements.widgetCountdown.updateClock();
timeInterval = setInterval( JetElements.widgetCountdown.updateClock, 1000 );
break;
}
} );
};
JetElements.widgetCountdown.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;
}
};
JetElements.widgetCountdown.initClock();
},
widgetMap: function( $scope ) {
var $container = $scope.find( '.jet-map' ),
map,
init,
pins;
if ( ! window.google || ! $container.length ) {
return;
}
init = $container.data( 'init' );
pins = $container.data( 'pins' );
map = new google.maps.Map( $container[0], init );
if ( pins ) {
$.each( pins, function( index, pin ) {
var marker,
infowindow,
pinData = {
position: pin.position,
map: map
};
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 ) {
infowindow = new google.maps.InfoWindow({
content: pin.desc,
disableAutoPan: true
});
}
marker.addListener( 'click', function() {
infowindow.setOptions({ disableAutoPan: false });
infowindow.open( map, marker );
});
if ( 'visible' === pin.state && '' !== pin.desc ) {
infowindow.open( map, marker );
}
});
}
},
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' ),
Loading ...