aping-plugin-youtube
Version:
Youtube plugin for apiNG
8 lines • 9.43 kB
JavaScript
/**
@name: aping-plugin-youtube
@version: 0.7.12 (24-09-2016)
@author: Jonathan Hornung <jonathan.hornung@gmail.com>
@url: https://github.com/JohnnyTheTank/apiNG-plugin-youtube
@license: MIT
*/
"use strict";angular.module("jtt_aping_youtube",["jtt_youtube"]).directive("apingYoutube",["youtubeFactory","apingYoutubeHelper","apingUtilityHelper",function(a,b,c){return{require:"?aping",restrict:"A",replace:"false",link:function(d,e,f,g){var h=g.getAppSettings(),i=c.parseJsonFromAttributes(f.apingYoutube,b.getThisPlatformString(),h);i.forEach(function(d){var e={model:h.model};"undefined"!=typeof h.getNativeData?e.getNativeData=h.getNativeData:e.getNativeData=!1;var f={key:c.getApiCredentials(b.getThisPlatformString(),"apiKey")};if("undefined"!=typeof d.items?f.maxResults=d.items:f.maxResults=h.items,0===f.maxResults||"0"===f.maxResults)return!1;if((f.maxResults<0||isNaN(f.maxResults))&&(f.maxResults=void 0),f.maxResults>50&&(f.maxResults=50),d.videoId)f.videoId=d.videoId,a.getVideoById(f).then(function(a){a&&g.concatToResults(b.getObjectByJsonData(a,e))});else if(d.channelId){if(f.channelId=d.channelId,d.search&&(f.q=d.search),d.order)if("$RANDOM"===d.order){var i=["date","rating","relevance","title","videoCount","viewCount"];f.order=i[Math.floor(Math.random()*i.length)]}else f.order=d.order;a.getVideosFromChannelById(f).then(function(a){a&&g.concatToResults(b.getObjectByJsonData(a,e))})}else if(d.search||d.lat&&d.lng){if(d.order)if("$RANDOM"===d.order){var i=["date","rating","relevance","title","videoCount","viewCount"];f.order=i[Math.floor(Math.random()*i.length)]}else f.order=d.order;d.search&&(f.q=d.search),d.lat&&d.lng&&(f.location=d.lat+","+d.lng),d.distance&&(f.locationRadius=d.distance),a.getVideosFromSearchByParams(f).then(function(a){a&&g.concatToResults(b.getObjectByJsonData(a,e))})}else d.playlistId&&(f.playlistId=d.playlistId,a.getVideosFromPlaylistById(f).then(function(a){a&&g.concatToResults(b.getObjectByJsonData(a,e))}))})}}}]),angular.module("jtt_aping_youtube").service("apingYoutubeHelper",["apingModels","apingTimeHelper","apingUtilityHelper",function(a,b,c){this.getThisPlatformString=function(){return"youtube"},this.getThisPlatformLink=function(){return"https://www.youtube.com/"},this.convertYoutubeDurationToSeconds=function(a){var b=a.match(/\d+/g);return a.indexOf("M")>=0&&-1==a.indexOf("H")&&-1==a.indexOf("S")&&(b=[0,b[0],0]),a.indexOf("H")>=0&&-1==a.indexOf("M")&&(b=[b[0],0,b[1]]),a.indexOf("H")>=0&&-1==a.indexOf("M")&&-1==a.indexOf("S")&&(b=[b[0],0,0]),a=0,3==b.length&&(a+=3600*parseInt(b[0]),a+=60*parseInt(b[1]),a+=parseInt(b[2])),2==b.length&&(a+=60*parseInt(b[0]),a+=parseInt(b[1])),1==b.length&&(a+=parseInt(b[0])),a},this.getYoutubeIdFromUrl=function(a){var b=/^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*/;return a.match(b)[1]||!1},this.getYoutubeImageFromId=function(a,b){switch(b){case"default":case"maxresdefault":case"mqdefault":case"sddefault":return"https://img.youtube.com/vi/"+a+"/"+b+".jpg";case"hqdefault":default:return"https://img.youtube.com/vi/"+a+"/hqdefault.jpg"}},this.getObjectByJsonData=function(a,b){var c=[];if(a&&a.data){var d=this;a.data.items&&angular.forEach(a.data.items,function(a,e){var f;f=b.getNativeData===!0||"true"===b.getNativeData?a:d.getItemByJsonData(a,b.model),f&&c.push(f)})}return c},this.getItemByJsonData=function(a,b){var c={};if(a&&b)switch(b){case"social":c=this.getSocialItemByJsonData(a);break;case"video":c=this.getVideoItemByJsonData(a);break;default:return!1}return c},this.getSocialItemByJsonData=function(c){var d=a.getNew("social","youtube");return angular.extend(d,{blog_name:c.snippet.channelTitle||void 0,blog_id:c.snippet.channelId||void 0,blog_link:this.getThisPlatformLink()+"channel/"+c.snippet.channelId,intern_type:c.id.kind,intern_id:c.id.videoId||(c.snippet.resourceId&&c.snippet.resourceId.videoId?c.snippet.resourceId.videoId:c.id),timestamp:b.getTimestampFromDateString(c.snippet.publishedAt,1e3,7200)}),d.date_time=new Date(d.timestamp),""!==c.snippet.title&&""!==c.snippet.description?(d.caption=c.snippet.title,d.text=c.snippet.description):""!==c.snippet.title?d.caption=c.snippet.title:d.caption=c.snippet.description,"youtube#video"==c.id.kind?d.type="video":"youtube#playlistItem"==c.kind&&c.snippet.resourceId&&"youtube#video"==c.snippet.resourceId.kind&&(d.type="video",d.position=c.snippet.position),d.source='<iframe width="1280" height="720" src="https://www.youtube.com/embed/'+d.intern_id+'?rel=0&showinfo=0" frameborder="0" allowfullscreen></iframe>',d.img_url=this.getYoutubeImageFromId(d.intern_id),d.thumb_url=this.getYoutubeImageFromId(d.intern_id,"default"),d.native_url=this.getYoutubeImageFromId(d.intern_id),d.post_url=this.getThisPlatformLink()+"watch?v="+d.intern_id,c.statistics&&(c.statistics.commentCount&&c.statistics.commentCount>0&&(d.comments=c.statistics.commentCount),c.statistics.likeCount&&c.statistics.likeCount>0&&(d.likes=c.statistics.likeCount)),d},this.getVideoItemByJsonData=function(c){var d=a.getNew("video","youtube");return angular.extend(d,{blog_name:c.snippet.channelTitle||void 0,blog_id:c.snippet.channelId||void 0,blog_link:this.getThisPlatformLink()+"channel/"+c.snippet.channelId,intern_type:c.id.kind,intern_id:c.id.videoId||(c.snippet.resourceId&&c.snippet.resourceId.videoId?c.snippet.resourceId.videoId:c.id),timestamp:b.getTimestampFromDateString(c.snippet.publishedAt,1e3,7200)}),d.date_time=new Date(d.timestamp),""!==c.snippet.title&&""!==c.snippet.description?(d.caption=c.snippet.title,d.text=c.snippet.description):""!==c.snippet.title?d.caption=c.snippet.title:d.caption=c.snippet.description,d.img_url=this.getYoutubeImageFromId(d.intern_id),d.thumb_url=this.getYoutubeImageFromId(d.intern_id,"default"),d.native_url=this.getYoutubeImageFromId(d.intern_id),d.post_url=this.getThisPlatformLink()+"watch?v="+d.intern_id,d.position=c.snippet.position,d.markup='<iframe width="1280" height="720" src="https://www.youtube.com/embed/'+d.intern_id+'?rel=0&showinfo=0" frameborder="0" allowfullscreen></iframe>',c.statistics&&(c.statistics.commentCount&&c.statistics.commentCount>0&&(d.comments=c.statistics.commentCount),c.statistics.likeCount&&c.statistics.likeCount>0&&(d.likes=c.statistics.likeCount)),c.contentDetails&&c.contentDetails.duration&&(d.duration=this.convertYoutubeDurationToSeconds(c.contentDetails.duration)),d}}]),angular.module("jtt_youtube",[]).factory("youtubeFactory",["$http","youtubeSearchDataService",function(a,b){var c={};return c.getVideosFromChannelById=function(c){var d=b.getNew("videosFromChannelById",c);return a({method:"GET",url:d.url,params:d.object})},c.getVideosFromSearchByParams=function(c){var d=b.getNew("videosFromSearchByParams",c);return a({method:"GET",url:d.url,params:d.object})},c.getVideosFromPlaylistById=function(c){var d=b.getNew("videosFromPlaylistById",c);return a({method:"GET",url:d.url,params:d.object})},c.getChannelById=function(c){var d=b.getNew("channelById",c);return a({method:"GET",url:d.url,params:d.object})},c.getVideoById=function(c){var d=b.getNew("videoById",c);return a({method:"GET",url:d.url,params:d.object})},c}]).service("youtubeSearchDataService",function(){this.getApiBaseUrl=function(a){return"https://content.googleapis.com/youtube/v3/"},this.fillDataInObjectByList=function(a,b,c){return angular.forEach(c,function(c,d){"undefined"!=typeof c&&c.constructor===Array?angular.isDefined(b[c[0]])?a.object[c[0]]=b[c[0]]:a.object[c[0]]=c[1]:angular.isDefined(b[c])&&(a.object[c]=b[c])}),a},this.getNew=function(a,b){var c={object:{key:b.key},url:""};switch(a){case"videosFromChannelById":c=this.fillDataInObjectByList(c,b,[["part","id,snippet"],["type","video"],["order","date"],["videoEmbeddable",!0],"channelId","q","maxResults","publishedAfter","publishedBefore","regionCode","relevanceLanguage","safeSearch","videoLicense","videoSyndicated","fields"]),c.url=this.getApiBaseUrl()+"search?",(b.nextPageToken||b.prevPageToken)&&(c.url+="pageToken="+(b.nextPageToken||b.prevPageToken)+"&");break;case"videosFromSearchByParams":c=this.fillDataInObjectByList(c,b,[["part","id,snippet"],["type","video"],["order","date"],["videoEmbeddable",!0],"location","q","maxResults","publishedAfter","publishedBefore","regionCode","relevanceLanguage","safeSearch","videoLicense","videoSyndicated","fields"]),angular.isDefined(b.locationRadius)?c.object.locationRadius=b.locationRadius:angular.isDefined(b.location)&&(c.object.locationRadius="5000m"),c.url=this.getApiBaseUrl()+"search?",(b.nextPageToken||b.prevPageToken)&&(c.url+="pageToken="+(b.nextPageToken||b.prevPageToken)+"&");break;case"videosFromPlaylistById":c=this.fillDataInObjectByList(c,b,[["part","id,snippet"],["type","video"],"playlistId","maxResults","fields"]),c.url=this.getApiBaseUrl()+"playlistItems?",(b.nextPageToken||b.prevPageToken)&&(c.url+="pageToken="+(b.nextPageToken||b.prevPageToken)+"&");break;case"videoById":c=this.fillDataInObjectByList(c,b,[["part","id,snippet,contentDetails,statistics"]]),c.object.id=b.videoId,c.url=this.getApiBaseUrl()+"videos?",(b.nextPageToken||b.prevPageToken)&&(c.url+="pageToken="+(b.nextPageToken||b.prevPageToken)+"&");break;case"channelById":c=this.fillDataInObjectByList(c,b,[["part","id,snippet"],["type","channel"]]),c.url=this.getApiBaseUrl()+"search?",(b.nextPageToken||b.prevPageToken)&&(c.url+="pageToken="+(b.nextPageToken||b.prevPageToken)+"&")}return c}});