| 5 | import Icons from './Icons' |
| 6 | |
| 7 | export class PlayerView implements IComponent { |
| 8 | public readonly element: HTMLElement |
| 9 | public readonly videoWrapper: HTMLElement |
| 10 | public readonly controlBar: ControlBarView = new ControlBarView(this._player) |
| 11 | |
| 12 | private _bigButton: HTMLElement |
| 13 | private _spinner: HTMLElement |
| 14 | |
| 15 | private _state: IPlayerState = 'Paused' |
| 16 | |
| 17 | constructor(private _player: XtermPlayer) { |
| 18 | const el = this.element = $div({ class: 'xp', attrs: { tabindex: '0' } }, |
| 19 | this.videoWrapper = $div({ class: 'video-wrapper' }), |
| 20 | this._bigButton = $div({ class: 'xp-overlay xp-overlay-center xp-big-button' }), |
| 21 | this._spinner = $div({ class: 'xp-overlay xp-overlay-center sk-flow' }, |
| 22 | $div({ class: 'sk-flow-dot' }), |
| 23 | $div({ class: 'sk-flow-dot' }), |
| 24 | $div({ class: 'sk-flow-dot' }), |
| 25 | ), |
| 26 | this.controlBar.element |
| 27 | ) |
| 28 | addDisposableDomListener(el, 'mouseenter', () => { |
| 29 | if (this.state === 'Running') { |
| 30 | this._showControlBar() |
| 31 | } |
| 32 | }) |
| 33 | addDisposableDomListener(el, 'mouseleave', () => { |
| 34 | if (this.state === 'Running') { |
| 35 | this._hideControlBar() |
| 36 | } |
| 37 | }) |
| 38 | addDisposableDomListener(el, 'keydown', (ev: KeyboardEvent) => { |
| 39 | ev.preventDefault() |
| 40 | switch (ev.code) { |
| 41 | case 'Space': |
| 42 | this._togglePlayPauseReplay() |
| 43 | break |
| 44 | case 'ArrowRight': |
| 45 | this._player.currentTime += 3000 |
| 46 | break |
| 47 | case 'ArrowLeft': |
| 48 | this._player.currentTime -= 3000 |
| 49 | break |
| 50 | case 'ArrowUp': |
| 51 | this._player.volume += 0.1 |
| 52 | break |
| 53 | case 'ArrowDown': |
| 54 | this._player.volume -= 0.1 |
| 55 | break |
| 56 | } |
| 57 | }, true) |
| 58 | addDisposableDomListener(this._bigButton, 'click', this._togglePlayPauseReplay.bind(this)) |
| 59 | |
| 60 | this.controlBar.onPlaybackButtonClick(this._togglePlayPauseReplay.bind(this)) |
| 61 | this.controlBar.onSeek((percent: number) => { |
| 62 | if (this.state !== 'Loading') { |
| 63 | this._player.currentTime = percent * this._player.duration |
| 64 | } |
nothing calls this directly
no outgoing calls
no test coverage detected