if (null==youmaxColumns||youmaxColumns==""||youmaxColumns=="undefined") var youmaxColumns=2; if (null==youmaxWidgetWidth||youmaxWidgetWidth==""||youmaxWidgetWidth=="undefined") var youmaxWidgetWidth=640; if (typeof youmaxWidgetHeight!=='undefined') { if(null!=youmaxWidgetHeight&&youmaxWidgetHeight!=""&&youmaxWidgetHeight!="undefined") $('html > head').append(''); } var youtubeMqdefaultAspectRatio=300/180; var youtubeVideoAspectRatio=640/360; var likedPlayListId = ''; var favoritesPlayListId = ''; var watchPlayListId = ''; var uploadsPlayListId = ''; var ownPlayListId = ''; $(document).ready(function() { var style=''; $('html > head').append(style); prepareYoumax(); }); /** * Función principal que muestra el plugin de youtube. */ function prepareYoumax() { $('#youmax').empty(); loadYoumax(); showLoader(); $('.youmax-tab').click(function(){ $('.youmax-tab').css('color','#666'); $('.youmax-tab').css('background-color','rgb(230,230,230)'); $('.youmax-tab').css('text-shadow','0 1px 0 #fff'); $(this).css('color','#eee'); $(this).css('background-color','#999'); $(this).css('text-shadow','0 0'); youmaxTabId=this.id; if(youmaxTabId=="youmax-featured") getPlayList(likedPlayListId); if(youmaxTabId=="youmax-uploads") getPlayList(uploadsPlayListId); if(youmaxTabId=="youmax-playlists") getPlayList(favoritesPlayListId); }); var apiProfileURL='https://www.googleapis.com/youtube/v3/channels?part=contentDetails%2C+snippet%2C+statistics&id=UC' + youmaxUser +'&key=' + apiKey; $.ajax({url:apiProfileURL, type:"GET", async:true, cache:true, dataType:'jsonp', success:function(response){ if (response.items.length > 0) { getInfo(response.items[0]); // Seleccionamos la primera pestaña $("#youmax-featured").click(); } }, error:function(html){ showNoData('youmax-header'); }, beforeSend:setHeader }); } /** * Crea los contenedores del plugin. */ function loadYoumax() { $('#youmax').append('
'); $('#youmax').append('
Me gustaVídeos SubidosFavoritos
'); $('#youmax').append('
'); $('#youmax-video').hide(); $('#youmax').append('
'); $('#youmax-lightbox').hide(); } /** * Muestra el texto de cargando. */ function showLoader(){ $('#youmax-video-list-div').empty(); $('#youmax-video').hide(); $('#youmax-video').attr('src',''); $('#youmax-video-list-div').append('






Cargando...
'); } /** * Recupera los vídeos de la lista de reproducción. * * @param playListId id de la lista de reproducción. */ function getPlayList (playListId) { if (playListId != '') { showLoader(); var apiPlaylistVideosURL = 'https://www.googleapis.com/youtube/v3/playlistItems?part=contentDetails&maxResults=6&playlistId=' + playListId + '&key=' + apiKey; $.ajax({ url:apiPlaylistVideosURL, type:"GET", async:true, cache:true, dataType:'jsonp', success:function(response){ if (response.items.length > 0) { showPlaylistVideos(response.items); } else { showNoData('youmax-video-list-div'); } }, error:function(html){alert(html);}, beforeSend:setHeader}); } else { showNoData('youmax-video-list-div'); } } /** * Muestra la información del canal de usuario. * * @param response datos * * @returns */ function getInfo (response) { var channelName=response.snippet.title; var channelPic= response.snippet.thumbnails['default'].url; var channelSubscribers=response.statistics.subscriberCount; var channelViews=response.statistics.viewCount; var channelDesc=response.snippet.description; var youtubelogo = CTX + '/images/redsociales/youtube-large.png'; $('#youmax-links').append(''+channelName + ''); $('#youmax-stat-holder').append('
'+getReadableNumber(channelViews)+'
visitas
'+getReadableNumber(channelSubscribers)+'
suscriptores
'); $('#youmax-channel-desc').append('About '+channelName+'
'+channelDesc); // Guardamos los ids de las playlists if (response.contentDetails.relatedPlaylists.likes != undefined) { likedPlayListId = response.contentDetails.relatedPlaylists.likes; } if (response.contentDetails.relatedPlaylists.favorites != undefined) { favoritesPlayListId = response.contentDetails.relatedPlaylists.favorites; } if (response.contentDetails.relatedPlaylists.watchHistory != undefined) { watchPlayListId = response.contentDetails.relatedPlaylists.watchHistory; } if (response.contentDetails.relatedPlaylists.uploads != undefined) { uploadsPlayListId = response.contentDetails.relatedPlaylists.uploads; } } /** * Muestra los vídeos de una lista de reproducción. * * @param response lista de vídeos. */ function showPlaylistVideos(response){ $('#youmax-video-list-div').empty(); var videoArray = response; getVideos(videoArray, 0); } /** * Recupera la información de los videos de una lista de reproducción. * * @param videoArray array de identificadores de vídeos. * * @param i posición del array a tratar. */ function getVideos (videoArray, i) { apiVideosURL = 'https://www.googleapis.com/youtube/v3/videos?part=snippet%2C+contentDetails%2C+statistics&id=' + videoArray[i].contentDetails.videoId + '&key=' + apiKey; $.ajax({ url:apiVideosURL, type:"GET", async: true, cache:true, dataType:'jsonp', success:function(response){ if (response.items.length > 0) { showVideo(response.items[0], i); } else showNoData('youmax-video-list-div'); }, error:function(html){ alert(html); }, complete: function() { if (videoArray.length > ++i) { getVideos(videoArray, i); } else { $('.youmax-video-tnail-box').click(function(){ if(showVideoInLightbox){ showVideoLightbox(this.id); } else{ $('#youmax-video').attr('src','http://www.youtube.com/embed/'+this.id); $('#youmax-video').show(); $('html,body').animate({scrollTop:$("#youmax-header").offset().top},'slow'); } }); var youmaxTnailWidth = 300; var youmaxTnailHeight = youmaxTnailWidth/youtubeMqdefaultAspectRatio; $('div.youmax-video-tnail').css({'height':youmaxTnailHeight+'px'}); } }, beforeSend:setHeader }); } /** * Muestra un vídeo en el contenedor. * * @param response datos del vídeo. * * @param i posición del vídeo. */ function showVideo (response, i) { var videoId = response.id; var videoTitle = response.snippet.title; var videoViewCount= response.statistics.viewCount; var videoDuration= response.contentDetails.duration; var videoThumbnail = response.snippet.thumbnails.medium.url; var videoUploaded = response.snippet.publishedAt; if(i%youmaxColumns!=0) $('#youmax-video-list-div').append('
'+secondsToTime(videoDuration)+'
'+videoTitle+'
'+getReadableNumber(videoViewCount)+' reproducciones | Hace '+getDateDiff(videoUploaded)+'
'); else $('#youmax-video-list-div').append('
'+secondsToTime(videoDuration)+'
'+videoTitle+'
'+getReadableNumber(videoViewCount)+' reproducciones | Hace '+getDateDiff(videoUploaded)+'
'); } /** * Crea la capa para la visualización del vídeo. * * @param videoId identoficador del vídeo. */ function showVideoLightbox(videoId){ $('#youmax-lightbox').show(); $('#youmax-video-lightbox').attr('src','http://www.youtube.com/embed/'+videoId); $('#youmax-lightbox').click(function(){ $('#youmax-video-lightbox').attr('src',''); $('#youmax-lightbox').hide(); }); } /** * Muestra que no se han obtenido datos en el div correspondiente. * * @param div id del contenedor */ function showNoData (div) { $('#' + div).empty(); $('#' + div).append('




No hay datos disponibles.
'); } /** * Crea las cabeceras para las peticiones AJAX. * * @param xhr petición ajax. */ function setHeader(xhr){ if(xhr&&xhr.overrideMimeType){ xhr.overrideMimeType("application/j-son;charset=UTF-8"); } } /** * Convierte la duración indicada en la respuesta del API de youtube al formato mm:ss. * * @param duration duración del video en formato PTxMxS donde x será el número de minutos y segundos del vídeo. * * @returns {String} duración del vídeo en formato mm:ss. */ function secondsToTime (duration) { if(null==duration||duration==""||duration=="undefined") return"?"; var minutes = '0'; if (duration.indexOf('M') != -1) { minutes = duration.substring(2, duration.indexOf('M')); } var seconds = '00'; if (duration.indexOf('S') != -1) { var index = 2; if (duration.indexOf('M') != -1) { index = duration.indexOf('M') + 1; } seconds = duration.substring(index, duration.indexOf('S')); if (parseInt(seconds) < 10) { seconds = '0' + seconds; } } var time = minutes+":"+seconds; return time; } /** * Calcula el tiempo transcurrido desde una fecha hasta el día de hoy. * * @param timestamp fecha. * * @returns {String} el tiempo transcurrido en años, meses y días. */ function getDateDiff(timestamp){ if(null==timestamp||timestamp==""||timestamp=="undefined") return"?"; var splitDate=((timestamp.toString().split('T'))[0]).split('-'); var d1=new Date(); var d1Y=d1.getFullYear(); var d2Y=parseInt(splitDate[0],10); var d1M=d1.getMonth(); var d2M=parseInt(splitDate[1],10); var diffInMonths=(d1M+12*d1Y)-(d2M+12*d2Y); if(diffInMonths<=1) return"1 mes"; else if(diffInMonths<12) return diffInMonths+" meses"; var diffInYears=Math.floor(diffInMonths/12); if(diffInYears<=1) return"1 año"; else if(diffInYears<12) return diffInYears+" años"; } /** * Formatea un número. * * @param number número a formatear. * * @returns el número formateado. */ function getReadableNumber(number){ if(null==number||number==""||number=="undefined") return"?"; number=number.toString(); var readableNumber=''; var count=0; for(var k=number.length;k>=0;k--){ readableNumber+=number.charAt(k); if(count==3&&k>0){ count=1; readableNumber+=','; } else { count++; } } return readableNumber.split("").reverse().join(""); }