const Icons = {
Airplay : "airplay",
AirplayPlacard : "airplay-placard",
EnterFullscreen : "enter-fullscreen",
EnterPiP : "pip-in",
ExitFullscreen : "exit-fullscreen",
Forward : "forward",
InvalidPlacard : "invalid-placard",
Pause : "pause",
PiPPlacard : "pip-placard",
Play : "play",
Rewind : "rewind",
ScaleToFill : "scale-to-fill",
ScaleToFit : "scale-to-fit",
SkipBack : "interval-skip-back",
Start : "start",
Tracks : "media-selection",
Volume : "volume",
VolumeMuted : "volume-mute"
};
const IconsWithFullscreenVariants = [Icons.Airplay, Icons.Tracks, Icons.Pause, Icons.EnterPiP, Icons.Play];
const iconService = new class IconService {
constructor()
{
this.images = {};
}
imageForIconNameAndLayoutTraits(iconName, layoutTraits)
{
const [fileName, platform] = this._fileNameAndPlatformForIconNameAndLayoutTraits(iconName, layoutTraits);
const path = `${platform}/${fileName}.png`;
let image = this.images[path];
if (image)
return image;
image = this.images[path] = new Image;
if (this.mediaControlsHost)
image.src = "data:image/png;base64," + this.mediaControlsHost.base64StringForIconAndPlatform(fileName, platform);
else
image.src = `${this.directoryPath}/${path}`;
return image;
}
_fileNameAndPlatformForIconNameAndLayoutTraits(iconName, layoutTraits)
{
let platform;
if (layoutTraits & LayoutTraits.macOS)
platform = "macOS";
else if (layoutTraits & LayoutTraits.iOS)
platform = "iOS";
else
throw "Could not identify icon's platform from layout traits.";
if (layoutTraits & LayoutTraits.Fullscreen && IconsWithFullscreenVariants.includes(iconName))
iconName += "-fullscreen";
const fileName = `${iconName}@${window.devicePixelRatio}x`;
return [fileName, platform];
}
};