class MediaControls extends LayoutNode
{
constructor({ width = 300, height = 150, layoutTraits = LayoutTraits.Unknown } = {})
{
super(`<div class="media-controls">`);
this._scaleFactor = 1;
this.width = width;
this.height = height;
this.layoutTraits = layoutTraits;
this.startButton = new StartButton(this);
this.playPauseButton = new PlayPauseButton(this);
this.skipBackButton = new SkipBackButton(this);
this.airplayButton = new AirplayButton(this);
this.pipButton = new PiPButton(this);
this.fullscreenButton = new FullscreenButton(this);
this.statusLabel = new StatusLabel(this)
this.timeControl = new TimeControl(this);
this.controlsBar = new ControlsBar(this);
this.airplayPlacard = new AirplayPlacard(this);
this.invalidPlacard = new InvalidPlacard(this);
this.pipPlacard = new PiPPlacard(this);
this.showsStartButton = false;
}
get showsStartButton()
{
return !!this._showsStartButton;
}
set showsStartButton(flag)
{
if (this._showsStartButton === flag)
return;
this._showsStartButton = flag;
this._invalidateChildren();
}
get usesLTRUserInterfaceLayoutDirection()
{
return this.element.classList.contains("uses-ltr-user-interface-layout-direction");
}
set usesLTRUserInterfaceLayoutDirection(flag)
{
this.element.classList.toggle("uses-ltr-user-interface-layout-direction", flag);
}
get scaleFactor()
{
return this._scaleFactor;
}
set scaleFactor(scaleFactor)
{
if (this._scaleFactor === scaleFactor)
return;
this._scaleFactor = scaleFactor;
this.markDirtyProperty("scaleFactor");
}
get showsPlacard()
{
return this.children[0] instanceof Placard;
}
showPlacard(placard)
{
const children = [placard];
if (placard === this.airplayPlacard)
children.push(this.controlsBar);
this.children = children;
}
hidePlacard()
{
if (this.showsPlacard)
this.children[0].remove();
this._invalidateChildren();
}
fadeIn()
{
this.element.classList.add("fade-in");
}
commitProperty(propertyName)
{
if (propertyName === "scaleFactor")
this.element.style.zoom = 1 / this._scaleFactor;
else
super.commitProperty(propertyName);
}
_invalidateChildren()
{
if (!this.showsPlacard)
this.children = [this._showsStartButton ? this.startButton : this.controlsBar];
}
}