Name
sn_cd.cd_VideoUtils
Description
No description available
Script
var cd_VideoUtils = Class.create();
cd_VideoUtils.prototype = {
initialize: function() {},
type: 'cd_VideoUtils'
};
cd_VideoUtils.PROVIDERS = {};
/**
* @param {String} url - the url of the video
* @return {Object} - additional info to include as a part of the
* the content publishing "item" object when loading the item in the
* service portal
*/
cd_VideoUtils.getAdditionalInfo = function(url) {
for(var provider in cd_VideoUtils.PROVIDERS) {
var providerPatterns = cd_VideoUtils.PROVIDERS[provider];
for(var i = 0; i < providerPatterns.length; i++) {
var groups = new RegExp(providerPatterns[i].pattern).exec(url);
if (groups) {
var info = providerPatterns[i].getAdditionalInfo(groups);
info.video_source = provider;
return info;
}
}
}
return {
video_source: 'unknown'
};
};
(function setupYoutube(){
/**
*
* @param {String} videoType - represents the YT video type, either 'embed' or 'watch'
* @param {String} trail - the trailing portion of the URL that includes the video id and other parameters
* @param {String} startQueryParam - the 'start' query parameter (typically 'start' or 't')
* representing the other url query parameters. defaults to 'start'
*/
var getYTAdditionalInfo = function(videoType, trail, startQueryParam) {
var additionalInfo = {};
if (videoType == 'embed') {
var parts = trail.split('?');
additionalInfo.video_source_id = parts[0];
additionalInfo.player_vars = cd_VideoUtils.convertParamsToObject(parts[1]);
} else if (videoType == 'watch') {
additionalInfo.player_vars = cd_VideoUtils.convertParamsToObject(trail);
additionalInfo.video_source_id = additionalInfo.player_vars.v || '';
delete additionalInfo.player_vars.v;
}
if (startQueryParam && startQueryParam != 'start') {
additionalInfo.player_vars.start = additionalInfo.player_vars[startQueryParam] || '0';
delete additionalInfo.player_vars[startQueryParam];
}
return additionalInfo;
};
cd_VideoUtils.PROVIDERS.youtube = [
{
pattern: /https:\/\/youtu\.be\/(.+)/g,
getAdditionalInfo: function(groups) {
return getYTAdditionalInfo('embed', groups[1], 't')
}
},
{
pattern: /https:\/\/www\.youtube\.com\/(embed|watch)[\/\?](.+)/g,
getAdditionalInfo: function(groups) {
return getYTAdditionalInfo(groups[1], groups[2]);
}
},
{
pattern: /https:\/\/www\.youtube-nocookie\.com\/embed\/(.+)/g,
getAdditionalInfo: function(groups) {
return getYTAdditionalInfo('embed', groups[1]);
}
}
];
})();
/**
* Convert URL parameters to an object.
* Example: v=VIDEO_ID&start=0 ==> {v: VIDEO_ID, start: '0'}
**/
cd_VideoUtils.convertParamsToObject = function(params) {
var obj = {};
if (params) {
// If the query string is URL encoded, split by &
if (params.indexOf('&') >= 0)
params = params.split('&');
else
params = params.split('&');
for(var i = 0; i < params.length; i++) {
// params[i] looks like start=0
var k2v = params[i].split('=');
// if the length is one, there was no equal sign. this is not valid; keep going
if (k2v.length == 1)
continue;
// update the object, e.g. to {start: '0'}
obj[k2v[0]] = decodeURIComponent(k2v[1]);
}
}
return obj;
};
Sys ID
ca090cbbe794b3008901268b03f6a9e9