/**
* @文件按鈕.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);
導出默認按鈕;