diff --git a/webui/index.html b/webui/index.html
index 8cda418a..185c80a1 100644
--- a/webui/index.html
+++ b/webui/index.html
@@ -341,6 +341,9 @@
+
@@ -375,6 +378,73 @@
Parsed YouTube playlists will appear here.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Browse Beatport Charts
+
Explore top electronic music charts and discover new tracks
+
+ 39 Genres
+ •
+ Top 100
+ •
+ Weekly Updates
+
+
+
+
+
+
+
+
+
🔥 Top Charts
+
Beatport Top 100, Hype Top 10, New Releases
+
3 Charts
+
+
+
+
+
🎵 Genre Explorer
+
House, Techno, Trance, and 36 more genres
+
39 Genres
+
+
+
+
+
📊 Staff Picks
+
Curated selections and secret weapons
+
5 Collections
+
+
+
+
+
+
+
+
diff --git a/webui/static/script.js b/webui/static/script.js
index 18c64485..7315d8c8 100644
--- a/webui/static/script.js
+++ b/webui/static/script.js
@@ -9190,6 +9190,39 @@ function initializeSyncPage() {
tidalRefreshBtn.addEventListener('click', loadTidalPlaylists);
}
+ // Logic for the Beatport refresh button
+ const beatportRefreshBtn = document.getElementById('beatport-refresh-btn');
+ if (beatportRefreshBtn) {
+ beatportRefreshBtn.addEventListener('click', loadBeatportCharts);
+ }
+
+ // Logic for Beatport nested tabs
+ const beatportTabButtons = document.querySelectorAll('.beatport-tab-button');
+ beatportTabButtons.forEach(button => {
+ button.addEventListener('click', () => {
+ const tabId = button.dataset.beatportTab;
+
+ // Update button active state
+ beatportTabButtons.forEach(btn => btn.classList.remove('active'));
+ button.classList.add('active');
+
+ // Update content active state
+ document.querySelectorAll('.beatport-tab-content').forEach(content => {
+ content.classList.remove('active');
+ });
+ document.getElementById(`beatport-${tabId}-content`).classList.add('active');
+ });
+ });
+
+ // Logic for Beatport category cards
+ const beatportCategoryCards = document.querySelectorAll('.beatport-category-card');
+ beatportCategoryCards.forEach(card => {
+ card.addEventListener('click', () => {
+ const category = card.dataset.category;
+ handleBeatportCategoryClick(category);
+ });
+ });
+
// Logic for the Start Sync button
const startSyncBtn = document.getElementById('start-sync-btn');
if (startSyncBtn) {
@@ -9467,6 +9500,63 @@ async function clearWishlist(playlistId) {
}
+// ===============================
+// BEATPORT CHARTS FUNCTIONALITY
+// ===============================
+
+async function loadBeatportCharts() {
+ const container = document.getElementById('beatport-playlist-container');
+ const refreshBtn = document.getElementById('beatport-refresh-btn');
+
+ container.innerHTML = `🔄 Loading Beatport playlists...
`;
+ refreshBtn.disabled = true;
+ refreshBtn.textContent = '🔄 Loading...';
+
+ try {
+ // Placeholder functionality - will be implemented later with actual Beatport playlist management
+ await new Promise(resolve => setTimeout(resolve, 1000)); // Simulate loading
+
+ container.innerHTML = `
+
+
🎵 My Beatport Playlists
+
Your created Beatport playlists will appear here.
+
+ Create playlists from Beatport charts using the Browse Charts tab,
+ then sync them directly to your media server.
+
+
+ `;
+
+ showToast('Beatport playlists loaded successfully!', 'success');
+
+ } catch (error) {
+ container.innerHTML = `