mirror of
https://git.maid.zone/stuff/soundcloak.git
synced 2026-01-04 18:09:38 +05:00
141 lines
3.9 KiB
Plaintext
141 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(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 }/>
|
|
<script src="/js/hls.js/hls.light.js"></script>
|
|
}
|
|
|
|
templ TrackPlayer() {
|
|
// there might be a better way to do this idk
|
|
if cfg.FullyPreloadTrack {
|
|
<script>
|
|
var audio = document.getElementById('track');
|
|
if (Hls.isSupported()) {
|
|
var hls = new Hls({maxBufferLength: Infinity});
|
|
hls.loadSource(audio.src);
|
|
hls.attachMedia(audio);
|
|
} else if (!audio.canPlayType('application/vnd.apple.mpegurl')) {
|
|
alert('HLS is not supported! Audio playback will not work.');
|
|
}
|
|
</script>
|
|
} else {
|
|
<script>
|
|
var audio = document.getElementById('track');
|
|
if (Hls.isSupported()) {
|
|
var hls = new Hls();
|
|
hls.loadSource(audio.src);
|
|
hls.attachMedia(audio);
|
|
} else if (!audio.canPlayType('application/vnd.apple.mpegurl')) {
|
|
alert('HLS is not supported! Audio playback will not work.');
|
|
}
|
|
</script>
|
|
}
|
|
}
|
|
|
|
templ Track(t sc.Track, stream string) {
|
|
if t.Artwork != "" {
|
|
<img src={ t.Artwork } class={ ViewTransition("t" + t.ID) }/>
|
|
}
|
|
<h1>{ t.Title }</h1>
|
|
<audio id="track" src={ stream } controls></audio>
|
|
<noscript>
|
|
<br/>
|
|
JavaScript is disabled! Audio playback may not work without it enabled.
|
|
</noscript>
|
|
if t.Genre != "" {
|
|
<p class="tag">{ t.Genre }</p>
|
|
} else {
|
|
<br/>
|
|
<br/>
|
|
}
|
|
<a class="listing" href={ templ.URL("/" + t.Author.Permalink) }>
|
|
<img src={ t.Author.Avatar }/>
|
|
<div class="meta">
|
|
<h3>{ t.Author.Username }</h3>
|
|
if t.Author.FullName != "" {
|
|
<span>{ t.Author.FullName }</span>
|
|
}
|
|
</div>
|
|
</a>
|
|
if t.Description != "" {
|
|
<details>
|
|
<summary>Toggle description</summary>
|
|
<p style="white-space: pre-wrap">{ t.Description }</p>
|
|
</details>
|
|
}
|
|
<p>{ strconv.FormatInt(t.Likes, 10) } likes</p>
|
|
<p>{ strconv.FormatInt(t.Played, 10) } plays</p>
|
|
<p>Created: { t.CreatedAt }</p>
|
|
<p>Last modified: { t.LastModified }</p>
|
|
if t.TagList != "" {
|
|
<p>Tags: { strings.Join(sc.TagListParser(t.TagList), ", ") }</p>
|
|
}
|
|
@TrackPlayer()
|
|
}
|
|
|
|
templ TrackEmbed(t sc.Track, stream 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>
|
|
<script src="/js/hls.js/hls.light.js"></script>
|
|
</head>
|
|
<body>
|
|
if t.Artwork != "" {
|
|
<img src={ t.Artwork }/>
|
|
}
|
|
<h1>{ t.Title }</h1>
|
|
<audio id="track" src={ stream } controls></audio>
|
|
<noscript>
|
|
<br/>
|
|
JavaScript is disabled! Audio playback may not work without it enabled.
|
|
</noscript>
|
|
<a class="listing" href={ templ.URL("/" + t.Author.Permalink) }>
|
|
<img src={ t.Author.Avatar }/>
|
|
<div class="meta">
|
|
<h3>{ t.Author.Username }</h3>
|
|
if t.Author.FullName != "" {
|
|
<span>{ t.Author.FullName }</span>
|
|
}
|
|
</div>
|
|
</a>
|
|
@TrackPlayer()
|
|
</body>
|
|
</html>
|
|
}
|
|
|
|
templ SearchTracks(p *sc.Paginated[*sc.Track]) {
|
|
<span>Found { strconv.FormatInt(p.Total, 10) } tracks</span>
|
|
<br/>
|
|
<br/>
|
|
for _, track := range p.Collection {
|
|
<a class="listing" href={ templ.URL("/" + track.Author.Permalink + "/" + track.Permalink) }>
|
|
if track.Artwork != "" {
|
|
<img src={ track.Artwork } class={ ViewTransition("t" + track.ID) }/>
|
|
} else {
|
|
<img src="/placeholder.jpg"/>
|
|
}
|
|
<div class="meta">
|
|
<h3>{ track.Title }</h3>
|
|
<span>{ track.Author.Username }</span>
|
|
</div>
|
|
</a>
|
|
}
|
|
<a class="btn" href={ templ.URL("?type=tracks&pagination=" + url.QueryEscape(strings.Split(p.Next, "/tracks")[1])) } rel="noreferrer">More tracks</a>
|
|
}
|