playable
Version:
Video player based on HTML5Video
123 lines (95 loc) • 2.32 kB
text/typescript
import playerAPI from '../../../core/player-api-decorator';
import { ILiveIndicator } from '../live-indicator/types';
import { ITitle } from '../title/types';
import {
ITopBlockAPI,
ITopBlock,
ITopBlockViewConfig,
ITopBlockViewElements,
} from './types';
import View from './top-block.view';
interface IDependencies {
title: ITitle;
liveIndicator: ILiveIndicator;
}
class TopBlock implements ITopBlock {
static moduleName = 'topBlock';
static View = View;
static dependencies = ['title', 'liveIndicator'];
private _isBlockFocused: boolean = false;
isHidden: boolean;
view: View;
constructor(dependencies: IDependencies) {
this.isHidden = false;
this._bindViewCallbacks();
this._initUI(this._getElements(dependencies));
}
private _bindViewCallbacks() {
this._setFocusState = this._setFocusState.bind(this);
this._removeFocusState = this._removeFocusState.bind(this);
}
private _initUI(elements: ITopBlockViewElements) {
const config: ITopBlockViewConfig = {
elements,
callbacks: {
onBlockMouseMove: this._setFocusState,
onBlockMouseOut: this._removeFocusState,
},
};
this.view = new TopBlock.View(config);
}
private _getElements(dependencies: IDependencies): ITopBlockViewElements {
const { title, liveIndicator } = dependencies;
return {
title: title.getElement(),
liveIndicator: liveIndicator.getElement(),
};
}
private _setFocusState() {
this._isBlockFocused = true;
}
private _removeFocusState() {
this._isBlockFocused = false;
}
get isFocused() {
return this._isBlockFocused;
}
getElement() {
return this.view.getElement();
}
hide() {
this.isHidden = true;
this.view.hide();
}
show() {
this.isHidden = false;
this.view.show();
}
showTitle() {
this.view.showTitle();
}
hideTitle() {
this.view.hideTitle();
}
showLiveIndicator() {
this.view.showLiveIndicator();
}
hideLiveIndicator() {
this.view.hideLiveIndicator();
}
showContent() {
this.view.showContent();
}
hideContent() {
this.view.hideContent();
}
destroy() {
this.view.destroy();
}
}
export { ITopBlockAPI };
export default TopBlock;