shaka-player 4.4.2 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/release-please.yaml +2 -27
- package/CHANGELOG.md +67 -25
- package/README.md +16 -10
- package/demo/asset_card.js +18 -21
- package/demo/cast_receiver/index.html +0 -1
- package/demo/close_button.js +0 -3
- package/demo/common/asset.js +27 -5
- package/demo/common/assets.js +150 -52
- package/demo/config.js +192 -253
- package/demo/custom.js +39 -98
- package/demo/front.js +7 -10
- package/demo/index.html +19 -22
- package/demo/input.js +6 -11
- package/demo/input_container.js +8 -9
- package/demo/main.js +52 -124
- package/demo/search.js +23 -35
- package/demo/service_worker.js +0 -3
- package/demo/tooltip.js +3 -5
- package/demo/visualizer.js +3 -5
- package/demo/visualizer_button.js +1 -20
- package/dist/demo.compiled.debug.js +187 -211
- package/dist/demo.compiled.debug.map +4 -4
- package/dist/demo.compiled.js +187 -211
- package/dist/demo.compiled.map +4 -4
- package/dist/deps.js +27 -24
- package/dist/locales.js +31 -31
- package/dist/receiver.compiled.debug.js +42 -61
- package/dist/receiver.compiled.debug.map +4 -4
- package/dist/receiver.compiled.js +42 -61
- package/dist/receiver.compiled.map +4 -4
- package/dist/shaka-player.compiled.d.ts +728 -365
- package/dist/shaka-player.compiled.debug.d.ts +728 -365
- package/dist/shaka-player.compiled.debug.externs.js +475 -51
- package/dist/shaka-player.compiled.debug.js +576 -480
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +475 -51
- package/dist/shaka-player.compiled.js +1117 -1056
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +783 -410
- package/dist/shaka-player.ui.debug.d.ts +783 -410
- package/dist/shaka-player.ui.debug.externs.js +496 -51
- package/dist/shaka-player.ui.debug.js +647 -542
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +496 -51
- package/dist/shaka-player.ui.js +1260 -1194
- package/dist/shaka-player.ui.map +4 -4
- package/docs/design/lcevc-integration.md +14 -14
- package/docs/tutorials/faq.md +27 -55
- package/docs/tutorials/index.json +2 -1
- package/docs/tutorials/lcevc.md +118 -0
- package/docs/tutorials/offline.md +1 -1
- package/docs/tutorials/ui-customization.md +4 -0
- package/externs/css_style_declaration.js +19 -0
- package/externs/lcevc.js +37 -13
- package/externs/media_remote.js +68 -0
- package/externs/mediatailor.js +193 -0
- package/externs/pictureinpicture.js +11 -0
- package/externs/shaka/ads.js +27 -0
- package/externs/shaka/manifest.js +10 -5
- package/externs/shaka/manifest_parser.js +7 -1
- package/externs/shaka/offline.js +4 -0
- package/externs/shaka/player.js +12 -1
- package/karma.conf.js +7 -3
- package/lib/abr/simple_abr_manager.js +43 -3
- package/lib/ads/ad_manager.js +104 -50
- package/lib/ads/media_tailor_ad.js +297 -0
- package/lib/ads/media_tailor_ad_manager.js +828 -0
- package/lib/cea/ts_cea_parser.js +15 -2
- package/lib/config/codec_switching_strategy.js +24 -0
- package/lib/dash/content_protection.js +120 -2
- package/lib/dash/dash_parser.js +79 -13
- package/lib/dash/mpd_utils.js +10 -6
- package/lib/dash/segment_base.js +13 -5
- package/lib/dash/segment_list.js +13 -5
- package/lib/dash/segment_template.js +43 -85
- package/lib/dependencies/all.js +8 -7
- package/lib/hls/hls_parser.js +101 -37
- package/lib/lcevc/lcevc_dec.js +220 -0
- package/lib/media/adaptation_set.js +22 -11
- package/lib/media/adaptation_set_criteria.js +25 -7
- package/lib/media/media_source_engine.js +215 -27
- package/lib/media/segment_index.js +5 -5
- package/lib/media/segment_reference.js +10 -5
- package/lib/media/streaming_engine.js +44 -39
- package/lib/mss/mss_parser.js +1 -0
- package/lib/net/networking_engine.js +1 -0
- package/lib/offline/indexeddb/v1_storage_cell.js +1 -0
- package/lib/offline/indexeddb/v2_storage_cell.js +1 -0
- package/lib/offline/manifest_converter.js +1 -0
- package/lib/offline/storage.js +3 -0
- package/lib/player.js +142 -72
- package/lib/routing/payload.js +5 -1
- package/lib/text/cue.js +62 -47
- package/lib/text/ttml_text_parser.js +17 -0
- package/lib/text/ui_text_displayer.js +4 -0
- package/lib/text/vtt_text_parser.js +35 -22
- package/lib/transmuxer/h265.js +862 -0
- package/lib/transmuxer/mpeg_ts_transmuxer.js +3 -2
- package/lib/transmuxer/ts_transmuxer.js +160 -15
- package/lib/util/cmcd_manager.js +6 -1
- package/lib/util/error.js +28 -9
- package/lib/util/exp_golomb.js +30 -2
- package/lib/util/fake_event.js +3 -0
- package/lib/util/manifest_parser_utils.js +10 -4
- package/lib/util/mp4_generator.js +4 -4
- package/lib/util/periods.js +2 -0
- package/lib/util/platform.js +54 -0
- package/lib/util/player_configuration.js +8 -0
- package/lib/util/state_history.js +6 -2
- package/lib/util/stream_utils.js +133 -217
- package/lib/util/ts_parser.js +229 -43
- package/maintained-branches.md +3 -2
- package/package.json +4 -6
- package/roadmap.md +15 -5
- package/shaka-player.uncompiled.js +2 -1
- package/support.html +0 -1
- package/test/cast/cast_receiver_integration.js +47 -0
- package/test/codec_switching/codec_switching_integration.js +181 -0
- package/test/dash/dash_parser_content_protection_unit.js +2 -0
- package/test/dash/dash_parser_integration.js +73 -0
- package/test/dash/dash_parser_live_unit.js +2 -0
- package/test/dash/dash_parser_manifest_unit.js +47 -0
- package/test/dash/dash_parser_segment_base_unit.js +7 -0
- package/test/dash/dash_parser_segment_list_unit.js +23 -17
- package/test/dash/dash_parser_segment_template_unit.js +49 -0
- package/test/demo/demo_unit.js +0 -16
- package/test/hls/hls_live_unit.js +35 -0
- package/test/hls/hls_parser_unit.js +8 -61
- package/test/media/adaptation_set_criteria_unit.js +118 -0
- package/test/media/adaptation_set_unit.js +1 -0
- package/test/media/media_source_engine_unit.js +165 -1
- package/test/media/segment_index_unit.js +4 -4
- package/test/media/segment_prefetch_unit.js +1 -1
- package/test/media/streaming_engine_unit.js +17 -17
- package/test/mss/mss_parser_unit.js +2 -0
- package/test/offline/manifest_convert_unit.js +5 -0
- package/test/offline/storage_integration.js +1 -4
- package/test/player_unit.js +102 -131
- package/test/routing/walker_unit.js +1 -0
- package/test/test/assets/dash-aes-128/Fragments(video=0,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=20000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=40000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=60000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=i,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/dash.mpd +18 -0
- package/test/test/assets/dash-aes-128/license +1 -0
- package/test/test/assets/dash-multi-codec/audio_en_2c_128k_aac.mp4 +0 -0
- package/test/test/assets/dash-multi-codec/audio_es_2c_64k_opus.webm +0 -0
- package/test/test/assets/dash-multi-codec/dash.mpd +32 -0
- package/test/test/assets/dash-multi-codec/video_144p_108k_h264.mp4 +0 -0
- package/test/test/assets/hls-ts-h265/0.ts +0 -0
- package/test/test/assets/hls-ts-h265/hevc.m3u8 +6 -0
- package/test/test/assets/hls-ts-h265/index.m3u8 +7 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/media.m3u8 +9 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/media.m3u8 +24 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00000.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00001.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00002.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00003.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00004.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00005.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0000.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0001.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0002.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0003.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/prog_index.m3u8 +14 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/index.m3u8 +23 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-1-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-2-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-3-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-4-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-5-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-6-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-7-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-8-v1-a1.ts +0 -0
- package/test/test/util/dash_parser_util.js +20 -7
- package/test/test/util/fake_ad_manager.js +20 -0
- package/test/test/util/fake_media_source_engine.js +8 -2
- package/test/test/util/manifest_generator.js +7 -3
- package/test/test/util/mss_parser_util.js +4 -0
- package/test/test/util/offline_utils.js +1 -0
- package/test/test/util/streaming_engine_util.js +7 -4
- package/test/text/ttml_text_parser_unit.js +52 -0
- package/test/text/vtt_text_parser_unit.js +105 -48
- package/test/transmuxer/transmuxer_integration.js +121 -4
- package/test/ui/ui_unit.js +3 -10
- package/test/util/stream_utils_unit.js +208 -74
- package/test/util/ts_parser_unit.js +1 -1
- package/ui/controls.js +125 -0
- package/ui/externs/ui.js +8 -1
- package/ui/pip_button.js +22 -120
- package/ui/remote_button.js +201 -0
- package/ui/ui.js +5 -2
- package/demo/common/message_ids.js +0 -309
- package/demo/locales/en.json +0 -287
- package/demo/locales/source.json +0 -1142
- package/externs/mux.js +0 -69
- package/lib/lcevc/lcevc_dil.js +0 -152
- package/lib/transmuxer/muxjs_transmuxer.js +0 -242
- package/test/transmuxer/muxjs_transmuxer_integration.js +0 -177
package/demo/custom.js
CHANGED
|
@@ -12,7 +12,6 @@ goog.require('ShakaDemoAssetInfo');
|
|
|
12
12
|
goog.require('shakaDemo.AssetCard');
|
|
13
13
|
goog.require('shakaDemo.Input');
|
|
14
14
|
goog.require('shakaDemo.InputContainer');
|
|
15
|
-
goog.require('shakaDemo.MessageIds');
|
|
16
15
|
goog.require('shakaDemo.TextInput');
|
|
17
16
|
|
|
18
17
|
/** @type {?shakaDemo.Custom} */
|
|
@@ -71,9 +70,6 @@ shakaDemo.Custom = class {
|
|
|
71
70
|
document.addEventListener('shaka-main-offline-progress', () => {
|
|
72
71
|
this.updateOfflineProgress_();
|
|
73
72
|
});
|
|
74
|
-
document.addEventListener('shaka-main-locale-changed', () => {
|
|
75
|
-
this.remakeSavedList_();
|
|
76
|
-
});
|
|
77
73
|
document.addEventListener('shaka-main-page-changed', () => {
|
|
78
74
|
if (!this.savedList_.childNodes.length &&
|
|
79
75
|
!container.classList.contains('hidden')) {
|
|
@@ -142,9 +138,8 @@ shakaDemo.Custom = class {
|
|
|
142
138
|
const div = document.createElement('div');
|
|
143
139
|
headersDiv.appendChild(div);
|
|
144
140
|
const containerStyle = shakaDemo.InputContainer.Style.VERTICAL;
|
|
145
|
-
const headerText = shakaDemo.MessageIds.LICENSE_HEADER_TITLE;
|
|
146
141
|
const container = new shakaDemo.InputContainer(
|
|
147
|
-
div,
|
|
142
|
+
div, 'License Header', containerStyle,
|
|
148
143
|
/* docLink= */ null);
|
|
149
144
|
|
|
150
145
|
const collisionCheckEntry = {
|
|
@@ -209,9 +204,7 @@ shakaDemo.Custom = class {
|
|
|
209
204
|
const nameOnChange = (input) => {
|
|
210
205
|
onChange(input.value, headerValue);
|
|
211
206
|
};
|
|
212
|
-
|
|
213
|
-
shakaDemo.MessageIds.LICENSE_HEADER_NAME);
|
|
214
|
-
this.makeField_(container, licenseHeaderName, nameSetup, nameOnChange);
|
|
207
|
+
this.makeField_(container, 'Header Name', nameSetup, nameOnChange);
|
|
215
208
|
|
|
216
209
|
const valueSetup = (input, container) => {
|
|
217
210
|
if (headerValue) {
|
|
@@ -221,9 +214,7 @@ shakaDemo.Custom = class {
|
|
|
221
214
|
const valueOnChange = (input) => {
|
|
222
215
|
onChange(headerName, input.value);
|
|
223
216
|
};
|
|
224
|
-
|
|
225
|
-
shakaDemo.MessageIds.LICENSE_HEADER_VALUE);
|
|
226
|
-
this.makeField_(container, licenseHeaderValue, valueSetup, valueOnChange);
|
|
217
|
+
this.makeField_(container, 'Header Value', valueSetup, valueOnChange);
|
|
227
218
|
};
|
|
228
219
|
if (assetInProgress.licenseRequestHeaders.size == 0) {
|
|
229
220
|
// It starts out with a single empty row, but each time you start filling
|
|
@@ -269,8 +260,8 @@ shakaDemo.Custom = class {
|
|
|
269
260
|
const fullMimeTypeOnChange = (input) => {
|
|
270
261
|
assetInProgress.setMediaPlaylistFullMimeType(input.value);
|
|
271
262
|
};
|
|
272
|
-
const fullMimeTypeName =
|
|
273
|
-
|
|
263
|
+
const fullMimeTypeName =
|
|
264
|
+
'Full Mime Type for Playing Media Playlists Directly';
|
|
274
265
|
this.makeField_(
|
|
275
266
|
container, fullMimeTypeName, fullMimeTypeSetup, fullMimeTypeOnChange);
|
|
276
267
|
|
|
@@ -300,10 +291,7 @@ shakaDemo.Custom = class {
|
|
|
300
291
|
const adTagOnChange = (input) => {
|
|
301
292
|
assetInProgress.adTagUri = input.value;
|
|
302
293
|
};
|
|
303
|
-
|
|
304
|
-
shakaDemo.MessageIds.AD_TAG_URL);
|
|
305
|
-
this.makeField_(
|
|
306
|
-
container, adTagURLName, adTagSetup, adTagOnChange);
|
|
294
|
+
this.makeField_(container, 'Ad Tag URL', adTagSetup, adTagOnChange);
|
|
307
295
|
|
|
308
296
|
// Make the content source id field.
|
|
309
297
|
const contentSrcIdSetup = (input, container) => {
|
|
@@ -319,8 +307,7 @@ shakaDemo.Custom = class {
|
|
|
319
307
|
this.manifestField_.required =
|
|
320
308
|
this.checkManifestRequired_(assetInProgress);
|
|
321
309
|
};
|
|
322
|
-
const contentSrcIdName =
|
|
323
|
-
shakaDemo.MessageIds.IMA_CONTENT_SRC_ID);
|
|
310
|
+
const contentSrcIdName = 'Content source ID (for VOD DAI Content)';
|
|
324
311
|
this.makeField_(
|
|
325
312
|
container, contentSrcIdName, contentSrcIdSetup, contentSrcIdOnChange);
|
|
326
313
|
|
|
@@ -338,10 +325,8 @@ shakaDemo.Custom = class {
|
|
|
338
325
|
this.manifestField_.required =
|
|
339
326
|
this.checkManifestRequired_(assetInProgress);
|
|
340
327
|
};
|
|
341
|
-
const videoIdName =
|
|
342
|
-
|
|
343
|
-
this.makeField_(
|
|
344
|
-
container, videoIdName, videoIdSetup, videoIdOnChange);
|
|
328
|
+
const videoIdName = 'Video ID (for VOD DAI Content)';
|
|
329
|
+
this.makeField_(container, videoIdName, videoIdSetup, videoIdOnChange);
|
|
345
330
|
|
|
346
331
|
// Make the asset key field.
|
|
347
332
|
const assetKeySetup = (input, container) => {
|
|
@@ -357,10 +342,8 @@ shakaDemo.Custom = class {
|
|
|
357
342
|
this.manifestField_.required =
|
|
358
343
|
this.checkManifestRequired_(assetInProgress);
|
|
359
344
|
};
|
|
360
|
-
const assetKeyName =
|
|
361
|
-
|
|
362
|
-
this.makeField_(
|
|
363
|
-
container, assetKeyName, assetKeySetup, assetKeyChange);
|
|
345
|
+
const assetKeyName = 'Asset key (for LIVE DAI Content)';
|
|
346
|
+
this.makeField_(container, assetKeyName, assetKeySetup, assetKeyChange);
|
|
364
347
|
|
|
365
348
|
// Make the manifest type field.
|
|
366
349
|
const manifestTypeSetup = (input, container) => {
|
|
@@ -376,8 +359,7 @@ shakaDemo.Custom = class {
|
|
|
376
359
|
this.manifestField_.required =
|
|
377
360
|
this.checkManifestRequired_(assetInProgress);
|
|
378
361
|
};
|
|
379
|
-
const manifestTypeName =
|
|
380
|
-
shakaDemo.MessageIds.IMA_MANIFEST_TYPE);
|
|
362
|
+
const manifestTypeName = 'Manifest type (for DAI Content)';
|
|
381
363
|
this.makeField_(
|
|
382
364
|
container, manifestTypeName, manifestTypeSetup, manifestTypeChange);
|
|
383
365
|
|
|
@@ -437,10 +419,8 @@ shakaDemo.Custom = class {
|
|
|
437
419
|
const licenseOnChange = (input) => {
|
|
438
420
|
setLicenseServerURLs();
|
|
439
421
|
};
|
|
440
|
-
const licenseServerURLName = shakaDemoMain.getLocalizedString(
|
|
441
|
-
shakaDemo.MessageIds.LICENSE_SERVER_URL);
|
|
442
422
|
this.makeField_(
|
|
443
|
-
container,
|
|
423
|
+
container, 'Custom License Server URL', licenseSetup, licenseOnChange);
|
|
444
424
|
|
|
445
425
|
// Make the license certificate URL field.
|
|
446
426
|
const certSetup = (input, container) => {
|
|
@@ -451,10 +431,8 @@ shakaDemo.Custom = class {
|
|
|
451
431
|
const certOnChange = (input) => {
|
|
452
432
|
assetInProgress.certificateUri = input.value;
|
|
453
433
|
};
|
|
454
|
-
const licenseCertificateURLName = shakaDemoMain.getLocalizedString(
|
|
455
|
-
shakaDemo.MessageIds.LICENSE_CERTIFICATE_URL);
|
|
456
434
|
this.makeField_(
|
|
457
|
-
container,
|
|
435
|
+
container, 'Custom License Certificate URL', certSetup, certOnChange);
|
|
458
436
|
|
|
459
437
|
// Make the drm system field.
|
|
460
438
|
const drmSetup = (input, container) => {
|
|
@@ -470,10 +448,7 @@ shakaDemo.Custom = class {
|
|
|
470
448
|
const drmOnChange = (input) => {
|
|
471
449
|
setLicenseServerURLs();
|
|
472
450
|
};
|
|
473
|
-
|
|
474
|
-
shakaDemo.MessageIds.DRM_SYSTEM);
|
|
475
|
-
this.makeField_(
|
|
476
|
-
container, DRMSystemName, drmSetup, drmOnChange);
|
|
451
|
+
this.makeField_(container, 'Custom DRM System', drmSetup, drmOnChange);
|
|
477
452
|
|
|
478
453
|
return drmDiv;
|
|
479
454
|
}
|
|
@@ -508,8 +483,7 @@ shakaDemo.Custom = class {
|
|
|
508
483
|
// Make an error that shows up if you did not provide valid JSON.
|
|
509
484
|
const error = document.createElement('span');
|
|
510
485
|
error.classList.add('mdl-textfield__error');
|
|
511
|
-
error.textContent =
|
|
512
|
-
shakaDemo.MessageIds.INVALID_JSON_CONFIG_ERROR);
|
|
486
|
+
error.textContent = 'Invalid JSON configuration';
|
|
513
487
|
|
|
514
488
|
container.appendChild(error);
|
|
515
489
|
};
|
|
@@ -526,8 +500,7 @@ shakaDemo.Custom = class {
|
|
|
526
500
|
inputWrapper.setValid(false);
|
|
527
501
|
}
|
|
528
502
|
};
|
|
529
|
-
const extraConfigLabel =
|
|
530
|
-
shakaDemo.MessageIds.EXTRA_SHAKA_PLAYER_CONFIG);
|
|
503
|
+
const extraConfigLabel = 'Extra Shaka Player configuration (JSON)';
|
|
531
504
|
this.makeField_(
|
|
532
505
|
container, extraConfigLabel, extraSetup, extraOnChange,
|
|
533
506
|
/* isTextArea= */ true);
|
|
@@ -557,8 +530,7 @@ shakaDemo.Custom = class {
|
|
|
557
530
|
// Make an error that shows up if you did not provide an URL.
|
|
558
531
|
const error = document.createElement('span');
|
|
559
532
|
error.classList.add('mdl-textfield__error');
|
|
560
|
-
error.textContent =
|
|
561
|
-
shakaDemo.MessageIds.MANIFEST_URL_ERROR);
|
|
533
|
+
error.textContent = 'Must have a manifest URL, or IMA DAI id fields';
|
|
562
534
|
container.appendChild(error);
|
|
563
535
|
|
|
564
536
|
// Add a regex that will detect empty strings.
|
|
@@ -569,10 +541,7 @@ shakaDemo.Custom = class {
|
|
|
569
541
|
const manifestOnChange = (input) => {
|
|
570
542
|
assetInProgress.manifestUri = input.value.trim();
|
|
571
543
|
};
|
|
572
|
-
|
|
573
|
-
shakaDemo.MessageIds.MANIFEST_URL);
|
|
574
|
-
this.makeField_(
|
|
575
|
-
container, manifestURLName, manifestSetup, manifestOnChange);
|
|
544
|
+
this.makeField_(container, 'Manifest URL', manifestSetup, manifestOnChange);
|
|
576
545
|
|
|
577
546
|
// Make the name field.
|
|
578
547
|
const nameSetup = (input, container) => {
|
|
@@ -582,8 +551,7 @@ shakaDemo.Custom = class {
|
|
|
582
551
|
// Make an error that shows up if you have an empty/duplicate name.
|
|
583
552
|
const error = document.createElement('span');
|
|
584
553
|
error.classList.add('mdl-textfield__error');
|
|
585
|
-
error.textContent =
|
|
586
|
-
shakaDemo.MessageIds.NAME_ERROR);
|
|
554
|
+
error.textContent = 'Must be a unique name.';
|
|
587
555
|
container.appendChild(error);
|
|
588
556
|
|
|
589
557
|
// Make a regex that will detect duplicates.
|
|
@@ -604,10 +572,7 @@ shakaDemo.Custom = class {
|
|
|
604
572
|
const nameOnChange = (input) => {
|
|
605
573
|
assetInProgress.name = input.value;
|
|
606
574
|
};
|
|
607
|
-
|
|
608
|
-
shakaDemo.MessageIds.NAME);
|
|
609
|
-
this.makeField_(
|
|
610
|
-
container, nameName, nameSetup, nameOnChange);
|
|
575
|
+
this.makeField_(container, 'Name', nameSetup, nameOnChange);
|
|
611
576
|
|
|
612
577
|
// Make the icon field.
|
|
613
578
|
const iconSetup = (input, container) => {
|
|
@@ -634,11 +599,7 @@ shakaDemo.Custom = class {
|
|
|
634
599
|
iconDiv.appendChild(img);
|
|
635
600
|
}
|
|
636
601
|
};
|
|
637
|
-
|
|
638
|
-
const iconURLName = shakaDemoMain.getLocalizedString(
|
|
639
|
-
shakaDemo.MessageIds.ICON_URL);
|
|
640
|
-
this.makeField_(
|
|
641
|
-
container, iconURLName, iconSetup, iconOnChange);
|
|
602
|
+
this.makeField_(container, 'Icon URL', iconSetup, iconOnChange);
|
|
642
603
|
|
|
643
604
|
// Make the MIME type field.
|
|
644
605
|
const mimeTypeSetup = (input, container) => {
|
|
@@ -650,11 +611,7 @@ shakaDemo.Custom = class {
|
|
|
650
611
|
const mimeTypeOnChange = (input) => {
|
|
651
612
|
assetInProgress.mimeType = input.value || null;
|
|
652
613
|
};
|
|
653
|
-
|
|
654
|
-
const mimeTypeName = shakaDemoMain.getLocalizedString(
|
|
655
|
-
shakaDemo.MessageIds.MIME_TYPE);
|
|
656
|
-
this.makeField_(
|
|
657
|
-
container, mimeTypeName, mimeTypeSetup, mimeTypeOnChange);
|
|
614
|
+
this.makeField_(container, 'MIME Type', mimeTypeSetup, mimeTypeOnChange);
|
|
658
615
|
|
|
659
616
|
return mainDiv;
|
|
660
617
|
}
|
|
@@ -681,9 +638,7 @@ shakaDemo.Custom = class {
|
|
|
681
638
|
const finishDiv = document.createElement('tr');
|
|
682
639
|
|
|
683
640
|
const buttonStyle = shakaDemo.Custom.ButtonStyle_.RAISED;
|
|
684
|
-
|
|
685
|
-
shakaDemoMain.getLocalizedString(shakaDemo.MessageIds.SAVE_BUTTON);
|
|
686
|
-
finishDiv.appendChild(this.makeButton_(saveString, buttonStyle, () => {
|
|
641
|
+
finishDiv.appendChild(this.makeButton_('Save', buttonStyle, () => {
|
|
687
642
|
for (const input of inputsToCheck) {
|
|
688
643
|
if (!input.validity.valid) {
|
|
689
644
|
return;
|
|
@@ -695,9 +650,7 @@ shakaDemo.Custom = class {
|
|
|
695
650
|
this.remakeSavedList_();
|
|
696
651
|
this.dialog_.close();
|
|
697
652
|
}));
|
|
698
|
-
|
|
699
|
-
shakaDemoMain.getLocalizedString(shakaDemo.MessageIds.CANCEL_BUTTON);
|
|
700
|
-
finishDiv.appendChild(this.makeButton_(cancelString, buttonStyle, () => {
|
|
653
|
+
finishDiv.appendChild(this.makeButton_('Cancel', buttonStyle, () => {
|
|
701
654
|
this.dialog_.close();
|
|
702
655
|
}));
|
|
703
656
|
|
|
@@ -737,9 +690,8 @@ shakaDemo.Custom = class {
|
|
|
737
690
|
const tabDiv = document.createElement('tr');
|
|
738
691
|
const tabsToHide = [];
|
|
739
692
|
const buttonsToSwitch = [];
|
|
740
|
-
const addTabButton = (
|
|
693
|
+
const addTabButton = (name, tabToShow, startOn) => {
|
|
741
694
|
const buttonStyle = shakaDemo.Custom.ButtonStyle_.PLAIN;
|
|
742
|
-
const name = shakaDemoMain.getLocalizedString(messageId);
|
|
743
695
|
const button = this.makeButton_(name, buttonStyle, () => {
|
|
744
696
|
for (const tab of tabsToHide) {
|
|
745
697
|
tab.classList.add('hidden');
|
|
@@ -759,18 +711,12 @@ shakaDemo.Custom = class {
|
|
|
759
711
|
tabToShow.classList.add('hidden');
|
|
760
712
|
}
|
|
761
713
|
};
|
|
762
|
-
addTabButton(
|
|
763
|
-
|
|
764
|
-
addTabButton(
|
|
765
|
-
|
|
766
|
-
addTabButton(
|
|
767
|
-
|
|
768
|
-
addTabButton(
|
|
769
|
-
shakaDemo.MessageIds.ADS_TAB, adsDiv, /* startOn= */ false);
|
|
770
|
-
addTabButton(
|
|
771
|
-
shakaDemo.MessageIds.HLS_TAB, hlsDiv, /* startOn= */ false);
|
|
772
|
-
addTabButton(
|
|
773
|
-
shakaDemo.MessageIds.EXTRA_TAB, extraConfigDiv, /* startOn= */ false);
|
|
714
|
+
addTabButton('Main', mainDiv, /* startOn= */ true);
|
|
715
|
+
addTabButton('Drm', drmDiv, /* startOn= */ false);
|
|
716
|
+
addTabButton('Headers', headersDiv, /* startOn= */ false);
|
|
717
|
+
addTabButton('Ads', adsDiv, /* startOn= */ false);
|
|
718
|
+
addTabButton('HLS', hlsDiv, /* startOn= */ false);
|
|
719
|
+
addTabButton('Extra Config', extraConfigDiv, /* startOn= */ false);
|
|
774
720
|
|
|
775
721
|
// Append the divs in the desired order.
|
|
776
722
|
this.dialog_.appendChild(tabDiv);
|
|
@@ -861,24 +807,24 @@ shakaDemo.Custom = class {
|
|
|
861
807
|
const savedList = this.savedList_;
|
|
862
808
|
const isFeatured = false;
|
|
863
809
|
return new shakaDemo.AssetCard(savedList, asset, isFeatured, (c) => {
|
|
864
|
-
c.addButton(
|
|
810
|
+
c.addButton('Play', () => {
|
|
865
811
|
shakaDemoMain.loadAsset(asset);
|
|
866
812
|
this.updateSelected_();
|
|
867
813
|
});
|
|
868
|
-
c.addButton(
|
|
814
|
+
c.addButton('Edit', async () => {
|
|
869
815
|
if (asset.unstoreCallback) {
|
|
870
816
|
await asset.unstoreCallback();
|
|
871
817
|
}
|
|
872
818
|
this.showAssetDialog_(asset);
|
|
873
819
|
});
|
|
874
|
-
c.addButton(
|
|
820
|
+
c.addButton('Delete', async () => {
|
|
875
821
|
this.assets_.delete(asset);
|
|
876
822
|
if (asset.unstoreCallback) {
|
|
877
823
|
await asset.unstoreCallback();
|
|
878
824
|
}
|
|
879
825
|
this.saveAssetInfos_(this.assets_);
|
|
880
826
|
this.remakeSavedList_();
|
|
881
|
-
},
|
|
827
|
+
}, 'Delete this custom asset?');
|
|
882
828
|
c.addStoreButton();
|
|
883
829
|
});
|
|
884
830
|
}
|
|
@@ -905,15 +851,10 @@ shakaDemo.Custom = class {
|
|
|
905
851
|
textElement.textContent = text;
|
|
906
852
|
this.savedList_.appendChild(textElement);
|
|
907
853
|
};
|
|
908
|
-
makeMessage('title',
|
|
909
|
-
|
|
910
|
-
shakaDemo.MessageIds.CUSTOM_INTRO_ONE));
|
|
911
|
-
makeMessage('body-2',
|
|
912
|
-
shakaDemoMain.getLocalizedString(
|
|
913
|
-
shakaDemo.MessageIds.CUSTOM_INTRO_TWO));
|
|
854
|
+
makeMessage('title', 'Try Shaka Player with your own content!');
|
|
855
|
+
makeMessage('body-2', 'Press the button below to add a custom asset.');
|
|
914
856
|
makeMessage('body-1',
|
|
915
|
-
|
|
916
|
-
shakaDemo.MessageIds.CUSTOM_INTRO_THREE));
|
|
857
|
+
'Custom assets will remain even after reloading the page.');
|
|
917
858
|
} else {
|
|
918
859
|
// Make asset cards for the assets.
|
|
919
860
|
this.assetCards_ = Array.from(this.assets_).map((asset) => {
|
package/demo/front.js
CHANGED
|
@@ -9,7 +9,6 @@ goog.provide('shakaDemo.Front');
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
goog.require('shakaDemo.AssetCard');
|
|
12
|
-
goog.require('shakaDemo.MessageIds');
|
|
13
12
|
goog.requireType('ShakaDemoAssetInfo');
|
|
14
13
|
|
|
15
14
|
/** @type {?shakaDemo.Front} */
|
|
@@ -50,9 +49,6 @@ shakaDemo.Front = class {
|
|
|
50
49
|
document.addEventListener('shaka-main-offline-progress', () => {
|
|
51
50
|
this.updateOfflineProgress_();
|
|
52
51
|
});
|
|
53
|
-
document.addEventListener('shaka-main-locale-changed', () => {
|
|
54
|
-
this.remakeAssetCards_();
|
|
55
|
-
});
|
|
56
52
|
document.addEventListener('shaka-main-page-changed', () => {
|
|
57
53
|
if (!this.assetCardDiv_.childNodes.length &&
|
|
58
54
|
!container.classList.contains('hidden')) {
|
|
@@ -74,19 +70,20 @@ shakaDemo.Front = class {
|
|
|
74
70
|
const makeMessage = (textClass, text) => {
|
|
75
71
|
const textElement = document.createElement('h2');
|
|
76
72
|
textElement.classList.add('mdl-typography--' + textClass);
|
|
77
|
-
textElement.textContent =
|
|
73
|
+
textElement.textContent = text;
|
|
78
74
|
this.messageDiv_.appendChild(textElement);
|
|
79
75
|
};
|
|
80
|
-
makeMessage('body-2',
|
|
81
|
-
|
|
76
|
+
makeMessage('body-2', 'This is a demo of Google\'s Shaka Player, a ' +
|
|
77
|
+
'JavaScript library for adaptive video streaming.');
|
|
78
|
+
makeMessage('body-1', 'Choose a video to playback; more assets are ' +
|
|
79
|
+
'available via the "all content" tab.');
|
|
82
80
|
|
|
83
81
|
const hideButton = document.createElement('button');
|
|
84
82
|
hideButton.classList.add('mdl-button');
|
|
85
83
|
hideButton.classList.add('mdl-button--colored');
|
|
86
84
|
hideButton.classList.add('mdl-js-button');
|
|
87
85
|
hideButton.classList.add('mdl-js-ripple-effect');
|
|
88
|
-
hideButton.textContent =
|
|
89
|
-
shakaDemo.MessageIds.FRONT_INTRO_DISMISS);
|
|
86
|
+
hideButton.textContent = 'Dismiss';
|
|
90
87
|
hideButton.addEventListener('click', () => {
|
|
91
88
|
shaka.util.Dom.removeAllChildren(this.messageDiv_);
|
|
92
89
|
window.localStorage.setItem(hideName, 'true');
|
|
@@ -122,7 +119,7 @@ shakaDemo.Front = class {
|
|
|
122
119
|
if (unsupportedReason) {
|
|
123
120
|
c.markAsUnsupported(unsupportedReason);
|
|
124
121
|
} else {
|
|
125
|
-
c.addButton(
|
|
122
|
+
c.addButton('Play', () => {
|
|
126
123
|
shakaDemoMain.loadAsset(asset);
|
|
127
124
|
this.updateSelected_();
|
|
128
125
|
});
|
package/demo/index.html
CHANGED
|
@@ -36,12 +36,10 @@
|
|
|
36
36
|
<link rel="stylesheet" href="../dist/controls.css">
|
|
37
37
|
|
|
38
38
|
<script defer src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js"></script>
|
|
39
|
-
<!-- transmuxing support is enabled by including this: -->
|
|
40
|
-
<script defer src="../node_modules/mux.js/dist/mux.min.js"></script>
|
|
41
39
|
<!-- MSS support is enabled by including this: -->
|
|
42
40
|
<script defer src="../node_modules/codem-isoboxer/dist/iso_boxer.min.js"></script>
|
|
43
41
|
<!-- MPEG-5 Part2 LCEVC support is enabled by including this: -->
|
|
44
|
-
<script defer src="../node_modules/
|
|
42
|
+
<script defer src="../node_modules/lcevc_dec.js/dist/lcevc_dec.min.js"></script>
|
|
45
43
|
<!-- MDL is enabled by including this: -->
|
|
46
44
|
<script defer src="../node_modules/material-design-lite/dist/material.min.js"></script>
|
|
47
45
|
<!-- MDL modal dialogs are enabled by including these: -->
|
|
@@ -87,7 +85,6 @@ UNCOMPILED_JS = [
|
|
|
87
85
|
// Enable less, the CSS pre-processor.
|
|
88
86
|
'../node_modules/less/dist/less.js',
|
|
89
87
|
// These are the individual parts of the demo app.
|
|
90
|
-
'common/message_ids.js',
|
|
91
88
|
'common/asset.js',
|
|
92
89
|
'common/assets.js',
|
|
93
90
|
'demo_uncompiled.js',
|
|
@@ -102,11 +99,11 @@ UNCOMPILED_JS = [
|
|
|
102
99
|
<header class="app-header mdl-layout__header should-hide-in-no-input-mode">
|
|
103
100
|
<header class="mdl-layout__header-row" id="nav-button-container">
|
|
104
101
|
<img alt="Shaka Player Logo" src="shaka_logo_trans.png" class="logo" />
|
|
105
|
-
<button id="nav-button-front" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail" defaultselected
|
|
106
|
-
<button id="nav-button-search" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail"
|
|
107
|
-
<button id="nav-button-custom" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail"
|
|
102
|
+
<button id="nav-button-front" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail" defaultselected tab-identifier="HOME">HOME</button>
|
|
103
|
+
<button id="nav-button-search" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail" tab-identifier="ALL_CONTENT">ALL CONTENT</button>
|
|
104
|
+
<button id="nav-button-custom" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail" tab-identifier="CUSTOM CONTENT">CUSTOM CONTENT</button>
|
|
108
105
|
<div class="mdl-layout-spacer"></div>
|
|
109
|
-
<button id="bug-button" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail"
|
|
106
|
+
<button id="bug-button" class="mdl-button mdl-js-button mdl-js-ripple-effect should-disable-on-fail">REPORT BUG</button>
|
|
110
107
|
<div class="version-block">
|
|
111
108
|
<span class="version-string"></span>
|
|
112
109
|
</div>
|
|
@@ -117,7 +114,7 @@ UNCOMPILED_JS = [
|
|
|
117
114
|
</div>
|
|
118
115
|
<div class="mdl-layout__drawer hamburger-menu">
|
|
119
116
|
<div id="hamburger-menu-title" class="mdl-layout-title">
|
|
120
|
-
<div
|
|
117
|
+
<div>Shaka Player Demo Config</div>
|
|
121
118
|
<div class="mdl-layout-spacer"></div>
|
|
122
119
|
<button id="drawer-close-button" class="mdl-button mdl-js-button mdl-button--icon should-disable-on-fail"><i class="material-icons-round">close</i></button>
|
|
123
120
|
</div>
|
|
@@ -144,28 +141,28 @@ UNCOMPILED_JS = [
|
|
|
144
141
|
<div class="mdl-mega-footer__middle-section">
|
|
145
142
|
|
|
146
143
|
<div class="mdl-mega-footer__drop-down-section">
|
|
147
|
-
<h1 class="mdl-mega-footer__heading"
|
|
144
|
+
<h1 class="mdl-mega-footer__heading">PROJECT LINKS</h1>
|
|
148
145
|
<ul class="mdl-mega-footer__link-list">
|
|
149
|
-
<li><a rel="noopener" target="_blank" href="../docs/api/index.html"
|
|
150
|
-
<li><a rel="noopener" target="_blank" href="https://www.apache.org/licenses/LICENSE-2.0"
|
|
151
|
-
<li><a rel="noopener" target="_blank" href="https://github.com/shaka-project/shaka-player"
|
|
152
|
-
<li><a rel="noopener" target="_blank" href="https://www.npmjs.com/package/shaka-player"
|
|
153
|
-
<li><a rel="noopener" target="_blank" href="../support.html"
|
|
146
|
+
<li><a rel="noopener" target="_blank" href="../docs/api/index.html">Documentation</a></li>
|
|
147
|
+
<li><a rel="noopener" target="_blank" href="https://www.apache.org/licenses/LICENSE-2.0">Apache License</a></li>
|
|
148
|
+
<li><a rel="noopener" target="_blank" href="https://github.com/shaka-project/shaka-player">Source on GitHub</a></li>
|
|
149
|
+
<li><a rel="noopener" target="_blank" href="https://www.npmjs.com/package/shaka-player">Package on NPM</a></li>
|
|
150
|
+
<li><a rel="noopener" target="_blank" href="../support.html">Browser Support Test</a></li>
|
|
154
151
|
</ul>
|
|
155
152
|
</div>
|
|
156
153
|
<div class="mdl-mega-footer__drop-down-section">
|
|
157
|
-
<h1 class="mdl-mega-footer__heading"
|
|
154
|
+
<h1 class="mdl-mega-footer__heading">CDN</h1>
|
|
158
155
|
<ul class="mdl-mega-footer__link-list">
|
|
159
|
-
<li><a rel="noopener" target="_blank" href="https://developers.google.com/speed/libraries/#shaka-player"
|
|
160
|
-
<li><a rel="noopener" target="_blank" href="https://www.jsdelivr.com/package/npm/shaka-player"
|
|
156
|
+
<li><a rel="noopener" target="_blank" href="https://developers.google.com/speed/libraries/#shaka-player">Google Hosted Libraries</a></li>
|
|
157
|
+
<li><a rel="noopener" target="_blank" href="https://www.jsdelivr.com/package/npm/shaka-player">jsDelivr</a></li>
|
|
161
158
|
</ul>
|
|
162
159
|
</div>
|
|
163
160
|
<div class="mdl-mega-footer__drop-down-section">
|
|
164
|
-
<h1 class="mdl-mega-footer__heading"
|
|
161
|
+
<h1 class="mdl-mega-footer__heading">DEMO MODE</h1>
|
|
165
162
|
<ul class="mdl-mega-footer__link-list" id="compiled-links">
|
|
166
|
-
<li><a href="#build=compiled" id="compiled-link"
|
|
167
|
-
<li><a href="#build=debug_compiled" id="debug-compiled-link"
|
|
168
|
-
<li><a href="#build=uncompiled" id="uncompiled-link"
|
|
163
|
+
<li><a href="#build=compiled" id="compiled-link">Compiled (Release)</a></li>
|
|
164
|
+
<li><a href="#build=debug_compiled" id="debug-compiled-link">Compiled (Debug)</a></li>
|
|
165
|
+
<li><a href="#build=uncompiled" id="uncompiled-link">Uncompiled</a></li>
|
|
169
166
|
</ul>
|
|
170
167
|
</div>
|
|
171
168
|
</div>
|
package/demo/input.js
CHANGED
|
@@ -11,7 +11,6 @@ goog.provide('shakaDemo.NumberInput');
|
|
|
11
11
|
goog.provide('shakaDemo.SelectInput');
|
|
12
12
|
goog.provide('shakaDemo.TextInput');
|
|
13
13
|
|
|
14
|
-
goog.require('shakaDemo.MessageIds');
|
|
15
14
|
goog.requireType('shakaDemo.InputContainer');
|
|
16
15
|
|
|
17
16
|
/**
|
|
@@ -121,7 +120,7 @@ shakaDemo.Input.lastId_ = 0;
|
|
|
121
120
|
shakaDemo.SelectInput = class extends shakaDemo.Input {
|
|
122
121
|
/**
|
|
123
122
|
* @param {!shakaDemo.InputContainer} parentContainer
|
|
124
|
-
* @param {?
|
|
123
|
+
* @param {?string} name
|
|
125
124
|
* @param {function(!HTMLInputElement, !shakaDemo.Input)} onChange
|
|
126
125
|
* @param {!Object.<string, string>} values
|
|
127
126
|
*/
|
|
@@ -134,7 +133,7 @@ shakaDemo.SelectInput = class extends shakaDemo.Input {
|
|
|
134
133
|
this.extra_.classList.add('mdl-textfield__label');
|
|
135
134
|
this.extra_.setAttribute('for', this.input_.id);
|
|
136
135
|
if (name) {
|
|
137
|
-
this.extra_.textContent =
|
|
136
|
+
this.extra_.textContent = name;
|
|
138
137
|
}
|
|
139
138
|
for (const value of Object.keys(values)) {
|
|
140
139
|
const option =
|
|
@@ -243,18 +242,14 @@ shakaDemo.NumberInput = class extends shakaDemo.TextInput {
|
|
|
243
242
|
error.classList.add('mdl-textfield__error');
|
|
244
243
|
this.container_.appendChild(error);
|
|
245
244
|
|
|
246
|
-
const MessageIds = shakaDemo.MessageIds;
|
|
247
|
-
const localize = (name) => shakaDemoMain.getLocalizedString(name);
|
|
248
245
|
if (canBeZero && canBeDecimal) {
|
|
249
|
-
error.textContent =
|
|
246
|
+
error.textContent = 'Must be a positive number.';
|
|
250
247
|
} else if (canBeZero) {
|
|
251
|
-
error.textContent =
|
|
248
|
+
error.textContent = 'Must be a positive integer.';
|
|
252
249
|
} else if (canBeDecimal) {
|
|
253
|
-
error.textContent =
|
|
254
|
-
localize(MessageIds.NUMBER_NONZERO_DECIMAL_WARNING);
|
|
250
|
+
error.textContent = 'Must be a positive, nonzero number.';
|
|
255
251
|
} else {
|
|
256
|
-
error.textContent =
|
|
257
|
-
localize(MessageIds.NUMBER_NONZERO_INTEGER_WARNING);
|
|
252
|
+
error.textContent = 'Must be a positive, nonzero integer.';
|
|
258
253
|
}
|
|
259
254
|
|
|
260
255
|
this.input_.pattern = '(Infinity|';
|
package/demo/input_container.js
CHANGED
|
@@ -9,7 +9,6 @@ goog.provide('shakaDemo.InputContainer');
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
goog.require('shakaDemo.Tooltips');
|
|
12
|
-
goog.requireType('shakaDemo.MessageIds');
|
|
13
12
|
|
|
14
13
|
/**
|
|
15
14
|
* Creates elements for containing inputs. It represents a single "section" of
|
|
@@ -22,8 +21,8 @@ goog.requireType('shakaDemo.MessageIds');
|
|
|
22
21
|
shakaDemo.InputContainer = class {
|
|
23
22
|
/**
|
|
24
23
|
* @param {!Element} parentDiv
|
|
25
|
-
* @param {?
|
|
26
|
-
*
|
|
24
|
+
* @param {?string} headerText The text to be displayed by the header.
|
|
25
|
+
* If null, there will be no header.
|
|
27
26
|
* @param {!shakaDemo.InputContainer.Style} style
|
|
28
27
|
* @param {?string} docLink
|
|
29
28
|
*/
|
|
@@ -46,7 +45,7 @@ shakaDemo.InputContainer = class {
|
|
|
46
45
|
/** @type {?Element} */
|
|
47
46
|
this.latestElementContainer;
|
|
48
47
|
|
|
49
|
-
/** @type {?
|
|
48
|
+
/** @type {?string} */
|
|
50
49
|
this.latestTooltip;
|
|
51
50
|
|
|
52
51
|
/** @private {number} */
|
|
@@ -101,7 +100,7 @@ shakaDemo.InputContainer = class {
|
|
|
101
100
|
|
|
102
101
|
/**
|
|
103
102
|
* @param {!Element} parentDiv
|
|
104
|
-
* @param {
|
|
103
|
+
* @param {string} headerText
|
|
105
104
|
* @private
|
|
106
105
|
*/
|
|
107
106
|
createHeader_(parentDiv, headerText) {
|
|
@@ -123,7 +122,7 @@ shakaDemo.InputContainer = class {
|
|
|
123
122
|
this.header_ = document.createElement('div');
|
|
124
123
|
this.header_.classList.add('input-header');
|
|
125
124
|
}
|
|
126
|
-
this.header_.textContent =
|
|
125
|
+
this.header_.textContent = headerText;
|
|
127
126
|
parentDiv.appendChild(this.header_);
|
|
128
127
|
}
|
|
129
128
|
|
|
@@ -170,8 +169,8 @@ shakaDemo.InputContainer = class {
|
|
|
170
169
|
|
|
171
170
|
/**
|
|
172
171
|
* Makes a row, for storing an input.
|
|
173
|
-
* @param {?
|
|
174
|
-
* @param {?
|
|
172
|
+
* @param {?string} labelString
|
|
173
|
+
* @param {?string} tooltipString
|
|
175
174
|
* @param {string=} rowClass
|
|
176
175
|
*/
|
|
177
176
|
addRow(labelString, tooltipString, rowClass) {
|
|
@@ -190,7 +189,7 @@ shakaDemo.InputContainer = class {
|
|
|
190
189
|
label.setAttribute('for', elementId);
|
|
191
190
|
label.classList.add('input-container-label');
|
|
192
191
|
const labelText = document.createElement('b');
|
|
193
|
-
labelText.textContent =
|
|
192
|
+
labelText.textContent = labelString;
|
|
194
193
|
label.appendChild(labelText);
|
|
195
194
|
this.latestRow_.appendChild(label);
|
|
196
195
|
}
|