From e8e28073c1ee6624b280f71bdfa78271fa63f50b Mon Sep 17 00:00:00 2001 From: theodab Date: Mon, 25 Sep 2023 02:58:39 -0700 Subject: [PATCH] chore(demo): Removed demo localization system (#5665) A localization system was added to the demo, in preparation for future localizations of the demo page. However, such further localizations were never added, and it seems likely that they will never be added. Given that it will almost definitely never be used, the localization system has just become an annoyance that makes adding new features to the demo more difficult, so this removes the system entirely. --- build/check.py | 1 - demo/asset_card.js | 39 +- demo/cast_receiver/index.html | 1 - demo/close_button.js | 3 - demo/common/asset.js | 8 +- demo/common/assets.js | 97 ++- demo/common/message_ids.js | 311 --------- demo/config.js | 436 ++++++------- demo/custom.js | 137 ++-- demo/front.js | 17 +- demo/index.html | 37 +- demo/input.js | 17 +- demo/input_container.js | 17 +- demo/locales/en.json | 289 --------- demo/locales/source.json | 1150 --------------------------------- demo/main.js | 141 +--- demo/search.js | 56 +- demo/tooltip.js | 8 +- demo/visualizer.js | 8 +- demo/visualizer_button.js | 21 +- test/demo/demo_unit.js | 16 - 21 files changed, 376 insertions(+), 2434 deletions(-) delete mode 100644 demo/common/message_ids.js delete mode 100644 demo/locales/en.json delete mode 100644 demo/locales/source.json diff --git a/build/check.py b/build/check.py index f8552a8ce..1f6799ddb 100755 --- a/build/check.py +++ b/build/check.py @@ -283,7 +283,6 @@ def check_tests(args): [closure_base_js])) files.add(os.path.join(base, 'demo', 'common', 'asset.js')) files.add(os.path.join(base, 'demo', 'common', 'assets.js')) - files.add(os.path.join(base, 'demo', 'common', 'message_ids.js')) localizations = compiler.GenerateLocalizations(None) localizations.generate(args.force) diff --git a/demo/asset_card.js b/demo/asset_card.js index dbe71173d..4544f8257 100644 --- a/demo/asset_card.js +++ b/demo/asset_card.js @@ -8,7 +8,6 @@ goog.provide('shakaDemo.AssetCard'); goog.require('goog.asserts'); goog.require('shakaAssets'); -goog.require('shakaDemo.MessageIds'); goog.require('shakaDemo.Tooltips'); goog.requireType('ShakaDemoAssetInfo'); @@ -134,7 +133,7 @@ shakaDemo.AssetCard = class { /** * @param {string} icon - * @param {!shakaDemo.MessageIds} title + * @param {string} title * @private */ addFeatureIcon_(icon, title) { @@ -190,18 +189,17 @@ shakaDemo.AssetCard = class { /** * Modify an asset to make it clear that it is unsupported. - * @param {!shakaDemo.MessageIds} unsupportedReason + * @param {string} unsupportedReason */ markAsUnsupported(unsupportedReason) { this.card_.classList.add('asset-card-unsupported'); - this.makeUnsupportedButton_( - shakaDemo.MessageIds.UNSUPPORTED, unsupportedReason); + this.makeUnsupportedButton_('Not Available', unsupportedReason); } /** * Make a button that represents the lack of a working button. - * @param {?shakaDemo.MessageIds} buttonName - * @param {!shakaDemo.MessageIds} unsupportedReason + * @param {?string} buttonName + * @param {string} unsupportedReason * @return {!Element} * @private */ @@ -306,16 +304,15 @@ shakaDemo.AssetCard = class { return; } - this.makeYesNoDialogue_(parentDiv, - shakaDemo.MessageIds.DELETE_STORED_PROMPT, async () => { - deleteButton.disabled = true; - await this.asset_.unstoreCallback(); - }); + this.makeYesNoDialogue_(parentDiv, 'Delete the offline copy?', async () => { + deleteButton.disabled = true; + await this.asset_.unstoreCallback(); + }); } /** * @param {!Element} parentDiv - * @param {!shakaDemo.MessageIds} text + * @param {string} text * @param {function():Promise} callback * @private */ @@ -330,14 +327,14 @@ shakaDemo.AssetCard = class { const textElement = document.createElement('h2'); textElement.classList.add('mdl-typography--title'); - textElement.textContent = shakaDemoMain.getLocalizedString(text); + textElement.textContent = text; dialog.appendChild(textElement); const buttonsDiv = document.createElement('div'); dialog.appendChild(buttonsDiv); - const makeButton = (textId, fn) => { + const makeButton = (text, fn) => { const button = document.createElement('button'); - button.textContent = shakaDemoMain.getLocalizedString(textId); + button.textContent = text; button.classList.add('mdl-button'); button.classList.add('mdl-button--colored'); button.classList.add('mdl-js-button'); @@ -348,12 +345,12 @@ shakaDemo.AssetCard = class { buttonsDiv.appendChild(button); button.blur(); }; - makeButton(shakaDemo.MessageIds.PROMPT_YES, async () => { + makeButton('Yes', async () => { dialog.close(); await callback(); this.remakeButtons(); }); - makeButton(shakaDemo.MessageIds.PROMPT_NO, () => { + makeButton('No', () => { dialog.close(); }); @@ -385,9 +382,9 @@ shakaDemo.AssetCard = class { /** * Adds a button to the bottom of the card that will call |onClick| when * clicked. For example, a play or delete button. - * @param {?shakaDemo.MessageIds} name + * @param {?string} name * @param {function()} onclick - * @param {shakaDemo.MessageIds=} yesNoDialogText + * @param {string=} yesNoDialogText * @return {!HTMLButtonElement} */ addButton(name, onclick, yesNoDialogText) { @@ -397,7 +394,7 @@ shakaDemo.AssetCard = class { button.classList.add('mdl-button--colored'); button.classList.add('mdl-js-button'); button.classList.add('mdl-js-ripple-effect'); - button.textContent = name ? shakaDemoMain.getLocalizedString(name) : ''; + button.textContent = name || ''; button.addEventListener('click', () => { if (!button.hasAttribute('disabled')) { if (yesNoDialogText) { diff --git a/demo/cast_receiver/index.html b/demo/cast_receiver/index.html index e7454d2ac..7fda5f9cc 100644 --- a/demo/cast_receiver/index.html +++ b/demo/cast_receiver/index.html @@ -52,7 +52,6 @@ UNCOMPILED_JS = [ // This file contains goog.require calls for all exported library classes. '../../shaka-player.uncompiled.js', // These are the individual parts of the receiver app. - '../common/message_ids.js', '../common/asset.js', '../common/assets.js', 'receiver_app.js', diff --git a/demo/close_button.js b/demo/close_button.js index 570ff38d5..041fa5ea5 100644 --- a/demo/close_button.js +++ b/demo/close_button.js @@ -41,9 +41,6 @@ shakaDemo.CloseButton = class extends shaka.ui.Element { }); }); } - - // TODO: Make sure that the screenreader description of this control is - // localized! } }; diff --git a/demo/common/asset.js b/demo/common/asset.js index e17a4cfb0..fb9e36a4c 100644 --- a/demo/common/asset.js +++ b/demo/common/asset.js @@ -12,8 +12,6 @@ goog.provide('ShakaDemoAssetInfo'); -goog.require('shakaDemo.MessageIds'); - /** * An object that contains information about an asset. @@ -115,9 +113,9 @@ const ShakaDemoAssetInfo = class { } /** - * A sort comparator for comparing two message Ids, ignoring case. - * @param {shakaDemo.MessageIds} a - * @param {shakaDemo.MessageIds} b + * A sort comparator for comparing two messages, ignoring case. + * @param {string} a + * @param {string} b * @return {number} * @private */ diff --git a/demo/common/assets.js b/demo/common/assets.js index 2a4ed40df..0b8ee93d5 100644 --- a/demo/common/assets.js +++ b/demo/common/assets.js @@ -11,7 +11,6 @@ */ goog.require('ShakaDemoAssetInfo'); -goog.require('shakaDemo.MessageIds'); goog.provide('shakaAssets'); @@ -24,34 +23,34 @@ goog.provide('shakaAssets'); const shakaAssets = {}; -/** @enum {shakaDemo.MessageIds} */ +/** @enum {string} */ shakaAssets.Source = { - CUSTOM: shakaDemo.MessageIds.CUSTOM, - SHAKA: shakaDemo.MessageIds.SHAKA, - AXINOM: shakaDemo.MessageIds.AXINOM, - UNIFIED_STREAMING: shakaDemo.MessageIds.UNIFIED_STREAMING, - DASH_IF: shakaDemo.MessageIds.DASH_IF, - BITCODIN: shakaDemo.MessageIds.BITCODIN, - METACDN: shakaDemo.MessageIds.METACDN, - NIMBLE_STREAMER: shakaDemo.MessageIds.NIMBLE_STREAMER, - AZURE_MEDIA_SERVICES: shakaDemo.MessageIds.AZURE_MEDIA_SERVICES, - GPAC: shakaDemo.MessageIds.GPAC, - UPLYNK: shakaDemo.MessageIds.UPLYNK, - APPLE: shakaDemo.MessageIds.APPLE, - IRT: shakaDemo.MessageIds.IRT, - MICROSOFT: shakaDemo.MessageIds.MICROSOFT, - VNOVA: shakaDemo.MessageIds.VNOVA, + CUSTOM: 'Custom', + SHAKA: 'Shaka', + AXINOM: 'Axinom', + UNIFIED_STREAMING: 'Unified Streaming', + DASH_IF: 'DASH-IF', + BITCODIN: 'Bitcodin', + METACDN: 'MetaCDN', + NIMBLE_STREAMER: 'Nimble Streamer', + AZURE_MEDIA_SERVICES: 'Azure Media Services', + GPAC: 'GPAC', + UPLYNK: 'Verizon Digital Media Services', + APPLE: 'Apple', + IRT: 'IRT', + MICROSOFT: 'Microsoft', + VNOVA: 'V-Nova', }; -/** @enum {shakaDemo.MessageIds} */ +/** @enum {string} */ shakaAssets.KeySystem = { - CLEAR_KEY: shakaDemo.MessageIds.CLEAR_KEY, - FAIRPLAY: shakaDemo.MessageIds.FAIRPLAY, - PLAYREADY: shakaDemo.MessageIds.PLAYREADY, - WIDEVINE: shakaDemo.MessageIds.WIDEVINE, - AES128: shakaDemo.MessageIds.AES128, - CLEAR: shakaDemo.MessageIds.CLEAR, + CLEAR_KEY: 'Clear Key DRM', + FAIRPLAY: 'Fairplay DRM', + PLAYREADY: 'PlayReady DRM', + WIDEVINE: 'Widevine DRM', + AES128: 'AES-128 protection', + CLEAR: 'No DRM protection', }; @@ -95,65 +94,65 @@ shakaAssets.identifierForKeySystem = (keySystem) => { }; -/** @enum {shakaDemo.MessageIds} */ +/** @enum {string} */ shakaAssets.Feature = { // Set if the asset has a special trick mode track, for rewinding effects. - TRICK_MODE: shakaDemo.MessageIds.TRICK_MODE, - XLINK: shakaDemo.MessageIds.XLINK, + TRICK_MODE: 'Special trick mode track', + XLINK: 'XLink', // Set if the asset has any subtitle tracks. - SUBTITLES: shakaDemo.MessageIds.SUBTITLES, + SUBTITLES: 'Subtitles', // Set if the asset has any closed caption tracks. - CAPTIONS: shakaDemo.MessageIds.CAPTIONS, + CAPTIONS: 'Captions', // Set if the asset has multiple audio languages. - MULTIPLE_LANGUAGES: shakaDemo.MessageIds.MULTIPLE_LANGUAGES, + MULTIPLE_LANGUAGES: 'Multiple languages', // Set if the asset is audio-only. - AUDIO_ONLY: shakaDemo.MessageIds.AUDIO_ONLY, + AUDIO_ONLY: 'Audio only', // Set if the asset can be stored offline. - OFFLINE: shakaDemo.MessageIds.OFFLINE, + OFFLINE: 'Downloadable', // A synthetic property used in the "all content" tab. Should not be given to // assets. - STORED: shakaDemo.MessageIds.STORED, + STORED: 'Downloaded', // Set if the asset has ads. Autoset by calling setAdTagUri() on an asset. // Does not need to be set manually. - ADS: shakaDemo.MessageIds.ADS, + ADS: 'Ads', // Set if the asset is a livestream. - LIVE: shakaDemo.MessageIds.LIVE, + LIVE: 'Live', // A synthetic property used if the asset is VOD (not-livestream). - VOD: shakaDemo.MessageIds.VOD, + VOD: 'VOD', // Set if the asset has at least one WebM stream. - WEBM: shakaDemo.MessageIds.WEBM, + WEBM: 'WebM', // Set if the asset has at least one mp4 stream. - MP4: shakaDemo.MessageIds.MP4, + MP4: 'MP4', // Set if the asset has at least one MPEG-2 TS stream. - MP2TS: shakaDemo.MessageIds.MP2TS, + MP2TS: 'MPEG-2 TS', // Set if the asset has at least one containerless stream (AAC, etc). - CONTAINERLESS: shakaDemo.MessageIds.CONTAINERLESS, + CONTAINERLESS: 'Containerless', // Set if the asset has at least one stream that is at least 720p. - HIGH_DEFINITION: shakaDemo.MessageIds.HIGH_DEFINITION, + HIGH_DEFINITION: 'High definition', // Set if the asset has at least one stream that is at least 4k. - ULTRA_HIGH_DEFINITION: shakaDemo.MessageIds.ULTRA_HIGH_DEFINITION, + ULTRA_HIGH_DEFINITION: 'Ultra-high definition', // Set if the asset has at least one stream that is surround sound. - SURROUND: shakaDemo.MessageIds.SURROUND, + SURROUND: 'Surround sound', // Set if the asset is a MPEG-DASH manifest. - DASH: shakaDemo.MessageIds.DASH, + DASH: 'DASH', // Set if the asset is an HLS manifest. - HLS: shakaDemo.MessageIds.HLS, + HLS: 'HLS', // Set if the asset is an MSS manifest. - MSS: shakaDemo.MessageIds.MSS, + MSS: 'MSS', // Set if the asset has at least one image stream. - THUMBNAILS: shakaDemo.MessageIds.THUMBNAILS, + THUMBNAILS: 'Thumbnails', // Set if the asset has LCEVC. - LCEVC: shakaDemo.MessageIds.LCEVC, + LCEVC: 'LCEVC', // Set if the asset has Low Latency mode. - LOW_LATENCY_STREAM: shakaDemo.MessageIds.LOW_LATENCY_STREAM, + LOW_LATENCY_STREAM: 'Low Latency Streams', }; diff --git a/demo/common/message_ids.js b/demo/common/message_ids.js deleted file mode 100644 index 316ee28c9..000000000 --- a/demo/common/message_ids.js +++ /dev/null @@ -1,311 +0,0 @@ -/*! @license - * Shaka Player - * Copyright 2016 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -goog.provide('shakaDemo.MessageIds'); - -/* eslint-disable max-len */ -/** @enum {string} */ -shakaDemo.MessageIds = { - /* Features. */ - ADS: 'DEMO_ADS', - AUDIO_ONLY: 'DEMO_AUDIO_ONLY', - CAPTIONS: 'DEMO_CAPTIONS', - CONTAINERLESS: 'DEMO_CONTAINERLESS', - DASH: 'DEMO_DASH', - HIGH_DEFINITION: 'DEMO_HIGH_DEFINITION', - HLS: 'DEMO_HLS', - LCEVC: 'DEMO_LCEVC', - LIVE: 'DEMO_LIVE', - MP2TS: 'DEMO_MP2TS', - MP4: 'DEMO_MP4', - MSS: 'DEMO_MSS', - MULTIPLE_LANGUAGES: 'DEMO_MULTIPLE_LANGUAGES', - OFFLINE: 'DEMO_OFFLINE', - STORED: 'DEMO_STORED', - SUBTITLES: 'DEMO_SUBTITLES', - SURROUND: 'DEMO_SURROUND', - THUMBNAILS: 'DEMO_THUMBNAILS', - TRICK_MODE: 'DEMO_TRICK_MODE', - ULTRA_HIGH_DEFINITION: 'DEMO_ULTRA_HIGH_DEFINITION', - VOD: 'DEMO_VOD', - WEBM: 'DEMO_WEBM', - XLINK: 'DEMO_XLINK', - LOW_LATENCY_STREAM: 'DEMO_LOW_LATENCY_STREAM', - /* Key systems. */ - AES128: 'DEMO_AES128', - CLEAR: 'DEMO_CLEAR', - CLEAR_KEY: 'DEMO_CLEAR_KEY', - FAIRPLAY: 'DEMO_FAIRPLAY', - PLAYREADY: 'DEMO_PLAYREADY', - WIDEVINE: 'DEMO_WIDEVINE', - /* Sources. */ - APPLE: 'DEMO_APPLE', - AXINOM: 'DEMO_AXINOM', - AZURE_MEDIA_SERVICES: 'DEMO_AZURE_MEDIA_SERVICES', - BITCODIN: 'DEMO_BITCODIN', - CUSTOM: 'DEMO_CUSTOM', - DASH_IF: 'DEMO_DASH_IF', - GPAC: 'DEMO_GPAC', - IRT: 'DEMO_IRT', - METACDN: 'DEMO_METACDN', - MICROSOFT: 'DEMO_MICROSOFT', - NIMBLE_STREAMER: 'DEMO_NIMBLE_STREAMER', - SHAKA: 'DEMO_SHAKA', - UNIFIED_STREAMING: 'DEMO_UNIFIED_STREAMING', - UPLYNK: 'DEMO_UPLYNK', - /* HTML. */ - ALL_CONTENT: 'DEMO_ALL_CONTENT', - CDN_HEADER: 'DEMO_CDN_HEADER', - COMPILED_DEBUG: 'DEMO_COMPILED_DEBUG', - COMPILED_RELEASE: 'DEMO_COMPILED_RELEASE', - CONFIG: 'DEMO_CONFIG', - CUSTOM_CONTENT: 'DEMO_CUSTOM_CONTENT', - DEMO_MODE_HEADER: 'DEMO_DEMO_MODE_HEADER', - DOCUMENTATION: 'DEMO_DOCUMENTATION', - HOME: 'DEMO_HOME', - JSDELIVR: 'DEMO_JSDELIVR', - LIBRARIES: 'DEMO_LIBRARIES', - LICENSE: 'DEMO_LICENSE', - NPM: 'DEMO_NPM', - PROJECT_LINKS_HEADER: 'DEMO_PROJECT_LINKS_HEADER', - REPORT_BUG: 'DEMO_REPORT_BUG', - SOURCE: 'DEMO_SOURCE', - SUPPORT: 'DEMO_SUPPORT', - UNCOMPILED: 'DEMO_UNCOMPILED', - /* Common. */ - FAILURE_MISC: 'DEMO_FAILURE_MISC', - FAILURE_NO_BROWSER_SUPPORT: 'DEMO_FAILURE_NO_BROWSER_SUPPORT', - PLAY: 'DEMO_PLAY', - PROMPT_NO: 'DEMO_PROMPT_NO', - PROMPT_YES: 'DEMO_PROMPT_YES', - UNSUPPORTED_DISABLED: 'DEMO_UNSUPPORTED_DISABLED', - UNSUPPORTED_NO_DASH_SUPPORT: 'DEMO_UNSUPPORTED_NO_DASH_SUPPORT', - UNSUPPORTED_NO_DOWNLOAD: 'DEMO_UNSUPPORTED_NO_DOWNLOAD', - UNSUPPORTED_NO_FORMAT_SUPPORT: 'DEMO_UNSUPPORTED_NO_FORMAT_SUPPORT', - UNSUPPORTED_NO_HLS_SUPPORT: 'DEMO_UNSUPPORTED_NO_HLS_SUPPORT', - UNSUPPORTED_NO_OFFLINE: 'DEMO_UNSUPPORTED_NO_OFFLINE', - UNSUPPORTED_NO_KEY_SUPPORT: 'DEMO_UNSUPPORTED_NO_KEY_SUPPORT', - UNSUPPORTED_NO_LICENSE_SUPPORT: 'DEMO_UNSUPPORTED_NO_LICENSE_SUPPORT', - UNSUPPORTED_NO_MSS_SUPPORT: 'DEMO_UNSUPPORTED_NO_MSS_SUPPORT', - /* Visualizer. */ - VISUALIZER_AUTO_SCREENSHOT_TOGGLE: 'DEMO_VISUALIZER_AUTO_SCREENSHOT_TOGGLE', - VISUALIZER_BUTTON: 'DEMO_VISUALIZER_BUTTON', - VISUALIZER_SCREENSHOT_BUTTON: 'DEMO_VISUALIZER_SCREENSHOT_BUTTON', - /* Asset card. */ - DELETE_STORED_PROMPT: 'DEMO_DELETE_STORED_PROMPT', - UNSUPPORTED: 'DEMO_UNSUPPORTED', - /* Front panel. */ - FRONT_INTRO_DISMISS: 'DEMO_FRONT_INTRO_DISMISS', - FRONT_INTRO_ONE: 'DEMO_FRONT_INTRO_ONE', - FRONT_INTRO_TWO: 'DEMO_FRONT_INTRO_TWO', - /* Custom panel. */ - AD_TAG_URL: 'DEMO_AD_TAG_URL', - ADS_TAB: 'DEMO_ADS_TAB', - IMA_ASSET_KEY: 'DEMO_IMA_ASSET_KEY', - IMA_CONTENT_SRC_ID: 'DEMO_IMA_CONTENT_SRC_ID', - IMA_MANIFEST_TYPE: 'DEMO_IMA_MANIFEST_TYPE', - IMA_VIDEO_ID: 'DEMO_IMA_VIDEO_ID', - CANCEL_BUTTON: 'DEMO_CANCEL_BUTTON', - CUSTOM_INTRO_ONE: 'DEMO_CUSTOM_INTRO_ONE', - CUSTOM_INTRO_TWO: 'DEMO_CUSTOM_INTRO_TWO', - CUSTOM_INTRO_THREE: 'DEMO_CUSTOM_INTRO_THREE', - DELETE_CUSTOM: 'DEMO_DELETE_CUSTOM', - DELETE_CUSTOM_PROMPT: 'DEMO_DELETE_CUSTOM_PROMPT', - DRM_SYSTEM: 'DEMO_DRM_SYSTEM', - DRM_TAB: 'DEMO_DRM_TAB', - EDIT_CUSTOM: 'DEMO_EDIT_CUSTOM', - HLS_FULL_MIME_TYPE: 'DEMO_HLS_FULL_MIME_TYPE', - HLS_TAB: 'DEMO_HLS_TAB', - HEADERS_TAB: 'DEMO_HEADERS_TAB', - ICON_URL: 'DEMO_ICON_URL', - LICENSE_CERTIFICATE_URL: 'DEMO_LICENSE_CERTIFICATE_URL', - LICENSE_HEADER_NAME: 'DEMO_LICENSE_HEADER_NAME', - LICENSE_HEADER_TITLE: 'DEMO_LICENSE_HEADER_TITLE', - LICENSE_HEADER_VALUE: 'DEMO_LICENSE_HEADER_VALUE', - LICENSE_SERVER_URL: 'DEMO_LICENSE_SERVER_URL', - MAIN_TAB: 'DEMO_MAIN_TAB', - MANIFEST_URL: 'DEMO_MANIFEST_URL', - MANIFEST_URL_ERROR: 'DEMO_MANIFEST_URL_ERROR', - NAME: 'DEMO_NAME', - NAME_ERROR: 'DEMO_NAME_ERROR', - EXTRA_SHAKA_PLAYER_CONFIG: 'DEMO_EXTRA_SHAKA_PLAYER_CONFIG', - EXTRA_TAB: 'DEMO_EXTRA_TAB', - INVALID_JSON_CONFIG_ERROR: 'DEMO_INVALID_JSON_CONFIG_ERROR', - MIME_TYPE: 'DEMO_MIME_TYPE', - SAVE_BUTTON: 'DEMO_SAVE_BUTTON', - /* Search panel. */ - AD_SEARCH: 'DEMO_AD_SEARCH', - AUDIO_ONLY_SEARCH: 'DEMO_AUDIO_ONLY_SEARCH', - CONTAINER_SEARCH: 'DEMO_CONTAINER_SEARCH', - DRM_SEARCH: 'DEMO_DRM_SEARCH', - HIGH_DEFINITION_SEARCH: 'DEMO_HIGH_DEFINITION_SEARCH', - LIVE_SEARCH: 'DEMO_LIVE_SEARCH', - MANIFEST_SEARCH: 'DEMO_MANIFEST_SEARCH', - OFFLINE_SEARCH: 'DEMO_OFFLINE_SEARCH', - STORED_SEARCH: 'DEMO_STORED_SEARCH', - SUBTITLES_SEARCH: 'DEMO_SUBTITLES_SEARCH', - SURROUND_SEARCH: 'DEMO_SURROUND_SEARCH', - SOURCE_SEARCH: 'DEMO_SOURCE_SEARCH', - TRICK_MODE_SEARCH: 'DEMO_TRICK_MODE_SEARCH', - XLINK_SEARCH: 'DEMO_XLINK_SEARCH', - /* Config panel. */ - ADAPTATION_RESTRICTIONS_SECTION_HEADER: 'DEMO_ADAPTATION_RESTRICTIONS_SECTION_HEADER', - ADAPTATION_SECTION_HEADER: 'DEMO_ADAPTATION_SECTION_HEADER', - ADS_SECTION_HEADER: 'DEMO_ADS_SECTION_HEADER', - ALWAYS_STREAM_TEXT: 'DEMO_ALWAYS_STREAM_TEXT', - ALWAYS_STREAM_TEXT_WARNING: 'DEMO_ALWAYS_STREAM_TEXT_WARNING', - AUDIO_CHANNEL_COUNT: 'DEMO_AUDIO_CHANNEL_COUNT', - AUDIO_LANGUAGE: 'DEMO_AUDIO_LANGUAGE', - AUDIO_LABEL: 'DEMO_AUDIO_LABEL', - AUDIO_ROBUSTNESS: 'DEMO_AUDIO_ROBUSTNESS', - AUTO_CORRECT_DASH_DRIFT: 'DEMO_AUTO_CORRECT_DASH_DRIFT', - AUTO_LOW_LATENCY: 'DEMO_AUTO_LOW_LATENCY', - AUTO_SHOW_TEXT: 'DEMO_AUTO_SHOW_TEXT', - AUTO_SHOW_TEXT_NEVER: 'DEMO_AUTO_SHOW_TEXT_NEVER', - AUTO_SHOW_TEXT_ALWAYS: 'DEMO_AUTO_SHOW_TEXT_ALWAYS', - AUTO_SHOW_TEXT_IF_PREFERRED_TEXT_LANGUAGE: 'DEMO_AUTO_SHOW_TEXT_IF_PREFERRED_TEXT_LANGUAGE', - AUTO_SHOW_TEXT_IF_SUBTITLES_MAY_BE_NEEDED: 'DEMO_AUTO_SHOW_TEXT_IF_SUBTITLES_MAY_BE_NEEDED', - AVAILABILITY_WINDOW_OVERRIDE: 'DEMO_AVAILABILITY_WINDOW_OVERRIDE', - BACKOFF_FACTOR: 'DEMO_BACKOFF_FACTOR', - BASE_DELAY: 'DEMO_BASE_DELAY', - BANDWIDTH_DOWNGRADE: 'DEMO_BANDWIDTH_DOWNGRADE', - BANDWIDTH_ESTIMATE: 'DEMO_BANDWIDTH_ESTIMATE', - BANDWIDTH_UPGRADE: 'DEMO_BANDWIDTH_UPGRADE', - BUFFER_BEHIND: 'DEMO_BUFFER_BEHIND', - BUFFERING_GOAL: 'DEMO_BUFFERING_GOAL', - CLEAR_BUFFER_SWITCH: 'DEMO_CLEAR_BUFFER_SWITCH', - CLOCK_SYNC_URI: 'DEMO_CLOCK_SYNC_URI', - CMCD_SECTION_HEADER: 'DEMO_CMCD_SECTION_HEADER', - CONNECTION_TIMEOUT: 'DEMO_CONNECTION_TIMEOUT', - CONTENT_ID: 'DEMO_CONTENT_ID', - CUSTOM_PLAYHEAD_TRACKER: 'DEMO_CUSTOM_PLAYHEAD_TRACKER', - DASH_SEQUENCE_MODE: 'DEMO_DASH_SEQUENCE_MODE', - DEFAULT_AUDIO_CODEC: 'DEMO_DEFAULT_AUDIO_CODEC', - DEFAULT_PRESENTATION_DELAY: 'DEMO_DEFAULT_PRESENTATION_DELAY', - DEFAULT_VIDEO_CODEC: 'DEMO_DEFAULT_VIDEO_CODEC', - DELAY_LICENSE: 'DEMO_DELAY_LICENSE', - DISABLE_AUDIO: 'DEMO_DISABLE_AUDIO', - DISABLE_TEXT: 'DEMO_DISABLE_TEXT', - DISABLE_THUMBNAILS: 'DEMO_DISABLE_THUMBNAILS', - DISABLE_VIDEO: 'DEMO_DISABLE_VIDEO', - DISABLE_XLINK_PROCESSING: 'DEMO_DISABLE_XLINK_PROCESSING', - DISPATCH_ALL_EMSG_BOXES: 'DEMO_DISPATCH_ALL_EMSG_BOXES', - OBSERVE_QUALITY_CHANGES: 'DEMO_OBSERVE_QUALITY_CHANGES', - DRM_RETRY_SECTION_HEADER: 'DEMO_DRM_RETRY_SECTION_HEADER', - DRM_SECTION_HEADER: 'DEMO_DRM_SECTION_HEADER', - DRM_SESSION_TYPE: 'DEMO_DRM_SESSION_TYPE', - DURATION_BACKOFF: 'DEMO_DURATION_BACKOFF', - ENABLED: 'DEMO_ENABLED', - ENABLE_AUDIO_GROUPS: 'DEMO_ENABLE_AUDIO_GROUPS', - FAST_HALF_LIFE: 'DEMO_FAST_HALF_LIFE', - FORCE_HTTPS: 'DEMO_FORCE_HTTPS', - FORCE_TRANSMUX: 'DEMO_FORCE_TRANSMUX', - INSERT_FAKE_ENCRYPTION_IN_INIT: 'DEMO_INSERT_FAKE_ENCRYPTION_IN_INIT', - FUZZ_FACTOR: 'DEMO_FUZZ_FACTOR', - GAP_DETECTION_THRESHOLD: 'DEMO_GAP_DETECTION_THRESHOLD', - GAP_JUMP_TIMER_TIME: 'DEMO_GAP_JUMP_TIMER_TIME', - HDR_LEVEL: 'DEMO_HDR_LEVEL', - HDR_LEVEL_AUTO: 'DEMO_HDR_LEVEL_AUTO', - HDR_LEVEL_HLG: 'DEMO_HDR_LEVEL_HLG', - HDR_LEVEL_NONE: 'DEMO_HDR_LEVEL_NONE', - HDR_LEVEL_PQ: 'DEMO_HDR_LEVEL_PQ', - HDR_LEVEL_SDR: 'DEMO_HDR_LEVEL_SDR', - HLS_SEQUENCE_MODE: 'DEMO_HLS_SEQUENCE_MODE', - IGNORE_DASH_EMPTY_ADAPTATION_SET: 'DEMO_IGNORE_DASH_EMPTY_ADAPTATION_SET', - IGNORE_DASH_DRM: 'DEMO_IGNORE_DASH_DRM', - IGNORE_DASH_MAX_SEGMENT_DURATION: 'DEMO_IGNORE_DASH_MAX_SEGMENT_DURATION', - IGNORE_DASH_SUGGESTED_PRESENTATION_DELAY: 'DEMO_IGNORE_DASH_SUGGESTED_PRESENTATION_DELAY', - IGNORE_DEVICE_PIXEL_RATIO: 'DEMO_IGNORE_DEVICE_PIXEL_RATIO', - IGNORE_HLS_IMAGE_FAILURES: 'DEMO_IGNORE_HLS_IMAGE_FAILURES', - IGNORE_HLS_TEXT_FAILURES: 'DEMO_IGNORE_HLS_TEXT_FAILURES', - IGNORE_MANIFEST_PROGRAM_DATE_TIME: 'DEMO_IGNORE_MANIFEST_PROGRAM_DATE_TIME', - IGNORE_MANIFEST_TIMESTAMPS_IN_SEGMENTS_MODE: 'DEMO_IGNORE_MANIFEST_TIMESTAMPS_IN_SEGMENTS_MODE', - IGNORE_MIN_BUFFER_TIME: 'DEMO_IGNORE_MIN_BUFFER_TIME', - IGNORE_TEXT_FAILURES: 'DEMO_IGNORE_TEXT_FAILURES', - INACCURATE_MANIFEST_TOLERANCE: 'DEMO_INACCURATE_MANIFEST_TOLERANCE', - INITIAL_SEGMENT_LIMIT: 'DEMO_INITIAL_SEGMENT_LIMIT', - LANGUAGE_SECTION_HEADER: 'DEMO_LANGUAGE_SECTION_HEADER', - LCEVC_DRAW_LOGO: 'DEMO_LCEVC_DRAW_LOGO', - LCEVC_DYNAMIC_PERFORMANCE_SCALING: 'DEMO_LCEVC_DYNAMIC_PERFORMANCE_SCALING', - LCEVC_LOG_LEVEL: 'DEMO_LCEVC_LOG_LEVEL', - LCEVC_SECTION_HEADER: 'DEMO_LCEVC_SECTION_HEADER', - LIVE_SEGMENTS_DELAY: 'DEMO_LIVE_SEGMENTS_DELAY', - LIVE_SYNC: 'DEMO_LIVE_SYNC', - LIVE_SYNC_MAX_LATENCY: 'DEMO_LIVE_SYNC_MAX_LATENCY', - LIVE_SYNC_PLAYBACK_RATE: 'DEMO_LIVE_SYNC_PLAYBACK_RATE', - LOG_LEVEL: 'DEMO_LOG_LEVEL', - LOG_LEVEL_DEBUG: 'DEMO_LOG_LEVEL_DEBUG', - LOG_LEVEL_INFO: 'DEMO_LOG_LEVEL_INFO', - LOG_LEVEL_V: 'DEMO_LOG_LEVEL_V', - LOG_LEVEL_VV: 'DEMO_LOG_LEVEL_VV', - LOG_LICENSE_EXCHANGE: 'DEMO_LOG_LICENSE_EXCHANGE', - LOW_LATENCY: 'DEMO_LOW_LATENCY', - MANIFEST_RETRY_SECTION_HEADER: 'DEMO_MANIFEST_RETRY_SECTION_HEADER', - MANIFEST_SECTION_HEADER: 'DEMO_MANIFEST_SECTION_HEADER', - MAX_ATTEMPTS: 'DEMO_MAX_ATTEMPTS', - MAX_BANDWIDTH: 'DEMO_MAX_BANDWIDTH', - MAX_DISABLED_TIME: 'DEMO_MAX_DISABLED_TIME', - MAX_FRAMERATE: 'DEMO_MAX_FRAMERATE', - MAX_HEIGHT: 'DEMO_MAX_HEIGHT', - MAX_PIXELS: 'DEMO_MAX_PIXELS', - MAX_WIDTH: 'DEMO_MAX_WIDTH', - MEDIA_SOURCE_SECTION_HEADER: 'DEMO_MEDIA_SOURCE_SECTION_HEADER', - MIN_BANDWIDTH: 'DEMO_MIN_BANDWIDTH', - MIN_BYTES: 'DEMO_MIN_BYTES', - MIN_HDCP_VERSION: 'DEMO_MIN_HDCP_VERSION', - MIN_FRAMERATE: 'DEMO_MIN_FRAMERATE', - MIN_HEIGHT: 'DEMO_MIN_HEIGHT', - MIN_PIXELS: 'DEMO_MIN_PIXELS', - MIN_TOTAL_BYTES: 'DEMO_MIN_TOTAL_BYTES', - MIN_WIDTH: 'DEMO_MIN_WIDTH', - MSS_SEQUENCE_MODE: 'DEMO_MSS_SEQUENCE_MODE', - NETWORK_INFORMATION: 'DEMO_NETWORK_INFORMATION', - NUMBER_DECIMAL_WARNING: 'DEMO_NUMBER_DECIMAL_WARNING', - NUMBER_INTEGER_WARNING: 'DEMO_NUMBER_INTEGER_WARNING', - NUMBER_NONZERO_DECIMAL_WARNING: 'DEMO_NUMBER_NONZERO_DECIMAL_WARNING', - NUMBER_NONZERO_INTEGER_WARNING: 'DEMO_NUMBER_NONZERO_INTEGER_WARNING', - NUMBER_OF_PARALLEL_DOWNLOADS: 'DEMO_NUMBER_OF_PARALLEL_DOWNLOADS', - OFFLINE_SECTION_HEADER: 'DEMO_OFFLINE_SECTION_HEADER', - PARSE_INBAND_PSSH_ENABLED: 'DEMO_PARSE_INBAND_PSSH_ENABLED', - PREFER_FORCED_SUBS: 'DEMO_PREFER_FORCED_SUBS', - PREFER_NATIVE_HLS: 'DEMO_PREFER_NATIVE_HLS', - REBUFFERING_GOAL: 'DEMO_REBUFFERING_GOAL', - RESTRICT_TO_ELEMENT_SIZE: 'DEMO_RESTRICT_TO_ELEMENT_SIZE', - RESTRICT_TO_SCREEN_SIZE: 'DEMO_RESTRICT_TO_SCREEN_SIZE', - RESTRICTIONS_SECTION_HEADER: 'DEMO_RESTRICTIONS_SECTION_HEADER', - SAFE_MARGIN_SWITCH: 'DEMO_SAFE_MARGIN_SWITCH', - SAFE_SEEK_OFFSET: 'DEMO_SAFE_SEEK_OFFSET', - SAFE_SKIP_DISTANCE: 'DEMO_SAFE_SKIP_DISTANCE', - SEGMENT_RELATIVE_VTT_TIMING: 'DEMO_SEGMENT_RELATIVE_VTT_TIMING', - SESSION_ID: 'DEMO_SESSION_ID', - SHAKA_CONTROLS: 'DEMO_SHAKA_CONTROLS', - SLOW_HALF_LIFE: 'DEMO_SLOW_HALF_LIFE', - SOURCE_BUFFER_EXTRA_FEATURES: 'DEMO_SOURCE_BUFFER_EXTRA_FEATURES', - STALL_DETECTOR_ENABLED: 'DEMO_STALL_DETECTOR_ENABLED', - STALL_THRESHOLD: 'DEMO_STALL_THRESHOLD', - STALL_TIMEOUT: 'DEMO_STALL_TIMEOUT', - START_AT_SEGMENT_BOUNDARY: 'DEMO_START_AT_SEGMENT_BOUNDARY', - STREAMING_RETRY_SECTION_HEADER: 'DEMO_STREAMING_RETRY_SECTION_HEADER', - STREAMING_SECTION_HEADER: 'DEMO_STREAMING_SECTION_HEADER', - SWITCH_INTERVAL: 'DEMO_SWITCH_INTERVAL', - TEXT_LANGUAGE: 'DEMO_TEXT_LANGUAGE', - TEXT_ROLE: 'DEMO_TEXT_ROLE', - TIMEOUT: 'DEMO_TIMEOUT', - TRICK_PLAY_CONTROLS: 'DEMO_TRICK_PLAY_CONTROLS', - TRICK_PLAY_CONTROLS_WARNING: 'DEMO_TRICK_PLAY_CONTROLS_WARNING', - UI_LOCALE: 'DEMO_UI_LOCALE', - UPDATE_EXPIRATION_TIME: 'DEMO_UPDATE_EXPIRATION_TIME', - UPDATE_INTERVAL_SECONDS: 'DEMO_UPDATE_INTERVAL_SECONDS', - USE_HEADERS: 'DEMO_USE_HEADERS', - USE_NATIVE_HLS_SAFARI: 'DEMO_USE_NATIVE_HLS_SAFARI', - USE_PERSISTENT_LICENSES: 'DEMO_USE_PERSISTENT_LICENSES', - USE_SAFARI_BEHAVIOR_FOR_LIVE: 'DEMO_USE_SAFARI_BEHAVIOR_FOR_LIVE', - VIDEO_ROBUSTNESS: 'DEMO_VIDEO_ROBUSTNESS', - VNOVA: 'DEMO_VNOVA', - XLINK_FAIL_GRACEFULLY: 'DEMO_XLINK_FAIL_GRACEFULLY', - SEGMENT_PREFETCH_LIMIT: 'DEMO_SEGMENT_PREFETCH_LIMIT', -}; -/* eslint-enable max-len */ diff --git a/demo/config.js b/demo/config.js index 1fc78b28e..c3256dd4d 100644 --- a/demo/config.js +++ b/demo/config.js @@ -11,7 +11,6 @@ goog.require('goog.asserts'); goog.require('shakaDemo.BoolInput'); goog.require('shakaDemo.DatalistInput'); goog.require('shakaDemo.InputContainer'); -goog.require('shakaDemo.MessageIds'); goog.require('shakaDemo.NumberInput'); goog.require('shakaDemo.SelectInput'); goog.require('shakaDemo.TextInput'); @@ -58,11 +57,6 @@ shakaDemo.Config = class { // changes based on the config changes. this.reloadAndSaveState_(); }); - document.addEventListener('shaka-main-locale-changed', () => { - // Respond to them by remaking. This is to avoid triggering any config - // changes based on the config changes. - this.reloadAndSaveState_(); - }); document.addEventListener('shaka-main-drawer-state-change', () => { this.setContentAvailability_(shakaDemoMain.getIsDrawerOpen()); }); @@ -94,8 +88,7 @@ shakaDemo.Config = class { this.addStreamingSection_(); this.addMediaSourceSection_(); this.addManifestSection_(); - this.addRetrictionsSection_('', - shakaDemo.MessageIds.RESTRICTIONS_SECTION_HEADER); + this.addRetrictionsSection_('', 'Restrictions'); this.addCmcdSection_(); this.addLcevcSection_(); this.addAdsSection_(); @@ -123,22 +116,19 @@ shakaDemo.Config = class { /** @private */ addDrmSection_() { - const MessageIds = shakaDemo.MessageIds; const docLink = this.resolveExternLink_('.DrmConfiguration'); - this.addSection_(MessageIds.DRM_SECTION_HEADER, docLink) - .addBoolInput_(MessageIds.DELAY_LICENSE, + this.addSection_('DRM', docLink) + .addBoolInput_('Delay License Request Until Played', 'drm.delayLicenseRequestUntilPlayed') - .addBoolInput_(MessageIds.LOG_LICENSE_EXCHANGE, - 'drm.logLicenseExchange') - .addNumberInput_(MessageIds.UPDATE_EXPIRATION_TIME, + .addBoolInput_('Log license exchange data', 'drm.logLicenseExchange') + .addNumberInput_('Update expiration time', 'drm.updateExpirationTime', /* canBeDecimal= */ true, /* canBeZero= */ false, /* canBeUnset= */ true) - .addBoolInput_(MessageIds.PARSE_INBAND_PSSH_ENABLED, + .addBoolInput_('Parse inband "pssh" from media segments', 'drm.parseInbandPsshEnabled') - .addTextInput_(MessageIds.MIN_HDCP_VERSION, - 'drm.minHdcpVersion'); + .addTextInput_('Min HDCP version', 'drm.minHdcpVersion'); const advanced = shakaDemoMain.getConfiguration().drm.advanced || {}; const addDRMAdvancedField = (name, valueName, suggestions) => { // All advanced fields of a given type are set at once. @@ -177,301 +167,254 @@ shakaDemo.Config = class { const sessionTypeSuggestions = ['temporary', 'persistent-license']; addDRMAdvancedField( - MessageIds.VIDEO_ROBUSTNESS, - 'videoRobustness', - robustnessSuggestions); + 'Video Robustness', 'videoRobustness', robustnessSuggestions); addDRMAdvancedField( - MessageIds.AUDIO_ROBUSTNESS, - 'audioRobustness', - robustnessSuggestions); - addDRMAdvancedField( - MessageIds.DRM_SESSION_TYPE, - 'sessionType', - sessionTypeSuggestions); + 'Audio Robustness', 'audioRobustness', robustnessSuggestions); + addDRMAdvancedField('Session Type', 'sessionType', sessionTypeSuggestions); - this.addRetrySection_('drm', MessageIds.DRM_RETRY_SECTION_HEADER); + this.addRetrySection_('drm', 'DRM Retry Parameters'); } /** @private */ addManifestSection_() { - const MessageIds = shakaDemo.MessageIds; const docLink = this.resolveExternLink_('.ManifestConfiguration'); - this.addSection_(MessageIds.MANIFEST_SECTION_HEADER, docLink) - .addBoolInput_(MessageIds.IGNORE_DASH_DRM, - 'manifest.dash.ignoreDrmInfo') - .addBoolInput_(MessageIds.AUTO_CORRECT_DASH_DRIFT, + this.addSection_('Manifest', docLink) + .addBoolInput_('Ignore DASH DRM Info', 'manifest.dash.ignoreDrmInfo') + .addBoolInput_('Auto-Correct DASH Drift', 'manifest.dash.autoCorrectDrift') - .addBoolInput_(MessageIds.DISABLE_XLINK_PROCESSING, + .addBoolInput_('Disable Xlink processing', 'manifest.dash.disableXlinkProcessing') - .addBoolInput_(MessageIds.XLINK_FAIL_GRACEFULLY, + .addBoolInput_('Xlink Should Fail Gracefully', 'manifest.dash.xlinkFailGracefully') - .addBoolInput_(MessageIds.IGNORE_DASH_SUGGESTED_PRESENTATION_DELAY, + .addBoolInput_('Ignore DASH suggestedPresentationDelay', 'manifest.dash.ignoreSuggestedPresentationDelay') - .addBoolInput_(MessageIds.IGNORE_DASH_EMPTY_ADAPTATION_SET, + .addBoolInput_('Ignore empty DASH AdaptationSets', 'manifest.dash.ignoreEmptyAdaptationSet') - .addBoolInput_(MessageIds.IGNORE_DASH_MAX_SEGMENT_DURATION, + .addBoolInput_('Ignore DASH maxSegmentDuration', 'manifest.dash.ignoreMaxSegmentDuration') - .addBoolInput_(MessageIds.IGNORE_HLS_TEXT_FAILURES, + .addBoolInput_('Ignore HLS Text Stream Failures', 'manifest.hls.ignoreTextStreamFailures') - .addBoolInput_(MessageIds.IGNORE_HLS_IMAGE_FAILURES, + .addBoolInput_('Ignore HLS Image Stream Failures', 'manifest.hls.ignoreImageStreamFailures') - .addTextInput_(MessageIds.DEFAULT_AUDIO_CODEC, - 'manifest.hls.defaultAudioCodec') - .addTextInput_(MessageIds.DEFAULT_VIDEO_CODEC, - 'manifest.hls.defaultVideoCodec') - .addBoolInput_(MessageIds.IGNORE_MANIFEST_PROGRAM_DATE_TIME, + .addTextInput_('Default Audio Codec', 'manifest.hls.defaultAudioCodec') + .addTextInput_('Default Video Codec', 'manifest.hls.defaultVideoCodec') + .addBoolInput_('Ignore Program Date Time from manifest', 'manifest.hls.ignoreManifestProgramDateTime') - .addBoolInput_(MessageIds.USE_SAFARI_BEHAVIOR_FOR_LIVE, + .addBoolInput_('Use Safari behavior for live', 'manifest.hls.useSafariBehaviorForLive') - .addNumberInput_(MessageIds.LIVE_SEGMENTS_DELAY, + .addNumberInput_('Live segments delay', 'manifest.hls.liveSegmentsDelay') - .addBoolInput_(MessageIds.HLS_SEQUENCE_MODE, - 'manifest.hls.sequenceMode') - .addBoolInput_(MessageIds.IGNORE_MANIFEST_TIMESTAMPS_IN_SEGMENTS_MODE, + .addBoolInput_('Enable HLS sequence mode', 'manifest.hls.sequenceMode') + .addBoolInput_('Ignore Manifest Timestamps in Segments Mode', 'manifest.hls.ignoreManifestTimestampsInSegmentsMode') - .addNumberInput_(MessageIds.AVAILABILITY_WINDOW_OVERRIDE, + .addNumberInput_('Availability Window Override', 'manifest.availabilityWindowOverride', /* canBeDecimal= */ true, /* canBeZero= */ false, /* canBeUnset= */ true) - .addTextInput_(MessageIds.CLOCK_SYNC_URI, 'manifest.dash.clockSyncUri') - .addNumberInput_(MessageIds.DEFAULT_PRESENTATION_DELAY, + .addTextInput_('Clock Sync URI', 'manifest.dash.clockSyncUri') + .addNumberInput_('Default Presentation Delay', 'manifest.defaultPresentationDelay') - .addBoolInput_(MessageIds.ENABLE_AUDIO_GROUPS, - 'manifest.dash.enableAudioGroups') - .addBoolInput_(MessageIds.IGNORE_MIN_BUFFER_TIME, + .addBoolInput_('Enable Audio Groups', 'manifest.dash.enableAudioGroups') + .addBoolInput_('Ignore Min Buffer Time', 'manifest.dash.ignoreMinBufferTime') - .addNumberInput_(MessageIds.INITIAL_SEGMENT_LIMIT, + .addNumberInput_('Initial Segment Limit', 'manifest.dash.initialSegmentLimit', /* canBeDecimal= */ false, /* canBeZero= */ false, /* canBeUnset= */ true) - .addBoolInput_(MessageIds.DASH_SEQUENCE_MODE, + .addBoolInput_('Enable DASH sequence mode', 'manifest.dash.sequenceMode') - .addBoolInput_(MessageIds.DISABLE_AUDIO, - 'manifest.disableAudio') - .addBoolInput_(MessageIds.DISABLE_VIDEO, - 'manifest.disableVideo') - .addBoolInput_(MessageIds.DISABLE_TEXT, - 'manifest.disableText') - .addBoolInput_(MessageIds.DISABLE_THUMBNAILS, - 'manifest.disableThumbnails') - .addBoolInput_(MessageIds.SEGMENT_RELATIVE_VTT_TIMING, + .addBoolInput_('Disable Audio', 'manifest.disableAudio') + .addBoolInput_('Disable Video', 'manifest.disableVideo') + .addBoolInput_('Disable Text', 'manifest.disableText') + .addBoolInput_('Disable Thumbnails', 'manifest.disableThumbnails') + .addBoolInput_('Enable segment-relative VTT Timing', 'manifest.segmentRelativeVttTiming') - .addBoolInput_(MessageIds.MSS_SEQUENCE_MODE, - 'manifest.mss.sequenceMode'); + .addBoolInput_('Enable MSS sequence mode', 'manifest.mss.sequenceMode'); - this.addRetrySection_('manifest', MessageIds.MANIFEST_RETRY_SECTION_HEADER); + this.addRetrySection_('manifest', 'Manifest Retry Parameters'); } /** @private */ addAbrSection_() { - const MessageIds = shakaDemo.MessageIds; const docLink = this.resolveExternLink_('.AbrConfiguration'); - this.addSection_(MessageIds.ADAPTATION_SECTION_HEADER, docLink) - .addBoolInput_(MessageIds.ENABLED, 'abr.enabled') - .addBoolInput_(MessageIds.NETWORK_INFORMATION, + this.addSection_('Adaptation', docLink) + .addBoolInput_('Enabled', 'abr.enabled') + .addBoolInput_('Use Network Information API', 'abr.useNetworkInformation') - .addNumberInput_(MessageIds.BANDWIDTH_ESTIMATE, + .addNumberInput_('Default Bandwidth EstimatZ', 'abr.defaultBandwidthEstimate') - .addNumberInput_(MessageIds.BANDWIDTH_DOWNGRADE, + .addNumberInput_('Bandwidth Downgrade Target', 'abr.bandwidthDowngradeTarget', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.BANDWIDTH_UPGRADE, + .addNumberInput_('Bandwidth Upgrade Target', 'abr.bandwidthUpgradeTarget', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.SWITCH_INTERVAL, - 'abr.switchInterval', + .addNumberInput_('Switch Interval', 'abr.switchInterval', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.MIN_TOTAL_BYTES, - 'abr.advanced.minTotalBytes') - .addNumberInput_(MessageIds.MIN_BYTES, - 'abr.advanced.minBytes') - .addNumberInput_(MessageIds.FAST_HALF_LIFE, - 'abr.advanced.fastHalfLife', + .addNumberInput_('Min total Bytes', 'abr.advanced.minTotalBytes') + .addNumberInput_('Min Bytes', 'abr.advanced.minBytes') + .addNumberInput_('Fast half life', 'abr.advanced.fastHalfLife', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.SLOW_HALF_LIFE, - 'abr.advanced.slowHalfLife', + .addNumberInput_('Slow half life', 'abr.advanced.slowHalfLife', /* canBeDecimal= */ true) - .addBoolInput_(MessageIds.RESTRICT_TO_ELEMENT_SIZE, - 'abr.restrictToElementSize') - .addBoolInput_(MessageIds.RESTRICT_TO_SCREEN_SIZE, - 'abr.restrictToScreenSize') - .addBoolInput_(MessageIds.IGNORE_DEVICE_PIXEL_RATIO, + .addBoolInput_('Restrict to element size', 'abr.restrictToElementSize') + .addBoolInput_('Restrict to screen size', 'abr.restrictToScreenSize') + .addBoolInput_('Ignore device pixel ratio', 'abr.ignoreDevicePixelRatio') - .addBoolInput_(MessageIds.CLEAR_BUFFER_SWITCH, + .addBoolInput_('Clear video buffer on abr rendition switch', 'abr.clearBufferSwitch') - .addNumberInput_(MessageIds.SAFE_MARGIN_SWITCH, + .addNumberInput_('Safe margin on abr switch rendition', 'abr.safeMarginSwitch', /* canBeDecimal= */ true); - this.addRetrictionsSection_('abr', - MessageIds.ADAPTATION_RESTRICTIONS_SECTION_HEADER); + this.addRetrictionsSection_('abr', 'Adaptation Restrictions'); } /** @private */ addCmcdSection_() { - const MessageIds = shakaDemo.MessageIds; const docLink = this.resolveExternLink_('.CmcdConfiguration'); - this.addSection_(MessageIds.CMCD_SECTION_HEADER, docLink) - .addBoolInput_(MessageIds.ENABLED, 'cmcd.enabled') - .addTextInput_(MessageIds.SESSION_ID, 'cmcd.sessionId') - .addTextInput_(MessageIds.CONTENT_ID, 'cmcd.contentId') - .addBoolInput_(MessageIds.USE_HEADERS, 'cmcd.useHeaders'); + this.addSection_('CMCD', docLink) + .addBoolInput_('Enabled', 'cmcd.enabled') + .addTextInput_('Session ID', 'cmcd.sessionId') + .addTextInput_('Content ID', 'cmcd.contentId') + .addBoolInput_('Use Headers', 'cmcd.useHeaders'); } /** @private */ addLcevcSection_() { - const MessageIds = shakaDemo.MessageIds; const docLink = this.resolveExternLink_('.LcevcConfiguration'); - this.addSection_(MessageIds.LCEVC_SECTION_HEADER, docLink) - .addBoolInput_(MessageIds.ENABLED, 'lcevc.enabled') - .addBoolInput_(MessageIds.LCEVC_DYNAMIC_PERFORMANCE_SCALING, + this.addSection_('MPEG-5 Part-2 LCEVC', docLink) + .addBoolInput_('Enabled', 'lcevc.enabled') + .addBoolInput_('LCEVC Dynamic Performance scaling', 'lcevc.dynamicPerformanceScaling') - .addNumberInput_(MessageIds.LCEVC_LOG_LEVEL, 'lcevc.logLevel') - .addBoolInput_(MessageIds.LCEVC_DRAW_LOGO, 'lcevc.drawLogo'); + .addNumberInput_('LCEVC Log Level', 'lcevc.logLevel') + .addBoolInput_('Draw LCEVC Logo', 'lcevc.drawLogo'); } /** @private */ addAdsSection_() { - const MessageIds = shakaDemo.MessageIds; const docLink = this.resolveExternLink_('.AdsConfiguration'); - this.addSection_(MessageIds.ADS_SECTION_HEADER, docLink) - .addBoolInput_(MessageIds.CUSTOM_PLAYHEAD_TRACKER, + this.addSection_('Ads', docLink) + .addBoolInput_('Custom playhead tracker', 'ads.customPlayheadTracker'); } /** * @param {string} category - * @param {!shakaDemo.MessageIds} sectionName + * @param {string} sectionName * @private */ addRetrictionsSection_(category, sectionName) { - const MessageIds = shakaDemo.MessageIds; const prefix = (category ? category + '.' : '') + 'restrictions.'; const docLink = this.resolveExternLink_('.Restrictions'); this.addSection_(sectionName, docLink) - .addNumberInput_(MessageIds.MIN_WIDTH, prefix + 'minWidth') - .addNumberInput_(MessageIds.MAX_WIDTH, prefix + 'maxWidth') - .addNumberInput_(MessageIds.MIN_HEIGHT, prefix + 'minHeight') - .addNumberInput_(MessageIds.MAX_HEIGHT, prefix + 'maxHeight') - .addNumberInput_(MessageIds.MIN_PIXELS, prefix + 'minPixels') - .addNumberInput_(MessageIds.MAX_PIXELS, prefix + 'maxPixels') - .addNumberInput_(MessageIds.MIN_FRAMERATE, prefix + 'minFrameRate') - .addNumberInput_(MessageIds.MAX_FRAMERATE, prefix + 'maxFrameRate') - .addNumberInput_(MessageIds.MIN_BANDWIDTH, prefix + 'minBandwidth') - .addNumberInput_(MessageIds.MAX_BANDWIDTH, prefix + 'maxBandwidth'); + .addNumberInput_('Min Width', prefix + 'minWidth') + .addNumberInput_('Max Width', prefix + 'maxWidth') + .addNumberInput_('Min Height', prefix + 'minHeight') + .addNumberInput_('Max Height', prefix + 'maxHeight') + .addNumberInput_('Min Pixels', prefix + 'minPixels') + .addNumberInput_('Max Pixels', prefix + 'maxPixels') + .addNumberInput_('Min Framerate', prefix + 'minFrameRate') + .addNumberInput_('Max Framerate', prefix + 'maxFrameRate') + .addNumberInput_('Min Bandwidth', prefix + 'minBandwidth') + .addNumberInput_('Max Bandwidth', prefix + 'maxBandwidth'); } /** * @param {string} category - * @param {!shakaDemo.MessageIds} sectionName + * @param {string} sectionName * @private */ addRetrySection_(category, sectionName) { - const MessageIds = shakaDemo.MessageIds; const prefix = category + '.retryParameters.'; const docLink = this.resolveExternLink_('.RetryParameters'); this.addSection_(sectionName, docLink) - .addNumberInput_(MessageIds.MAX_ATTEMPTS, prefix + 'maxAttempts') - .addNumberInput_(MessageIds.BASE_DELAY, prefix + 'baseDelay', + .addNumberInput_('Max Attempts', prefix + 'maxAttempts') + .addNumberInput_('Base Delay', prefix + 'baseDelay', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.BACKOFF_FACTOR, prefix + 'backoffFactor', + .addNumberInput_('Backoff Factor', prefix + 'backoffFactor', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.FUZZ_FACTOR, prefix + 'fuzzFactor', + .addNumberInput_('Fuzz Factor', prefix + 'fuzzFactor', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.TIMEOUT, prefix + 'timeout', + .addNumberInput_('Timeout Factor', prefix + 'timeout', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.STALL_TIMEOUT, prefix + 'stallTimeout', + .addNumberInput_('Stall Timeout', prefix + 'stallTimeout', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.CONNECTION_TIMEOUT, - prefix + 'connectionTimeout', + .addNumberInput_('Connection Timeout', prefix + 'connectionTimeout', /* canBeDecimal= */ true); } /** @private */ addOfflineSection_() { - const MessageIds = shakaDemo.MessageIds; const docLink = this.resolveExternLink_('.OfflineConfiguration'); - this.addSection_(MessageIds.OFFLINE_SECTION_HEADER, docLink) - .addBoolInput_(MessageIds.USE_PERSISTENT_LICENSES, + this.addSection_('Offline', docLink) + .addBoolInput_('Use Persistent Licenses', 'offline.usePersistentLicense') - .addNumberInput_(MessageIds.NUMBER_OF_PARALLEL_DOWNLOADS, + .addNumberInput_('Number of Parallel Downloads', 'offline.numberOfParallelDownloads'); } /** @private */ addStreamingSection_() { - const MessageIds = shakaDemo.MessageIds; const docLink = this.resolveExternLink_('.StreamingConfiguration'); - this.addSection_(MessageIds.STREAMING_SECTION_HEADER, docLink) - .addNumberInput_(MessageIds.GAP_DETECTION_THRESHOLD, + this.addSection_('Streaming', docLink) + .addNumberInput_('Gap detection threshold', 'streaming.gapDetectionThreshold', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.GAP_JUMP_TIMER_TIME, - 'streaming.gapJumpTimerTime', + .addNumberInput_('Gap Jump Timer Time', 'streaming.gapJumpTimerTime', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.BUFFERING_GOAL, - 'streaming.bufferingGoal', + .addNumberInput_('Buffering Goal', 'streaming.bufferingGoal', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.DURATION_BACKOFF, - 'streaming.durationBackoff', + .addNumberInput_('Duration Backoff', 'streaming.durationBackoff', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.REBUFFERING_GOAL, - 'streaming.rebufferingGoal', + .addNumberInput_('Rebuffering Goal', 'streaming.rebufferingGoal', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.BUFFER_BEHIND, - 'streaming.bufferBehind', + .addNumberInput_('Buffer Behind', 'streaming.bufferBehind', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.SAFE_SEEK_OFFSET, - 'streaming.safeSeekOffset', + .addNumberInput_('Safe Seek Offset', 'streaming.safeSeekOffset', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.STALL_THRESHOLD, - 'streaming.stallThreshold', + .addNumberInput_('Stall Threshold', 'streaming.stallThreshold', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.SAFE_SKIP_DISTANCE, - 'streaming.stallSkip', + .addNumberInput_('Safe Skip Distance', 'streaming.stallSkip', /* canBeDecimal= */ true) - .addNumberInput_(MessageIds.INACCURATE_MANIFEST_TOLERANCE, + .addNumberInput_('Inaccurate Manifest Tolerance', 'streaming.inaccurateManifestTolerance', /* canBeDecimal= */ true) - .addBoolInput_(MessageIds.LOW_LATENCY, - 'streaming.lowLatencyMode') - .addBoolInput_(MessageIds.AUTO_LOW_LATENCY, - 'streaming.autoLowLatencyMode') - .addBoolInput_(MessageIds.FORCE_HTTPS, - 'streaming.forceHTTPS') - .addBoolInput_(MessageIds.PREFER_NATIVE_HLS, + .addBoolInput_('Low Latency Mode', 'streaming.lowLatencyMode') + .addBoolInput_('Auto Low Latency Mode', 'streaming.autoLowLatencyMode') + .addBoolInput_('Force HTTPS', 'streaming.forceHTTPS') + .addBoolInput_('Prefer native HLS playback when available', 'streaming.preferNativeHls') - .addNumberInput_(MessageIds.UPDATE_INTERVAL_SECONDS, + .addNumberInput_('Update interval seconds', 'streaming.updateIntervalSeconds', /* canBeDecimal= */ true) - .addBoolInput_(MessageIds.DISPATCH_ALL_EMSG_BOXES, + .addBoolInput_('Dispatch all emsg boxes', 'streaming.dispatchAllEmsgBoxes') - .addBoolInput_(MessageIds.OBSERVE_QUALITY_CHANGES, + .addBoolInput_('Observe media quality changes', 'streaming.observeQualityChanges') - .addNumberInput_(MessageIds.MAX_DISABLED_TIME, + .addNumberInput_('Max Variant Disabled Time', 'streaming.maxDisabledTime') - .addNumberInput_(MessageIds.SEGMENT_PREFETCH_LIMIT, + .addNumberInput_('Segment Prefetch Limit', 'streaming.segmentPrefetchLimit') - .addBoolInput_(MessageIds.LIVE_SYNC, - 'streaming.liveSync') - .addNumberInput_(MessageIds.LIVE_SYNC_MAX_LATENCY, + .addBoolInput_('Live Sync', 'streaming.liveSync') + .addNumberInput_('Max latency for live sync', 'streaming.liveSyncMaxLatency', /* canBeDecimal= */ true, /* canBeZero= */ true) - .addNumberInput_(MessageIds.LIVE_SYNC_PLAYBACK_RATE, + .addNumberInput_('Playback rate for live sync', 'streaming.liveSyncPlaybackRate', /* canBeDecimal= */ true, /* canBeZero= */ false); if (!shakaDemoMain.getNativeControlsEnabled()) { - this.addBoolInput_(MessageIds.ALWAYS_STREAM_TEXT, - 'streaming.alwaysStreamText'); + this.addBoolInput_('Always Stream Text', 'streaming.alwaysStreamText'); } else { // Add a fake custom fixed "input" that warns the users not to change it. const noop = (input) => {}; - this.addCustomBoolInput_(MessageIds.ALWAYS_STREAM_TEXT, - noop, MessageIds.ALWAYS_STREAM_TEXT_WARNING); + this.addCustomBoolInput_('Always Stream Text', noop, + 'Text must always be streamed while native controls are enabled, ' + + 'for captions to work.'); this.latestInput_.input().disabled = true; this.latestInput_.input().checked = true; } @@ -483,65 +426,55 @@ shakaDemo.Config = class { 'PQ': 'PQ', 'HLG': 'HLG', }; - const localize = (name) => shakaDemoMain.getLocalizedString(name); const hdrLevelNames = { - 'AUTO': localize(MessageIds.HDR_LEVEL_AUTO), - 'SDR': localize(MessageIds.HDR_LEVEL_SDR), - 'PQ': localize(MessageIds.HDR_LEVEL_PQ), - 'HLG': localize(MessageIds.HDR_LEVEL_HLG), - '': localize(MessageIds.HDR_LEVEL_NONE), + 'AUTO': 'Auto Detect', + 'SDR': 'SDR', + 'PQ': 'PQ', + 'HLG': 'HLG', + '': 'No Preference', }; - this.addSelectInput_(MessageIds.HDR_LEVEL, 'preferredVideoHdrLevel', + this.addSelectInput_('Preferred HDR Level', 'preferredVideoHdrLevel', hdrLevels, hdrLevelNames); - this.addBoolInput_(MessageIds.START_AT_SEGMENT_BOUNDARY, + this.addBoolInput_('Start At Segment Boundary', 'streaming.startAtSegmentBoundary') - .addBoolInput_(MessageIds.IGNORE_TEXT_FAILURES, + .addBoolInput_('Ignore Text Stream Failures', 'streaming.ignoreTextStreamFailures') - .addBoolInput_(MessageIds.STALL_DETECTOR_ENABLED, - 'streaming.stallEnabled') - .addBoolInput_(MessageIds.USE_NATIVE_HLS_SAFARI, + .addBoolInput_('Stall Detector Enabled', 'streaming.stallEnabled') + .addBoolInput_('Use native HLS on Safari', 'streaming.useNativeHlsOnSafari'); - this.addRetrySection_('streaming', - MessageIds.STREAMING_RETRY_SECTION_HEADER); + this.addRetrySection_('streaming', 'Streaming Retry Parameters'); } /** @private */ addMediaSourceSection_() { - const MessageIds = shakaDemo.MessageIds; const docLink = this.resolveExternLink_('.MediaSourceConfiguration'); - this.addSection_(MessageIds.MEDIA_SOURCE_SECTION_HEADER, docLink) - .addTextInput_(MessageIds.SOURCE_BUFFER_EXTRA_FEATURES, + this.addSection_('Media source', docLink) + .addTextInput_('Source buffer extra features', 'mediaSource.sourceBufferExtraFeatures') - .addBoolInput_(MessageIds.FORCE_TRANSMUX, - 'mediaSource.forceTransmux') - .addBoolInput_(MessageIds.INSERT_FAKE_ENCRYPTION_IN_INIT, - 'mediaSource.insertFakeEncryptionInInit'); + .addBoolInput_('Force Transmux', 'mediaSource.forceTransmux') + .addBoolInput_('Insert fake encryption in init segments when needed ' + + 'by the platform.', 'mediaSource.insertFakeEncryptionInInit'); } /** @private */ addLanguageSection_() { - const MessageIds = shakaDemo.MessageIds; const docLink = this.resolveExternLink_('.PlayerConfiguration'); const autoShowTextOptions = shaka.config.AutoShowText; - const localize = (name) => shakaDemoMain.getLocalizedString(name); const autoShowTextOptionNames = { - 'NEVER': localize(MessageIds.AUTO_SHOW_TEXT_NEVER), - 'ALWAYS': localize(MessageIds.AUTO_SHOW_TEXT_ALWAYS), - 'IF_PREFERRED_TEXT_LANGUAGE': - localize(MessageIds.AUTO_SHOW_TEXT_IF_PREFERRED_TEXT_LANGUAGE), - 'IF_SUBTITLES_MAY_BE_NEEDED': - localize(MessageIds.AUTO_SHOW_TEXT_IF_SUBTITLES_MAY_BE_NEEDED), + 'NEVER': 'Never', + 'ALWAYS': 'Always', + 'IF_PREFERRED_TEXT_LANGUAGE': 'If preferred text language', + 'IF_SUBTITLES_MAY_BE_NEEDED': 'If subtitles may be needed', }; - this.addSection_(MessageIds.LANGUAGE_SECTION_HEADER, docLink) - .addTextInput_(MessageIds.AUDIO_LANGUAGE, 'preferredAudioLanguage') - .addTextInput_(MessageIds.AUDIO_LABEL, 'preferredAudioLabel') - .addTextInput_(MessageIds.TEXT_LANGUAGE, 'preferredTextLanguage') - .addTextInput_(MessageIds.TEXT_ROLE, 'preferredTextRole') - .addSelectInput_( - MessageIds.AUTO_SHOW_TEXT, + this.addSection_('Language', docLink) + .addTextInput_('Preferred Audio Language', 'preferredAudioLanguage') + .addTextInput_('Preferred Audio Label', 'preferredAudioLabel') + .addTextInput_('Preferred Text Language', 'preferredTextLanguage') + .addTextInput_('Preferred Text Role', 'preferredTextRole') + .addSelectInput_('Auto-Show Text', 'autoShowText', autoShowTextOptions, autoShowTextOptionNames); @@ -549,20 +482,18 @@ shakaDemo.Config = class { shakaDemoMain.setUILocale(input.value); shakaDemoMain.remakeHash(); }; - this.addCustomTextInput_(MessageIds.UI_LOCALE, onChange); + this.addCustomTextInput_('Preferred UI Locale', onChange); this.latestInput_.input().value = shakaDemoMain.getUILocale(); - this.addNumberInput_(MessageIds.AUDIO_CHANNEL_COUNT, + this.addNumberInput_('Preferred Audio Channel Count', 'preferredAudioChannelCount'); - this.addBoolInput_(MessageIds.PREFER_FORCED_SUBS, - 'preferForcedSubs'); + this.addBoolInput_('Prefer Forced Subs', 'preferForcedSubs'); } /** @private */ addMetaSection_() { - const MessageIds = shakaDemo.MessageIds; this.addSection_(/* name= */ null, /* docLink= */ null); - this.addCustomBoolInput_(MessageIds.SHAKA_CONTROLS, (input) => { + this.addCustomBoolInput_('Shaka Controls', (input) => { shakaDemoMain.setNativeControlsEnabled(!input.checked); if (input.checked) { // Forcibly set |streaming.alwaysStreamText| to true. @@ -580,7 +511,7 @@ shakaDemo.Config = class { } if (!shakaDemoMain.getNativeControlsEnabled()) { - this.addCustomBoolInput_(MessageIds.TRICK_PLAY_CONTROLS, (input) => { + this.addCustomBoolInput_('Enabled Trick Play Controls', (input) => { shakaDemoMain.setTrickPlayControlsEnabled(input.checked); }); if (shakaDemoMain.getTrickPlayControlsEnabled()) { @@ -589,8 +520,8 @@ shakaDemo.Config = class { } else { // Add a fake custom fixed "input" that warns the users not to change it. const noop = (input) => {}; - this.addCustomBoolInput_(MessageIds.TRICK_PLAY_CONTROLS, - noop, MessageIds.TRICK_PLAY_CONTROLS_WARNING); + this.addCustomBoolInput_('Enabled Trick Play Controls', + noop, 'Trick Play controls require the Shaka UI.'); this.latestInput_.input().disabled = true; this.latestInput_.input().checked = false; } @@ -610,12 +541,11 @@ shakaDemo.Config = class { const Level = shaka['log']['Level']; const setLevel = shaka['log']['setLevel']; - const localize = (name) => shakaDemoMain.getLocalizedString(name); const logLevels = { - 'info': localize(MessageIds.LOG_LEVEL_INFO), - 'debug': localize(MessageIds.LOG_LEVEL_DEBUG), - 'v': localize(MessageIds.LOG_LEVEL_V), - 'vv': localize(MessageIds.LOG_LEVEL_VV), + 'info': 'Info', + 'debug': 'Debug', + 'v': 'Verbose', + 'vv': 'Very Verbose', }; const onChange = (input) => { switch (input.value) { @@ -634,7 +564,7 @@ shakaDemo.Config = class { } shakaDemoMain.remakeHash(); }; - this.addCustomSelectInput_(MessageIds.LOG_LEVEL, logLevels, onChange); + this.addCustomSelectInput_('Log Level', logLevels, onChange); const input = this.latestInput_.input(); switch (shaka['log']['currentLevel']) { case Level['DEBUG']: @@ -662,7 +592,7 @@ shakaDemo.Config = class { } /** - * @param {?shakaDemo.MessageIds} name + * @param {?string} name * @param {?string} docLink * @return {!shakaDemo.Config} * @private @@ -678,9 +608,9 @@ shakaDemo.Config = class { } /** - * @param {!shakaDemo.MessageIds} name + * @param {string} name * @param {string} valueName - * @param {shakaDemo.MessageIds=} tooltipMessage + * @param {string=} tooltipMessage * @return {!shakaDemo.Config} * @private */ @@ -697,24 +627,23 @@ shakaDemo.Config = class { } /** - * @param {!shakaDemo.MessageIds} name + * @param {string} name * @param {function(!HTMLInputElement)} onChange - * @param {shakaDemo.MessageIds=} tooltipMessage + * @param {string=} tooltipMessage * @return {!shakaDemo.Config} * @private */ addCustomBoolInput_(name, onChange, tooltipMessage) { this.createRow_(name, tooltipMessage); - const localized = shakaDemoMain.getLocalizedString(name); this.latestInput_ = new shakaDemo.BoolInput( - this.getLatestSection_(), localized, onChange); + this.getLatestSection_(), name, onChange); return this; } /** - * @param {!shakaDemo.MessageIds} name + * @param {!string} name * @param {string} valueName - * @param {shakaDemo.MessageIds=} tooltipMessage + * @param {string=} tooltipMessage * @return {!shakaDemo.Config} * @private */ @@ -730,27 +659,26 @@ shakaDemo.Config = class { } /** - * @param {!shakaDemo.MessageIds} name + * @param {string} name * @param {function(!HTMLInputElement)} onChange - * @param {shakaDemo.MessageIds=} tooltipMessage + * @param {string=} tooltipMessage * @return {!shakaDemo.Config} * @private */ addCustomTextInput_(name, onChange, tooltipMessage) { this.createRow_(name, tooltipMessage); - const localized = shakaDemoMain.getLocalizedString(name); this.latestInput_ = new shakaDemo.TextInput( - this.getLatestSection_(), localized, onChange); + this.getLatestSection_(), name, onChange); return this; } /** - * @param {!shakaDemo.MessageIds} name + * @param {string} name * @param {string} valueName * @param {boolean=} canBeDecimal * @param {boolean=} canBeZero * @param {boolean=} canBeUnset - * @param {shakaDemo.MessageIds=} tooltipMessage + * @param {string=} tooltipMessage * @return {!shakaDemo.Config} * @private */ @@ -780,9 +708,8 @@ shakaDemo.Config = class { } }; this.createRow_(name, tooltipMessage); - const localized = shakaDemoMain.getLocalizedString(name); this.latestInput_ = new shakaDemo.NumberInput( - this.getLatestSection_(), localized, onChange, canBeDecimal, canBeZero, + this.getLatestSection_(), name, onChange, canBeDecimal, canBeZero, canBeUnset); this.latestInput_.input().value = shakaDemoMain.getCurrentConfigValue(valueName); @@ -793,26 +720,25 @@ shakaDemo.Config = class { } /** - * @param {!shakaDemo.MessageIds} name + * @param {string} name * @param {!Array.} values * @param {function(!HTMLInputElement)} onChange - * @param {shakaDemo.MessageIds=} tooltipMessage + * @param {string=} tooltipMessage * @return {!shakaDemo.Config} * @private */ addDatalistInput_(name, values, onChange, tooltipMessage) { this.createRow_(name, tooltipMessage); - const localized = shakaDemoMain.getLocalizedString(name); this.latestInput_ = new shakaDemo.DatalistInput( - this.getLatestSection_(), localized, onChange, values); + this.getLatestSection_(), name, onChange, values); return this; } /** - * @param {!shakaDemo.MessageIds} name + * @param {string} name * @param {!Object.} values * @param {function(!HTMLInputElement)} onChange - * @param {shakaDemo.MessageIds=} tooltipMessage + * @param {string=} tooltipMessage * @return {!shakaDemo.Config} * @private */ @@ -826,11 +752,11 @@ shakaDemo.Config = class { } /** - * @param {!shakaDemo.MessageIds} name + * @param {string} name * @param {string} valueName * @param {!Object.} options * @param {!Object.} optionNames - * @param {shakaDemo.MessageIds=} tooltipMessage + * @param {string=} tooltipMessage * @return {!shakaDemo.Config} * @private */ @@ -862,8 +788,8 @@ shakaDemo.Config = class { } /** - * @param {!shakaDemo.MessageIds} name - * @param {shakaDemo.MessageIds=} tooltipMessage + * @param {string} name + * @param {string=} tooltipMessage * @private */ createRow_(name, tooltipMessage) { diff --git a/demo/custom.js b/demo/custom.js index dc9588030..dda6cf329 100644 --- a/demo/custom.js +++ b/demo/custom.js @@ -12,7 +12,6 @@ goog.require('ShakaDemoAssetInfo'); goog.require('shakaDemo.AssetCard'); goog.require('shakaDemo.Input'); goog.require('shakaDemo.InputContainer'); -goog.require('shakaDemo.MessageIds'); goog.require('shakaDemo.TextInput'); /** @type {?shakaDemo.Custom} */ @@ -71,9 +70,6 @@ shakaDemo.Custom = class { document.addEventListener('shaka-main-offline-progress', () => { this.updateOfflineProgress_(); }); - document.addEventListener('shaka-main-locale-changed', () => { - this.remakeSavedList_(); - }); document.addEventListener('shaka-main-page-changed', () => { if (!this.savedList_.childNodes.length && !container.classList.contains('hidden')) { @@ -142,9 +138,8 @@ shakaDemo.Custom = class { const div = document.createElement('div'); headersDiv.appendChild(div); const containerStyle = shakaDemo.InputContainer.Style.VERTICAL; - const headerText = shakaDemo.MessageIds.LICENSE_HEADER_TITLE; const container = new shakaDemo.InputContainer( - div, headerText, containerStyle, + div, 'License Header', containerStyle, /* docLink= */ null); const collisionCheckEntry = { @@ -209,9 +204,7 @@ shakaDemo.Custom = class { const nameOnChange = (input) => { onChange(input.value, headerValue); }; - const licenseHeaderName = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.LICENSE_HEADER_NAME); - this.makeField_(container, licenseHeaderName, nameSetup, nameOnChange); + this.makeField_(container, 'Header Name', nameSetup, nameOnChange); const valueSetup = (input, container) => { if (headerValue) { @@ -221,9 +214,7 @@ shakaDemo.Custom = class { const valueOnChange = (input) => { onChange(headerName, input.value); }; - const licenseHeaderValue = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.LICENSE_HEADER_VALUE); - this.makeField_(container, licenseHeaderValue, valueSetup, valueOnChange); + this.makeField_(container, 'Header Value', valueSetup, valueOnChange); }; if (assetInProgress.licenseRequestHeaders.size == 0) { // It starts out with a single empty row, but each time you start filling @@ -269,8 +260,8 @@ shakaDemo.Custom = class { const fullMimeTypeOnChange = (input) => { assetInProgress.setMediaPlaylistFullMimeType(input.value); }; - const fullMimeTypeName = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.HLS_FULL_MIME_TYPE); + const fullMimeTypeName = + 'Full Mime Type for Playing Media Playlists Directly'; this.makeField_( container, fullMimeTypeName, fullMimeTypeSetup, fullMimeTypeOnChange); @@ -300,10 +291,7 @@ shakaDemo.Custom = class { const adTagOnChange = (input) => { assetInProgress.adTagUri = input.value; }; - const adTagURLName = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.AD_TAG_URL); - this.makeField_( - container, adTagURLName, adTagSetup, adTagOnChange); + this.makeField_(container, 'Ad Tag URL', adTagSetup, adTagOnChange); // Make the content source id field. const contentSrcIdSetup = (input, container) => { @@ -319,8 +307,7 @@ shakaDemo.Custom = class { this.manifestField_.required = this.checkManifestRequired_(assetInProgress); }; - const contentSrcIdName = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.IMA_CONTENT_SRC_ID); + const contentSrcIdName = 'Content source ID (for VOD DAI Content)'; this.makeField_( container, contentSrcIdName, contentSrcIdSetup, contentSrcIdOnChange); @@ -338,10 +325,8 @@ shakaDemo.Custom = class { this.manifestField_.required = this.checkManifestRequired_(assetInProgress); }; - const videoIdName = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.IMA_VIDEO_ID); - this.makeField_( - container, videoIdName, videoIdSetup, videoIdOnChange); + const videoIdName = 'Video ID (for VOD DAI Content)'; + this.makeField_(container, videoIdName, videoIdSetup, videoIdOnChange); // Make the asset key field. const assetKeySetup = (input, container) => { @@ -357,10 +342,8 @@ shakaDemo.Custom = class { this.manifestField_.required = this.checkManifestRequired_(assetInProgress); }; - const assetKeyName = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.IMA_ASSET_KEY); - this.makeField_( - container, assetKeyName, assetKeySetup, assetKeyChange); + const assetKeyName = 'Asset key (for LIVE DAI Content)'; + this.makeField_(container, assetKeyName, assetKeySetup, assetKeyChange); // Make the manifest type field. const manifestTypeSetup = (input, container) => { @@ -376,8 +359,7 @@ shakaDemo.Custom = class { this.manifestField_.required = this.checkManifestRequired_(assetInProgress); }; - const manifestTypeName = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.IMA_MANIFEST_TYPE); + const manifestTypeName = 'Manifest type (for DAI Content)'; this.makeField_( container, manifestTypeName, manifestTypeSetup, manifestTypeChange); @@ -437,10 +419,8 @@ shakaDemo.Custom = class { const licenseOnChange = (input) => { setLicenseServerURLs(); }; - const licenseServerURLName = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.LICENSE_SERVER_URL); this.makeField_( - container, licenseServerURLName, licenseSetup, licenseOnChange); + container, 'Custom License Server URL', licenseSetup, licenseOnChange); // Make the license certificate URL field. const certSetup = (input, container) => { @@ -451,10 +431,8 @@ shakaDemo.Custom = class { const certOnChange = (input) => { assetInProgress.certificateUri = input.value; }; - const licenseCertificateURLName = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.LICENSE_CERTIFICATE_URL); this.makeField_( - container, licenseCertificateURLName, certSetup, certOnChange); + container, 'Custom License Certificate URL', certSetup, certOnChange); // Make the drm system field. const drmSetup = (input, container) => { @@ -470,10 +448,7 @@ shakaDemo.Custom = class { const drmOnChange = (input) => { setLicenseServerURLs(); }; - const DRMSystemName = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.DRM_SYSTEM); - this.makeField_( - container, DRMSystemName, drmSetup, drmOnChange); + this.makeField_(container, 'Custom DRM System', drmSetup, drmOnChange); return drmDiv; } @@ -508,8 +483,7 @@ shakaDemo.Custom = class { // Make an error that shows up if you did not provide valid JSON. const error = document.createElement('span'); error.classList.add('mdl-textfield__error'); - error.textContent = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.INVALID_JSON_CONFIG_ERROR); + error.textContent = 'Invalid JSON configuration'; container.appendChild(error); }; @@ -526,8 +500,7 @@ shakaDemo.Custom = class { inputWrapper.setValid(false); } }; - const extraConfigLabel = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.EXTRA_SHAKA_PLAYER_CONFIG); + const extraConfigLabel = 'Extra Shaka Player configuration (JSON)'; this.makeField_( container, extraConfigLabel, extraSetup, extraOnChange, /* isTextArea= */ true); @@ -557,8 +530,7 @@ shakaDemo.Custom = class { // Make an error that shows up if you did not provide an URL. const error = document.createElement('span'); error.classList.add('mdl-textfield__error'); - error.textContent = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.MANIFEST_URL_ERROR); + error.textContent = 'Must have a manifest URL, or IMA DAI id fields'; container.appendChild(error); // Add a regex that will detect empty strings. @@ -569,10 +541,7 @@ shakaDemo.Custom = class { const manifestOnChange = (input) => { assetInProgress.manifestUri = input.value.trim(); }; - const manifestURLName = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.MANIFEST_URL); - this.makeField_( - container, manifestURLName, manifestSetup, manifestOnChange); + this.makeField_(container, 'Manifest URL', manifestSetup, manifestOnChange); // Make the name field. const nameSetup = (input, container) => { @@ -582,8 +551,7 @@ shakaDemo.Custom = class { // Make an error that shows up if you have an empty/duplicate name. const error = document.createElement('span'); error.classList.add('mdl-textfield__error'); - error.textContent = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.NAME_ERROR); + error.textContent = 'Must be a unique name.'; container.appendChild(error); // Make a regex that will detect duplicates. @@ -604,10 +572,7 @@ shakaDemo.Custom = class { const nameOnChange = (input) => { assetInProgress.name = input.value; }; - const nameName = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.NAME); - this.makeField_( - container, nameName, nameSetup, nameOnChange); + this.makeField_(container, 'Name', nameSetup, nameOnChange); // Make the icon field. const iconSetup = (input, container) => { @@ -634,11 +599,7 @@ shakaDemo.Custom = class { iconDiv.appendChild(img); } }; - - const iconURLName = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.ICON_URL); - this.makeField_( - container, iconURLName, iconSetup, iconOnChange); + this.makeField_(container, 'Icon URL', iconSetup, iconOnChange); // Make the MIME type field. const mimeTypeSetup = (input, container) => { @@ -650,11 +611,7 @@ shakaDemo.Custom = class { const mimeTypeOnChange = (input) => { assetInProgress.mimeType = input.value || null; }; - - const mimeTypeName = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.MIME_TYPE); - this.makeField_( - container, mimeTypeName, mimeTypeSetup, mimeTypeOnChange); + this.makeField_(container, 'MIME Type', mimeTypeSetup, mimeTypeOnChange); return mainDiv; } @@ -681,9 +638,7 @@ shakaDemo.Custom = class { const finishDiv = document.createElement('tr'); const buttonStyle = shakaDemo.Custom.ButtonStyle_.RAISED; - const saveString = - shakaDemoMain.getLocalizedString(shakaDemo.MessageIds.SAVE_BUTTON); - finishDiv.appendChild(this.makeButton_(saveString, buttonStyle, () => { + finishDiv.appendChild(this.makeButton_('Save', buttonStyle, () => { for (const input of inputsToCheck) { if (!input.validity.valid) { return; @@ -695,9 +650,7 @@ shakaDemo.Custom = class { this.remakeSavedList_(); this.dialog_.close(); })); - const cancelString = - shakaDemoMain.getLocalizedString(shakaDemo.MessageIds.CANCEL_BUTTON); - finishDiv.appendChild(this.makeButton_(cancelString, buttonStyle, () => { + finishDiv.appendChild(this.makeButton_('Cancel', buttonStyle, () => { this.dialog_.close(); })); @@ -737,9 +690,8 @@ shakaDemo.Custom = class { const tabDiv = document.createElement('tr'); const tabsToHide = []; const buttonsToSwitch = []; - const addTabButton = (messageId, tabToShow, startOn) => { + const addTabButton = (name, tabToShow, startOn) => { const buttonStyle = shakaDemo.Custom.ButtonStyle_.PLAIN; - const name = shakaDemoMain.getLocalizedString(messageId); const button = this.makeButton_(name, buttonStyle, () => { for (const tab of tabsToHide) { tab.classList.add('hidden'); @@ -759,18 +711,12 @@ shakaDemo.Custom = class { tabToShow.classList.add('hidden'); } }; - addTabButton( - shakaDemo.MessageIds.MAIN_TAB, mainDiv, /* startOn= */ true); - addTabButton( - shakaDemo.MessageIds.DRM_TAB, drmDiv, /* startOn= */ false); - addTabButton( - shakaDemo.MessageIds.HEADERS_TAB, headersDiv, /* startOn= */ false); - addTabButton( - shakaDemo.MessageIds.ADS_TAB, adsDiv, /* startOn= */ false); - addTabButton( - shakaDemo.MessageIds.HLS_TAB, hlsDiv, /* startOn= */ false); - addTabButton( - shakaDemo.MessageIds.EXTRA_TAB, extraConfigDiv, /* startOn= */ false); + addTabButton('Main', mainDiv, /* startOn= */ true); + addTabButton('Drm', drmDiv, /* startOn= */ false); + addTabButton('Headers', headersDiv, /* startOn= */ false); + addTabButton('Ads', adsDiv, /* startOn= */ false); + addTabButton('HLS', hlsDiv, /* startOn= */ false); + addTabButton('Extra Config', extraConfigDiv, /* startOn= */ false); // Append the divs in the desired order. this.dialog_.appendChild(tabDiv); @@ -861,24 +807,24 @@ shakaDemo.Custom = class { const savedList = this.savedList_; const isFeatured = false; return new shakaDemo.AssetCard(savedList, asset, isFeatured, (c) => { - c.addButton(shakaDemo.MessageIds.PLAY, () => { + c.addButton('Play', () => { shakaDemoMain.loadAsset(asset); this.updateSelected_(); }); - c.addButton(shakaDemo.MessageIds.EDIT_CUSTOM, async () => { + c.addButton('Edit', async () => { if (asset.unstoreCallback) { await asset.unstoreCallback(); } this.showAssetDialog_(asset); }); - c.addButton(shakaDemo.MessageIds.DELETE_CUSTOM, async () => { + c.addButton('Delete', async () => { this.assets_.delete(asset); if (asset.unstoreCallback) { await asset.unstoreCallback(); } this.saveAssetInfos_(this.assets_); this.remakeSavedList_(); - }, shakaDemo.MessageIds.DELETE_CUSTOM); + }, 'Delete this custom asset?'); c.addStoreButton(); }); } @@ -905,15 +851,10 @@ shakaDemo.Custom = class { textElement.textContent = text; this.savedList_.appendChild(textElement); }; - makeMessage('title', - shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.CUSTOM_INTRO_ONE)); - makeMessage('body-2', - shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.CUSTOM_INTRO_TWO)); + makeMessage('title', 'Try Shaka Player with your own content!'); + makeMessage('body-2', 'Press the button below to add a custom asset.'); makeMessage('body-1', - shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.CUSTOM_INTRO_THREE)); + 'Custom assets will remain even after reloading the page.'); } else { // Make asset cards for the assets. this.assetCards_ = Array.from(this.assets_).map((asset) => { diff --git a/demo/front.js b/demo/front.js index dac025b6e..ee7ac4921 100644 --- a/demo/front.js +++ b/demo/front.js @@ -9,7 +9,6 @@ goog.provide('shakaDemo.Front'); goog.require('shakaDemo.AssetCard'); -goog.require('shakaDemo.MessageIds'); goog.requireType('ShakaDemoAssetInfo'); /** @type {?shakaDemo.Front} */ @@ -50,9 +49,6 @@ shakaDemo.Front = class { document.addEventListener('shaka-main-offline-progress', () => { this.updateOfflineProgress_(); }); - document.addEventListener('shaka-main-locale-changed', () => { - this.remakeAssetCards_(); - }); document.addEventListener('shaka-main-page-changed', () => { if (!this.assetCardDiv_.childNodes.length && !container.classList.contains('hidden')) { @@ -74,19 +70,20 @@ shakaDemo.Front = class { const makeMessage = (textClass, text) => { const textElement = document.createElement('h2'); textElement.classList.add('mdl-typography--' + textClass); - textElement.textContent = shakaDemoMain.getLocalizedString(text); + textElement.textContent = text; this.messageDiv_.appendChild(textElement); }; - makeMessage('body-2', shakaDemo.MessageIds.FRONT_INTRO_ONE); - makeMessage('body-1', shakaDemo.MessageIds.FRONT_INTRO_TWO); + makeMessage('body-2', 'This is a demo of Google\'s Shaka Player, a ' + + 'JavaScript library for adaptive video streaming.'); + makeMessage('body-1', 'Choose a video to playback; more assets are ' + + 'available via the "all content" tab.'); const hideButton = document.createElement('button'); hideButton.classList.add('mdl-button'); hideButton.classList.add('mdl-button--colored'); hideButton.classList.add('mdl-js-button'); hideButton.classList.add('mdl-js-ripple-effect'); - hideButton.textContent = shakaDemoMain.getLocalizedString( - shakaDemo.MessageIds.FRONT_INTRO_DISMISS); + hideButton.textContent = 'Dismiss'; hideButton.addEventListener('click', () => { shaka.util.Dom.removeAllChildren(this.messageDiv_); window.localStorage.setItem(hideName, 'true'); @@ -122,7 +119,7 @@ shakaDemo.Front = class { if (unsupportedReason) { c.markAsUnsupported(unsupportedReason); } else { - c.addButton(shakaDemo.MessageIds.PLAY, () => { + c.addButton('Play', () => { shakaDemoMain.loadAsset(asset); this.updateSelected_(); }); diff --git a/demo/index.html b/demo/index.html index b3c670ed3..c929f3fb9 100644 --- a/demo/index.html +++ b/demo/index.html @@ -85,7 +85,6 @@ UNCOMPILED_JS = [ // Enable less, the CSS pre-processor. '../node_modules/less/dist/less.js', // These are the individual parts of the demo app. - 'common/message_ids.js', 'common/asset.js', 'common/assets.js', 'demo_uncompiled.js', @@ -100,11 +99,11 @@ UNCOMPILED_JS = [