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 &amp;
      if (params.indexOf('&amp;') >= 0)
          params = params.split('&amp;');
      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

Offical Documentation

Official Docs: