in src/assets/js/youtubeplayer.js [42:216]
$.fn.video_cta = function (options) {
var settings = $.extend(
{
yt_object: null,
container: '<div id="stdVideo"><div id="stdVideo-player"></div></div>',
container_id: 'stdVideo-player',
close: '#stdVideo-close',
cta: '.video-link',
cta_container: '.video-cta',
youtube_id_data: 'youtube_id',
target_data: 'youtube_target',
default_target: null,
},
options
);
var $link = $(settings.cta);
var $link_container = $link.closest(settings.cta_container);
var yt_player;
var $container;
var $target = settings.default_target;
var playing = false;
var is_ios = navigator.userAgent.match(/(iPod|iPhone|iPad)/) != null;
var is_android = /(android)/i.test(navigator.userAgent);
var mobileOS = is_ios || is_android;
if (settings.default_target.length) {
settings.default_target.find('.bg').on('click', closeVideo);
}
$('body')
// Deregister to avoiding multiple bindings.
.off('keyup.escCloseVideo')
.on('keyup.escCloseVideo', function (e) {
// 27 is the escape key.
if (e.originalEvent.keyCode === 27 && closeVideo) {
closeVideo();
}
});
if ($(settings.close).length) {
$(settings.close).on('click', closeVideo);
}
this.on('click', settings.cta, function (e) {
e.preventDefault();
if ($('#' + settings.container_id).length && playing) {
closeVideo({ fast: true });
}
$link = $(this);
$link_container = $link.closest(settings.cta_container);
$target = $('#' + $link.data(settings.target_data)).length
? $('#' + $link.data(settings.target_data))
: settings.default_target;
$link.addClass('loading');
$target.addClass('loading');
var id =
typeof $link.data(settings.youtube_id_data) !== typeof undefined &&
$link.data(settings.youtube_id_data) !== false
? $link.data(settings.youtube_id_data)
: $link.attr('href');
loadVideo(id);
});
// The API calls this function when the player state changes
/*
ENDED
PLAYING
PAUSED
BUFFERING
CUED
*/
function onPlayerStateChange(event) {
// Open video player when playing
if (event.data == settings.yt_object.PlayerState.PLAYING && !playing) {
openVideo();
// Close video when ended
} else if (event.data == settings.yt_object.PlayerState.ENDED) {
closeVideo();
}
}
// The API calls this function when the player is ready.
function onPlayerReady() {
if (playing) {
closeVideo();
}
if (mobileOS) {
openVideo();
} else {
yt_player.playVideo();
}
}
function loadVideo(id) {
$container = $(settings.container);
// if (settings.close) {
// $close = $(settings.close);
// $close.appendTo($container);
// $close.on('click', closeVideo);
// }
if ($('#' + $link.data(settings.target_data)).length) {
// if custom target
$container.appendTo($target);
} else {
// if default player
$container.appendTo($target.find('.cell'));
$target.velocity('fadeIn');
}
// creating a player: https://developers.google.com/youtube/iframe_api_reference#Getting_Started
yt_player = new settings.yt_object.Player(settings.container_id, {
height: '390',
width: '640',
videoId: id,
events: {
onReady: onPlayerReady,
onStateChange: onPlayerStateChange,
},
playerVars: {
controls: 1,
enablejsapi: 1,
loop: 0,
showinfo: 0,
modestbranding: 1,
},
});
}
function openVideo() {
playing = true;
$container.addClass('playing');
$link_container.addClass('playing');
$link.removeClass('loading');
$target.removeClass('loading');
}
function closeVideo(options) {
if (!yt_player || !yt_player.stopVideo) {
console.log(
'Bailing early from closeVideo due to yt_player being undefined or stopVideo method missing.'
);
return;
}
var v = $.extend(
{
fast: false,
},
options
);
yt_player.stopVideo();
playing = false;
$container.removeClass('playing');
$link_container.removeClass('playing');
if (!$('#' + $link.data(settings.target_data)).length) {
$target.velocity('fadeOut');
}
if (v.fast) {
yt_player = null;
$container.remove();
} else {
setTimeout(function () {
yt_player = null;
$container.remove();
}, 1000);
}
}
};