platform/video.videojs/dist/video.es.js
function Player(tag, options, ready) {
    classCallCheck(this, Player);

    // Make sure tag ID exists
    tag.id = tag.id || 'vjs_video_' + newGUID();

    // Set Options
    // The options argument overrides options set in the video tag
    // which overrides globally set options.
    // This latter part coincides with the load order
    // (tag must exist before Player)
    options = assign(Player.getTagSettings(tag), options);

    // Delay the initialization of children because we need to set up
    // player properties first, and can't use `this` before `super()`
    options.initChildren = false;

    // Same with creating the element
    options.createEl = false;

    // we don't want the player to report touch activity on itself
    // see enableTouchActivity in Component
    options.reportTouchActivity = false;

    // If language is not set, get the closest lang attribute
    if (!options.language) {
      if (typeof tag.closest === 'function') {
        var closest = tag.closest('[lang]');

        if (closest) {
          options.language = closest.getAttribute('lang');
        }
      } else {
        var element = tag;

        while (element && element.nodeType === 1) {
          if (getAttributes(element).hasOwnProperty('lang')) {
            options.language = element.getAttribute('lang');
            break;
          }
          element = element.parentNode;
        }
      }
    }

    // Run base component initializing with new options

    // Turn off API access because we're loading a new tech that might load asynchronously
    var _this = possibleConstructorReturn(this, _Component.call(this, null, options, ready));

    _this.isReady_ = false;

    // if the global option object was accidentally blown away by
    // someone, bail early with an informative error
    if (!_this.options_ || !_this.options_.techOrder || !_this.options_.techOrder.length) {
      throw new Error('No techOrder specified. Did you overwrite ' + 'videojs.options instead of just changing the ' + 'properties you want to override?');
    }

    // Store the original tag used to set options
    _this.tag = tag;

    // Store the tag attributes used to restore html5 element
    _this.tagAttributes = tag && getAttributes(tag);

    // Update current language
    _this.language(_this.options_.language);

    // Update Supported Languages
    if (options.languages) {
      // Normalise player option languages to lowercase
      var languagesToLower = {};

      Object.getOwnPropertyNames(options.languages).forEach(function (name$$1) {
        languagesToLower[name$$1.toLowerCase()] = options.languages[name$$1];
      });
      _this.languages_ = languagesToLower;
    } else {
      _this.languages_ = Player.prototype.options_.languages;
    }

    // Cache for video property values.
    _this.cache_ = {};

    // Set poster
    _this.poster_ = options.poster || '';

    // Set controls
    _this.controls_ = !!options.controls;

    // Set default values for lastVolume
    _this.cache_.lastVolume = 1;

    // Original tag settings stored in options
    // now remove immediately so native controls don't flash.
    // May be turned back on by HTML5 tech if nativeControlsForTouch is true
    tag.controls = false;

    /*
     * Store the internal state of scrubbing
     *
     * @private
     * @return {Boolean} True if the user is scrubbing
     */
    _this.scrubbing_ = false;

    _this.el_ = _this.createEl();

    // Make this an evented object and use `el_` as its event bus.
    evented(_this, { eventBusKey: 'el_' });

    // We also want to pass the original player options to each component and plugin
    // as well so they don't need to reach back into the player for options later.
    // We also need to do another copy of this.options_ so we don't end up with
    // an infinite loop.
    var playerOptionsCopy = mergeOptions(_this.options_);

    // Load plugins
    if (options.plugins) {
      var plugins = options.plugins;

      Object.keys(plugins).forEach(function (name$$1) {
        if (typeof this[name$$1] === 'function') {
          this[name$$1](plugins[name$$1]);
        } else {
          throw new Error('plugin "' + name$$1 + '" does not exist');
        }
      }, _this);
    }

    _this.options_.playerOptions = playerOptionsCopy;

    _this.middleware_ = [];

    _this.initChildren();

    // Set isAudio based on whether or not an audio tag was used
    _this.isAudio(tag.nodeName.toLowerCase() === 'audio');

    // Update controls className. Can't do this when the controls are initially
    // set because the element doesn't exist yet.
    if (_this.controls()) {
      _this.addClass('vjs-controls-enabled');
    } else {
      _this.addClass('vjs-controls-disabled');
    }

    // Set ARIA label and region role depending on player type
    _this.el_.setAttribute('role', 'region');
    if (_this.isAudio()) {
      _this.el_.setAttribute('aria-label', _this.localize('Audio Player'));
    } else {
      _this.el_.setAttribute('aria-label', _this.localize('Video Player'));
    }

    if (_this.isAudio()) {
      _this.addClass('vjs-audio');
    }

    if (_this.flexNotSupported_()) {
      _this.addClass('vjs-no-flex');
    }

    // TODO: Make this smarter. Toggle user state between touching/mousing
    // using events, since devices can have both touch and mouse events.
    // if (browser.TOUCH_ENABLED) {
    //   this.addClass('vjs-touch-enabled');
    // }

    // iOS Safari has broken hover handling
    if (!IS_IOS) {
      _this.addClass('vjs-workinghover');
    }

    // Make player easily findable by ID
    Player.players[_this.id_] = _this;

    // Add a major version class to aid css in plugins
    var majorVersion = version.split('.')[0];

    _this.addClass('vjs-v' + majorVersion);

    // When the player is first initialized, trigger activity so components
    // like the control bar show themselves if needed
    _this.userActive(true);
    _this.reportUserActivity();
    _this.listenForUserActivity_();

    _this.on('fullscreenchange', _this.handleFullscreenChange_);
    _this.on('stageclick', _this.handleStageClick_);

    _this.changingSrc_ = false;
    return _this;
  }
