Вход Регистрация
Файл: static/player/video-js.youtube.js
Строк: 797
<?php
/* global videojs, YT */
/* jshint browser: true */

(function() {
  
/**
   * @fileoverview YouTube Media Controller - Wrapper for YouTube Media API
   */

  /**
   * YouTube Media Controller - Wrapper for YouTube Media API
   * @param {videojs.Player|Object} player
   * @param {Object=} options
   * @param {Function=} ready
   * @constructor
   */

  
function addEventListener(elementeventcb) {
    if(!
element.addEventListener) {
      
element.attachEvent(eventcb);
    } else {
      
element.addEventListener(eventcbtrue);
    }
  }

  
videojs.Youtube videojs.MediaTechController.extend({
    
/** @constructor */
    
init: function(playeroptionsready) {
      
// Save this for internal usage
      
this.player_ player;
      
      
// No event is triggering this for YouTube
      
this['featuresProgressEvents'] = false;
      
this['featuresTimeupdateEvents'] = false;
      
// Enable rate changes
      
this['featuresPlaybackRate'] = true;

      
videojs.MediaTechController.call(thisplayeroptionsready);

      
this.isIos = /(iPad|iPhone|iPod)/g.testnavigator.userAgent );
      
this.isAndroid = /(Android)/g.testnavigator.userAgent );
      
//used to prevent play events on IOS7 and Android > 4.2 until the user has clicked the player
      
this.playVideoIsAllowed = !(this.isIos || this.isAndroid);
      
      
// autoplay is disabled for mobile
      
if (this.isIos || this.isAndroid) {
        
this.player_.options()['autoplay'] = false;
      }

      
// Copy the JavaScript options if they exists
      
if(typeof options['source'] !== 'undefined') {
        for(var 
key in options['source']) {
          if(
options['source'].hasOwnProperty(key)) {
            
player.options()[key] = options['source'][key];
          }
        }
      }

      
this.userQuality videojs.Youtube.convertQualityName(player.options()['quality']);

      
this.playerEl_ document.getElementById(player.id());
      
this.playerEl_.className += ' vjs-youtube';

      
// Create the Quality button
      
this.qualityButton document.createElement('div');
      
this.qualityButton.setAttribute('class''vjs-quality-button vjs-menu-button vjs-control');
      
this.qualityButton.setAttribute('tabindex'0);

      var 
qualityContent document.createElement('div');
      
qualityContent.setAttribute('class''vjs-control-content');
      
this.qualityButton.appendChild(qualityContent);

      
this.qualityTitle document.createElement('span');
      
this.qualityTitle.setAttribute('class''vjs-control-text');
      
qualityContent.appendChild(this.qualityTitle);

      if(
player.options()['quality'] !== 'undefined') {
        
setInnerText(this.qualityTitleplayer.options()['quality'] || 'auto');
      }

      var 
qualityMenu document.createElement('div');
      
qualityMenu.setAttribute('class''vjs-menu');
      
qualityContent.appendChild(qualityMenu);

      
this.qualityMenuContent document.createElement('ul');
      
this.qualityMenuContent.setAttribute('class''vjs-menu-content');
      
qualityMenu.appendChild(this.qualityMenuContent);

      
this.id_ this.player_.id() + '_youtube_api';

      
this.el_ videojs.Component.prototype.createEl('iframe', {
        
idthis.id_,
        
className'vjs-tech',
        
scrolling'no',
        
marginWidth0,
        
marginHeight0,
        
frameBorder0
      
});

      
this.el_.setAttribute('allowFullScreen''');

      
this.playerEl_.insertBefore(this.el_this.playerEl_.firstChild);

      if(/
MSIE (d+.d+);/.test(navigator.userAgent)) {
        var 
ieVersion Number(RegExp.$1);
        
this.addIframeBlocker(ieVersion);
      } else if(!/(
iPad|iPhone|iPod|Android)/g.test(navigator.userAgent)) {
        
// the pointer-events: none block the mobile player
        
this.el_.className += ' onDesktop';
        
this.addIframeBlocker();
      }

      
this.parseSrc(player.options()['src']);

      
this.playOnReady this.player_.options()['autoplay'] && this.playVideoIsAllowed;
      
this.forceSSL = !!(
        
typeof this.player_.options()['forceSSL'] === 'undefined' ||
          
this.player_.options()['forceSSL'] === true
        
);
      
this.forceHTML5 = !!(
        
typeof this.player_.options()['forceHTML5'] === 'undefined' ||
          
this.player_.options()['forceHTML5'] === true
        
);

      
this.updateIframeSrc();

      var 
self this;

      
player.ready(function() {
        if (
self.player_.options()['controls']) {
          var 
controlBar self.playerEl_.querySelectorAll('.vjs-control-bar')[0];
          if (
controlBar) {
            
controlBar.appendChild(self.qualityButton);
          }
        }

        if(
self.playOnReady && !self.player_.options()['ytcontrols']) {
          if(
typeof self.player_.loadingSpinner !== 'undefined') {
            
self.player_.loadingSpinner.show();
          }
          if(
typeof self.player_.bigPlayButton !== 'undefined') {
            
self.player_.bigPlayButton.hide();
          }
        }

        
player.trigger('loadstart');
      });

      
this.on('dispose', function() {
        if(
this.ytplayer) {
          
this.ytplayer.destroy();
        }

        if(!
this.player_.options()['ytcontrols']) {
          
this.player_.off('waiting'this.bindedWaiting);
        }

        
// Remove the poster
        
this.playerEl_.querySelectorAll('.vjs-poster')[0].style.backgroundImage 'none';

        
// If still connected to the DOM, remove it.
        
if(this.el_.parentNode) {
          
this.el_.parentNode.removeChild(this.el_);
        }

        
// Get rid of the created DOM elements
        
if (this.qualityButton.parentNode) {
          
this.qualityButton.parentNode.removeChild(this.qualityButton);
        }

        if(
typeof this.player_.loadingSpinner !== 'undefined') {
          
this.player_.loadingSpinner.hide();
        }
        if(
typeof this.player_.bigPlayButton !== 'undefined') {
          
this.player_.bigPlayButton.hide();
        }

        if(
this.iframeblocker) {
          
this.playerEl_.removeChild(this.iframeblocker);
        }
      });
    }
  });

  
