PageRenderTime 49ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/ajax/libs/jquery.mb.YTPlayer/1.2rc1/jquery.mb.YTPlayer.js

https://gitlab.com/Mirros/cdnjs
JavaScript | 327 lines | 264 code | 41 blank | 22 comment | 50 complexity | 5df6f188abe03e117e87c9cc41d0ed23 MD5 | raw file
  1. /*******************************************************************************
  2. jquery.mb.components
  3. Copyright (c) 2001-2010. Matteo Bicocchi (Pupunzi); Open lab srl, Firenze - Italy
  4. email: mbicocchi@open-lab.com
  5. site: http://pupunzi.com
  6. Licences: MIT, GPL
  7. http://www.opensource.org/licenses/mit-license.php
  8. http://www.gnu.org/licenses/gpl.html
  9. ******************************************************************************/
  10. /*
  11. * jQuery.mb.components: jquery.mb.YTPlayer
  12. * version: 1.2 - 6-feb-2010 - 43
  13. * © 2001 - 2010 Matteo Bicocchi (pupunzi), Open Lab
  14. *
  15. */
  16. (function($){
  17. $.YTPlayer={
  18. name:"jquery.mb.YTPlayer",
  19. version:1.2,
  20. author:"Matteo Bicocchi",
  21. width:450,
  22. controls:{
  23. play:"<img src='images/play.png'>",
  24. pause:"<img src='images/pause.png'>",
  25. mute:"<img src='images/mute.png'>",
  26. unmute:"<img src='images/unmute.png'>"
  27. },
  28. rasterImg:"images/raster.png",
  29. setYTPlayer:function(){
  30. var players=this;
  31. $.getScript("http://ajax.googleapis.com/ajax/libs/swfobject/2/swfobject.js",function(){
  32. players.each(function(){
  33. if(!$(this).is("a")) return;
  34. if (!$(this).attr("id")) $(this).attr("id", "YTP_"+new Date().getMilliseconds());
  35. var ID=$(this).attr("id");
  36. var dataObj=$("<span/>");
  37. dataObj.attr("id",ID+"_data").hide();
  38. var data= dataObj.get(0);
  39. data.opacity=1;
  40. data.isBgndMovie=false;
  41. data.width=$.YTPlayer.width;
  42. data.quality="default";
  43. data.muteSound=false;
  44. data.hasControls=false;
  45. data.ratio="16/9";
  46. data.bufferImg=false;
  47. var BGisInit = typeof document.YTPBG != "undefined";
  48. if ($.metadata){
  49. $.metadata.setType("class");
  50. if ($(this).metadata().quality) data.quality=$(this).metadata().quality;
  51. if ($(this).metadata().width) data.width=$(this).metadata().width;
  52. if ($(this).metadata().opacity) data.opacity=$(this).metadata().opacity;
  53. if ($(this).metadata().isBgndMovie && !BGisInit) {
  54. data.isBgndMovie=$(this).metadata().isBgndMovie;
  55. data.width=$(this).metadata().isBgndMovie.width? $(this).metadata().isBgndMovie.width:"window";
  56. }
  57. if ($(this).metadata().muteSound) {data.muteSound=$(this).metadata().muteSound;}
  58. if ($(this).metadata().hasControls) {data.hasControls=$(this).metadata().hasControls;}
  59. if ($(this).metadata().ratio) {data.ratio=$(this).metadata().ratio;}
  60. if ($(this).metadata().bufferImg) {data.bufferImg=$(this).metadata().bufferImg;}
  61. if ($(this).metadata().ID) {data.ID=$(this).metadata().ID;}
  62. }
  63. var el= data.ID?$("#"+data.ID):$("body");
  64. if(data.width=="window") {
  65. data.height="100%";
  66. data.width= "100%";
  67. if(data.ID){
  68. data.height=el.outerHeight()+40;
  69. data.width= el.outerWidth();
  70. }
  71. }
  72. else
  73. data.height= data.ratio=="16/9" ? Math.ceil((9*data.width)/16):Math.ceil((3*data.width)/4);
  74. var videoWrapper="";
  75. $(el).append(dataObj);
  76. if(data.isBgndMovie){
  77. // $(el).css({position:"relative",zIndex:1});
  78. if ($.browser.msie && $.browser.version < 8 || data.ID){
  79. var bodyWrapper=$("<div/>").css({position:"relative",zIndex:0});
  80. $(el).wrapInner(bodyWrapper);
  81. $(el).prepend($(this));
  82. }else
  83. $(el).after($(this));
  84. var pos= data.ID?"absolute":"fixed";
  85. videoWrapper=$("<div/>").attr("id","wrapper_"+ID).css({overflow:"hidden",position:pos,left:0,top:0, width:"100%", height:"100%"});
  86. $(this).wrap(videoWrapper);
  87. if(!data.width.toString().indexOf("%")==-1) {
  88. var videoDiv=$("<div/>").css({position:pos,top: data.ratio=="4/3" && !data.ID?-(data.height/4):0,left:0, display:"block", width:data.width, height:data.height});
  89. $(this).wrap(videoDiv);
  90. }
  91. }else{
  92. videoWrapper=$("<span/>").attr("id","wrapper_"+ID).css({width:data.width, height:data.height, position:"relative"}).addClass("mb_YTVPlayer");
  93. $(this).wrap(videoWrapper);
  94. }
  95. var params = { allowScriptAccess: "always", wmode:"transparent", allowFullScreen:"true" };
  96. var atts = { id: ID };
  97. data.movieURL=($(this).attr("href").match( /[\\?&]v=([^&#]*)/))[1];
  98. //swfobject.embedSWF(swfUrl, id, width, height, version, expressInstallSwfurl, flashvars, params, attributes, callbackFn)
  99. swfobject.embedSWF("http://www.youtube.com/apiplayer?enablejsapi=1&version=3&playerapiid="+ID,ID, data.width, data.height, "8", null, null, params, atts);
  100. });
  101. });
  102. },
  103. setMovie: function(){
  104. var player = $(this).get(0);
  105. var data = $("#"+player.id+"_data").get(0);
  106. var BGisInit = typeof document.YTPBG != "undefined";
  107. var movieID= data.movieURL;
  108. $(player).css({opacity:data.opacity});
  109. var pos= data.ID?"absolute":"fixed";
  110. //if it is as background
  111. if(data.isBgndMovie && !BGisInit){
  112. var raster=$("<div/>").addClass("mbYTP_raster").css({position:pos,top:0,left:0,width:"100%",height:"100%",background:"url("+$.YTPlayer.rasterImg+")"}).hide();
  113. var bufferImg=data.bufferImg?$("<div/>").addClass("mbYTP_bufferImg").css({position:pos,top:0,left:0,width:"100%",height:"100%",background:"url("+data.bufferImg+")"}).hide():false;
  114. var playerContainer=$(player).parents("div:first");
  115. var ratio=data.ratio;
  116. // $(playerContainer).css({width:"100%", height:"100%"});
  117. //can't be more than one bgnd
  118. if(!data.ID) document.YTPBG=true;
  119. $(playerContainer).after(raster);
  120. if (data.bufferImg) raster.after(bufferImg);
  121. }
  122. if(data.isBgndMovie) {
  123. player.loadVideoByUrl("http://www.youtube.com/v/"+movieID, 0);
  124. if (data.isBgndMovie.mute) player.mute();
  125. }else{
  126. player.cueVideoByUrl("http://www.youtube.com/v/"+movieID, 0);
  127. $(player).buildYTPControls();
  128. }
  129. player.setPlaybackQuality(data.quality);
  130. player.addEventListener("onStateChange", '(function(state) { return playerState(state, "' + player.id + '"); })');
  131. },
  132. playYTP: function(){
  133. var player= $(this).get(0);
  134. var playBtn=$(player).parent().find(".mb_YTVPPlaypause");
  135. playBtn.html($.YTPlayer.controls.pause);
  136. player.playVideo();
  137. },
  138. stopYTP:function(){
  139. var player= $(this).get(0);
  140. var playBtn=$(player).parent().find(".mb_YTVPPlaypause");
  141. playBtn.html($.YTPlayer.controls.play);
  142. player.pauseVideo();
  143. },
  144. pauseYTP:function(){
  145. var player= $(this).get(0);
  146. var playBtn=$(player).parent().find(".mb_YTVPPlaypause");
  147. playBtn.html($.YTPlayer.controls.play);
  148. player.pauseVideo();
  149. },
  150. // todo
  151. setYTPVolume:function(val){
  152. var player= $(this).get(0);
  153. var VolumeBtn=$(player).parent().find(".mb_YTVPVolume");
  154. player.setVolume(val);
  155. },
  156. muteYTPVolume:function(){
  157. var player= $(this).get(0);
  158. var muteBtn=$(player).parent().find(".mb_YTVPMuteUnmute");
  159. muteBtn.html($.YTPlayer.controls.unmute);
  160. player.mute();
  161. },
  162. unmuteYTPVolume:function(){
  163. var player= $(this).get(0);
  164. var muteBtn=$(player).parent().find(".mb_YTVPMuteUnmute");
  165. muteBtn.html($.YTPlayer.controls.mute);
  166. player.unMute();
  167. },
  168. manageYTPProgress:function(){
  169. var player= $(this).get(0);
  170. var YTPlayer= $(player).parent(".mb_YTVPlayer");
  171. var progressBar= YTPlayer.find(".mb_YTVPProgress");
  172. var loadedBar=YTPlayer.find(".mb_YTVPLoaded");
  173. var timeBar=YTPlayer.find(".mb_YTVTime");
  174. var totW= progressBar.outerWidth();
  175. var startBytes= player.getVideoStartBytes();
  176. var totalBytes= player.getVideoBytesTotal();
  177. var loadedByte= player.getVideoBytesLoaded();
  178. var currentTime=Math.floor(player.getCurrentTime());
  179. var totalTime= Math.floor(player.getDuration());
  180. var timeW= (currentTime*totW)/totalTime;
  181. var startLeft=0;
  182. if(startBytes) {
  183. startLeft=player.timeW;
  184. }
  185. var loadedW= (loadedByte*(totW-startLeft))/totalBytes;
  186. loadedBar.css({left:startLeft, width:loadedW});
  187. timeBar.css({left:0,width:timeW});
  188. return {totalTime:totalTime,currentTime: currentTime};
  189. },
  190. buildYTPControls:function(){
  191. var player= $(this).get(0);
  192. if (typeof player.isInit != "undefined") return;
  193. player.isInit=true;
  194. var YTPlayer= $(this).parent(".mb_YTVPlayer");
  195. var controlBar=$("<span/>").addClass("mb_YTVPBar").css({whiteSpace:"noWrap",position:"absolute"}).hide();
  196. var playpause =$("<span>"+$.YTPlayer.controls.play+"</span>").addClass("mb_YTVPPlaypause").click(function(){
  197. if(player.getPlayerState()== 1){
  198. $(player).pauseYTP();
  199. }else{
  200. $(player).playYTP();
  201. }
  202. });
  203. var MuteUnmute=$("<span>"+$.YTPlayer.controls.mute+"</span>").addClass("mb_YTVPMuteUnmute").click(function(){
  204. if(player.isMuted()){
  205. $(player).unmuteYTPVolume();
  206. }else{
  207. $(player).muteYTPVolume();
  208. }
  209. });
  210. var idx=$("<span/>").addClass("mb_YTVPTime");
  211. var progressBar =$("<div/>").addClass("mb_YTVPProgress").css("position","absolute").click(function(e){
  212. timeBar.css({width:(e.clientX-timeBar.offset().left)});
  213. player.timeW=e.clientX-timeBar.offset().left;
  214. YTPlayer.find(".mb_YTVPLoaded").css({width:0});
  215. var totalTime= Math.floor(player.getDuration());
  216. player.goto=(timeBar.outerWidth()*totalTime)/progressBar.outerWidth();
  217. player.seekTo(player.goto, true);
  218. YTPlayer.find(".mb_YTVPLoaded").css({width:0});
  219. });
  220. var loadedBar = $("<div/>").addClass("mb_YTVPLoaded").css("position","absolute");
  221. var timeBar = $("<div/>").addClass("mb_YTVTime").css("position","absolute");
  222. progressBar.append(loadedBar).append(timeBar);
  223. controlBar.append(playpause).append(MuteUnmute).append(idx).append(progressBar);
  224. YTPlayer.append(controlBar);
  225. YTPlayer.hover(function(){
  226. controlBar.fadeIn();
  227. clearInterval(player.getState);
  228. player.getState=setInterval(function(){
  229. var prog= $(player).manageYTPProgress();
  230. $(".mb_YTVPTime").html($.YTPlayer.formatTime(prog.currentTime)+" / "+ $.YTPlayer.formatTime(prog.totalTime));
  231. if(player.getPlayerState()== 1 && $(".mb_YTVPPlaypause").html()!=$.YTPlayer.controls.pause) YTPlayer.find(".mb_YTVPPlaypause").html($.YTPlayer.controls.pause);
  232. if(player.getPlayerState()== 2) YTPlayer.find(".mb_YTVPPlaypause").html($.YTPlayer.controls.play);
  233. },500);
  234. },function(){
  235. controlBar.fadeOut();
  236. clearInterval(player.getState);
  237. });
  238. },
  239. formatTime: function(s){
  240. var min= Math.floor(s/60);
  241. var sec= s-(60*min);
  242. return (min<9?"0"+min:min)+" : "+(sec<9?"0"+sec:sec);
  243. }
  244. };
  245. $.fn.mb_YTPlayer = $.YTPlayer.setYTPlayer;
  246. $.fn.mb_setMovie = $.YTPlayer.setMovie;
  247. $.fn.buildYTPControls = $.YTPlayer.buildYTPControls;
  248. $.fn.playYTP = $.YTPlayer.playYTP;
  249. $.fn.stopYTP = $.YTPlayer.stopYTP;
  250. $.fn.pauseYTP = $.YTPlayer.pauseYTP;
  251. $.fn.muteYTPVolume = $.YTPlayer.muteYTPVolume;
  252. $.fn.unmuteYTPVolume = $.YTPlayer.unmuteYTPVolume;
  253. $.fn.manageYTPProgress = $.YTPlayer.manageYTPProgress;
  254. })(jQuery);
  255. function onYouTubePlayerReady(playerId) {
  256. var player=$("#"+playerId);
  257. player.mb_setMovie();
  258. }
  259. function playerState(state, el) {
  260. var player=$("#"+el).get(0);
  261. var data = $("#"+player.id+"_data").get(0);
  262. if (state==0 && data.isBgndMovie) {
  263. player.playVideo();
  264. }
  265. if ((state==-1 || state==3) && data.isBgndMovie) {
  266. $(player).css({opacity:0});
  267. $(".mbYTP_raster").css({opacity:.5,backgroundColor:"black"}).fadeIn();
  268. $(".mbYTP_bufferImg").css({opacity:.2}).fadeIn();
  269. if (!$.browser.msie){
  270. $("#wrapper_"+player.id).css({opacity:0});
  271. }
  272. }
  273. if (state==1 && data.isBgndMovie) {
  274. $(player).css({opacity:data.opacity});
  275. $(".mbYTP_raster").css({opacity:1,backgroundColor:"transparent"});
  276. $(".mbYTP_bufferImg").fadeOut();
  277. if (!$.browser.msie)
  278. $("#wrapper_"+player.id).animate({opacity:1},1000);
  279. }
  280. if(state==1 && !data.isBgndMovie)
  281. player.totalBytes=player.getVideoBytesTotal();
  282. if (state==0 && !data.isBgndMovie) {
  283. $(player).stopYTP();
  284. }
  285. }