/**
 * @file play-toggle.js
 */
從 '../button.js' 導入按鈕;
從 '../component.js' 導入組件;
從'../utils/promise'導入{silencePromise};

/**
 * 在播放和暫停之間切換的按鈕。
 *
 * @extends 按鈕
 */
類 PlayToggle 擴展按鈕 {

  /**
   * 創建此類的一個實例。
   *
   * @param {Player} 播放器
   * 此類應附加到的 `Player`。
   *
   * @param {對象} [選項={}]
   * 播放器選項的鍵/值存儲。
   */
  構造函數(播放器,選項= {}){
    超級(播放器,選項);

    // 顯示或隱藏重播圖標
    options.replay = options.replay === undefined ||選項.重播;

    this.on(player, 'play', (e) => this.handlePlay(e));
    this.on(player, '暫停', (e) => this.handlePause(e));

    如果(選項。重播){
      this.on(player, 'ended', (e) => this.handleEnded(e));
    }
  }

  /**
   * 構建默認的 DOM `className`。
   *
   * @return {字符串}
   * 此對象的 DOM `className`。
   */
  buildCSSClass() {
    返回`vjs-play-control ${super.buildCSSClass()}`;
  }

  /**
   * 當 `PlayToggle` 被“點擊”時調用。看
   * {@link ClickableComponent} 以獲取有關點擊的更多詳細信息。
   *
   * @param {EventTarget~Event} [事件]
   * 導致此功能被執行的 `keydown`、`tap` 或 `click` 事件
   * 打電話。
   *
   * @listens 水龍頭
   * @listens 點擊
   */
  handleClick(事件){
    如果 (this.player_.paused()) {
      silencePromise(this.player_.play());
    }其他{
      這個.player_.pause();
    }
  }

  /**
   * 這會在視頻結束並且用戶搜索後調用一次,以便
   * 我們可以將重播按鈕改回播放按鈕。
   *
   * @param {EventTarget~Event} [事件]
   * 導致此函數運行的事件。
   *
   * @listens Player#seeked
   */
  handleSeeked(事件){
    this.removeClass('vjs-ended');

    如果 (this.player_.paused()) {
      這個.handlePause(事件);
    }其他{
      這個.handlePlay(事件);
    }
  }

  /**
   * 將 vjs-playing 類添加到元素,以便它可以改變外觀。
   *
   * @param {EventTarget~Event} [事件]
   * 導致此函數運行的事件。
   *
   * @listens Player#play
   */
  handlePlay(事件){
    this.removeClass('vjs-ended');
    this.removeClass('vjs-paused');
    this.addClass('vjs-playing');
    // 將按鈕文本更改為“暫停”
    this.controlText('暫停');
  }

  /**
   * 將 vjs-paused 類添加到元素,以便它可以更改外觀。
   *
   * @param {EventTarget~Event} [事件]
   * 導致此函數運行的事件。
   *
   * @listens Player#pause
   */
  句柄暫停(事件){
    this.removeClass('vjs-playing');
    this.addClass('vjs-paused');
    // 將按鈕文本更改為“播放”
    this.controlText('播放');
  }

  /**
   * 將 vjs-ended 類添加到元素,以便它可以改變外觀
   *
   * @param {EventTarget~Event} [事件]
   * 導致此函數運行的事件。
   *
   * @listens Player#ended
   */
  handleEnded(事件){
    this.removeClass('vjs-playing');
    this.addClass('vjs-ended');
    // 將按鈕文本更改為“重播”
    this.controlText('重播');

    // 在下一個搜索中刪除重播按鈕
    this.one(this.player_, 'seeked', (e) => this.handleSeeked(e));
  }
}

/**
 * 應顯示在 `PlayToggle` 控件上的文本。添加本地化。
 *
 * @type {字符串}
 * @私人的
 */
PlayToggle.prototype.controlText_ = '播放';

Component.registerComponent('PlayToggle', PlayToggle);
導出默認 PlayToggle;