videojs.Youtube.prototype.updateIframeSrc = function() {
    var 
params = {
      
enablejsapi1,
      
/*jshint -W106 */
      
iv_load_policy3,
      
/*jshint +W106 */
      
playerapiidthis.id(),
      
disablekb1,
      
wmode'transparent',
      
controls: (this.player_.options()['ytcontrols']) ? 0,
      
html5: (this.player_.options()['forceHTML5']) ? null,
      
playsinline: (this.player_.options()['playsInline']) ? 0,
      
showinfo0,
      
rel0,
      
autoplay: (this.playOnReady) ? 0,
      
loop: (this.player_.options()['loop']) ? 0,
      list: 
this.playlistId,
      
vqthis.userQuality,
      
originwindow.location.protocol '//' window.location.host
    
};

    var 
isLocalProtocol window.location.protocol === 'file:' || window.location.protocol === 'app:';

    
// When running with no Web server, we can't specify the origin or it will break the YouTube API messages
    
if(isLocalProtocol) {
      
delete params.origin;
    }

    
// Delete unset properties
    
for(var prop in params) {
      if(
params.hasOwnProperty(prop) &&
        ( 
typeof paramsprop ] === 'undefined' || paramsprop ] === null )
        ) {
        
delete paramsprop ];
      }
    }
    var 
