penguin/AstroJS

Javascript framework for my blog

botanjs/src/Astro/Blog/Components/Video.js

raw ยท 2968 bytes

(function(){
	var ns = __namespace( "Astro.Blog.Components.Video" );

	/** @type {System.utils.IKey} */
	var IKey                             = __import( "System.utils.IKey" );
	/** @type {Dandelion} */
	var Dand                             = __import( "Dandelion" );
	/** @type {Dandelion.IDOMElement} */
	var IDOMElement                      = __import( "Dandelion.IDOMElement" );
	/** @type {Astro.Bootstrap} */
	var Bootstrap                        = __import( "Astro.Bootstrap" );
	/** @type {Astro.Blog.Config} */
	var Config                           = __import( "Astro.Blog.Config" );

	var getData = __import( "System.Net.getData" );

	var v_current = { player: false, mask: false, stage: false, listener: false };

	var init = function()
	{
		var conf = Config.get( "Video" );
		if( conf )
		{
			for( var i in conf )
			{
				var type = conf[i];
				var vid = Dand.id( type );
				if( !vid ) continue;

				type = type.split( "_" )[0];

				// showVimeoPlayer / showYoutubePlayer
				var cfunc = function( e ) { createPlayer( this.vid, "//www.youtube.com/embed/" ); };

				if( type[0] == "v" )
				{
					getVimeoThumbnail( vid );
					cfunc = function( e ) { createPlayer( this.vid, "//player.vimeo.com/video/" ); };
				}

				vid.onclick = cfunc.bind({ vid: vid });
			}
		}
	};

	var createPlayer = function ( vtag, url )
	{
		// Remove previous playing video if exists
		if( v_current.stage )
		{
			v_current.stage.removeChild( v_current.player );
			v_current.stage.appendChild( v_current.mask );
			v_current.stage.onclick = v_current.listener;
		}
		
		// Remove mask
		( v_current.stage = vtag ).removeChild( v_current.mask = vtag.firstChild );
		
		v_current.player = Dand.wrapna(
			"iframe"
			, IKey.quickDef(	
				   "src"                   , url + vtag.getAttribute( "value" ) + "?autoplay=1"
				 , "mozallowfullscreen"    , ""
				 , "allowFullScreen"       , ""
				 , "webkitAllowFullScreen" , ""
				 , "frameborder"           , 0
				 , "width"                 , vtag.clientWidth
				 , "height"                , vtag.clientHeight
			)
		);
		vtag.appendChild(v_current.player);
		
		// Save event listener
		v_current.listener = vtag.onclick;
		
		// disable click event
		vtag.onclick = null;
		
		// <iframe src="http://player.vimeo.com/video/VIDEO_ID" width="WIDTH" height="HEIGHT" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
		// <iframe id="player" type="text/html" width="WIDTH" height="HEIGHT" src="http://www.youtube.com/embed/id"  frameborder="0"></iframe>
	};

	var getVimeoThumbnail = function ( vtag )
	{
		getData(
			"//vimeo.com/api/oembed.json?url=https%3A//vimeo.com/" + vtag.getAttribute( "value" )
			, parseObj.bind( vtag )
			, noThumb.bind( vtag )
		);
	};

	var parseObj = function (str)
	{
		this.style.background = "black url(" + JSON.parse(str)["thumbnail_url"] + ") center center no-repeat";
	};

	var noThumb = function ()
	{

	};

	Bootstrap.regInit( init );
})();