diff -r 61c384dda19e -r d35ad8111c5e src/js/libs/popcorn.youtube.js --- a/src/js/libs/popcorn.youtube.js Thu May 03 17:52:52 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,220 +0,0 @@ -// A global callback for youtube... that makes me angry -var onYouTubePlayerReady = function( containerId ) { - - onYouTubePlayerReady[ containerId ] && onYouTubePlayerReady[ containerId ](); -}; -onYouTubePlayerReady.stateChangeEventHandler = {}; - -Popcorn.player( "youtube", { - _setup: function( options ) { - - var media = this, - youtubeObject, - container = document.createElement( "div" ), - currentTime = 0, - seekTime = 0, - seeking = false, - - // state code for volume changed polling - volumeChanged = false, - lastMuted = false, - lastVolume = 0; - - container.id = media.id + Popcorn.guid(); - - media.appendChild( container ); - - var youtubeInit = function() { - - var flashvars, - params, - attributes, - src; - - // expose a callback to this scope, that is called from the global callback youtube calls - onYouTubePlayerReady[ container.id ] = function() { - - youtubeObject = document.getElementById( container.id ); - - // more youtube callback nonsense - onYouTubePlayerReady.stateChangeEventHandler[ container.id ] = function( state ) { - - // playing is state 1 - // paused is state 2 - if ( state === 1 ) { - - media.paused && media.play(); - // youtube fires paused events while seeking - // this is the only way to get seeking events - } else if ( state === 2 ) { - - // silly logic forced on me by the youtube API - // calling youtube.seekTo triggers multiple events - // with the second events getCurrentTime being the old time - if ( seeking && seekTime === currentTime && seekTime !== youtubeObject.getCurrentTime() ) { - - seeking = false; - youtubeObject.seekTo( currentTime ); - return; - } - - currentTime = youtubeObject.getCurrentTime(); - media.dispatchEvent( "timeupdate" ); - !media.paused && media.pause(); - } - }; - - // youtube requires callbacks to be a string to a function path from the global scope - youtubeObject.addEventListener( "onStateChange", "onYouTubePlayerReady.stateChangeEventHandler." + container.id ); - - var timeupdate = function() { - - if ( !media.paused ) { - - currentTime = youtubeObject.getCurrentTime(); - media.dispatchEvent( "timeupdate" ); - setTimeout( timeupdate, 10 ); - } - }; - - var volumeupdate = function() { - - if ( lastMuted !== youtubeObject.isMuted() ) { - - lastMuted = youtubeObject.isMuted(); - media.dispatchEvent( "volumechange" ); - } - - if ( lastVolume !== youtubeObject.getVolume() ) { - - lastVolume = youtubeObject.getVolume(); - media.dispatchEvent( "volumechange" ); - } - - setTimeout( volumeupdate, 250 ); - }; - - media.play = function() { - - media.paused = false; - media.dispatchEvent( "play" ); - - media.dispatchEvent( "playing" ); - timeupdate(); - youtubeObject.playVideo(); - }; - - media.pause = function() { - - if ( !media.paused ) { - - media.paused = true; - media.dispatchEvent( "pause" ); - youtubeObject.pauseVideo(); - } - }; - - Popcorn.player.defineProperty( media, "currentTime", { - set: function( val ) { - - // make sure val is a number - currentTime = seekTime = +val; - seeking = true; - media.dispatchEvent( "seeked" ); - media.dispatchEvent( "timeupdate" ); - youtubeObject.seekTo( currentTime ); - return currentTime; - }, - get: function() { - - return currentTime; - } - }); - - Popcorn.player.defineProperty( media, "muted", { - set: function( val ) { - - if ( youtubeObject.isMuted() !== val ) { - - if ( val ) { - - youtubeObject.mute(); - } else { - - youtubeObject.unMute(); - } - - lastMuted = youtubeObject.isMuted(); - media.dispatchEvent( "volumechange" ); - } - - return youtubeObject.isMuted(); - }, - get: function() { - - return youtubeObject.isMuted(); - } - }); - - Popcorn.player.defineProperty( media, "volume", { - set: function( val ) { - - if ( youtubeObject.getVolume() !== val ) { - - youtubeObject.setVolume( val ); - lastVolume = youtubeObject.getVolume(); - media.dispatchEvent( "volumechange" ); - } - - return youtubeObject.getVolume(); - }, - get: function() { - - return youtubeObject.getVolume(); - } - }); - - media.readyState = 4; - media.dispatchEvent( "load" ); - media.duration = youtubeObject.getDuration(); - media.dispatchEvent( "durationchange" ); - volumeupdate(); - - media.dispatchEvent( "loadeddata" ); - }; - - options.controls = +options.controls === 0 || +options.controls === 1 ? options.controls : 1; - options.annotations = +options.annotations === 1 || +options.annotations === 3 ? options.annotations : 1; - - flashvars = { - playerapiid: container.id, - controls: options.controls, - iv_load_policy: options.annotations - }; - - params = { - wmode: "transparent", - allowScriptAccess: "always" - }; - - attributes = { - id: container.id - }; - - src = /^.*[\/=](.{11})/.exec( media.src )[ 1 ]; - - swfobject.embedSWF( "http://www.youtube.com/e/" + src + "?enablejsapi=1&playerapiid=" + container.id + "&version=3", - container.id, media.offsetWidth, media.offsetHeight, "8", null, - flashvars, params, attributes ); - }; - - if ( !window.swfobject ) { - - Popcorn.getScript( "http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js", youtubeInit ); - } else { - - youtubeInit(); - } - } -}); -