self this;

    if(!
this.videoId) {
      
this.el_.src 'about:blank';
      
setTimeout(function() {
        
self.triggerReady();
      }, 
500);
    } else {
      
this.el_.src = (
        (
this.forceSSL || isLocalProtocol) ?
          
'https:'
          
window.location.protocol
        
) + '//www.youtube.com/embed/' this.videoId '?' videojs.Youtube.makeQueryString(params);

      if(
this.player_.options()['ytcontrols']) {
        
// Disable the video.js controls if we use the YouTube controls
        
this.player_.controls(false);
      } else if(
typeof this.player_.poster() === 'undefined' || this.player_.poster().length === 0) {
        
// Wait here because the tech is still null in constructor
        
setTimeout(function() {
          
self.player_.poster('https://img.youtube.com/vi/' self.videoId '/0.jpg');
        }, 
100);
      }

      
this.bindedWaiting = function() {
        
self.onWaiting();
      };

      
this.player_.on('waiting'this.bindedWaiting);

      if(
videojs.Youtube.apiReady) {
        
this.loadYoutube();
      } else {
        
// Add to the queue because the YouTube API is not ready
        
videojs.Youtube.loadingQueue.push(this);

        
// Load the YouTube API if it is the first YouTube video
        
if(!videojs.Youtube.apiLoading) {
          var 
tag document.createElement('script');
          
tag.onerror = function(e) {
            
self.onError(e);
          };
          
tag.src = ( !this.forceSSL && !isLocalProtocol ) ?
            
'//www.youtube.com/iframe_api'
            
'https://www.youtube.com/iframe_api';
          var 
firstScriptTag document.getElementsByTagName('script')[0];
          
firstScriptTag.parentNode.insertBefore(tagfirstScriptTag);
          
videojs.Youtube.apiLoading true;
        }
      }
    }
  };

  
videojs.Youtube.prototype.onWaiting = function(/*e*/) {
    
// Make sure to hide the play button while the spinner is there
    
if(typeof this.player_.bigPlayButton !== 'undefined') {
      
this.player_.bigPlayButton.hide();
    }
  };

  
videojs.Youtube.prototype.addIframeBlocker = function(ieVersion) {
    
this.iframeblocker videojs.Component.prototype.createEl('div');

    
this.iframeblocker.className 'iframeblocker';

    
this.iframeblocker.style.position 'absolute';
    
this.iframeblocker.style.left 0;
    
this.iframeblocker.style.right 0;
    
this.iframeblocker.style.top 0;
    
this.iframeblocker.style.bottom 0;

    
// Odd quirk for IE8 (doesn't support rgba)
    
if(ieVersion && ieVersion 9) {
      
this.iframeblocker.style.opacity 0.01;
    } else {
      
this.iframeblocker.style.background 'rgba(255, 255, 255, 0.01)';
    }

    var 
self this;
    
addEventListener(this.iframeblocker'mousemove', function(e) {
      if(!
self.player_.userActive()) {
        
self.player_.userActive(true);
      }

      
e.stopPropagation();
      
e.preventDefault();
    });

    
addEventListener(this.iframeblocker'click', function(/*e*/) {
      if(
self.paused()) {
        
self.play();
      } else {
        
self.pause();
      }
    });

    
this.playerEl_.insertBefore(this.iframeblockerthis.el_.nextSibling);
  };

  
