12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061 |
- /*
- * ******************************************************************************
- * jquery.mb.components
- * file: jquery.mb.YTPlayer.js
- *
- * Copyright (c) 2001-2013. Matteo Bicocchi (Pupunzi);
- * Open lab srl, Firenze - Italy
- * email: matteo@open-lab.com
- * site: http://pupunzi.com
- * blog: http://pupunzi.open-lab.com
- * http://open-lab.com
- *
- * Licences: MIT, GPL
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- *
- * last modified: 23/11/13 21.05
- * *****************************************************************************
- */
- if(typeof ytp != "object")
- ytp ={};
- function onYouTubePlayerAPIReady() {
- if(ytp.YTAPIReady)
- return;
- ytp.YTAPIReady=true;
- jQuery(document).trigger("YTAPIReady");
- }
- (function (jQuery, ytp) {
- ytp.isDevice = 'ontouchstart' in window;
- /*Browser detection patch*/
- if (!jQuery.browser) {
- jQuery.browser = {};
- jQuery.browser.mozilla = !1;
- jQuery.browser.webkit = !1;
- jQuery.browser.opera = !1;
- jQuery.browser.msie = !1;
- var nAgt = navigator.userAgent;
- jQuery.browser.ua = nAgt;
- jQuery.browser.name = navigator.appName;
- jQuery.browser.fullVersion = "" + parseFloat(navigator.appVersion);
- jQuery.browser.majorVersion = parseInt(navigator.appVersion, 10);
- var nameOffset, verOffset, ix;
- if (-1 != (verOffset = nAgt.indexOf("Opera")))jQuery.browser.opera = !0, jQuery.browser.name = "Opera", jQuery.browser.fullVersion = nAgt.substring(verOffset + 6), -1 != (verOffset = nAgt.indexOf("Version")) && (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8)); else if (-1 != (verOffset = nAgt.indexOf("MSIE")))jQuery.browser.msie = !0, jQuery.browser.name = "Microsoft Internet Explorer", jQuery.browser.fullVersion = nAgt.substring(verOffset + 5); else if (-1 != nAgt.indexOf("Trident")) {
- jQuery.browser.msie = !0;
- jQuery.browser.name = "Microsoft Internet Explorer";
- var start = nAgt.indexOf("rv:") + 3, end = start + 4;
- jQuery.browser.fullVersion = nAgt.substring(start, end)
- } else-1 != (verOffset = nAgt.indexOf("Chrome")) ? (jQuery.browser.webkit = !0, jQuery.browser.name = "Chrome", jQuery.browser.fullVersion = nAgt.substring(verOffset + 7)) : -1 != (verOffset = nAgt.indexOf("Safari")) ? (jQuery.browser.webkit = !0, jQuery.browser.name = "Safari", jQuery.browser.fullVersion = nAgt.substring(verOffset + 7), -1 != (verOffset = nAgt.indexOf("Version")) && (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8))) : -1 != (verOffset = nAgt.indexOf("AppleWebkit")) ? (jQuery.browser.webkit = !0, jQuery.browser.name = "Safari", jQuery.browser.fullVersion = nAgt.substring(verOffset + 7), -1 != (verOffset = nAgt.indexOf("Version")) && (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8))) : -1 != (verOffset = nAgt.indexOf("Firefox")) ? (jQuery.browser.mozilla = !0, jQuery.browser.name = "Firefox", jQuery.browser.fullVersion = nAgt.substring(verOffset + 8)) : (nameOffset = nAgt.lastIndexOf(" ") + 1) < (verOffset = nAgt.lastIndexOf("/")) && (jQuery.browser.name = nAgt.substring(nameOffset, verOffset), jQuery.browser.fullVersion = nAgt.substring(verOffset + 1), jQuery.browser.name.toLowerCase() == jQuery.browser.name.toUpperCase() && (jQuery.browser.name = navigator.appName));
- -1 != (ix = jQuery.browser.fullVersion.indexOf(";")) && (jQuery.browser.fullVersion = jQuery.browser.fullVersion.substring(0, ix));
- -1 != (ix = jQuery.browser.fullVersion.indexOf(" ")) && (jQuery.browser.fullVersion = jQuery.browser.fullVersion.substring(0, ix));
- jQuery.browser.majorVersion = parseInt("" + jQuery.browser.fullVersion, 10);
- isNaN(jQuery.browser.majorVersion) && (jQuery.browser.fullVersion = "" + parseFloat(navigator.appVersion), jQuery.browser.majorVersion = parseInt(navigator.appVersion, 10));
- jQuery.browser.version = jQuery.browser.majorVersion
- }
- /*******************************************************************************
- * jQuery.mb.components: jquery.mb.CSSAnimate
- ******************************************************************************/
- jQuery.fn.CSSAnimate=function(a,b,k,l,f){return this.each(function(){var c=jQuery(this);if(0!==c.length&&a){"function"==typeof b&&(f=b,b=jQuery.fx.speeds._default);"function"==typeof k&&(f=k,k=0);"function"==typeof l&&(f=l,l="cubic-bezier(0.65,0.03,0.36,0.72)");if("string"==typeof b)for(var j in jQuery.fx.speeds)if(b==j){b=jQuery.fx.speeds[j];break}else b=null;if(jQuery.support.transition){var e="",h="transitionEnd";jQuery.browser.webkit?(e="-webkit-",h="webkitTransitionEnd"):jQuery.browser.mozilla? (e="-moz-",h="transitionend"):jQuery.browser.opera?(e="-o-",h="otransitionend"):jQuery.browser.msie&&(e="-ms-",h="msTransitionEnd");j=[];for(d in a){var g=d;"transform"===g&&(g=e+"transform",a[g]=a[d],delete a[d]);"transform-origin"===g&&(g=e+"transform-origin",a[g]=a[d],delete a[d]);j.push(g);c.css(g)||c.css(g,0)}d=j.join(",");c.css(e+"transition-property",d);c.css(e+"transition-duration",b+"ms");c.css(e+"transition-delay",k+"ms");c.css(e+"transition-timing-function",l);c.css(e+"backface-visibility", "hidden");setTimeout(function(){c.css(a)},0);setTimeout(function(){c.called||!f?c.called=!1:f()},b+20);c.on(h,function(a){c.off(h);c.css(e+"transition","");a.stopPropagation();"function"==typeof f&&(c.called=!0,f());return!1})}else{for(var d in a)"transform"===d&&delete a[d],"transform-origin"===d&&delete a[d],"auto"===a[d]&&delete a[d];if(!f||"string"===typeof f)f="linear";c.animate(a,b,f)}}})}; jQuery.fn.CSSAnimateStop=function(){var a="",b="transitionEnd";jQuery.browser.webkit?(a="-webkit-",b="webkitTransitionEnd"):jQuery.browser.mozilla?(a="-moz-",b="transitionend"):jQuery.browser.opera?(a="-o-",b="otransitionend"):jQuery.browser.msie&&(a="-ms-",b="msTransitionEnd");jQuery(this).css(a+"transition","");jQuery(this).off(b)}; jQuery.support.transition=function(){var a=(document.body||document.documentElement).style;return void 0!==a.transition||void 0!==a.WebkitTransition||void 0!==a.MozTransition||void 0!==a.MsTransition||void 0!==a.OTransition}();
- /*
- * Metadata - jQuery plugin for parsing metadata from elements
- * Copyright (c) 2006 John Resig, Yehuda Katz, Jörn Zaefferer, Paul McLanahan
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- */
- (function(c){c.extend({metadata:{defaults:{type:"class",name:"metadata",cre:/({.*})/,single:"metadata"},setType:function(b,c){this.defaults.type=b;this.defaults.name=c},get:function(b,f){var d=c.extend({},this.defaults,f);d.single.length||(d.single="metadata");var a=c.data(b,d.single);if(a)return a;a="{}";if("class"==d.type){var e=d.cre.exec(b.className);e&&(a=e[1])}else if("elem"==d.type){if(!b.getElementsByTagName)return;e=b.getElementsByTagName(d.name);e.length&&(a=c.trim(e[0].innerHTML))}else void 0!= b.getAttribute&&(e=b.getAttribute(d.name))&&(a=e);0>a.indexOf("{")&&(a="{"+a+"}");a=eval("("+a+")");c.data(b,d.single,a);return a}}});c.fn.metadata=function(b){return c.metadata.get(this[0],b)}})(jQuery);
- String.prototype.getVideoID=function(){
- var movieURL;
- if(this.substr(0,16)=="http://youtu.be/"){
- movieURL= this.replace("http://youtu.be/","");
- }else if(this.indexOf("http")>-1){
- movieURL = this.match(/[\\?&]v=([^&#]*)/)[1];
- }else{
- movieURL = this
- }
- return movieURL;
- };
- jQuery.mbYTPlayer = {
- name : "jquery.mb.YTPlayer",
- version : "2.6.0",
- author : "Matteo Bicocchi",
- defaults : {
- containment : "body",
- ratio : "4/3",
- showYTLogo : false,
- videoURL : null,
- startAt : 0,
- autoPlay : true,
- vol :100,
- addRaster : false,
- opacity : 1,
- quality : "default", //or “small”, “medium”, “large”, “hd720”, “hd1080”, “highres”
- mute : false,
- loop : true,
- showControls : true,
- showAnnotations : false,
- printUrl : true,
- stopMovieOnClick :false,
- realfullscreen :true,
- onReady : function (player) {},
- onStateChange : function (player) {},
- onPlaybackQualityChange: function (player) {},
- onError : function (player) {}
- },
- controls : {
- play : "P",
- pause : "p",
- mute : "M",
- unmute: "A",
- onlyYT: "O",
- showSite: "R",
- ytLogo: "Y"
- },
- rasterImg : "images/raster.png",
- rasterImgRetina: "images/raster@2x.png",
- locationProtocol: location.protocol != "file:" ? location.protocol : "http:",
- buildPlayer: function (options) {
- return this.each(function () {
- var YTPlayer = this;
- var $YTPlayer = jQuery(YTPlayer);
- YTPlayer.loop = 0;
- YTPlayer.opt = {};
- var property = {};
- $YTPlayer.addClass("mb_YTVPlayer");
- if (jQuery.metadata) {
- jQuery.metadata.setType("class");
- property = $YTPlayer.metadata();
- }
- if (jQuery.isEmptyObject(property))
- property = $YTPlayer.data("property") && typeof $YTPlayer.data("property") == "string" ? eval('(' + $YTPlayer.data("property") + ')') : $YTPlayer.data("property");
- jQuery.extend(YTPlayer.opt, jQuery.mbYTPlayer.defaults, options, property);
- var canGoFullscreen = !(jQuery.browser.msie || jQuery.browser.opera || self.location.href != top.location.href);
- if(!canGoFullscreen)
- YTPlayer.opt.realfullscreen = false;
- if (!$YTPlayer.attr("id"))
- $YTPlayer.attr("id", "id_" + new Date().getTime());
- YTPlayer.opt.id = YTPlayer.id;
- YTPlayer.isAlone = false;
- /*to maintain back compatibility
- * ***********************************************************/
- if (YTPlayer.opt.isBgndMovie)
- YTPlayer.opt.containment = "body";
- if (YTPlayer.opt.isBgndMovie && YTPlayer.opt.isBgndMovie.mute != undefined)
- YTPlayer.opt.mute = YTPlayer.opt.isBgndMovie.mute;
- if (!YTPlayer.opt.videoURL)
- YTPlayer.opt.videoURL = $YTPlayer.attr("href");
- /************************************************************/
- var playerID = "mbYTP_" + YTPlayer.id;
- var videoID = this.opt.videoURL ? this.opt.videoURL.getVideoID() : $YTPlayer.attr("href") ? $YTPlayer.attr("href").getVideoID() : false;
- YTPlayer.videoID = videoID;
- YTPlayer.opt.showAnnotations = (YTPlayer.opt.showAnnotations) ? '0' : '3';
- var playerVars = { 'autoplay': 0, 'modestbranding': 1, 'controls': 0, 'showinfo': 0, 'rel': 0, 'enablejsapi': 1, 'version': 3, 'playerapiid': playerID, 'origin': '*', 'allowfullscreen': true, 'wmode': "transparent", 'iv_load_policy': YTPlayer.opt.showAnnotations};
- var canPlayHTML5 = false;
- var v = document.createElement('video');
- if (v.canPlayType ) { // && !jQuery.browser.msie
- canPlayHTML5 = true;
- }
- if (canPlayHTML5) // && !(YTPlayer.isPlayList && jQuery.browser.msie)
- jQuery.extend(playerVars, {'html5': 1});
- if(jQuery.browser.msie && jQuery.browser.version < 9 ){
- this.opt.opacity = 1;
- }
- var playerBox = jQuery("<div/>").attr("id", playerID).addClass("playerBox");
- var overlay = jQuery("<div/>").css({position: "absolute", top: 0, left: 0, width: "100%", height: "100%"}).addClass("YTPOverlay"); //YTPlayer.isBackground ? "fixed" :
- YTPlayer.opt.containment = YTPlayer.opt.containment == "self" ? jQuery(this) : jQuery(YTPlayer.opt.containment);
- YTPlayer.isBackground = YTPlayer.opt.containment.get(0).tagName.toLowerCase() == "body";
- if (ytp.isDevice && YTPlayer.isBackground){
- $YTPlayer.hide();
- return;
- }
- if (YTPlayer.opt.addRaster) {
- var retina = (window.retina || window.devicePixelRatio > 1);
- overlay.addClass(retina ? "raster retina" : "raster");
- }else{
- overlay.removeClass("raster retina");
- }
- var wrapper = jQuery("<div/>").addClass("mbYTP_wrapper").attr("id", "wrapper_" + playerID);
- wrapper.css({position: "absolute", zIndex: 0, minWidth: "100%", minHeight: "100%",left:0, top:0, overflow: "hidden", opacity: 0});
- playerBox.css({position: "absolute", zIndex: 0, width: "100%", height: "100%", top: 0, left: 0, overflow: "hidden", opacity: this.opt.opacity});
- wrapper.append(playerBox);
- if (YTPlayer.isBackground && ytp.isInit)
- return;
- YTPlayer.opt.containment.children().each(function () {
- if (jQuery(this).css("position") == "static")
- jQuery(this).css("position", "relative");
- });
- if (YTPlayer.isBackground) {
- jQuery("body").css({position: "relative", minWidth: "100%", minHeight: "100%", zIndex: 1, boxSizing: "border-box"});
- wrapper.css({position: "fixed", top: 0, left: 0, zIndex: 0});
- $YTPlayer.hide();
- YTPlayer.opt.containment.prepend(wrapper);
- } else
- YTPlayer.opt.containment.prepend(wrapper);
- YTPlayer.wrapper = wrapper;
- playerBox.css({opacity: 1});
- if (!ytp.isDevice){
- playerBox.after(overlay);
- YTPlayer.overlay = overlay;
- }
- if(!YTPlayer.isBackground){
- overlay.on("mouseenter",function(){
- $YTPlayer.find(".mb_YTVPBar").addClass("visible");
- }).on("mouseleave",function(){
- $YTPlayer.find(".mb_YTVPBar").removeClass("visible");
- })
- }
- // add YT API to the header
- //jQuery("#YTAPI").remove();
- if(!ytp.YTAPIReady){
- var tag = document.createElement('script');
- tag.src = jQuery.mbYTPlayer.locationProtocol+"//www.youtube.com/player_api";
- tag.id = "YTAPI";
- var firstScriptTag = document.getElementsByTagName('script')[0];
- firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
- }else{
- setTimeout(function(){
- jQuery(document).trigger("YTAPIReady");
- }, 200)
- }
- jQuery(document).on("YTAPIReady", function () {
- if ((YTPlayer.isBackground && ytp.isInit) || YTPlayer.opt.isInit)
- return;
- if(YTPlayer.isBackground && YTPlayer.opt.stopMovieOnClick)
- jQuery(document).off("mousedown.ytplayer").on("mousedown,.ytplayer",function(e){
- var target = jQuery(e.target);
- if(target.is("a") || target.parents().is("a")){
- $YTPlayer.pauseYTP();
- }
- });
- if (YTPlayer.isBackground)
- ytp.isInit = true;
- YTPlayer.opt.isInit = true;
- YTPlayer.opt.vol = YTPlayer.opt.vol ? YTPlayer.opt.vol : 100;
- jQuery.mbYTPlayer.getDataFromFeed(YTPlayer.videoID, YTPlayer);
- jQuery(document).on("getVideoInfo_" + YTPlayer.opt.id, function () {
- if(ytp.isDevice && !YTPlayer.isBackground){
- new YT.Player(playerID, {
- height: '100%',
- width: '100%',
- videoId: YTPlayer.videoID,
- events: {
- 'onReady': function(){
- $YTPlayer.optimizeDisplay();
- playerBox.css({opacity: 1});
- YTPlayer.wrapper.css({opacity: 1});
- $YTPlayer.optimizeDisplay();
- },
- 'onStateChange': function(){}
- }
- });
- return;
- }
- new YT.Player(playerID, {
- videoId : YTPlayer.videoID.toString(),
- playerVars: playerVars,
- events : {
- 'onReady': function (event) {
- YTPlayer.player = event.target;
- if(YTPlayer.isReady)
- return;
- YTPlayer.isReady = true;
- YTPlayer.playerEl = YTPlayer.player.getIframe();
- $YTPlayer.optimizeDisplay();
- YTPlayer.videoID = videoID;
- jQuery(window).on("resize.YTP",function () {
- $YTPlayer.optimizeDisplay();
- });
- if (YTPlayer.opt.showControls)
- jQuery(YTPlayer).buildYTPControls();
- YTPlayer.player.setPlaybackQuality(YTPlayer.opt.quality);
- if (YTPlayer.opt.startAt > 0)
- YTPlayer.player.seekTo(parseFloat(YTPlayer.opt.startAt), true);
- if (!YTPlayer.opt.autoPlay) {
- // $YTPlayer.stopYTP();
- YTPlayer.player.pauseVideo();
- YTPlayer.checkForStartAt = setInterval(function () {
- if (YTPlayer.player.getCurrentTime() >= YTPlayer.opt.startAt) {
- clearInterval(YTPlayer.checkForStartAt);
- //YTPlayer.wrapper.CSSAnimate({opacity: YTPlayer.isAlone ? 1 : YTPlayer.opt.opacity}, 2000);
- if (YTPlayer.opt.mute) {
- jQuery(YTPlayer).muteYTPVolume();
- }else{
- jQuery(YTPlayer).unmuteYTPVolume();
- }
- }
- }, 1);
- } else {
- $YTPlayer.playYTP();
- YTPlayer.player.setVolume(YTPlayer.opt.vol);
- if (YTPlayer.opt.mute) {
- jQuery(YTPlayer).muteYTPVolume();
- }else{
- jQuery(YTPlayer).unmuteYTPVolume();
- }
- }
- if (typeof YTPlayer.opt.onReady == "function")
- YTPlayer.opt.onReady($YTPlayer);
- jQuery.mbYTPlayer.checkForState(YTPlayer);
- },
- 'onStateChange' : function (event) {
- /*
- -1 (unstarted)
- 0 (ended)
- 1 (playing)
- 2 (paused)
- 3 (buffering)
- 5 (video cued).
- */
- if (typeof event.target.getPlayerState != "function")
- return;
- var state = event.target.getPlayerState();
- if (typeof YTPlayer.opt.onStateChange == "function")
- YTPlayer.opt.onStateChange($YTPlayer, state);
- var playerBox = jQuery(YTPlayer.playerEl);
- var controls = jQuery("#controlBar_" + YTPlayer.id);
- var data = YTPlayer.opt;
- if (state == 0) { // end
- if (YTPlayer.state == state)
- return;
- YTPlayer.state = state;
- YTPlayer.player.pauseVideo();
- var startAt = YTPlayer.opt.startAt ? YTPlayer.opt.startAt : 1;
- if (data.loop) {
- YTPlayer.wrapper.css({opacity: 0});
- $YTPlayer.playYTP();
- YTPlayer.player.seekTo(startAt,true);
- } else if (!YTPlayer.isBackground) {
- YTPlayer.player.seekTo(startAt, true);
- $YTPlayer.playYTP();
- setTimeout(function () {
- $YTPlayer.pauseYTP();
- }, 10);
- }
- if (!data.loop && YTPlayer.isBackground)
- YTPlayer.wrapper.CSSAnimate({opacity: 0}, 2000);
- else if (data.loop) {
- YTPlayer.wrapper.css({opacity: 0});
- YTPlayer.loop++;
- }
- controls.find(".mb_YTVPPlaypause").html(jQuery.mbYTPlayer.controls.play);
- jQuery(YTPlayer).trigger("YTPEnd");
- }
- if (state == 3) { // buffering
- if (YTPlayer.state == state)
- return;
- YTPlayer.state = state;
- controls.find(".mb_YTVPPlaypause").html(jQuery.mbYTPlayer.controls.play);
- jQuery(YTPlayer).trigger("YTPBuffering");
- }
- if (state == -1) { // unstarted
- if (YTPlayer.state == state)
- return;
- YTPlayer.state = state;
- YTPlayer.wrapper.css({opacity:0});
- jQuery(YTPlayer).trigger("YTPUnstarted");
- }
- if (state == 1) { // play
- if (YTPlayer.state == state)
- return;
- YTPlayer.state = state;
- YTPlayer.player.setPlaybackQuality(YTPlayer.opt.quality);
- if(YTPlayer.opt.mute){
- $YTPlayer.muteYTPVolume();
- YTPlayer.opt.mute = false;
- }
- if (YTPlayer.opt.autoPlay && YTPlayer.loop == 0) {
- YTPlayer.wrapper.CSSAnimate({opacity: YTPlayer.isAlone ? 1 : YTPlayer.opt.opacity}, 2000);
- } else if(!YTPlayer.isBackground) {
- YTPlayer.wrapper.css({opacity: YTPlayer.isAlone ? 1 : YTPlayer.opt.opacity});
- $YTPlayer.css({background: "rgba(0,0,0,0.5)"});
- }else{
- setTimeout(function () {
- jQuery(YTPlayer.playerEl).CSSAnimate({opacity: 1}, 2000);
- YTPlayer.wrapper.CSSAnimate({opacity: YTPlayer.opt.opacity}, 2000);
- }, 1000);
- }
- controls.find(".mb_YTVPPlaypause").html(jQuery.mbYTPlayer.controls.pause);
- jQuery(YTPlayer).trigger("YTPStart");
- if (typeof _gaq != "undefined")
- _gaq.push(['_trackEvent', 'YTPlayer', 'Play', (YTPlayer.title || YTPlayer.videoID.toString())]);
- }
- if (state == 2) { // pause
- if (YTPlayer.state == state)
- return;
- YTPlayer.state = state;
- controls.find(".mb_YTVPPlaypause").html(jQuery.mbYTPlayer.controls.play);
- jQuery(YTPlayer).trigger("YTPPause");
- }
- },
- 'onPlaybackQualityChange': function (e) {
- if (typeof YTPlayer.opt.onPlaybackQualityChange == "function")
- YTPlayer.opt.onPlaybackQualityChange($YTPlayer);
- },
- 'onError' : function (err) {
- if(err.data == 2 && YTPlayer.isPlayList)
- jQuery(YTPlayer).playNext();
- if (typeof YTPlayer.opt.onError == "function")
- YTPlayer.opt.onError($YTPlayer, err);
- }
- }
- });
- });
- })
- });
- },
- getDataFromFeed: function (videoID, YTPlayer) {
- //Get video info from FEEDS API
- YTPlayer.videoID = videoID;
- if (!jQuery.browser.msie) { //!(jQuery.browser.msie && jQuery.browser.version<9)
- jQuery.getJSON(jQuery.mbYTPlayer.locationProtocol+'//gdata.youtube.com/feeds/api/videos/' + videoID + '?v=2&alt=jsonc', function (data, status, xhr) {
- YTPlayer.dataReceived = true;
- var videoData = data.data;
- YTPlayer.title = videoData.title;
- YTPlayer.videoData = videoData;
- if (YTPlayer.opt.ratio == "auto")
- if (videoData.aspectRatio && videoData.aspectRatio === "widescreen")
- YTPlayer.opt.ratio = "16/9";
- else
- YTPlayer.opt.ratio = "4/3";
- if(!YTPlayer.isInit){
- YTPlayer.isInit = true;
- if (!YTPlayer.isBackground) {
- var bgndURL = YTPlayer.videoData.thumbnail.hqDefault;
- jQuery(YTPlayer).css({background: "rgba(0,0,0,0.5) url(" + bgndURL + ") center center", backgroundSize: "cover"});
- }
- jQuery(document).trigger("getVideoInfo_" + YTPlayer.opt.id);
- }
- jQuery(YTPlayer).trigger("YTPChanged");
- });
- setTimeout(function(){
- if(!YTPlayer.dataReceived && !YTPlayer.isInit){
- YTPlayer.isInit = true;
- jQuery(document).trigger("getVideoInfo_" + YTPlayer.opt.id);
- }
- },2500)
- } else {
- YTPlayer.opt.ratio == "auto" ? YTPlayer.opt.ratio = "16/9" : YTPlayer.opt.ratio;
- if(!YTPlayer.isInit){
- YTPlayer.isInit = true;
- setTimeout(function(){
- jQuery(document).trigger("getVideoInfo_" + YTPlayer.opt.id);
- },100)
- }
- jQuery(YTPlayer).trigger("YTPChanged");
- }
- },
- getVideoID: function(){
- var YTPlayer = this.get(0);
- return YTPlayer.videoID || false ;
- },
- setVideoQuality: function(quality){
- var YTPlayer = this.get(0);
- YTPlayer.player.setPlaybackQuality(quality);
- },
- YTPlaylist : function(videos, shuffle, callback){
- var YTPlayer = this.get(0);
- YTPlayer.isPlayList = true;
- if(shuffle)
- videos = jQuery.shuffle(videos);
- if(!YTPlayer.videoID){
- YTPlayer.videos = videos;
- YTPlayer.videoCounter = 0;
- YTPlayer.videoLength = videos.length;
- jQuery(YTPlayer).data("property", videos[0]);
- jQuery(YTPlayer).mb_YTPlayer();
- }
- if(typeof callback == "function")
- jQuery(YTPlayer).on("YTPChanged",function(){
- callback(YTPlayer);
- });
- jQuery(YTPlayer).on("YTPEnd", function(){
- jQuery(YTPlayer).playNext();
- });
- },
- playNext: function(){
- var YTPlayer = this.get(0);
- YTPlayer.videoCounter++;
- if(YTPlayer.videoCounter>=YTPlayer.videoLength)
- YTPlayer.videoCounter = 0;
- jQuery(YTPlayer.playerEl).css({opacity:0});
- jQuery(YTPlayer).changeMovie(YTPlayer.videos[YTPlayer.videoCounter]);
- },
- playPrev: function(){
- var YTPlayer = this.get(0);
- YTPlayer.videoCounter--;
- if(YTPlayer.videoCounter<=0)
- YTPlayer.videoCounter = YTPlayer.videoLength;
- jQuery(YTPlayer.playerEl).css({opacity:0});
- jQuery(YTPlayer).changeMovie(YTPlayer.videos[YTPlayer.videoCounter]);
- },
- changeMovie: function (opt) {
- var YTPlayer = this.get(0);
- var data = YTPlayer.opt;
- if (opt) {
- jQuery.extend(data, opt);
- }
- YTPlayer.videoID = data.videoURL.getVideoID();
- jQuery(YTPlayer).pauseYTP();
- var timer = jQuery.browser.msie ? 1000 : 0;
- jQuery(YTPlayer).getPlayer().cueVideoByUrl(encodeURI(jQuery.mbYTPlayer.locationProtocol+"//www.youtube.com/v/" + YTPlayer.videoID) , 5 , YTPlayer.opt.quality);
- setTimeout(function(){
- jQuery(YTPlayer).playYTP();
- jQuery(YTPlayer).one("YTPStart", function(){
- jQuery(YTPlayer.playerEl).CSSAnimate({opacity:1},2000);
- });
- },timer)
- if (YTPlayer.opt.mute) {
- jQuery(YTPlayer).muteYTPVolume();
- }else{
- jQuery(YTPlayer).unmuteYTPVolume();
- }
- if (YTPlayer.opt.addRaster) {
- var retina = (window.retina || window.devicePixelRatio > 1);
- YTPlayer.overlay.addClass(retina ? "raster retina" : "raster");
- }else{
- YTPlayer.overlay.removeClass("raster");
- YTPlayer.overlay.removeClass("retina");
- }
- jQuery("#controlBar_" + YTPlayer.id).remove();
- if (YTPlayer.opt.showControls)
- jQuery(YTPlayer).buildYTPControls();
- jQuery.mbYTPlayer.getDataFromFeed(YTPlayer.videoID, YTPlayer);
- jQuery(YTPlayer).optimizeDisplay();
- jQuery.mbYTPlayer.checkForState(YTPlayer);
- },
- getPlayer: function () {
- return jQuery(this).get(0).player;
- },
- playerDestroy: function () {
- var YTPlayer = this.get(0);
- ytp.YTAPIReady = false;
- ytp.isInit = false;
- YTPlayer.opt.isInit = false;
- YTPlayer.videoID = null;
- var playerBox = YTPlayer.wrapper;
- playerBox.remove();
- jQuery("#controlBar_" + YTPlayer.id).remove();
- },
- fullscreen: function(real) {
- var YTPlayer = this.get(0);
- var controls = jQuery("#controlBar_" + YTPlayer.id);
- var fullScreenBtn = controls.find(".mb_OnlyYT");
- var videoWrapper = jQuery(YTPlayer.wrapper);
- if(real){
- var fullscreenchange = jQuery.browser.mozilla ? "mozfullscreenchange" : jQuery.browser.webkit ? "webkitfullscreenchange" : "fullscreenchange";
- jQuery(document).off(fullscreenchange);
- jQuery(document).on(fullscreenchange, function() {
- var isFullScreen = RunPrefixMethod(document, "IsFullScreen") || RunPrefixMethod(document, "FullScreen");
- if (!isFullScreen) {
- jQuery(YTPlayer).removeClass("fullscreen");
- YTPlayer.isAlone = false;
- fullScreenBtn.html(jQuery.mbYTPlayer.controls.onlyYT)
- jQuery(YTPlayer).setVideoQuality(YTPlayer.opt.quality);
- if (YTPlayer.isBackground){
- jQuery("body").after(controls);
- }else{
- YTPlayer.wrapper.before(controls);
- }
- jQuery(window).resize();
- }else{
- jQuery(YTPlayer).setVideoQuality("default");
- }
- });
- }
- if (!YTPlayer.isAlone) {
- if(YTPlayer.player.getPlayerState() != 1 && YTPlayer.player.getPlayerState() != 2)
- jQuery(YTPlayer).playYTP();
- if(real){
- YTPlayer.wrapper.append(controls);
- jQuery(YTPlayer).addClass("fullscreen");
- launchFullscreen(videoWrapper.get(0));
- } else
- videoWrapper.css({zIndex: 10000}).CSSAnimate({opacity: 1}, 1000, 0);
- jQuery(YTPlayer).trigger("YTPFullScreenStart");
- fullScreenBtn.html(jQuery.mbYTPlayer.controls.showSite)
- YTPlayer.isAlone = true;
- } else {
- if(real){
- cancelFullscreen();
- } else{
- videoWrapper.CSSAnimate({opacity: YTPlayer.opt.opacity}, 500);
- }
- jQuery(YTPlayer).trigger("YTPFullScreenEnd");
- videoWrapper.css({zIndex: -1});
- fullScreenBtn.html(jQuery.mbYTPlayer.controls.onlyYT)
- YTPlayer.isAlone = false;
- }
- function RunPrefixMethod(obj, method) {
- var pfx = ["webkit", "moz", "ms", "o", ""];
- var p = 0, m, t;
- while (p < pfx.length && !obj[m]) {
- m = method;
- if (pfx[p] == "") {
- m = m.substr(0,1).toLowerCase() + m.substr(1);
- }
- m = pfx[p] + m;
- t = typeof obj[m];
- if (t != "undefined") {
- pfx = [pfx[p]];
- return (t == "function" ? obj[m]() : obj[m]);
- }
- p++;
- }
- }
- function launchFullscreen(element) {
- RunPrefixMethod(element, "RequestFullScreen");
- }
- function cancelFullscreen() {
- if (RunPrefixMethod(document, "FullScreen") || RunPrefixMethod(document, "IsFullScreen")) {
- RunPrefixMethod(document, "CancelFullScreen");
- }
- }
- },
- playYTP: function () {
- var YTPlayer = this.get(0);
- var controls = jQuery("#controlBar_" + YTPlayer.id);
- var playBtn = controls.find(".mb_YTVPPlaypause");
- playBtn.html(jQuery.mbYTPlayer.controls.pause);
- YTPlayer.player.playVideo();
- YTPlayer.wrapper.CSSAnimate({opacity: YTPlayer.opt.opacity}, 2000);
- jQuery(YTPlayer).on("YTPStart", function(){
- jQuery(YTPlayer).css("background", "none");
- })
- },
- toggleLoops: function () {
- var YTPlayer = this.get(0);
- var data = YTPlayer.opt;
- if (data.loop == 1) {
- data.loop = 0;
- } else {
- if(data.startAt) {
- YTPlayer.player.seekTo(data.startAt);
- } else {
- YTPlayer.player.playVideo();
- }
- data.loop = 1;
- }
- },
- stopYTP: function () {
- var YTPlayer = this.get(0);
- var controls = jQuery("#controlBar_" + YTPlayer.id);
- var playBtn = controls.find(".mb_YTVPPlaypause");
- playBtn.html(jQuery.mbYTPlayer.controls.play);
- YTPlayer.player.stopVideo();
- },
- pauseYTP: function () {
- var YTPlayer = this.get(0);
- var data = YTPlayer.opt;
- var controls = jQuery("#controlBar_" + YTPlayer.id);
- var playBtn = controls.find(".mb_YTVPPlaypause");
- playBtn.html(jQuery.mbYTPlayer.controls.play);
- YTPlayer.player.pauseVideo();
- },
- seekToYTP: function(val) {
- var YTPlayer = this.get(0);
- YTPlayer.player.seekTo(val,true);
- },
- setYTPVolume: function (val) {
- var YTPlayer = this.get(0);
- if (!val && !YTPlayer.opt.vol && player.getVolume() == 0)
- jQuery(YTPlayer).unmuteYTPVolume();
- else if ((!val && YTPlayer.player.getVolume() > 0) || (val && YTPlayer.player.getVolume() == val))
- jQuery(YTPlayer).muteYTPVolume();
- else
- YTPlayer.opt.vol = val;
- YTPlayer.player.setVolume(YTPlayer.opt.vol);
- },
- muteYTPVolume: function () {
- var YTPlayer = this.get(0);
- YTPlayer.opt.vol = YTPlayer.player.getVolume() || 50;
- YTPlayer.player.mute();
- YTPlayer.player.setVolume(0);
- var controls = jQuery("#controlBar_" + YTPlayer.id);
- var muteBtn = controls.find(".mb_YTVPMuteUnmute");
- muteBtn.html(jQuery.mbYTPlayer.controls.unmute);
- },
- unmuteYTPVolume: function () {
- var YTPlayer = this.get(0);
- YTPlayer.player.unMute();
- YTPlayer.player.setVolume(YTPlayer.opt.vol);
- var controls = jQuery("#controlBar_" + YTPlayer.id);
- var muteBtn = controls.find(".mb_YTVPMuteUnmute");
- muteBtn.html(jQuery.mbYTPlayer.controls.mute);
- },
- manageYTPProgress: function () {
- var YTPlayer = this.get(0);
- var controls = jQuery("#controlBar_" + YTPlayer.id);
- var progressBar = controls.find(".mb_YTVPProgress");
- var loadedBar = controls.find(".mb_YTVPLoaded");
- var timeBar = controls.find(".mb_YTVTime");
- var totW = progressBar.outerWidth();
- var currentTime = Math.floor(YTPlayer.player.getCurrentTime());
- var totalTime = Math.floor(YTPlayer.player.getDuration());
- var timeW = (currentTime * totW) / totalTime;
- var startLeft = 0;
- var loadedW = YTPlayer.player.getVideoLoadedFraction() * 100;
- loadedBar.css({left: startLeft, width: loadedW + "%"});
- timeBar.css({left: 0, width: timeW});
- return {totalTime: totalTime, currentTime: currentTime};
- },
- buildYTPControls: function () {
- var YTPlayer = this.get(0);
- var data = YTPlayer.opt;
- if(jQuery("#controlBar_"+ YTPlayer.id).length)
- return;
- var controlBar = jQuery("<span/>").attr("id", "controlBar_" + YTPlayer.id).addClass("mb_YTVPBar").css({whiteSpace: "noWrap", position: YTPlayer.isBackground ? "fixed" : "absolute", zIndex: YTPlayer.isBackground ? 10000 : 1000}).hide();
- var buttonBar = jQuery("<div/>").addClass("buttonBar");
- var playpause = jQuery("<span>" + jQuery.mbYTPlayer.controls.play + "</span>").addClass("mb_YTVPPlaypause ytpicon").click(function () {
- if (YTPlayer.player.getPlayerState() == 1)
- jQuery(YTPlayer).pauseYTP();
- else
- jQuery(YTPlayer).playYTP();
- });
- var MuteUnmute = jQuery("<span>" + jQuery.mbYTPlayer.controls.mute + "</span>").addClass("mb_YTVPMuteUnmute ytpicon").click(function () {
- if (YTPlayer.player.getVolume()==0) {
- jQuery(YTPlayer).unmuteYTPVolume();
- } else {
- jQuery(YTPlayer).muteYTPVolume();
- }
- });
- var idx = jQuery("<span/>").addClass("mb_YTVPTime");
- var vURL = data.videoURL;
- if(vURL.indexOf("http") < 0)
- vURL = jQuery.mbYTPlayer.locationProtocol+"//www.youtube.com/watch?v="+data.videoURL;
- var movieUrl = jQuery("<span/>").html(jQuery.mbYTPlayer.controls.ytLogo).addClass("mb_YTVPUrl ytpicon").attr("title", "view on YouTube").on("click", function () {window.open(vURL, "viewOnYT")});
- var onlyVideo = jQuery("<span/>").html(jQuery.mbYTPlayer.controls.onlyYT).addClass("mb_OnlyYT ytpicon").on("click",function () {jQuery(YTPlayer).fullscreen(data.realfullscreen);});
- var progressBar = jQuery("<div/>").addClass("mb_YTVPProgress").css("position", "absolute").click(function (e) {
- timeBar.css({width: (e.clientX - timeBar.offset().left)});
- YTPlayer.timeW = e.clientX - timeBar.offset().left;
- controlBar.find(".mb_YTVPLoaded").css({width: 0});
- var totalTime = Math.floor(YTPlayer.player.getDuration());
- YTPlayer.goto = (timeBar.outerWidth() * totalTime) / progressBar.outerWidth();
- YTPlayer.player.seekTo(parseFloat(YTPlayer.goto), true);
- controlBar.find(".mb_YTVPLoaded").css({width: 0});
- });
- var loadedBar = jQuery("<div/>").addClass("mb_YTVPLoaded").css("position", "absolute");
- var timeBar = jQuery("<div/>").addClass("mb_YTVTime").css("position", "absolute");
- progressBar.append(loadedBar).append(timeBar);
- buttonBar.append(playpause).append(MuteUnmute).append(idx);
- if (data.printUrl){
- buttonBar.append(movieUrl);
- }
- if (YTPlayer.isBackground || (YTPlayer.opt.realfullscreen && !YTPlayer.isBackground))
- buttonBar.append(onlyVideo);
- controlBar.append(buttonBar).append(progressBar);
- if (!YTPlayer.isBackground) {
- controlBar.addClass("inlinePlayer");
- YTPlayer.wrapper.before(controlBar);
- } else {
- jQuery("body").after(controlBar);
- }
- controlBar.fadeIn();
- },
- checkForState:function(YTPlayer){
- var controlBar = jQuery("#controlBar_" + YTPlayer.id);
- var data = YTPlayer.opt;
- var startAt = YTPlayer.opt.startAt ? YTPlayer.opt.startAt : 1;
- YTPlayer.getState = setInterval(function () {
- var prog = jQuery(YTPlayer).manageYTPProgress();
- controlBar.find(".mb_YTVPTime").html(jQuery.mbYTPlayer.formatTime(prog.currentTime) + " / " + jQuery.mbYTPlayer.formatTime(prog.totalTime));
- if (parseFloat(YTPlayer.player.getDuration() - 3) < YTPlayer.player.getCurrentTime() && YTPlayer.player.getPlayerState() == 1 && !YTPlayer.isPlayList) {
- if(!data.loop){
- YTPlayer.player.pauseVideo();
- YTPlayer.wrapper.CSSAnimate({opacity: 0}, 2000,function(){
- YTPlayer.player.seekTo(startAt, true);
- if (!YTPlayer.isBackground) {
- var bgndURL = YTPlayer.videoData.thumbnail.hqDefault;
- jQuery(YTPlayer).css({background: "rgba(0,0,0,0.5) url(" + bgndURL + ") center center", backgroundSize: "cover"});
- }
- });
- }else
- YTPlayer.player.seekTo(startAt);
- jQuery(YTPlayer).trigger("YTPEnd");
- }
- }, 1);
- },
- formatTime : function (s) {
- var min = Math.floor(s / 60);
- var sec = Math.floor(s - (60 * min));
- return (min < 9 ? "0" + min : min) + " : " + (sec < 9 ? "0" + sec : sec);
- }
- };
- jQuery.fn.toggleVolume = function () {
- var YTPlayer = this.get(0);
- if (!YTPlayer)
- return;
- if (YTPlayer.player.isMuted()) {
- jQuery(YTPlayer).unmuteYTPVolume();
- return true;
- } else {
- jQuery(YTPlayer).muteYTPVolume();
- return false;
- }
- };
- jQuery.fn.optimizeDisplay = function () {
- var YTPlayer = this.get(0);
- var data = YTPlayer.opt;
- var playerBox = jQuery(YTPlayer.playerEl);
- var win = {};
- var el = !YTPlayer.isBackground ? data.containment : jQuery(window);
- win.width = el.width();
- win.height = el.height();
- var margin = 24;
- var vid = {};
- vid.width = win.width + ((win.width * margin) / 100);
- vid.height = data.ratio == "16/9" ? Math.ceil((9 * win.width) / 16) : Math.ceil((3 * win.width) / 4);
- vid.marginTop = -((vid.height - win.height) / 2);
- vid.marginLeft = -((win.width * (margin / 2)) / 100);
- if (vid.height < win.height) {
- vid.height = win.height + ((win.height * margin) / 100);
- vid.width = data.ratio == "16/9" ? Math.floor((16 * win.height) / 9) : Math.floor((4 * win.height) / 3);
- vid.marginTop = -((win.height * (margin / 2)) / 100);
- vid.marginLeft = -((vid.width - win.width) / 2);
- }
- playerBox.css({width: vid.width, height: vid.height, marginTop: vid.marginTop, marginLeft: vid.marginLeft});
- };
- jQuery.shuffle = function(arr) {
- var newArray = arr.slice();
- var len = newArray.length;
- var i = len;
- while (i--) {
- var p = parseInt(Math.random()*len);
- var t = newArray[i];
- newArray[i] = newArray[p];
- newArray[p] = t;
- }
- return newArray;
- };
- jQuery.fn.mb_YTPlayer = jQuery.mbYTPlayer.buildPlayer;
- jQuery.fn.YTPlaylist = jQuery.mbYTPlayer.YTPlaylist;
- jQuery.fn.playNext = jQuery.mbYTPlayer.playNext;
- jQuery.fn.playPrev = jQuery.mbYTPlayer.playPrev;
- jQuery.fn.changeMovie = jQuery.mbYTPlayer.changeMovie;
- jQuery.fn.getVideoID = jQuery.mbYTPlayer.getVideoID;
- jQuery.fn.getPlayer = jQuery.mbYTPlayer.getPlayer;
- jQuery.fn.playerDestroy = jQuery.mbYTPlayer.playerDestroy;
- jQuery.fn.fullscreen = jQuery.mbYTPlayer.fullscreen;
- jQuery.fn.buildYTPControls = jQuery.mbYTPlayer.buildYTPControls;
- jQuery.fn.playYTP = jQuery.mbYTPlayer.playYTP;
- jQuery.fn.toggleLoops = jQuery.mbYTPlayer.toggleLoops;
- jQuery.fn.stopYTP = jQuery.mbYTPlayer.stopYTP;
- jQuery.fn.pauseYTP = jQuery.mbYTPlayer.pauseYTP;
- jQuery.fn.seekToYTP = jQuery.mbYTPlayer.seekToYTP;
- jQuery.fn.muteYTPVolume = jQuery.mbYTPlayer.muteYTPVolume;
- jQuery.fn.unmuteYTPVolume = jQuery.mbYTPlayer.unmuteYTPVolume;
- jQuery.fn.setYTPVolume = jQuery.mbYTPlayer.setYTPVolume;
- jQuery.fn.setVideoQuality = jQuery.mbYTPlayer.setVideoQuality;
- jQuery.fn.manageYTPProgress = jQuery.mbYTPlayer.manageYTPProgress;
- })(jQuery, ytp);
|