Files
soundcloak/templates/track.templ

143 lines
3.9 KiB
Plaintext

package templates
import (
"github.com/maid-zone/soundcloak/lib/cfg"
"github.com/maid-zone/soundcloak/lib/sc"
"net/url"
"strconv"
"strings"
)
templ TrackHeader(prefs cfg.Preferences, t sc.Track) {
<meta name="og:site_name" content={ t.Author.Username + " ~ soundcloak" }/>
<meta name="og:title" content={ t.Title }/>
<meta name="og:description" content={ t.FormatDescription() }/>
<meta name="og:image" content={ t.Artwork }/>
<link rel="icon" type="image/x-icon" href={ t.Artwork }/>
if *prefs.Player == cfg.HLSPlayer {
<script src="/js/hls.js/hls.light.min.js"></script>
}
}
templ TrackPlayer(prefs cfg.Preferences, track sc.Track, stream string, displayErr string) {
if *prefs.Player == cfg.NonePlayer {
{{ return }}
}
if displayErr == "" {
if cfg.Restream && *prefs.Player == cfg.RestreamPlayer {
<audio src={ "/_/restream/" + track.Author.Permalink + "/" + track.Permalink } controls></audio>
} else if stream != "" {
<audio id="track" src={ stream } controls></audio>
if *prefs.FullyPreloadTrack {
<script async src="/player_preload.js"></script>
} else {
<script async src="/player.js"></script>
}
<noscript>
<br/>
JavaScript is disabled! Audio playback may not work without it enabled.
if cfg.Restream {
<br>
<a href="/_/preferences">You can enable Restream player in the preferences. It works without JavaScript.</a>
}
</noscript>
}
} else {
<div>
<p style="white-space: pre-wrap;">{ displayErr }</p>
</div>
}
}
templ TrackItem(track *sc.Track, showUsername bool) {
if track.Title != "" {
<a class="listing" href={ templ.URL("/" + track.Author.Permalink + "/" + track.Permalink) }>
if track.Artwork != "" {
<img src={ track.Artwork }/>
} else {
<img src="/placeholder.jpg"/>
}
<div class="meta">
<h3>{ track.Title }</h3>
if showUsername {
<span>{ track.Author.Username }</span>
}
</div>
</a>
}
}
templ Track(prefs cfg.Preferences, t sc.Track, stream string, displayErr string) {
if t.Artwork != "" {
<img src={ t.Artwork } width="300px"/>
}
<h1>{ t.Title }</h1>
@TrackPlayer(prefs, t, stream, displayErr)
if t.Genre != "" {
<p class="tag">{ t.Genre }</p>
} else {
<br/>
<br/>
}
@UserItem(&t.Author)
//<div class="btns">
<div style="display: flex;">
<a class="btn" href={ templ.URL("https://soundcloud.com/" + t.Author.Permalink + "/" + t.Permalink) }>view on soundcloud</a>
</div>
<br/>
if t.Description != "" {
@Description(prefs, t.Description)
}
<p>{ strconv.FormatInt(t.Likes, 10) } likes</p>
<p>{ strconv.FormatInt(t.Played, 10) } plays</p>
<p>{ strconv.FormatInt(t.Reposted, 10) } reposts</p>
<p>Created: { t.CreatedAt }</p>
<p>Last modified: { t.LastModified }</p>
if t.License != "" {
<p>License: { t.License }</p>
}
if t.TagList != "" {
<p>Tags: { strings.Join(sc.TagListParser(t.TagList), ", ") }</p>
}
}
templ TrackEmbed(prefs cfg.Preferences, t sc.Track, stream string, displayErr string) {
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="stylesheet" href="/global.css"/>
<title>soundcloak</title>
if *prefs.Player == cfg.HLSPlayer {
<script src="/js/hls.js/hls.light.js"></script>
}
</head>
<body>
if t.Artwork != "" {
<img src={ t.Artwork } width="300px"/>
}
<h1>{ t.Title }</h1>
@TrackPlayer(prefs, t, stream, displayErr)
@UserItem(&t.Author)
</body>
</html>
}
templ SearchTracks(p *sc.Paginated[*sc.Track]) {
<span>Found { strconv.FormatInt(p.Total, 10) } tracks</span>
<br/>
<br/>
if len(p.Collection) == 0 && p.Total != 0 {
<p>no more results</p>
} else {
for _, track := range p.Collection {
@TrackItem(track, true)
}
if p.Next != "" && len(p.Collection) != int(p.Total) {
<a class="btn" href={ templ.URL("?type=tracks&pagination=" + url.QueryEscape(strings.Split(p.Next, "/tracks")[1])) } rel="noreferrer">more tracks</a>
}
}
}