//= require 'vendor/node_modules/@absolunet/kafe/dist/url'
(function(global, undefined) { var kafe = global.kafe, $ = kafe.dependencies.jQuery; kafe.bonify({name:'ext.youtube', version:'1.1.0', obj:(function(){
var
// default params
_params = {
maxResults: 10,
startIndex: 1,
orderBy: 'relevance',
q: '',
author: '',
category: ''
},
// return query string
_queryString = function(data) {
var q = '';
for (var i in data) {
q += i+'='+data[i].toString()+'&';
}
return q.toString().substr(0,q.length-5);
},
// parses search results into clean and simple result objects.
_simpleSearchResults = function(results) {
var simpleResults = [];
if (results !== undefined) {
$.each(results, function(i, val) {
var entry = {};
entry.id = (val.id.$t).toString().split('/').pop();
entry.title = val.title.$t;
entry.author = val.author[0].name.$t;
entry.publishedDate = new Date(val.published.$t);
entry.thumbnail = {};
entry.thumbnail.large = val.media$group.media$thumbnail[0].url;
entry.thumbnail.small = val.media$group.media$thumbnail[1].url;
entry.categories = [];
$.each(val.category, function(ci, cval) {
if (ci > 0)
entry.categories.push(cval.term);
});
simpleResults.push(entry);
});
}
return simpleResults;
}
;
/**
* ### Version 1.1.0
* Extra methods for Youtube.
*
* @module kafe.ext
* @class kafe.ext.youtube
*/
var youtube = {};
/**
* Set default Youtube params.
*
* @method setParams
* @param {Object} options Options
* @param {Number} [options.maxResults=10] Number of results
* @param {Number} [options.startIndex=1] Start index (page)
* @param {String} [options.orderBy='relevance'] Order by choice
* @param {String} [options.q] Query string of search
* @param {String} [options.author] Author of videos
* @param {Array(String)} [options.category] Categories
*/
youtube.setParams = function() {
$.extend(_params, arguments[0]);
};
/**
* Get the default params with optional extra params.
*
* @method getParams
* @param {Object} [options] Options
* @return {Object} The default Youtube params.
*/
youtube.getParams = function() {
return $.extend({}, _params, arguments[0]);
};
/**
* Builds a youtube search url then returns the results as the first argument of the specified callback.
*
* @method search
* @param {Object} [options] Options
* @param {Function} callback Callback
*/
youtube.search = function(options, callback) {
options = youtube.getParams(options);
var
path = 'https://gdata.youtube.com/feeds/api/videos?',
query = 'alt=json-in-script&callback=?' +
'&max-results=' + options.maxResults +
'&start-index=' + options.startIndex +
'&orderby=' + options.orderBy
;
if (options.query) {
query += '&q=' + encodeURIComponent(options.query);
}
if (options.author) {
query += '&author=' + encodeURIComponent(options.author);
}
if (options.category) {
query += '&category=' + encodeURIComponent(options.category.join('|'));
}
$.ajax({
url: path + query,
dataType: 'json',
success: function(data, textStatus, jqXHR) {
var simpleResults = _simpleSearchResults(data.feed.entry);
callback(simpleResults);
},
error: function(jqXHR, textStatus, errorThrown) {
throw kafe.error(new Error(errorThrown));
}
});
};
/**
* Builds a youtube search url then returns the results as the first argument of the specified callback.
*
* @method getPlaylistVideos
* @param {String} playlistId Playlist id
* @param {Function} callback Callback
*/
youtube.getPlaylistVideos = function (playlistId, callback) {
if (!playlistId) {
if (callback) callback(null);
return;
}
if (playlistId.toString().substr(0, 2) == 'PL') {
playlistId = playlistId.toString().substr(2, playlistId.length);
}
var
playListURL = '//gdata.youtube.com/feeds/api/playlists/' + playlistId + '?v=2&alt=json&callback=?',
videoURL = '//www.youtube.com/watch?v=',
imageURL = '//img.youtube.com/vi/'
;
$.ajax({
url: playListURL,
dataType: 'json',
success: function (data) {
var videos = [];
$.each(data.feed.entry, function (i, item) {
$.each(item.link, function (y, subitem) {
if (subitem.rel == 'alternate') {
var
qs = kafe.url.parseSearchParams('?' + subitem.href.toString().split('?')[1]),
videoId = qs.v,
video = {
title: item.title.$t,
id: videoId,
url: videoURL + videoId,
img_thumb: imageURL + videoId + '/default.jpg',
img_large: imageURL + videoId + '/hqdefault.jpg'
}
;
videos.push(video);
}
});
});
callback(videos);
},
error: function () {
callback(null);
}
});
};
return youtube;
})()}); })(typeof window !== 'undefined' ? window : this);