Files
shaka-player/ui/text_style_preview.js
Álvaro Velad Galván 4f62ce8b24 build: Reduce bundle size by deduplicating license headers (#10182)
Ensure generated bundles contain a single license header instead of
repeating the same notice across bundled modules.

Normalize all copyright years to 2016 and remove
duplicate license headers from generated bundles.

This reduces the final bundle size while preserving license information
in the distributed artifacts.
2026-06-05 12:43:28 +02:00

199 lines
4.5 KiB
JavaScript

/*! @license
* Shaka Player
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
goog.provide('shaka.ui.TextStylePreview');
goog.require('shaka.ui.Locales');
goog.require('shaka.ui.Localization');
goog.require('shaka.util.EventManager');
goog.requireType('shaka.config.PositionArea');
goog.requireType('shaka.Player');
/**
* Manages the temporary subtitle style preview shown while subtitle style
* settings are hovered or focused.
*
* @final
*/
shaka.ui.TextStylePreview = class {
/**
* @param {!shaka.Player} player
* @param {!shaka.ui.Localization} localization
*/
constructor(player, localization) {
/** @private {?shaka.Player} */
this.player_ = player;
/** @private {?shaka.ui.Localization} */
this.localization_ = localization;
/** @private {?shaka.extern.TextDisplayerConfiguration} */
this.baseConfig_ = null;
/** @private {!shaka.ui.TextStylePreview.Configuration} */
this.previewConfig_ = {};
/** @private {boolean} */
this.shown_ = false;
/** @private {?shaka.util.EventManager} */
this.eventManager_ = new shaka.util.EventManager();
this.eventManager_.listen(player, 'configurationchanged', () => {
this.updateBaseConfig_();
});
this.eventManager_.listenMulti(
localization,
[
shaka.ui.Localization.LOCALE_UPDATED,
shaka.ui.Localization.LOCALE_CHANGED,
], () => {
this.apply_();
});
}
/** Releases all resources owned by this preview. */
release() {
this.hide();
this.eventManager_?.release();
this.eventManager_ = null;
this.player_ = null;
this.localization_ = null;
}
/** Shows a temporary subtitle with the current text displayer style. */
show() {
if (!this.player_) {
return;
}
this.shown_ = true;
this.previewConfig_ = {};
this.updateBaseConfig_();
}
/**
* Updates the temporary subtitle style without changing player config.
*
* @param {!shaka.ui.TextStylePreview.Configuration=} config
*/
update(config = {}) {
if (!this.player_) {
return;
}
if (!this.shown_) {
this.show();
}
this.previewConfig_ = Object.assign({}, config);
this.apply_();
}
/** Reverts the temporary subtitle to the style captured when shown. */
reset() {
if (!this.shown_) {
return;
}
this.previewConfig_ = {};
this.apply_();
}
/** Removes the temporary subtitle style preview. */
hide() {
if (!this.shown_) {
return;
}
this.shown_ = false;
this.baseConfig_ = null;
this.previewConfig_ = {};
const displayer = this.getTextDisplayer_();
if (displayer &&
typeof displayer['clearTextStylePreview'] == 'function') {
displayer['clearTextStylePreview']();
}
}
/** @private */
updateBaseConfig_() {
if (!this.shown_ || !this.player_) {
return;
}
this.baseConfig_ = this.getCurrentTextDisplayerConfig_();
this.apply_();
}
/**
* @return {!shaka.extern.TextDisplayerConfiguration}
* @private
*/
getCurrentTextDisplayerConfig_() {
const player = /** @type {!shaka.Player} */(this.player_);
return /** @type {!shaka.extern.TextDisplayerConfiguration} */(
Object.assign({}, player.getConfiguration().textDisplayer));
}
/** @private */
apply_() {
if (!this.shown_ || !this.player_ || !this.baseConfig_) {
return;
}
const previewConfig =
/** @type {!shaka.extern.TextDisplayerConfiguration} */(
Object.assign({}, this.baseConfig_, this.previewConfig_));
const displayer = this.getTextDisplayer_();
if (displayer && typeof displayer['setTextStylePreview'] == 'function') {
displayer['setTextStylePreview'](
previewConfig, this.getLocalizedExampleText_());
}
}
/**
* @return {?}
* @private
*/
getTextDisplayer_() {
const player = /** @type {?} */(this.player_);
if (!player || typeof player.getTextDisplayer != 'function') {
return null;
}
return player.getTextDisplayer();
}
/**
* @return {string}
* @private
*/
getLocalizedExampleText_() {
if (!this.localization_) {
return '';
}
return this.localization_.resolve(
shaka.ui.Locales.Ids.SUBTITLES_EXAMPLE);
}
};
/**
* @typedef {{
* fontScaleFactor: (number|undefined),
* positionArea: (shaka.config.PositionArea|undefined),
* }}
*
* @description
* Text displayer fields that the style preview can temporarily override.
*/
shaka.ui.TextStylePreview.Configuration;