/**
 * @文件按鈕.js
 */
從 './clickable-component.js' 導入 ClickableComponent;
從 './component' 導入組件;
從 './utils/log.js' 導入日誌;
從'./utils/obj'導入{assign};
從“鍵碼”導入鍵碼;
從'./utils/dom.js'導入{createEl};

/**
 * 所有按鈕的基類。
 *
 * @extends 可點擊組件
 */
類按鈕擴展 ClickableComponent {

  /**
   * 創建 `Button` 的 DOM 元素。
   *
   * @param {字符串} [標籤=“按鈕”]
   * 元素的節點類型。這個論點被忽略:無論如何
   * 被傳遞,它總是會創建一個 `button` 元素。
   *
   * @param {對象} [道具={}]
   * 應在元素上設置的屬性對象。
   *
   * @param {對象} [屬性={}]
   * 應在元素上設置的屬性對象。
   *
   * @return {元素}
   * 被創建的元素。
   */
  createEl(tag, props = {}, attributes = {}) {
    標籤 = '按鈕';

    道具=分配({
      類名:this.buildCSSClass()
    }, 道具);

    // 為按鈕元素添加屬性
    屬性=分配({

      // 必要的,因為默認按鈕類型是“提交”
      類型:“按鈕”
    }, 屬性);

    const el = createEl(標籤、道具、屬性);

    el.appendChild(createEl('span', {
      className: 'vjs-icon-placeholder'
    },{
      'aria-hidden': true
    }));

    this.createControlTextEl(el);

    返回 el;
  }

  /**
   * 在此 `Button` 內添加一個子 `Component`。
   *
   * @param {string|Component} 孩子
   * 要添加的子項的名稱或實例。
   *
   * @param {對象} [選項={}]
   * 將傳遞給子項的選項的鍵/值存儲
   * 孩子。
   *
   * @return {組件}
   * 作為子組件添加的 `Component`。當使用字符串時
   * `Component` 將由此過程創建。
   *
   * @deprecated 自版本 5
   */
  添加孩子(孩子,選項= {}){
    const className = this.constructor.name;

    log.warn(`不支持向 Button (${className}) 添加可操作的(用戶可控制的)子項;請改用 ClickableComponent。`);

    // 避免 ClickableComponent 的 addChild 方法產生的錯誤信息
    返回 Component.prototype.addChild.call(this, child, options);
  }

  /**
   * 啟用 `Button` 元素,以便它可以被激活或點擊。將其與
   * {@link 按鈕#disable}。
   */
  使能夠() {
    超級啟用();
    this.el_.removeAttribute('禁用');
  }

  /**
   * 禁用 `Button` 元素,使其無法被激活或點擊。將其與
   * {@link Button#enable}。
   */
  禁用(){
    超級禁用();
    this.el_.setAttribute('禁用', '禁用');
  }

  /**
   * 當 `Button` 獲得焦點並且 `keydown` 通過按鍵觸發時調用
   * 按。
   *
   * @param {EventTarget~Event} 事件
   * 導致此函數被調用的事件。
   *
   * @listens 按鍵
   */
  handleKeyDown(事件){

    // 忽略 Space 或 Enter 鍵操作,由瀏覽器處理
    // 一個按鈕 - 儘管不是針對它的超類 ClickableComponent。還,
    // 防止事件通過 DOM 傳播並觸發 Player
    // 熱鍵。我們在這裡不阻止默認,因為我們_希望_瀏覽器
    // 處理它。
    if (keycode.isEventKey(event, 'Space') || keycode.isEventKey(event, 'Enter')) {
      事件.stopPropagation();
      返回;
    }

    // 為不支持的鍵傳遞按鍵處理
    super.handleKeyDown(事件);
  }
}

Component.registerComponent('Button', Button);
導出默認按鈕;