videojs.Youtube.prototype.parseSrc = function(src) {
    
this.srcVal src;

    if(
src) {
      
// Regex to parse the video ID
      
var regId = /^.*(youtu.be/|v/|u/w/|embed/|watch?v=|&v=)([^#&?]*).*/;
      
var match src.match(regId);

      if(
match && match[2].length === 11) {
        
this.videoId match[2];
      } else {
        
this.videoId null;
      }

      
// Regex to parse the playlist ID
      
var regPlaylist = /[?&]list=([^#&?]+)/;
      
match src.match(regPlaylist);

      if(
match !== null && match.length 1) {
        
this.playlistId match[1];
      } else {
        
// Make sure their is no playlist
        
if(this.playlistId) {
          
delete this.playlistId;
        }
      }

      
// Parse video quality option
      
var regVideoQuality = /[?&]vq=([^#&?]+)/;
      
match src.match(regVideoQuality);

      if(
match !== null && match.length 1) {
        
this.userQuality match[1];
        
setInnerText(this.qualityTitlevideojs.Youtube.parseQualityName(this.userQuality));
      }
    }
  };

  
videojs.Youtube.prototype.src = function(src) {
    if(
typeof src !== 'undefined') {
      
this.parseSrc(src);

      if(
this.el_.src === 'about:blank') {
        
this.updateIframeSrc();
        return;
      }

      
delete this.defaultQuality;

      if(
this.videoId !== null) {
        if(
this.player_.options()['autoplay'] && this.playVideoIsAllowed) {
          
this.ytplayer.loadVideoById({
            
videoIdthis.videoId,
            
suggestedQualitythis.userQuality
          
});
        } else {
          
this.ytplayer.cueVideoById({
            
videoIdthis.videoId,
            
suggestedQualitythis.userQuality
          
});
        }

        
// Update the poster
        
this.playerEl_.querySelectorAll('.vjs-poster')[0].style.backgroundImage =
          
'url(https://img.youtube.com/vi/' this.videoId '/0.jpg)';
        
this.player_.poster('https://img.youtube.com/vi/' this.videoId '/0.jpg');
      }
      
/* else Invalid URL */
    
}

    return 
this.srcVal;
  };

  
videojs.Youtube.prototype.load = function() {
  };

  
videojs.Youtube.prototype.play = function() {
    if(
this.videoId !== null) {

      
// Make sure to not display the spinner for mobile
      
if(!this.player_.options()['ytcontrols']) {
        
// Display the spinner until the video is playing by YouTube
        
this.player_.trigger('waiting');
      }

      if(
this.isReady_) {
        
// Sync the player volume with YouTube
        
this.ytplayer.setVolume(this.player_.volume() * 100);

        if(
this.volumeVal 0) {
          
this.ytplayer.unMute();
        } else {
          
this.ytplayer.mute();
        }

        if(
this.playVideoIsAllowed) {
          
this.ytplayer.playVideo();
        }
      } else {
        
this.playOnReady true;
      }
    }
  };

  
videojs.Youtube.prototype.pause = function() {
    if(
this.ytplayer) {
      
this.ytplayer.pauseVideo();
    }
  };
  
videojs.Youtube.prototype.paused = function() {
    return (
this.ytplayer) ?
      (
this.lastState !== YT.PlayerState.PLAYING && this.lastState !== YT.PlayerState.BUFFERING)
      : 
true;
  };
  
videojs.Youtube.prototype.currentTime = function() {
    return (
this.ytplayer && this.ytplayer.getCurrentTime) ? this.ytplayer.getCurrentTime() : 0;
  };
  
videojs.Youtube.prototype.setCurrentTime = function(seconds) {
    
this.ytplayer.seekTo(secondstrue);
    
this.player_.trigger('timeupdate');
    
this.player_.trigger('seeking');
    
this.isSeeking true;
  };
  
videojs.Youtube.prototype.playbackRate = function() {
    return (
this.ytplayer && this.ytplayer.getPlaybackRate) ? this.ytplayer.getPlaybackRate() : 1.0;
  };
  
videojs.Youtube.prototype.setPlaybackRate = function(suggestedRate) {
    if (
this.ytplayer && this.ytplayer.setPlaybackRate) {
      
this.ytplayer.setPlaybackRate(suggestedRate);
      
this.player_.trigger('ratechange');
    }
  };
  
videojs.Youtube.prototype.duration = function() {
    return (
this.ytplayer && this.ytplayer.getDuration) ? this.ytplayer.getDuration() : 0;
  };
  
videojs.Youtube.prototype.currentSrc = function() {
    return 
this.srcVal;
  };
  
videojs.Youtube.prototype.ended = function() {
    return (
this.ytplayer) ? (this.lastState === YT.PlayerState.ENDED) : false;
  };

  
videojs.Youtube.prototype.volume = function() {
    if(
this.ytplayer && isNaN(this.volumeVal)) {
      
this.volumeVal this.ytplayer.getVolume() / 100.0;
      
this.player_.volume(this.volumeVal);
    }

    return 
this.volumeVal;
  };

  
videojs.Youtube.prototype.setVolume = function(percentAsDecimal) {
    if(
typeof(percentAsDecimal) !== 'undefined' && percentAsDecimal !== this.volumeVal) {
      
this.ytplayer.setVolume(percentAsDecimal 100.0);
      
this.volumeVal percentAsDecimal;
      
this.player_.trigger('volumechange');
    }
  };

  
videojs.Youtube.prototype.muted = function() {
    return 
this.mutedVal;
  };
  
videojs.Youtube.prototype.setMuted = function(muted) {
    if(
muted) {
      
this.storedVolume this.volumeVal;
      
this.ytplayer.mute();
      
this.player_.volume(0);
    } else {
      
this.ytplayer.unMute();
      
this.player_.volume(this.storedVolume);
    }

    
this.mutedVal muted;

    
this.player_.trigger('volumechange');
  };

  
videojs.Youtube.prototype.buffered = function() {
    if(
this.ytplayer && this.ytplayer.getVideoBytesLoaded) {
      var 
loadedBytes this.ytplayer.getVideoBytesLoaded();
      var 
totalBytes this.ytplayer.getVideoBytesTotal();
      if(!
loadedBytes || !totalBytes) {
        return 
0;
      }

      var 
duration this.ytplayer.getDuration();
      var 
secondsBuffered = (loadedBytes totalBytes) * duration;
      var 
secondsOffset = (this.ytplayer.getVideoStartBytes() / totalBytes) * duration;

      return 
videojs.createTimeRange(secondsOffsetsecondsOffset secondsBuffered);
    } else {
      return 
videojs.createTimeRange(00);
    }
  };

  
videojs.Youtube.prototype.supportsFullScreen = function() {
    if (
typeof this.el_.webkitEnterFullScreen === 'function') {

        
// Seems to be broken in Chromium/Chrome && Safari in Leopard
        
if (/Android/.test(videojs.USER_AGENT) || !/Chrome|Mac OS X 10.5/.test(videojs.USER_AGENT)) {
            return 
true;
        }
    }
    return 
false;
  };

  
// YouTube is supported on all platforms
  
videojs.Youtube.isSupported = function() {
    return 
true;
  };

  
// You can use video/youtube as a media in your HTML5 video to specify the source
  
videojs.Youtube.canPlaySource = function(srcObj) {
    return (
srcObj.type === 'video/youtube');
  };

  
// Always can control the volume
  
videojs.Youtube.canControlVolume = function() {
    return 
true;
  };

  
////////////////////////////// YouTube specific functions //////////////////////////////

  // All videos created before YouTube API is loaded
  
videojs.Youtube.loadingQueue = [];

  
// Create the YouTube player
  
videojs.Youtube.prototype.loadYoutube = function() {
    
this.ytplayer = new YT.Player(this.id_, {
      
events: {
        
onReady: function(e) {
          
e.target.vjsTech.onReady();
        },
        
onStateChange: function(e) {
          
e.target.vjsTech.onStateChange(e.data);
        },
        
onPlaybackQualityChange: function(e) {
          
e.target.vjsTech.onPlaybackQualityChange(e.data);
        },
        
onError: function(e) {
          
e.target.vjsTech.onError(e.data);
        }
      }
    });

    
this.ytplayer.vjsTech this;
  };

  
// Transform a JavaScript object into URL params
  
videojs.Youtube.makeQueryString = function(args) {
    var array = [
'modestbranding=1'];
    for(var 
key in args) {
      if(
args.hasOwnProperty(key)) {
        array.
push(key '=' args[key]);
      }
    }

    return array.
join('&');
  };

  
// Called when YouTube API is ready to be used
  
window.onYouTubeIframeAPIReady = function() {
    var 
yt;
    while((
yt videojs.Youtube.loadingQueue.shift())) {
      
yt.loadYoutube();
    }
    
videojs.Youtube.loadingQueue = [];
    
videojs.Youtube.apiReady true;
  };

  
videojs.Youtube.prototype.onReady = function() {
    
this.isReady_ true;
    
this.triggerReady();

    
this.player_.trigger('loadedmetadata');

    
// The duration is loaded so we might as well fire off the timeupdate and duration events
    // this allows for the duration of the video (timeremaining) to be displayed if styled
    // to show the control bar initially. This gives the user the ability to see how long the video
    // is before clicking play
    
this.player_.trigger('durationchange');
    
this.player_.trigger('timeupdate');

    
// Let the player take care of itself as soon as the YouTube is ready
    // The loading spinner while waiting for the tech would be impossible otherwise
    
if (typeof this.player_.loadingSpinner !== 'undefined' && !this.isIos && !this.isAndroid) {
      
this.player_.loadingSpinner.hide();
    }

    if(
this.player_.options()['muted']) {
      
this.setMuted(true);
    }

    
// Play ASAP if they clicked play before it's ready
    
if(this.playOnReady) {
      
this.playOnReady false;
      
this.play();
    }
  };

  
videojs.Youtube.prototype.updateQualities = function() {

    function 
setupEventListener(el) {
      
addEventListener(el'click', function() {
        var 
quality this.getAttribute('data-val');
        
self.ytplayer.setPlaybackQuality(quality);

        
self.userQuality quality;
        
setInnerText(self.qualityTitlevideojs.Youtube.parseQualityName(quality));

        var 
selected self.qualityMenuContent.querySelector('.vjs-selected');
        if(
selected) {
          
videojs.Youtube.removeClass(selected'vjs-selected');
        }

        
videojs.Youtube.addClass(this'vjs-selected');
      });
    }

    var 
qualities this.ytplayer.getAvailableQualityLevels();
    var 
self this;

    if(
qualities.indexOf(this.userQuality) < 0) {
      
setInnerText(self.qualityTitlevideojs.Youtube.parseQualityName(this.defaultQuality));
    }

    if(
qualities.length === 0) {
      
this.qualityButton.style.display 'none';
    } else {
      
this.qualityButton.style.display '';

      while(
this.qualityMenuContent.hasChildNodes()) {
        
this.qualityMenuContent.removeChild(this.qualityMenuContent.lastChild);
      }

      for(var 
0qualities.length; ++i) {
        var 
el document.createElement('li');
        
el.setAttribute('class''vjs-menu-item');
        
setInnerText(elvideojs.Youtube.parseQualityName(qualities[i]));
        
el.setAttribute('data-val'qualities[i]);
        if(
qualities[i] === this.quality) {
          
videojs.Youtube.addClass(el'vjs-selected');
        }
        
setupEventListener(el);


        
this.qualityMenuContent.appendChild(el);
      }
    }
  };

  
videojs.Youtube.prototype.onStateChange = function(state) {
    if(
state !== this.lastState) {
      switch(
state) {
        case -
1:
          
this.player_.trigger('durationchange');
          break;

        case 
YT.PlayerState.ENDED:
          
// Replace YouTube play button by our own
          
if(!this.player_.options()['ytcontrols']) {
            
this.playerEl_.querySelectorAll('.vjs-poster')[0].style.display 'block';
            if(
typeof this.player_.bigPlayButton !== 'undefined') {
              
this.player_.bigPlayButton.show();
            }
          }

          
this.player_.trigger('ended');
          break;

        case 
YT.PlayerState.PLAYING:
          
this.playerEl_.querySelectorAll('.vjs-poster')[0].style.display 'none';

          
this.playVideoIsAllowed true;
          
this.updateQualities();
          
this.player_.trigger('timeupdate');
          
this.player_.trigger('durationchange');
          
this.player_.trigger('playing');
          
this.player_.trigger('play');

          if (
this.isSeeking) {
            
this.player_.trigger('seeked');
            
this.isSeeking false;
          }
          break;

        case 
YT.PlayerState.PAUSED:
          
this.player_.trigger('pause');
          break;

        case 
YT.PlayerState.BUFFERING:
          
this.player_.trigger('timeupdate');

          
// Make sure to not display the spinner for mobile
          
if(!this.player_.options()['ytcontrols']) {
            
this.player_.trigger('waiting');
          }
          break;

        case 
YT.PlayerState.CUED:
          break;
      }

      
this.lastState state;
    }
  };

  
videojs.Youtube.convertQualityName = function(name) {
    switch(
name) {
      case 
'144p':
        return 
'tiny';

      case 
'240p':
        return 
'small';

      case 
'360p':
        return 
'medium';

      case 
'480p':
        return 
'large';

      case 
'720p':
        return 
'hd720';

      case 
'1080p':
        return 
'hd1080';
    }

    return 
'auto';
  };

  
videojs.Youtube.parseQualityName = function(name) {
    switch(
name) {
      case 
'tiny':
        return 
'144p';

      case 
'small':
        return 
'240p';

      case 
'medium':
        return 
'360p';

      case 
'large':
        return 
'480p';

      case 
'hd720':
        return 
'720p';

      case 
'hd1080':
        return 
'1080p';
    }

    return 
'auto';
  };

  
videojs.Youtube.prototype.onPlaybackQualityChange = function(quality) {
    if(
typeof this.defaultQuality === 'undefined') {
      
this.defaultQuality quality;

      if(
typeof this.userQuality !== 'undefined') {
        return;
      }
    }

    
this.quality quality;
    
setInnerText(this.qualityTitlevideojs.Youtube.parseQualityName(quality));

    switch(
quality) {
      case 
'medium':
        
this.player_.videoWidth 480;
        
this.player_.videoHeight 360;
        break;

      case 
'large':
        
this.player_.videoWidth 640;
        
this.player_.videoHeight 480;
        break;

      case 
'hd720':
        
this.player_.videoWidth 960;
        
this.player_.videoHeight 720;
        break;

      case 
'hd1080':
        
this.player_.videoWidth 1440;
        
this.player_.videoHeight 1080;
        break;

      case 
'highres':
        
this.player_.videoWidth 1920;
        
this.player_.videoHeight 1080;
        break;

      case 
'small':
        
this.player_.videoWidth 320;
        
this.player_.videoHeight 240;
        break;

      case 
'tiny':
        
this.player_.videoWidth 144;
        
this.player_.videoHeight 108;
        break;

      default:
        
this.player_.videoWidth 0;
        
this.player_.videoHeight 0;
        break;
    }

    
this.player_.trigger('ratechange');
  };

  
videojs.Youtube.prototype.onError = function(error) {
    
this.player_.error(error);

    if(
error === 100 || error === 101 || error === 150) {
      
this.player_.bigPlayButton.hide();
      
this.player_.loadingSpinner.hide();
      
this.player_.posterImage.hide();
    }
  };

  
/**
   * Add a CSS class name to an element
   * @param {Element} element    Element to add class name to
   * @param {String} classToAdd Classname to add
   */
  
videojs.Youtube.addClass = function(elementclassToAdd) {
    if((
' ' element.className ' ').indexOf(' ' classToAdd ' ') === -1) {
      
element.className element.className === '' classToAdd element.className ' ' classToAdd;
    }
  };

  
/**
   * Remove a CSS class name from an element
   * @param {Element} element    Element to remove from class name
   * @param {String} classToRemove Classname to remove
   */
  
videojs.Youtube.removeClass = function(elementclassToRemove) {
    var 
classNamesi;

    if(
element.className.indexOf(classToRemove) === -1) {
      return;
    }

    
classNames element.className.split(' ');

    
// no arr.indexOf in ie8, and we don't want to add a big shim
    
for(classNames.length 1>= 0i--) {
      if(
classNames[i] === classToRemove) {
        
classNames.splice(i1);
      }
    }

    
element.className classNames.join(' ');
  };

  
// Cross-browsers support (IE8 wink wink)
  
function setInnerText(elementtext) {
    if(
typeof element === 'undefined') {
      return 
false;
    }

    var 
textProperty = ('innerText' in element) ? 'innerText' 'textContent';

    try {
      
element[textProperty] = text;
    } catch(
anException) {
      
//IE<9 FIX
      
element.setAttribute('innerText'text);
    }
  }


// Stretch the YouTube poster
  
var style document.createElement('style');
  var 
def ' ' +
    
'.vjs-youtube .vjs-poster { background-size: 100%!important; }' +
    
'.vjs-youtube .vjs-poster, ' +
    
'.vjs-youtube .vjs-loading-spinner, ' +
    
'.vjs-youtube .vjs-big-play-button, .vjs-youtube .vjs-text-track-display{ pointer-events: none !important; }' +
    
'.vjs-youtube.vjs-user-active .iframeblocker { display: none; }' +
    
'.vjs-youtube.vjs-user-inactive .vjs-tech.onDesktop { pointer-events: none; }' +
    
'.vjs-quality-button > div:first-child > span:first-child { position:relative;top:7px }';

  
style.setAttribute('type''text/css');
  
document.getElementsByTagName('head')[0].appendChild(style);

  if(
style.styleSheet) {
    
style.styleSheet.cssText def;
  } else {
    
style.appendChild(document.createTextNode(def));
  }

  
// IE8 fix for indexOf
  
if(!Array.prototype.indexOf) {
    Array.
prototype.indexOf = function(elt /*, from*/) {
      var 
len this.length >>> 0// jshint ignore:line

      
var from Number(arguments[1]) || 0;
      
from = (from 0) ?
        
Math.ceil(from)
        : 
Math.floor(from);
      if(
from 0) {
        
from += len;
      }

      for(; 
from lenfrom++) {
        if(
from in this && this[from] === elt) {
          return 
from;
        }
      }
      return -
1;
    };
  }
})();
?>
Онлайн: 2
Реклама