struct AudioPlayer: HtmlProducer { let playlistText: String let playingText: String let items: [PlaylistItem] private var top: String { """
 
\(playingText)
\(Icon.AudioPlayer.Playlist.usageString)
""" } private var center: String { """
:: ::
""" } private var controls: String { """
<\(Icon.AudioPlayer.Previous.usageContent)
\(Icon.AudioPlayer.Play.usageContent) \(Icon.AudioPlayer.Pause.usageContent)
\(Icon.AudioPlayer.Next.usageContent)
""" } private var playlistStart: String { """
\(playlistText)
\(Icon.AudioPlayer.Close.usageString)
""" } private var playlistEnd: String { """
\(Icon.AudioPlayer.Previous.usageContent)
\(Icon.AudioPlayer.Play.usageContent) \(Icon.AudioPlayer.Pause.usageContent)
\(Icon.AudioPlayer.Next.usageContent)
""" } func populate(_ result: inout String) { result += "
" result += top result += center result += controls result += playlistStart for item in items { result += item.content } result += playlistEnd result += "
" } struct PlaylistItem { let index: Int let image: String let name: String let album: String let track: Int let artist: String var content: String { """
\(name)\(album) • \(artist)
""" } } }