function Player(tag, options, ready) {
    classCallCheck(this, Player);

    // Make sure tag ID exists
    tag.id = tag.id || 'vjs_video_' + newGUID();

    // Set Options
    // The options argument overrides options set in the video tag
    // which overrides globally set options.
    // This latter part coincides with the load order
    // (tag must exist before Player)
    options = assign(Player.getTagSettings(tag), options);

    // Delay the initialization of children because we need to set up
    // player properties first, and can't use `this` before `super()`
    options.initChildren = false;

    // Same with creating the element
    options.createEl = false;

    // we don't want the player to report touch activity on itself
    // see enableTouchActivity in Component
    options.reportTouchActivity = false;

    // If language is not set, get the closest lang attribute
    if (!options.language) {
      if (typeof tag.closest === 'function') {
        var closest = tag.closest('[lang]');

        if (closest) {
          options.language = closest.getAttribute('lang');
        }
      } else {
        var element = tag;

        while (element && element.nodeType === 1) {
          if (getAttributes(element).hasOwnProperty('lang')) {
            options.language = element.getAttribute('lang');
            break;
          }
          element = element.parentNode;
        }
      }
    }

    // Run base component initializing with new options

    // Turn off API access because we're loading a new tech that might load asynchronously
    var _this = possibleConstructorReturn(this, _Component.call(this, null, options, ready));

    _this.isReady_ = false;

    // if the global option object was accidentally blown away by
    // someone, bail early with an informative error
    if (!_this.options_ || !_this.options_.techOrder || !_this.options_.techOrder.length) {
      throw new Error('No techOrder specified. Did you overwrite ' + 'videojs.options instead of just changing the ' + 'properties you want to override?');
    }

    // Store the original tag used to set options
    _this.tag = tag;

    // Store the tag attributes used to restore html5 element
    _this.tagAttributes = tag && getAttributes(tag);

    // Update current language
    _this.language(_this.options_.language);

    // Update Supported Languages
    if (options.languages) {
      // Normalise player option languages to lowercase
      var languagesToLower = {};

      Object.getOwnPropertyNames(options.languages).forEach(function (name$$1) {
        languagesToLower[name$$1.toLowerCase()] = options.languages[name$$1];
      });
      _this.languages_ = languagesToLower;
    } else {
      _this.languages_ = Player.prototype.options_.languages;
    }

    // Cache for video property values.
    _this.cache_ = {};

    // Set poster
    _this.poster_ = options.poster || '';

    // Set controls
    _this.controls_ = !!options.controls;

    // Set default values for lastVolume
    _this.cache_.lastVolume = 1;

    // Original tag settings stored in options
    // now remove immediately so native controls don't flash.
    // May be turned back on by HTML5 tech if nativeControlsForTouch is true
    tag.controls = false;

    /*
     * Store the internal state of scrubbing
     *
     * @private
     * @return {Boolean} True if the user is scrubbing
     */
    _this.scrubbing_ = false;

    _this.el_ = _this.createEl();

    // Make this an evented object and use `el_` as its event bus.
    evented(_this, { eventBusKey: 'el_' });

    // We also want to pass the original player options to each component and plugin
    // as well so they don't need to reach back into the player for options later.
    // We also need to do another copy of this.options_ so we don't end up with
    // an infinite loop.
    var playerOptionsCopy = mergeOptions(_this.options_);

    // Load plugins
    if (options.plugins) {
      var plugins = options.plugins;

      Object.keys(plugins).forEach(function (name$$1) {
        if (typeof this[name$$1] === 'function') {
          this[name$$1](plugins[name$$1]);
        } else {
          throw new Error('plugin "' + name$$1 + '" does not exist');
        }
      }, _this);
    }

    _this.options_.playerOptions = playerOptionsCopy;

    _this.middleware_ = [];

    _this.initChildren();

    // Set isAudio based on whether or not an audio tag was used
    _this.isAudio(tag.nodeName.toLowerCase() === 'audio');

    // Update controls className. Can't do this when the controls are initially
    // set because the element doesn't exist yet.
    if (_this.controls()) {
      _this.addClass('vjs-controls-enabled');
    } else {
      _this.addClass('vjs-controls-disabled');
    }

    // Set ARIA label and region role depending on player type
    _this.el_.setAttribute('role', 'region');
    if (_this.isAudio()) {
      _this.el_.setAttribute('aria-label', _this.localize('Audio Player'));
    } else {
      _this.el_.setAttribute('aria-label', _this.localize('Video Player'));
    }

    if (_this.isAudio()) {
      _this.addClass('vjs-audio');
    }

    if (_this.flexNotSupported_()) {
      _this.addClass('vjs-no-flex');
    }

    // TODO: Make this smarter. Toggle user state between touching/mousing
    // using events, since devices can have both touch and mouse events.
    // if (browser.TOUCH_ENABLED) {
    //   this.addClass('vjs-touch-enabled');
    // }

    // iOS Safari has broken hover handling
    if (!IS_IOS) {
      _this.addClass('vjs-workinghover');
    }

    // Make player easily findable by ID
    Player.players[_this.id_] = _this;

    // Add a major version class to aid css in plugins
    var majorVersion = version.split('.')[0];

    _this.addClass('vjs-v' + majorVersion);

    // When the player is first initialized, trigger activity so components
    // like the control bar show themselves if needed
    _this.userActive(true);
    _this.reportUserActivity();
    _this.listenForUserActivity_();

    _this.on('fullscreenchange', _this.handleFullscreenChange_);
    _this.on('stageclick', _this.handleStageClick_);

    _this.changingSrc_ = false;
    return _this;
  }
