Add music platform with DGDN album player
- Create /music landing page with artist grid - Add /music/Darnea artist page with album listing - Build /music/Darnea/DGDN album player with clickable tracklist - Auto-play next track on completion - Dangrubb-branded styling with cyan accent colors - FLAC player pulls from /src/audio/DGDN - Move landing page links to bottom with yellow announcement box
This commit is contained in:
49
music/Darnea/DGDN/index.html
Normal file
49
music/Darnea/DGDN/index.html
Normal file
@ -0,0 +1,49 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>DGDN - Darnea | dangrubb.net</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="icon" href="/src/img/favicon.ico" type="image/x-icon">
|
||||
<link rel="stylesheet" href="../../../style.css">
|
||||
<link rel="stylesheet" href="../../music.css">
|
||||
<link rel="stylesheet" href="./player.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="music-container">
|
||||
<div class="music-header">
|
||||
<h1><a href="/music">Music</a> / <a href="/music/Darnea">Darnea</a> / DGDN</h1>
|
||||
</div>
|
||||
|
||||
<div class="album-player">
|
||||
<div class="album-header">
|
||||
<div class="album-artwork">🔥</div>
|
||||
<div class="album-info">
|
||||
<h2>DGDN</h2>
|
||||
<p class="artist-name">Darnea</p>
|
||||
<p class="album-desc">Leaked from the vault</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="player-section">
|
||||
<div id="now-playing" class="now-playing">
|
||||
<p>Select a track to play</p>
|
||||
</div>
|
||||
|
||||
<audio id="audio-player" controls></audio>
|
||||
</div>
|
||||
|
||||
<div class="tracklist">
|
||||
<h3>Tracklist</h3>
|
||||
<ol id="tracks-list"></ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="music-footer">
|
||||
<p><a href="/music/Darnea">← back to artist</a></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="./player.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
139
music/Darnea/DGDN/player.css
Normal file
139
music/Darnea/DGDN/player.css
Normal file
@ -0,0 +1,139 @@
|
||||
/* Album Player */
|
||||
|
||||
.album-player {
|
||||
margin: 40px 0;
|
||||
}
|
||||
|
||||
.album-header {
|
||||
display: flex;
|
||||
gap: 30px;
|
||||
margin-bottom: 40px;
|
||||
padding: 30px;
|
||||
background: rgba(107, 225, 233, 0.05);
|
||||
border-radius: 8px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.album-artwork {
|
||||
font-size: 5rem;
|
||||
min-width: 150px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.album-info h2 {
|
||||
margin: 0 0 5px 0;
|
||||
font-size: 2rem;
|
||||
color: #9d9aa4;
|
||||
}
|
||||
|
||||
.album-info .artist-name {
|
||||
margin: 0 0 5px 0;
|
||||
color: #6be1e9;
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.album-info .album-desc {
|
||||
margin: 0;
|
||||
color: #6be1e9;
|
||||
font-size: 0.9rem;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Now Playing */
|
||||
.now-playing {
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
background: rgba(107, 225, 233, 0.1);
|
||||
border: 1px solid rgba(107, 225, 233, 0.3);
|
||||
border-radius: 6px;
|
||||
margin-bottom: 20px;
|
||||
min-height: 60px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.now-playing p {
|
||||
margin: 0;
|
||||
color: #9d9aa4;
|
||||
}
|
||||
|
||||
.now-playing.playing p {
|
||||
color: #6be1e9;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Audio Player */
|
||||
#audio-player {
|
||||
width: 100%;
|
||||
margin-bottom: 30px;
|
||||
accent-color: #6be1e9;
|
||||
}
|
||||
|
||||
/* Tracklist */
|
||||
.tracklist {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.tracklist h3 {
|
||||
margin: 0 0 20px 0;
|
||||
font-size: 1.3rem;
|
||||
color: #9d9aa4;
|
||||
}
|
||||
|
||||
.tracklist ol {
|
||||
list-style-position: inside;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.tracklist li {
|
||||
padding: 12px;
|
||||
margin-bottom: 8px;
|
||||
background: rgba(157, 154, 164, 0.05);
|
||||
border: 1px solid rgba(107, 225, 233, 0.2);
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease;
|
||||
color: #9d9aa4;
|
||||
}
|
||||
|
||||
.tracklist li:hover {
|
||||
background: rgba(107, 225, 233, 0.1);
|
||||
border-color: rgba(107, 225, 233, 0.5);
|
||||
}
|
||||
|
||||
.tracklist li.active {
|
||||
background: rgba(107, 225, 233, 0.2);
|
||||
border-color: #6be1e9;
|
||||
color: #6be1e9;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.track-duration {
|
||||
float: right;
|
||||
color: #6be1e9;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
/* Responsive */
|
||||
@media (max-width: 768px) {
|
||||
.album-header {
|
||||
flex-direction: column;
|
||||
gap: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.album-artwork {
|
||||
font-size: 3rem;
|
||||
}
|
||||
|
||||
.album-info h2 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.tracklist li {
|
||||
padding: 10px;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
}
|
||||
71
music/Darnea/DGDN/player.js
Normal file
71
music/Darnea/DGDN/player.js
Normal file
@ -0,0 +1,71 @@
|
||||
// Album player for DGDN
|
||||
|
||||
const tracks = [
|
||||
{ title: "Dan Beat (bonus)", filename: "Dan Beat (bonus).flac" },
|
||||
{ title: "Neigh V3", filename: "Neigh V3.flac" },
|
||||
{ title: "On Ice", filename: "On Ice.flac" },
|
||||
{ title: "Otish", filename: "Otish.flac" },
|
||||
{ title: "Scan V2", filename: "Scan V2.flac" },
|
||||
{ title: "balance v2", filename: "balance v2.flac" },
|
||||
{ title: "eh ee uhn V2", filename: "eh ee uhn V2.flac" },
|
||||
{ title: "held v3", filename: "held v3.flac" }
|
||||
];
|
||||
|
||||
const audioPlayer = document.getElementById('audio-player');
|
||||
const tracksList = document.getElementById('tracks-list');
|
||||
const nowPlaying = document.getElementById('now-playing');
|
||||
|
||||
let currentTrackIndex = 0;
|
||||
|
||||
// Build tracklist
|
||||
function initTracklist() {
|
||||
tracks.forEach((track, index) => {
|
||||
const li = document.createElement('li');
|
||||
li.textContent = track.title;
|
||||
li.dataset.index = index;
|
||||
li.addEventListener('click', () => playTrack(index));
|
||||
tracksList.appendChild(li);
|
||||
});
|
||||
}
|
||||
|
||||
// Play track
|
||||
function playTrack(index) {
|
||||
currentTrackIndex = index;
|
||||
const track = tracks[index];
|
||||
|
||||
// Update audio source
|
||||
audioPlayer.src = `/src/audio/DGDN/${track.filename}`;
|
||||
audioPlayer.play();
|
||||
|
||||
// Update UI
|
||||
updateNowPlaying(track.title);
|
||||
updateActiveTrack();
|
||||
}
|
||||
|
||||
// Update now playing display
|
||||
function updateNowPlaying(title) {
|
||||
nowPlaying.classList.add('playing');
|
||||
nowPlaying.innerHTML = `<p>▶ Now playing: ${title}</p>`;
|
||||
}
|
||||
|
||||
// Update active track in list
|
||||
function updateActiveTrack() {
|
||||
document.querySelectorAll('.tracklist li').forEach((li, i) => {
|
||||
li.classList.toggle('active', i === currentTrackIndex);
|
||||
});
|
||||
}
|
||||
|
||||
// Auto-play next track when current ends
|
||||
audioPlayer.addEventListener('ended', () => {
|
||||
if (currentTrackIndex < tracks.length - 1) {
|
||||
playTrack(currentTrackIndex + 1);
|
||||
}
|
||||
});
|
||||
|
||||
// Update active track when manually seeking/playing
|
||||
audioPlayer.addEventListener('play', () => {
|
||||
updateActiveTrack();
|
||||
});
|
||||
|
||||
// Initialize
|
||||
initTracklist();
|
||||
35
music/Darnea/index.html
Normal file
35
music/Darnea/index.html
Normal file
@ -0,0 +1,35 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Darnea - dangrubb.net</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="icon" href="/src/img/favicon.ico" type="image/x-icon">
|
||||
<link rel="stylesheet" href="../../style.css">
|
||||
<link rel="stylesheet" href="../music.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="music-container">
|
||||
<div class="music-header">
|
||||
<h1><a href="/music">Music</a> / Darnea</h1>
|
||||
</div>
|
||||
|
||||
<div class="artist-detail">
|
||||
<div class="artist-banner">🎤</div>
|
||||
<h2>Darnea</h2>
|
||||
</div>
|
||||
|
||||
<div class="albums-grid">
|
||||
<div class="album-card">
|
||||
<div class="album-cover">🔥</div>
|
||||
<h3><a href="/music/Darnea/DGDN">DGDN</a></h3>
|
||||
<p class="album-meta">8 tracks</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="music-footer">
|
||||
<p><a href="/music">← back to music</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user