const Icons = {
Airplay : { name: "Airplay", type: "svg", label: UIString("AirPlay") },
AirplayPlacard : { name: "airplay-placard", type: "png", label: UIString("AirPlay") },
EnterFullscreen : { name: "EnterFullscreen", type: "svg", label: UIString("Enter Full Screen") },
EnterPiP : { name: "PipIn", type: "svg", label: UIString("Enter Picture in Picture") },
ExitFullscreen : { name: "ExitFullscreen", type: "svg", label: UIString("Exit Full Screen") },
Forward : { name: "Forward", type: "svg", label: UIString("Forward") },
InvalidCompact : { name: "InvalidCompact", type: "pdf", label: UIString("Invalid") },
InvalidPlacard : { name: "invalid-placard", type: "png", label: UIString("Invalid") },
Pause : { name: "Pause", type: "svg", label: UIString("Pause") },
PiPPlacard : { name: "pip-placard", type: "png", label: UIString("Picture in Picture") },
Play : { name: "Play", type: "svg", label: UIString("Play") },
PlayCompact : { name: "PlayCompact", type: "pdf", label: UIString("Play") },
Rewind : { name: "Rewind", type: "svg", label: UIString("Rewind") },
SkipBack : { name: "SkipBack15", type: "svg", label: UIString("Skip Back %s Seconds", SkipSeconds) },
SkipForward : { name: "SkipForward15", type: "svg", label: UIString("Skip Forward %s Seconds", SkipSeconds) },
SpinnerCompact : { name: "ActivityIndicatorSpriteCompact", type: "png", label: UIString("Loading…") },
Tracks : { name: "MediaSelector", type: "svg", label: UIString("Media Selection") },
Volume : { name: "VolumeHi", type: "svg", label: UIString("Mute") },
VolumeRTL : { name: "VolumeHi-RTL", type: "svg", label: UIString("Mute") },
VolumeDown : { name: "VolumeLo", type: "svg", label: UIString("Volume Down") },
VolumeMuted : { name: "Mute", type: "svg", label: UIString("Unmute") },
VolumeMutedRTL : { name: "Mute-RTL", type: "svg", label: UIString("Unmute") },
VolumeUp : { name: "VolumeHi", type: "svg", label: UIString("Volume Up") }
};
const MimeTypes = {
"pdf": "application/pdf",
"png": "image/png",
"svg": "image/svg+xml"
};
const IconsWithFullscreenVariants = [Icons.Airplay, Icons.Tracks, Icons.EnterPiP];
const iconService = new class IconService {
constructor()
{
this.images = {};
}
imageForIconAndLayoutTraits(icon, layoutTraits)
{
const [fileName, platform] = this._fileNameAndPlatformForIconAndLayoutTraits(icon, layoutTraits);
const path = `${platform}/${fileName}.${icon.type}`;
let image = this.images[path];
if (image)
return image;
image = this.images[path] = new Image;
if (this.mediaControlsHost)
image.src = `data:${MimeTypes[icon.type]};base64,${this.mediaControlsHost.base64StringForIconNameAndType(fileName, icon.type)}`;
else
image.src = `${this.directoryPath}/${path}`;
return image;
}
_fileNameAndPlatformForIconAndLayoutTraits(icon, layoutTraits)
{
let platform;
if (layoutTraits & LayoutTraits.macOS)
platform = "macOS";
else if (layoutTraits & LayoutTraits.iOS || layoutTraits & LayoutTraits.Compact)
platform = "iOS";
else
throw "Could not identify icon's platform from layout traits.";
let iconName = icon.name;
if (layoutTraits & LayoutTraits.macOS && layoutTraits & LayoutTraits.Fullscreen && IconsWithFullscreenVariants.includes(icon))
iconName += "-fullscreen";
let fileName = iconName;
if (icon.type === "png")
fileName = `${iconName}@${window.devicePixelRatio}x`;
return [fileName, platform];
}
};