UNPKG

shaka-player

Version:
107 lines (86 loc) • 2.84 kB
/*! @license * Shaka Player * Copyright 2016 Google LLC * SPDX-License-Identifier: Apache-2.0 */ goog.provide('shaka.ui.TextOpacityMenu'); goog.require('shaka.ui.Locales'); goog.require('shaka.ui.TextStyleMenu'); goog.requireType('shaka.ui.Controls'); goog.requireType('shaka.ui.TextStylePreview'); /** * Abstract base for the menus that select a subtitle opacity. The first * item, NaN, keeps the opacity defined by the subtitle. * * @extends {shaka.ui.TextStyleMenu<number>} * @abstract * @export */ shaka.ui.TextOpacityMenu = class extends shaka.ui.TextStyleMenu { /** * @param {!HTMLElement} parent * @param {!shaka.ui.Controls} controls * @param {string} icon * @param {string} configName The name of the opacity in the text displayer * configuration. * @param {!Array<number>} opacities * @param {string} nameId The localized name of the menu inside a menu * group. * @param {string} longNameId The localized name of the menu elsewhere. */ constructor(parent, controls, icon, configName, opacities, nameId, longNameId) { super(parent, controls, icon); /** @private {string} */ this.configName_ = configName; /** @private {!Array<number>} */ this.opacities_ = opacities; /** @private {string} */ this.nameId_ = nameId; /** @private {string} */ this.longNameId_ = longNameId; this.menu.classList.add('shaka-text-opacities'); this.updateLocalizedStrings(); this.checkAvailability(); } /** @override */ getItems() { return [NaN, ...this.opacities_]; } /** @override */ getLabelForItem(opacity) { if (isNaN(opacity)) { return this.localization.resolve(shaka.ui.Locales.Ids.DEFAULT); } return Math.round(opacity * 100) + '%'; } /** @override */ onItemSelected(opacity) { this.player.configure('textDisplayer.' + this.configName_, opacity); } /** @override */ getPreviewConfigForItem(opacity) { const config = {}; config[this.configName_] = opacity; return /** @type {!shaka.ui.TextStylePreview.Configuration} */(config); } /** @override */ getCurrentValueLabel() { const textDisplayer = /** @type {!Object} */( this.player.getConfiguration().textDisplayer); return this.getLabelForItem( /** @type {number} */(textDisplayer[this.configName_])); } /** @override */ updateLocalizedStrings() { const LocIds = shaka.ui.Locales.Ids; this.backButton.ariaLabel = this.localization.resolve(LocIds.BACK); // Inside a menu group, the group already names the context. const label = this.localization.resolve( this.isInMenuGroup ? this.nameId_ : this.longNameId_); this.button.ariaLabel = label; this.nameSpan.textContent = label; this.backSpan.textContent = label; this.rebuildMenu(); } };