function Player ( tag , options , ready ) { classCallCheck ( this , Player ) ; // Make sure tag ID exists tag . id = tag . id || 'vjs_video_' + newGUID ( ) ; // Set Options // The options argument overrides options set in the video tag // which overrides globally set options. // This latter part coincides with the load order // (tag must exist before Player) options = assign ( Player . getTagSettings ( tag ) , options ) ; // Delay the initialization of children because we need to set up // player properties first, and can't use `this` before `super()` options . initChildren = false ; // Same with creating the element options . createEl = false ; // we don't want the player to report touch activity on itself // see enableTouchActivity in Component options . reportTouchActivity = false ; // If language is not set, get the closest lang attribute if ( ! options . language ) { if ( typeof tag . closest === 'function' ) { var closest = tag . closest ( '[lang]' ) ; if ( closest ) { options . language = closest . getAttribute ( 'lang' ) ; } } else { var element = tag ; while ( element && element . nodeType === 1 ) { if ( getAttributes ( element ) . hasOwnProperty ( 'lang' ) ) { options . language = element . getAttribute ( 'lang' ) ; break ; } element = element . parentNode ; } } } // Run base component initializing with new options // Turn off API access because we're loading a new tech that might load asynchronously var _this = possibleConstructorReturn ( this , _Component . call ( this , null , options , ready ) ) ; _this . isReady_ = false ; // if the global option object was accidentally blown away by // someone, bail early with an informative error if ( ! _this . options_ || ! _this . options_ . techOrder || ! _this . options_ . techOrder . length ) { throw new Error ( 'No techOrder specified. Did you overwrite ' + 'videojs.options instead of just changing the ' + 'properties you want to override?' ) ; } // Store the original tag used to set options _this . tag = tag ; // Store the tag attributes used to restore html5 element _this . tagAttributes = tag && getAttributes ( tag ) ; // Update current language _this . language ( _this . options_ . language ) ; // Update Supported Languages if ( options . languages ) { // Normalise player option languages to lowercase var languagesToLower = { } ; Object . getOwnPropertyNames ( options . languages ) . forEach ( function ( name$$1 ) { languagesToLower [ name$$1 . toLowerCase ( ) ] = options . languages [ name$$1 ] ; } ) ; _this . languages_ = languagesToLower ; } else { _this . languages_ = Player . prototype . options_ . languages ; } // Cache for video property values. _this . cache_ = { } ; // Set poster _this . poster_ = options . poster || '' ; // Set controls _this . controls_ = ! ! options . controls ; // Set default values for lastVolume _this . cache_ . lastVolume = 1 ; // Original tag settings stored in options // now remove immediately so native controls don't flash. // May be turned back on by HTML5 tech if nativeControlsForTouch is true tag . controls = false ; /*
     * Store the internal state of scrubbing
     *
     * @private
     * @return {Boolean} True if the user is scrubbing
     */ _this . scrubbing_ = false ; _this . el_ = _this . createEl ( ) ; // Make this an evented object and use `el_` as its event bus. evented ( _this , { eventBusKey : 'el_' } ) ; // We also want to pass the original player options to each component and plugin // as well so they don't need to reach back into the player for options later. // We also need to do another copy of this.options_ so we don't end up with // an infinite loop. var playerOptionsCopy = mergeOptions ( _this . options_ ) ; // Load plugins if ( options . plugins ) { var plugins = options . plugins ; Object . keys ( plugins ) . forEach ( function ( name$$1 ) { if ( typeof this [ name$$1 ] === 'function' ) { this [ name$$1 ] ( plugins [ name$$1 ] ) ; } else { throw new Error ( 'plugin "' + name$$1 + '" does not exist' ) ; } } , _this ) ; } _this . options_ . playerOptions = playerOptionsCopy ; _this . middleware_ = [ ] ; _this . initChildren ( ) ; // Set isAudio based on whether or not an audio tag was used _this . isAudio ( tag . nodeName . toLowerCase ( ) === 'audio' ) ; // Update controls className. Can't do this when the controls are initially // set because the element doesn't exist yet. if ( _this . controls ( ) ) { _this . addClass ( 'vjs-controls-enabled' ) ; } else { _this . addClass ( 'vjs-controls-disabled' ) ; } // Set ARIA label and region role depending on player type _this . el_ . setAttribute ( 'role' , 'region' ) ; if ( _this . isAudio ( ) ) { _this . el_ . setAttribute ( 'aria-label' , _this . localize ( 'Audio Player' ) ) ; } else { _this . el_ . setAttribute ( 'aria-label' , _this . localize ( 'Video Player' ) ) ; } if ( _this . isAudio ( ) ) { _this . addClass ( 'vjs-audio' ) ; } if ( _this . flexNotSupported_ ( ) ) { _this . addClass ( 'vjs-no-flex' ) ; } // TODO: Make this smarter. Toggle user state between touching/mousing // using events, since devices can have both touch and mouse events. // if (browser.TOUCH_ENABLED) { //   this.addClass('vjs-touch-enabled'); // } // iOS Safari has broken hover handling if ( ! IS_IOS ) { _this . addClass ( 'vjs-workinghover' ) ; } // Make player easily findable by ID Player . players [ _this . id_ ] = _this ; // Add a major version class to aid css in plugins var majorVersion = version . split ( '.' ) [ 0 ] ; _this . addClass ( 'vjs-v' + majorVersion ) ; // When the player is first initialized, trigger activity so components // like the control bar show themselves if needed _this . userActive ( true ) ; _this . reportUserActivity ( ) ; _this . listenForUserActivity_ ( ) ; _this . on ( 'fullscreenchange' , _this . handleFullscreenChange_ ) ; _this . on ( 'stageclick' , _this . handleStageClick_ ) ; _this . changingSrc_ = false ; return _this ; }
Create an instance of this class.

@param {Element} tag
The original video DOM element used for configuring options.

@param {Object} [options]
Object of option names and values.

@param {Component~ReadyCallback} [ready]
Ready callback function.
Create an instance of this class .