diff --git a/spec/components/settingspanel.spec.ts b/spec/components/settingspanel.spec.ts index 46778f883..ec2e092b8 100644 --- a/spec/components/settingspanel.spec.ts +++ b/spec/components/settingspanel.spec.ts @@ -224,8 +224,8 @@ describe('SettingsPanel', () => { const selectBox = new SelectBox(); const closeDropdownSpy = jest.spyOn(selectBox, 'closeDropdown'); - settingsPanel.getActivePage().addComponent(new SettingsPanelItem({ label: new Label(), setting: selectBox })); - settingsPanel.getActivePage().addComponent(new SettingsPanelItem({ label: new Label(), setting: new VolumeSlider() })); + settingsPanel.getActivePage().addComponent(new SettingsPanelItem({ label: new Label(), settingComponent: selectBox })); + settingsPanel.getActivePage().addComponent(new SettingsPanelItem({ label: new Label(), settingComponent: new VolumeSlider() })); settingsPanel['hideHoveredSelectBoxes'](); diff --git a/src/html/index.html b/src/html/index.html index 3166bc2d4..d92da4033 100644 --- a/src/html/index.html +++ b/src/html/index.html @@ -282,7 +282,12 @@

const playgroundConfig = getConfigFromStorage(); // Add UI - uiManager = bitmovin.playerui.UIFactory[playgroundConfig.uiOption || 'buildDefaultUI'](player, uiConfig); + if (playgroundConfig.uiOption != null && bitmovin.playerui.UIFactory[playgroundConfig.uiOption] != null) { + uiManager = bitmovin.playerui.UIFactory[playgroundConfig.uiOption](player, uiConfig); + } else { + localStorage.clear(); + uiManager = bitmovin.playerui.UIFactory.buildDefaultUI(player, uiConfig); + } player.load(sources[playgroundConfig.source || 'fullyFeatured']).then(function() { console.log('source successfully loaded'); diff --git a/src/scss/skin-super-modern/_skin.scss b/src/scss/skin-super-modern/_skin.scss index 8c6b9a539..847e42b40 100644 --- a/src/scss/skin-super-modern/_skin.scss +++ b/src/scss/skin-super-modern/_skin.scss @@ -48,7 +48,7 @@ @import 'components/spacer'; @import 'components/subtitlesettings/subtitlesettings'; @import 'components/subtitlesettingspaneltogglebutton'; - @import 'components/touch-control-overlay'; + @import 'components/touchcontroloverlay'; @import 'components/smallcenteredplaybacktogglebutton'; @import 'skin-ads'; @import 'skin-cast-receiver'; diff --git a/src/scss/skin-super-modern/components/_seekbar.scss b/src/scss/skin-super-modern/components/_seekbar.scss index e2d7fe1b3..bfc749b52 100644 --- a/src/scss/skin-super-modern/components/_seekbar.scss +++ b/src/scss/skin-super-modern/components/_seekbar.scss @@ -46,15 +46,19 @@ $seekbar-height: .3125em; @include hidden; @include focusable; - border-radius: 1em; cursor: pointer; font-size: 1em; height: $seekbar-height; margin: calc((1em - $seekbar-height) / 2) 0; - overflow: hidden; position: relative; width: 100%; + .#{$prefix}-seekbar-bars { + @extend %bar; + border-radius: 1em; + overflow: hidden; + } + .#{$prefix}-seekbar-backdrop { @extend %bar; background-color: transparentize($color-primary, .8); diff --git a/src/scss/skin-super-modern/components/_touch-control-overlay.scss b/src/scss/skin-super-modern/components/_touchcontroloverlay.scss similarity index 83% rename from src/scss/skin-super-modern/components/_touch-control-overlay.scss rename to src/scss/skin-super-modern/components/_touchcontroloverlay.scss index 293a5a669..8b6a6a2c8 100644 --- a/src/scss/skin-super-modern/components/_touch-control-overlay.scss +++ b/src/scss/skin-super-modern/components/_touchcontroloverlay.scss @@ -18,15 +18,15 @@ %seek-label { @extend %opacity-transition; - font-size: .4em; - font-weight: 600; + @include hidden-animated; + font-weight: 500; margin: 0; opacity: 1; position: absolute; text-shadow: $color-shadow-seek-label; } -.#{$prefix}-ui-touchcontrol-overlay { +.#{$prefix}-ui-touch-control-overlay { @extend %ui-container; @include layout-cover; @@ -42,20 +42,14 @@ .#{$prefix}-seek-forward-label { @extend %seek-label; - right: 15%; - &.#{$prefix}-hidden { - opacity: 0; - } + right: 10%; } .#{$prefix}-seek-backward-label { @extend %seek-label; - left: 15%; - &.#{$prefix}-hidden { - opacity: 0; - } + left: 10%; } } diff --git a/src/ts/components/dynamicsettingspanelitem.ts b/src/ts/components/dynamicsettingspanelitem.ts index 54c85614f..72ae6a01b 100644 --- a/src/ts/components/dynamicsettingspanelitem.ts +++ b/src/ts/components/dynamicsettingspanelitem.ts @@ -25,7 +25,7 @@ export interface DynamicSettingsPanelItemConfig extends SettingsPanelItemConfig /** * The list selector component which will be used to build the sub page. */ - setting: ListSelector; + settingComponent: ListSelector; /** * The enclosing {@link SettingsPanel} where the sub page will be added. */ @@ -40,7 +40,7 @@ export interface DynamicSettingsPanelItemConfig extends SettingsPanelItemConfig */ export class DynamicSettingsPanelItem extends SettingsPanelItem { private selectedOptionLabel: Label; - protected setting: ListSelector; + protected settingComponent: ListSelector; private player: PlayerAPI; private uimanager: UIInstanceManager; @@ -48,7 +48,7 @@ export class DynamicSettingsPanelItem extends SettingsPanelItem { - let selectedItem = this.setting.getItemForKey(this.setting.getSelectedItem()); + let selectedItem = this.settingComponent.getItemForKey(this.settingComponent.getSelectedItem()); if (selectedItem == null) { this.selectedOptionLabel.hide(); return; @@ -89,13 +89,13 @@ export class DynamicSettingsPanelItem extends SettingsPanelItem { return new SettingsPanelSelectOption({ label: option.label, - setting: this.setting, + settingComponent: this.settingComponent, settingsValue: option.key, addSettingAsComponent: false, }); @@ -141,7 +141,7 @@ export class DynamicSettingsPanelItem extends SettingsPanelItem setting.overlay.enablePreviewSubtitleLabel()); diff --git a/src/ts/components/ecomodecontainer.ts b/src/ts/components/ecomodecontainer.ts index dac5dc589..77bb7b4e5 100644 --- a/src/ts/components/ecomodecontainer.ts +++ b/src/ts/components/ecomodecontainer.ts @@ -29,10 +29,10 @@ export class EcoModeContainer extends Container { cssClass: 'ui-label-savedEnergy', }); - this.ecoModeToggleButtonItem = new SettingsPanelItem({ label: labelEcoMode, setting: ecoModeToggleButton }); + this.ecoModeToggleButtonItem = new SettingsPanelItem({ label: labelEcoMode, settingComponent: ecoModeToggleButton }); this.ecoModeSavedEmissionsItem = new SettingsPanelItem({ label: 'Saved Emissions', - setting: this.emissionsSavedLabel, + settingComponent: this.emissionsSavedLabel, hidden: true, }); diff --git a/src/ts/components/seekbar.ts b/src/ts/components/seekbar.ts index ba2d99a2b..22e086ee2 100644 --- a/src/ts/components/seekbar.ts +++ b/src/ts/components/seekbar.ts @@ -31,12 +31,6 @@ export interface SeekBarConfig extends ComponentConfig { * Bar will be vertical instead of horizontal if set to true. */ vertical?: boolean; - /** - * If set to true the seekBarPlaybackPositionMarker will be rendered - * directly inside the seekbar container. Necessary when using the super-modern-ui skin - * Default: false - */ - renderSeekBarPlaybackPositionMarkerInOuterSeekBar?: boolean; /** * The interval in milliseconds in which the playback position on the seek bar will be updated. The shorter the * interval, the smoother it looks and the more resource intense it is. The update interval will be kept as steady @@ -171,7 +165,6 @@ export class SeekBar extends Component { snappingRange: 1, enableSeekPreview: true, snappingEnabled: true, - renderSeekBarPlaybackPositionMarkerInOuterSeekBar: false, }, this.config); this.label = this.config.label; @@ -249,10 +242,17 @@ export class SeekBar extends Component { uimanager.onControlsShow.subscribe(() => { this.isUiShown = true; + if (!player.isLive() && !this.smoothPlaybackPositionUpdater.isActive()) { + playbackPositionHandler(null, true); + this.smoothPlaybackPositionUpdater.start(); + } }); uimanager.onControlsHide.subscribe(() => { this.isUiShown = false; + if (this.smoothPlaybackPositionUpdater.isActive()) { + this.smoothPlaybackPositionUpdater.clear(); + } }); let isPlaying = false; @@ -294,7 +294,7 @@ export class SeekBar extends Component { // Update playback position only in paused state or in the initial startup state where player is neither // paused nor playing. Playback updates are handled in the Timeout below. const isInInitialStartupState = this.config.smoothPlaybackPositionUpdateIntervalMs === SeekBar.SMOOTH_PLAYBACK_POSITION_UPDATE_DISABLED - || forceUpdate || player.isPaused(); + || forceUpdate || player.isPaused(); const isNeitherPausedNorPlaying = player.isPaused() === player.isPlaying(); if ((isInInitialStartupState || isNeitherPausedNorPlaying) && !this.isSeeking()) { @@ -330,12 +330,12 @@ export class SeekBar extends Component { scrubbing = false; }; - let onPlayerSeeked = (event: PlayerEventBase = null, forceUpdate: boolean = false ) => { + let onPlayerSeeked = (event: PlayerEventBase = null) => { isPlayerSeeking = false; this.setSeeking(false); // update playback position when a seek has finished - playbackPositionHandler(event, forceUpdate); + playbackPositionHandler(event, true); }; let restorePlayingState = function () { @@ -668,6 +668,10 @@ export class SeekBar extends Component { }); this.seekBar = seekBar; + const seekBarBarsContainer = new DOM('div', { + 'class': this.prefixCss('seekbar-bars'), + }); + // Indicator that shows the buffer fill level let seekBarBufferLevel = new DOM('div', { 'class': this.prefixCss('seekbar-bufferlevel'), @@ -703,12 +707,10 @@ export class SeekBar extends Component { }); this.seekBarMarkersContainer = seekBarChapterMarkersContainer; - seekBar.append(this.seekBarBackdrop, this.seekBarBufferPosition, this.seekBarSeekPosition, + seekBarBarsContainer.append(this.seekBarBackdrop, this.seekBarBufferPosition, this.seekBarSeekPosition, this.seekBarPlaybackPosition, this.seekBarMarkersContainer); - if (!this.config.renderSeekBarPlaybackPositionMarkerInOuterSeekBar) { - seekBar.append(this.seekBarPlaybackPositionMarker); - } + seekBar.append(seekBarBarsContainer, this.seekBarPlaybackPositionMarker); let seeking = false; @@ -747,16 +749,12 @@ export class SeekBar extends Component { this.onSeekedEvent(targetPercentage); }; - // TODO: the problem is that the SeekbarLabel is also inside the seekbarContainer and therefore reacts to the - // TODO: mouse inputs. - let domElementToListen: DOM = this.config.renderSeekBarPlaybackPositionMarkerInOuterSeekBar ? seekBarContainer : seekBar; - // A seek always start with a touchstart or mousedown directly on the seekbar. // To track a mouse seek also outside the seekbar (for touch events this works automatically), // so the user does not need to take care that the mouse always stays on the seekbar, we attach the mousemove // and mouseup handlers to the whole document. A seek is triggered when the user lifts the mouse key. // A seek mouse gesture is thus basically a click with a long time frame between down and up events. - domElementToListen.on('touchstart mousedown', (e: MouseEvent | TouchEvent) => { + seekBar.on('touchstart mousedown', (e: MouseEvent | TouchEvent) => { let isTouchEvent = BrowserUtils.isTouchSupported && this.isTouchEvent(e); // Prevent selection of DOM elements (also prevents mousedown if current event is touchstart) @@ -778,7 +776,7 @@ export class SeekBar extends Component { }); // Display seek target indicator when mouse hovers or finger slides over seekbar - domElementToListen.on('touchmove mousemove', (e: MouseEvent | TouchEvent) => { + seekBar.on('touchmove mousemove', (e: MouseEvent | TouchEvent) => { e.preventDefault(); if (seeking) { @@ -796,7 +794,7 @@ export class SeekBar extends Component { }); // Hide seek target indicator when mouse or finger leaves seekbar - domElementToListen.on('touchend mouseleave', (e: MouseEvent | TouchEvent) => { + seekBar.on('touchend mouseleave', (e: MouseEvent | TouchEvent) => { e.preventDefault(); this.setSeekPosition(0); @@ -812,10 +810,6 @@ export class SeekBar extends Component { seekBarContainer.append(this.label.getDomElement()); } - if (this.config.renderSeekBarPlaybackPositionMarkerInOuterSeekBar) { - seekBarContainer.append(seekBarPlaybackPositionMarker); - } - return seekBarContainer; } @@ -1109,7 +1103,7 @@ export class SeekBar extends Component { this.refreshPlaybackPosition(); } - /** + /** * Checks if TouchEvent is supported. * @returns {boolean} true if TouchEvent not undefined, else false */ diff --git a/src/ts/components/settingspanel.ts b/src/ts/components/settingspanel.ts index 9bb25779c..dade69b86 100644 --- a/src/ts/components/settingspanel.ts +++ b/src/ts/components/settingspanel.ts @@ -399,7 +399,7 @@ export class SettingsPanel extends Container { */ private hideHoveredSelectBoxes(): void { this.getComputedItems() - .map(item => item['setting']) + .map(item => item['settingComponent']) .filter(component => component instanceof SelectBox) .forEach((selectBox: SelectBox) => selectBox.closeDropdown()); } diff --git a/src/ts/components/settingspanelitem.ts b/src/ts/components/settingspanelitem.ts index e3fd4c020..50a8fddea 100644 --- a/src/ts/components/settingspanelitem.ts +++ b/src/ts/components/settingspanelitem.ts @@ -24,7 +24,7 @@ export interface SettingsPanelItemConfig extends ContainerConfig { /** * The component that configures a setting. */ - setting?: Component; + settingComponent?: Component; /** * If the setting should be added as a component to this item. */ @@ -41,7 +41,7 @@ export interface SettingsPanelItemConfig extends ContainerConfig { export class SettingsPanelItem extends Container { private label: Component; - protected setting: Component | null; + protected settingComponent: Component | null; private settingsPanelItemEvents = { onActiveChanged: new EventDispatcher, NoArgs>(), @@ -51,7 +51,7 @@ export class SettingsPanelItem extends C constructor(config: Config) { super(config); - this.setting = config.setting; + this.settingComponent = config.settingComponent; this.config = this.mergeConfig(config, { cssClass: 'ui-settings-panel-item', @@ -74,14 +74,14 @@ export class SettingsPanelItem extends C configure(player: PlayerAPI, uimanager: UIInstanceManager): void { super.configure(player, uimanager); - if (this.setting != null && this.config.addSettingAsComponent) { - this.addComponent(this.setting); + if (this.settingComponent != null && this.config.addSettingAsComponent) { + this.addComponent(this.settingComponent); this.updateComponents(); } - if (this.setting instanceof SelectBox || this.setting instanceof ListBox) { + if (this.settingComponent instanceof SelectBox || this.settingComponent instanceof ListBox) { let handleConfigItemChanged = () => { - if (!(this.setting instanceof SelectBox) && !(this.setting instanceof ListBox)) { + if (!(this.settingComponent instanceof SelectBox) && !(this.settingComponent instanceof ListBox)) { return; } // The minimum number of items that must be available for the setting to be displayed @@ -89,15 +89,15 @@ export class SettingsPanelItem extends C let minItemsToDisplay = 2; // Audio/video quality select boxes contain an additional 'auto' mode, which in combination with a single // available quality also does not make sense - if ((this.setting instanceof VideoQualitySelectBox && this.setting.hasAutoItem()) - || this.setting instanceof AudioQualitySelectBox) { + if ((this.settingComponent instanceof VideoQualitySelectBox && this.settingComponent.hasAutoItem()) + || this.settingComponent instanceof AudioQualitySelectBox) { minItemsToDisplay = 3; } - if (this.setting.itemCount() < minItemsToDisplay) { + if (this.settingComponent.itemCount() < minItemsToDisplay) { // Hide the setting if no meaningful choice is available this.hide(); - } else if (this.setting instanceof PlaybackSpeedSelectBox + } else if (this.settingComponent instanceof PlaybackSpeedSelectBox && !uimanager.getConfig().playbackSpeedSelectionEnabled) { // Hide the PlaybackSpeedSelectBox if disabled in config this.hide(); @@ -112,8 +112,8 @@ export class SettingsPanelItem extends C this.getDomElement().attr('aria-haspopup', 'true'); }; - this.setting.onItemAdded.subscribe(handleConfigItemChanged); - this.setting.onItemRemoved.subscribe(handleConfigItemChanged); + this.settingComponent.onItemAdded.subscribe(handleConfigItemChanged); + this.settingComponent.onItemRemoved.subscribe(handleConfigItemChanged); // Initialize hidden state handleConfigItemChanged(); diff --git a/src/ts/components/settingspanelselectoption.ts b/src/ts/components/settingspanelselectoption.ts index 99af1b56b..bb1a55b5b 100644 --- a/src/ts/components/settingspanelselectoption.ts +++ b/src/ts/components/settingspanelselectoption.ts @@ -12,7 +12,7 @@ export interface SettingsPanelSelectOptionConfig extends SettingsPanelItemConfig /** * The setting that will be changed when this option is clicked. */ - setting: ListSelector; + settingComponent: ListSelector; /** * The value of the setting that will be selected when this option is clicked. */ @@ -27,7 +27,7 @@ export interface SettingsPanelSelectOptionConfig extends SettingsPanelItemConfig */ export class SettingsPanelSelectOption extends SettingsPanelItem { private settingsValue: string | undefined; - protected setting: ListSelector; + protected settingComponent: ListSelector; constructor(config: SettingsPanelSelectOptionConfig) { super(config); @@ -44,7 +44,7 @@ export class SettingsPanelSelectOption extends SettingsPanelItem { - let selectedItem = this.setting.getSelectedItem(); + let selectedItem = this.settingComponent.getSelectedItem(); if (this.settingsValue === selectedItem) { this.getDomElement().addClass(this.prefixCss('selected')); @@ -52,10 +52,10 @@ export class SettingsPanelSelectOption extends SettingsPanelItem { - this.setting.selectItem(this.settingsValue); + this.settingComponent.selectItem(this.settingsValue); }; this.getDomElement().on('click', () => handleItemClick()); diff --git a/src/ts/components/subtitlesettings/subtitlesettingspanelpage.ts b/src/ts/components/subtitlesettings/subtitlesettingspanelpage.ts index 55c3147e0..235229ed1 100644 --- a/src/ts/components/subtitlesettings/subtitlesettingspanelpage.ts +++ b/src/ts/components/subtitlesettings/subtitlesettingspanelpage.ts @@ -113,7 +113,7 @@ export class SubtitleSettingsPanelPage extends SettingsPanelPage { label: new SettingsPanelPageBackButton({ container: this.settingsPanel, }), - setting: new SubtitleSettingsResetButton({}), + settingComponent: new SubtitleSettingsResetButton({}), cssClasses: ['title-item'], }); @@ -148,13 +148,13 @@ export class SubtitleSettingsPanelPage extends SettingsPanelPage { if (useDynamicSettingsPanelItem) { return new DynamicSettingsPanelItem({ label: label, - setting: setting, + settingComponent: setting, container: this.settingsPanel, }); } else { return new SettingsPanelItem({ label: label, - setting: setting, + settingComponent: setting, }); } } diff --git a/src/ts/components/touchcontroloverlay.ts b/src/ts/components/touchcontroloverlay.ts index 1c74f403a..e9167716c 100644 --- a/src/ts/components/touchcontroloverlay.ts +++ b/src/ts/components/touchcontroloverlay.ts @@ -79,11 +79,11 @@ export class TouchControlOverlay extends Container { this.seekBackwardLabel = new Label({text: '', for: this.getConfig().id, cssClass: 'seek-backward-label', hidden: true}); this.config = this.mergeConfig(config, { - cssClass: 'ui-touchcontrol-overlay', + cssClass: 'ui-touch-control-overlay', acceptsTouchWithUiHidden: true, seekTime: 10, seekDoubleTapMargin: 15, - components: [this.playbackToggleButton, this.seekForwardLabel, this.seekBackwardLabel], + components: [this.seekBackwardLabel, this.playbackToggleButton, this.seekForwardLabel], }, this.config); } diff --git a/src/ts/demofactory.ts b/src/ts/demofactory.ts index 596af48b3..125e27c2c 100644 --- a/src/ts/demofactory.ts +++ b/src/ts/demofactory.ts @@ -70,9 +70,9 @@ export namespace DemoFactory { components: [ new SettingsPanelPage({ components: [ - new SettingsPanelItem({ label: 'Video Quality', setting: new VideoQualitySelectBox() }), - new SettingsPanelItem({ label: 'Speed', setting: new PlaybackSpeedSelectBox() }), - new SettingsPanelItem({ label: 'Audio Quality', setting: new AudioQualitySelectBox() }), + new SettingsPanelItem({ label: 'Video Quality', settingComponent: new VideoQualitySelectBox() }), + new SettingsPanelItem({ label: 'Speed', settingComponent: new PlaybackSpeedSelectBox() }), + new SettingsPanelItem({ label: 'Audio Quality', settingComponent: new AudioQualitySelectBox() }), ], }), ], @@ -84,7 +84,7 @@ export namespace DemoFactory { components: [ new SettingsPanelPage({ components: [ - new SettingsPanelItem({ label: null, setting: subtitleListBox }), + new SettingsPanelItem({ label: null, settingComponent: subtitleListBox }), ], }), ], @@ -96,7 +96,7 @@ export namespace DemoFactory { components: [ new SettingsPanelPage({ components: [ - new SettingsPanelItem({ label: null, setting: audioTrackListBox }), + new SettingsPanelItem({ label: null, settingComponent: audioTrackListBox }), ], }), ], diff --git a/src/ts/uifactory.ts b/src/ts/uifactory.ts index 627e47308..183bc1be9 100644 --- a/src/ts/uifactory.ts +++ b/src/ts/uifactory.ts @@ -81,10 +81,10 @@ export namespace UIFactory { let mainSettingsPanelPage: SettingsPanelPage; const components: Container[] = [ - new SettingsPanelItem({ label: i18n.getLocalizer('settings.video.quality'), setting: new VideoQualitySelectBox() }), - new SettingsPanelItem({ label: i18n.getLocalizer('speed'), setting: new PlaybackSpeedSelectBox() }), - new SettingsPanelItem({ label: i18n.getLocalizer('settings.audio.track'), setting: new AudioTrackSelectBox() }), - new SettingsPanelItem({ label: i18n.getLocalizer('settings.audio.quality'), setting: new AudioQualitySelectBox() }), + new SettingsPanelItem({ label: i18n.getLocalizer('settings.video.quality'), settingComponent: new VideoQualitySelectBox() }), + new SettingsPanelItem({ label: i18n.getLocalizer('speed'), settingComponent: new PlaybackSpeedSelectBox() }), + new SettingsPanelItem({ label: i18n.getLocalizer('settings.audio.track'), settingComponent: new AudioTrackSelectBox() }), + new SettingsPanelItem({ label: i18n.getLocalizer('settings.audio.quality'), settingComponent: new AudioQualitySelectBox() }), ]; if (config.ecoMode) { @@ -127,7 +127,7 @@ export namespace UIFactory { text: i18n.getLocalizer('settings.subtitles'), opener: subtitleSettingsOpenButton, }), - setting: subtitleSelectBox, + settingComponent: subtitleSelectBox, role: 'menubar', }), ); @@ -231,10 +231,10 @@ export namespace UIFactory { let mainSettingsPanelPage = new SettingsPanelPage({ components: [ - new SettingsPanelItem({ label: i18n.getLocalizer('settings.video.quality'), setting: new VideoQualitySelectBox() }), - new SettingsPanelItem({ label: i18n.getLocalizer('speed'), setting: new PlaybackSpeedSelectBox() }), - new SettingsPanelItem({ label: i18n.getLocalizer('settings.audio.track'), setting: new AudioTrackSelectBox() }), - new SettingsPanelItem({ label: i18n.getLocalizer('settings.audio.quality'), setting: new AudioQualitySelectBox() }), + new SettingsPanelItem({ label: i18n.getLocalizer('settings.video.quality'), settingComponent: new VideoQualitySelectBox() }), + new SettingsPanelItem({ label: i18n.getLocalizer('speed'), settingComponent: new PlaybackSpeedSelectBox() }), + new SettingsPanelItem({ label: i18n.getLocalizer('settings.audio.track'), settingComponent: new AudioTrackSelectBox() }), + new SettingsPanelItem({ label: i18n.getLocalizer('settings.audio.quality'), settingComponent: new AudioQualitySelectBox() }), ], }); @@ -265,7 +265,7 @@ export namespace UIFactory { text: i18n.getLocalizer('settings.subtitles'), opener: subtitleSettingsOpenButton, }), - setting: subtitleSelectBox, + settingComponent: subtitleSelectBox, role: 'menubar', }), ); @@ -461,22 +461,22 @@ export namespace UIFactory { components: [ new DynamicSettingsPanelItem({ label: i18n.getLocalizer('settings.video.quality'), - setting: new VideoQualitySelectBox(), + settingComponent: new VideoQualitySelectBox(), container: settingsPanel, }), new DynamicSettingsPanelItem({ label: i18n.getLocalizer('speed'), - setting: new PlaybackSpeedSelectBox(), + settingComponent: new PlaybackSpeedSelectBox(), container: settingsPanel, }), new DynamicSettingsPanelItem({ label: i18n.getLocalizer('settings.audio.track'), - setting: new AudioTrackSelectBox() , + settingComponent: new AudioTrackSelectBox() , container: settingsPanel, }), new DynamicSettingsPanelItem({ label: i18n.getLocalizer('settings.audio.quality'), - setting: new AudioQualitySelectBox(), + settingComponent: new AudioQualitySelectBox(), container: settingsPanel, }), ], @@ -503,7 +503,7 @@ export namespace UIFactory { text: i18n.getLocalizer('settings.subtitles'), opener: subtitleSettingsOpenButton, }), - setting: subtitleSelectBox, + settingComponent: subtitleSelectBox, role: 'menubar', container: settingsPanel, }); @@ -518,7 +518,7 @@ export namespace UIFactory { timeLabelMode: PlaybackTimeLabelMode.CurrentTime, hideInLivePlayback: true, }), - new SeekBar({ label: new SeekBarLabel(), renderSeekBarPlaybackPositionMarkerInOuterSeekBar: true }), + new SeekBar({ label: new SeekBarLabel() }), new PlaybackTimeLabel({ timeLabelMode: PlaybackTimeLabelMode.TotalTime, cssClasses: ['text-right'], @@ -583,22 +583,22 @@ export namespace UIFactory { const components: Container[] = [ new DynamicSettingsPanelItem({ label: i18n.getLocalizer('settings.video.quality'), - setting: new VideoQualitySelectBox(), + settingComponent: new VideoQualitySelectBox(), container: settingsPanel, }), new DynamicSettingsPanelItem({ label: i18n.getLocalizer('speed'), - setting: new PlaybackSpeedSelectBox(), + settingComponent: new PlaybackSpeedSelectBox(), container: settingsPanel, }), new DynamicSettingsPanelItem({ label: i18n.getLocalizer('settings.audio.track'), - setting: new AudioTrackSelectBox(), + settingComponent: new AudioTrackSelectBox(), container: settingsPanel, }), new DynamicSettingsPanelItem({ label: i18n.getLocalizer('settings.audio.quality'), - setting: new AudioQualitySelectBox(), + settingComponent: new AudioQualitySelectBox(), container: settingsPanel, }), ]; @@ -639,7 +639,7 @@ export namespace UIFactory { text: i18n.getLocalizer('settings.subtitles'), opener: subtitleSettingsOpenButton, }), - setting: subtitleSelectBox, + settingComponent: subtitleSelectBox, role: 'menubar', container: settingsPanel, }); @@ -654,7 +654,7 @@ export namespace UIFactory { timeLabelMode: PlaybackTimeLabelMode.CurrentTime, hideInLivePlayback: true, }), - new SeekBar({ label: new SeekBarLabel(), renderSeekBarPlaybackPositionMarkerInOuterSeekBar: true }), + new SeekBar({ label: new SeekBarLabel() }), new PlaybackTimeLabel({ timeLabelMode: PlaybackTimeLabelMode.TotalTime, cssClasses: ['text-right'], @@ -666,7 +666,7 @@ export namespace UIFactory { components: [ new PlaybackToggleButton(), new VolumeToggleButton(), - new VolumeSlider({ renderSeekBarPlaybackPositionMarkerInOuterSeekBar: true }), + new VolumeSlider(), new Spacer(), new PictureInPictureToggleButton(), new AirPlayToggleButton(), @@ -809,7 +809,7 @@ export namespace UIFactory { const subtitleListPanel = new SettingsPanel({ components: [ new SettingsPanelPage({ - components: [new SettingsPanelItem({ setting: subtitleListBox })], + components: [new SettingsPanelItem({ settingComponent: subtitleListBox })], }), ], hidden: true, @@ -819,7 +819,7 @@ export namespace UIFactory { const audioTrackListPanel = new SettingsPanel({ components: [ new SettingsPanelPage({ - components: [new SettingsPanelItem({ setting: audioTrackListBox })], + components: [new SettingsPanelItem({ settingComponent: audioTrackListBox })], }), ], hidden: true,