playable
Version:
Video player based on HTML5Video
159 lines • 7.35 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var volume_view_1 = (0, tslib_1.__importDefault)(require("./volume.view"));
var keyboard_interceptor_1 = (0, tslib_1.__importStar)(require("../../../../utils/keyboard-interceptor"));
var keyboard_control_1 = require("../../../keyboard-control/keyboard-control");
var constants_1 = require("../../../../constants");
var VolumeControl = /** @class */ (function () {
function VolumeControl(_a) {
var engine = _a.engine, eventEmitter = _a.eventEmitter, textMap = _a.textMap, tooltipService = _a.tooltipService, theme = _a.theme;
this._engine = engine;
this._eventEmitter = eventEmitter;
this._textMap = textMap;
this._tooltipService = tooltipService;
this._theme = theme;
this._bindCallbacks();
this._initUI();
this._bindEvents();
this.view.setVolume(this._engine.getVolume());
this.view.setMute(this._engine.isMuted);
this._initInterceptor();
}
VolumeControl.prototype.getElement = function () {
return this.view.getElement();
};
VolumeControl.prototype._initUI = function () {
var config = {
callbacks: {
onDragStart: this._broadcastDragStart,
onDragEnd: this._broadcastDragEnd,
onVolumeLevelChangeFromInput: this._getVolumeLevelFromInput,
onVolumeLevelChangeFromWheel: this._getVolumeLevelFromWheel,
onToggleMuteClick: this._toggleMuteState,
},
theme: this._theme,
textMap: this._textMap,
tooltipService: this._tooltipService,
};
this.view = new VolumeControl.View(config);
};
VolumeControl.prototype._initInterceptor = function () {
var _a, _b;
var _this = this;
this._buttonInterceptor = new keyboard_interceptor_1.default(this.view.getButtonElement(), (_a = {},
_a[keyboard_interceptor_1.KEYCODES.SPACE_BAR] = function (e) {
e.stopPropagation();
_this._eventEmitter.emitAsync(constants_1.UIEvent.KEYBOARD_KEYDOWN_INTERCEPTED);
_this._eventEmitter.emitAsync(_this._engine.isMuted
? constants_1.UIEvent.UNMUTE_WITH_KEYBOARD
: constants_1.UIEvent.MUTE_WITH_KEYBOARD);
},
_a[keyboard_interceptor_1.KEYCODES.ENTER] = function (e) {
e.stopPropagation();
_this._eventEmitter.emitAsync(constants_1.UIEvent.KEYBOARD_KEYDOWN_INTERCEPTED);
_this._eventEmitter.emitAsync(_this._engine.isMuted
? constants_1.UIEvent.UNMUTE_WITH_KEYBOARD
: constants_1.UIEvent.MUTE_WITH_KEYBOARD);
},
_a));
this._inputInterceptor = new keyboard_interceptor_1.default(this.view.getInputElement(), (_b = {},
_b[keyboard_interceptor_1.KEYCODES.RIGHT_ARROW] = function (e) {
e.stopPropagation();
e.preventDefault();
_this._eventEmitter.emitAsync(constants_1.UIEvent.KEYBOARD_KEYDOWN_INTERCEPTED);
_this._eventEmitter.emitAsync(constants_1.UIEvent.INCREASE_VOLUME_WITH_KEYBOARD);
_this._engine.setMute(false);
_this._engine.increaseVolume(keyboard_control_1.AMOUNT_TO_CHANGE_VOLUME);
},
_b[keyboard_interceptor_1.KEYCODES.LEFT_ARROW] = function (e) {
e.stopPropagation();
e.preventDefault();
_this._eventEmitter.emitAsync(constants_1.UIEvent.KEYBOARD_KEYDOWN_INTERCEPTED);
_this._eventEmitter.emitAsync(constants_1.UIEvent.DECREASE_VOLUME_WITH_KEYBOARD);
_this._engine.setMute(false);
_this._engine.decreaseVolume(keyboard_control_1.AMOUNT_TO_CHANGE_VOLUME);
},
_b));
};
VolumeControl.prototype._destroyInterceptor = function () {
this._buttonInterceptor.destroy();
this._inputInterceptor.destroy();
};
VolumeControl.prototype._bindEvents = function () {
this._unbindEvents = this._eventEmitter.bindEvents([[constants_1.VideoEvent.SOUND_STATE_CHANGED, this._updateSoundState]], this);
};
VolumeControl.prototype._bindCallbacks = function () {
this._getVolumeLevelFromInput = this._getVolumeLevelFromInput.bind(this);
this._toggleMuteState = this._toggleMuteState.bind(this);
this._getVolumeLevelFromWheel = this._getVolumeLevelFromWheel.bind(this);
this._broadcastDragStart = this._broadcastDragStart.bind(this);
this._broadcastDragEnd = this._broadcastDragEnd.bind(this);
};
VolumeControl.prototype._broadcastDragStart = function () {
this._eventEmitter.emitAsync(constants_1.UIEvent.CONTROL_DRAG_START);
};
VolumeControl.prototype._broadcastDragEnd = function () {
this._eventEmitter.emitAsync(constants_1.UIEvent.CONTROL_DRAG_END);
};
VolumeControl.prototype._changeVolumeLevel = function (level) {
this._engine.setVolume(level);
this._eventEmitter.emitAsync(constants_1.UIEvent.VOLUME_CHANGE, level);
if (this._engine.isMuted) {
this._toggleMuteState();
}
};
VolumeControl.prototype._toggleMuteState = function () {
var desiredMuteState = !this._engine.isMuted;
this._engine.setMute(desiredMuteState);
this._eventEmitter.emitAsync(desiredMuteState ? constants_1.UIEvent.MUTE_CLICK : constants_1.UIEvent.UNMUTE_CLICK);
};
VolumeControl.prototype._getVolumeLevelFromWheel = function (delta) {
if (!this._engine.isMuted) {
var adjustedVolume = this._engine.getVolume() + delta / 10;
var validatedVolume = Math.min(100, Math.max(0, adjustedVolume));
this._changeVolumeLevel(validatedVolume);
}
};
VolumeControl.prototype._getVolumeLevelFromInput = function (level) {
this._changeVolumeLevel(level);
};
VolumeControl.prototype._updateSoundState = function () {
this._setVolumeLevel(this._engine.getVolume());
this._setMuteState(this._engine.isMuted);
};
VolumeControl.prototype._setVolumeLevel = function (level) {
this.view.setVolume(level);
this.view.setMute(Boolean(!level));
};
VolumeControl.prototype._setMuteState = function (isMuted) {
var volume = this._engine.getVolume();
this.view.setVolume(isMuted ? 0 : volume);
this.view.setMute(isMuted || Boolean(!volume));
};
VolumeControl.prototype.hide = function () {
this.isHidden = true;
this.view.hide();
};
VolumeControl.prototype.show = function () {
this.isHidden = false;
this.view.show();
};
VolumeControl.prototype.destroy = function () {
this._destroyInterceptor();
this._unbindEvents();
this.view.destroy();
};
VolumeControl.moduleName = 'volumeControl';
VolumeControl.View = volume_view_1.default;
VolumeControl.dependencies = [
'engine',
'eventEmitter',
'textMap',
'tooltipService',
'theme',
];
return VolumeControl;
}());
exports.default = VolumeControl;
//# sourceMappingURL=volume.js.map