/*!
* jQuery YouTube Popup Player Plugin v2.3
* http://lab.abhinayrathore.com/jquery_youtube/
* https://github.com/abhinayrathore/jQuery-YouTube-Popup-Player-Plugin
*/
(function ($, window) {
var YouTubeDialog = null;
var defaultCss = {};
var methods = {
//initialize plugin
init: function (options) {
options = $.extend({}, $.fn.YouTubePopup.defaults, options);
// initialize YouTube Player Dialog
if (YouTubeDialog == null) {
YouTubeDialog = $('
').css({
display: 'none',
padding: 0
});
$('body').append(YouTubeDialog);
YouTubeDialog.dialog({
autoOpen: false,
resizable: false,
draggable: options.draggable,
modal: options.modal,
dialogClass: options.cssClass,
create: function () {
defaultCss.backgroundImage = $(".ui-dialog").css('background-image');
defaultCss.border = $(".ui-dialog").css('border');
defaultCss.backgroundColor = $(".ui-dialog").css('background-color');
},
close: function () {
YouTubeDialog.html('');
$(".ui-dialog-titlebar").show();
$(".ui-dialog").css({
'background-image': defaultCss.backgroundImage,
'border': defaultCss.border,
'background-color': defaultCss.backgroundColor
});
}
});
}
return this.each(function () {
var obj = $(this);
var data = obj.data('YouTube');
if (!data) { //check if event is already assigned
obj.data('YouTube', {
target: obj
});
$(obj).bind('click.YouTubePopup', function () {
var youtubeId = options.youtubeId;
if ($.trim(youtubeId) == '' && obj.is("a")) {
youtubeId = getYouTubeIdFromUrl(obj.attr("href"));
}
if ($.trim(youtubeId) == '' || youtubeId === false) {
youtubeId = obj.attr(options.idAttribute);
}
var videoTitle = $.trim(options.title);
if (videoTitle == '') {
if (options.useYouTubeTitle) setYouTubeTitle(youtubeId);
else videoTitle = obj.attr('title');
}
//Format YouTube URL
var YouTubeURL = window.location.protocol + "//www.youtube.com/embed/" + youtubeId + "?rel=0&showsearch=0&autohide=" + options.autohide;
YouTubeURL += "&autoplay=" + options.autoplay + "&controls=" + options.controls + "&fs=" + options.fs + "&loop=" + options.loop;
YouTubeURL += "&showinfo=" + options.showinfo + "&color=" + options.color + "&theme=" + options.theme;
//Setup YouTube Dialog
YouTubeDialog.html(getYouTubePlayer(YouTubeURL, options.width, options.height));
YouTubeDialog.dialog({ //reset width and height
width: 'auto',
height: 'auto'
});
YouTubeDialog.dialog({
minWidth: options.width,
minHeight: options.height,
title: videoTitle
});
YouTubeDialog.dialog('open');
$(".ui-widget-overlay").fadeTo('fast', options.overlayOpacity); //set Overlay opacity
var titleBar = $(".ui-dialog-titlebar");
if (options.hideTitleBar && options.modal) { //hide Title Bar (only if Modal is enabled)
titleBar.hide(); //hide Title Bar
$(".ui-widget-overlay").click(function () { //automatically assign Click event to overlay
YouTubeDialog.dialog("close");
});
}
if (options.clickOutsideClose && options.modal) { //assign clickOutsideClose event only if Modal option is enabled
$(".ui-widget-overlay").click(function () {
YouTubeDialog.dialog("close");
});
}
titleBar.removeClass("ui-corner-all").addClass("ui-corner-top"); //only round the top corners on titlebar
if (!options.showBorder) {
$(".ui-dialog").css({
'background-image': 'none',
'border': 'none',
'background-color': 'transparent'
});
}
return false;
});
}
});
},
destroy: function () {
return this.each(function () {
$(this).unbind(".YouTubePopup");
$(this).removeData('YouTube');
});
}
};
function getYouTubePlayer(URL, width, height) {
var YouTubePlayer = '';
return YouTubePlayer;
}
function setYouTubeTitle(id) {
var url = "https://gdata.youtube.com/feeds/api/videos/" + id + "?v=2&alt=json";
$.ajax({
url: url,
dataType: 'jsonp',
cache: true,
success: function (data) {
YouTubeDialog.dialog({
title: data.entry.title.$t
});
}
});
}
function getYouTubeIdFromUrl(youtubeUrl) {
var regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=)([^#\&\?]*).*/;
var match = youtubeUrl.match(regExp);
if (match && match[2].length == 11) {
return match[2];
} else {
return false;
}
}
$.fn.YouTubePopup = function (method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + method + ' does not exist on jQuery.YouTubePopup');
}
};
//default configuration
$.fn.YouTubePopup.defaults = {
'youtubeId': '',
'title': '',
'useYouTubeTitle': true,
'idAttribute': 'rel',
'cssClass': 'YouTubeDialog',
'draggable': false,
'modal': true,
'width': 640,
'height': 480,
'hideTitleBar': false,
'clickOutsideClose': false,
'overlayOpacity': 0.5,
'autohide': 2,
'autoplay': 1,
'color': 'red',
'controls': 1,
'fs': 1,
'loop': 0,
'showinfo': 0,
'theme': 'light',
'showBorder': true
};
})(jQuery, window);