diff --git a/webui/static/script.js b/webui/static/script.js index d427e8b9..165bbe61 100644 --- a/webui/static/script.js +++ b/webui/static/script.js @@ -21006,6 +21006,9 @@ async function loadGenreBrowserGenres() { genresGrid.innerHTML = genreCardsHTML; + // Add click event listeners to genre cards + addGenreBrowserCardClickListeners(); + // Cache the filtered genres data genreBrowserCache.genres = filteredGenres; genreBrowserCache.lastLoaded = new Date(); @@ -21065,6 +21068,9 @@ function displayCachedGenres() { genresGrid.innerHTML = genreCardsHTML; + // Add click event listeners to genre cards + addGenreBrowserCardClickListeners(); + console.log(`β Displayed ${genres.length} cached genres instantly`); // Handle image loading based on current state @@ -21221,6 +21227,442 @@ function filterGenreBrowserCards(searchTerm) { console.log(`π Filtered genre cards with search term: "${searchTerm}"`); } +// === GENRE BROWSER CARD CLICK HANDLERS === + +function addGenreBrowserCardClickListeners() { + const genreCards = document.querySelectorAll('.genre-browser-card'); + genreCards.forEach(card => { + card.addEventListener('click', () => { + const genreSlug = card.dataset.genreSlug; + const genreId = card.dataset.genreId; + const genreName = card.dataset.genreName; + + console.log(`π΅ Genre card clicked: ${genreName} (${genreSlug})`); + handleGenreBrowserCardClick(genreSlug, genreId, genreName); + }); + }); + + console.log(`π Added click listeners to ${genreCards.length} genre browser cards`); +} + +async function handleGenreBrowserCardClick(genreSlug, genreId, genreName) { + console.log(`π Loading hero slider for ${genreName}...`); + + try { + // Show the genre page view + showGenrePageView(genreSlug, genreId, genreName); + + // Load the hero slider data + await loadGenreHeroSlider(genreSlug, genreId, genreName); + + } catch (error) { + console.error(`β Error loading genre page for ${genreName}:`, error); + showToast(`Error loading ${genreName}: ${error.message}`, 'error'); + + // Return to genre list on error + showGenreListView(); + } +} + +function showGenrePageView(genreSlug, genreId, genreName) { + console.log(`π― Showing genre page view for ${genreName}`); + + // CRITICAL: Stop all other slider auto-play to prevent conflicts + if (typeof beatportRebuildSliderState !== 'undefined' && beatportRebuildSliderState.autoPlayInterval) { + clearInterval(beatportRebuildSliderState.autoPlayInterval); + console.log('π Stopped main slider auto-play to prevent conflicts'); + } + + const modal = document.getElementById('genre-browser-modal'); + if (!modal) return; + + // Hide genre list elements + const searchSection = modal.querySelector('.genre-browser-search-section'); + const genresSection = modal.querySelector('.genre-browser-genres-section'); + + if (searchSection) searchSection.style.display = 'none'; + if (genresSection) genresSection.style.display = 'none'; + + // Create or show genre page content + let genrePageContent = modal.querySelector('.genre-page-content'); + if (!genrePageContent) { + genrePageContent = document.createElement('div'); + genrePageContent.className = 'genre-page-content'; + genrePageContent.innerHTML = ` +
π Loading ${genreName} hero releases...
+β Failed to load ${genreName} releases
+${error.message}
+ +