diff --git a/script.js b/script.js index 8744699..9108d47 100644 --- a/script.js +++ b/script.js @@ -4,6 +4,7 @@ let filteredData = []; let currentPage = 1; const itemsPerPage = 50; let isReversed = false; +let wikipediaUrlMappings = {}; // DOM elements const albumsGrid = document.getElementById('albumsGrid'); @@ -19,11 +20,24 @@ const stats = document.getElementById('stats'); // Initialize the application document.addEventListener('DOMContentLoaded', function() { + loadWikipediaMapping(); loadAlbumsData(); setupEventListeners(); handleUrlParams(); }); +// Load Wikipedia URL mappings +async function loadWikipediaMapping() { + try { + const response = await fetch('wikipedia_urls_mapping.json'); + if (response.ok) { + wikipediaUrlMappings = await response.json(); + } + } catch (err) { + console.warn('Could not load Wikipedia URL mappings:', err); + } +} + // Setup event listeners function setupEventListeners() { searchInput.addEventListener('input', debounce(handleSearch, 300)); @@ -35,6 +49,53 @@ function setupEventListeners() { // Add scroll listener for infinite scroll window.addEventListener('scroll', handleScroll); + + // Add click listeners to stats cards + setupStatsClickHandlers(); +} + +// Setup click handlers for stats cards +function setupStatsClickHandlers() { + const totalAlbumsCard = document.querySelector('.stat-item:has(#totalAlbums)') || + document.querySelector('#totalAlbums').closest('.stat-item'); + const newAlbumsCard = document.querySelector('.stat-item:has(#newAlbums)') || + document.querySelector('#newAlbums').closest('.stat-item'); + const improvedAlbumsCard = document.querySelector('.stat-item:has(#improvedAlbums)') || + document.querySelector('#improvedAlbums').closest('.stat-item'); + const droppedAlbumsCard = document.querySelector('.stat-item:has(#droppedAlbums)') || + document.querySelector('#droppedAlbums').closest('.stat-item'); + + if (totalAlbumsCard) { + totalAlbumsCard.addEventListener('click', () => handleStatsCardClick('')); + totalAlbumsCard.style.cursor = 'pointer'; + } + + if (newAlbumsCard) { + newAlbumsCard.addEventListener('click', () => handleStatsCardClick('New in 2023')); + newAlbumsCard.style.cursor = 'pointer'; + } + + if (improvedAlbumsCard) { + improvedAlbumsCard.addEventListener('click', () => handleStatsCardClick('improved')); + improvedAlbumsCard.style.cursor = 'pointer'; + } + + if (droppedAlbumsCard) { + droppedAlbumsCard.addEventListener('click', () => handleStatsCardClick('dropped')); + droppedAlbumsCard.style.cursor = 'pointer'; + } +} + +// Handle stats card clicks +function handleStatsCardClick(filterValue) { + // Update the status filter dropdown + statusFilter.value = filterValue; + + // Trigger the filter change + statusFilter.dispatchEvent(new Event('change')); + + // Scroll to the albums grid + albumsGrid.scrollIntoView({ behavior: 'smooth' }); } // Load albums data from CSV @@ -51,7 +112,7 @@ async function loadAlbumsData() { hideLoading(); renderAlbums(); - updateStats(); + initializeStats(); } catch (err) { console.error('Error loading data:', err); @@ -155,13 +216,13 @@ function createAlbumCard(album) { const coverImagePath = getCoverImagePath(album); card.innerHTML = ` -
#${album.Rank}
-
-
${escapeHtml(album.Album)}
-
${escapeHtml(album.Artist)}
- ${album.Info ? `
${escapeHtml(album.Info)}
` : ''} -
${statusText}
- ${album.Description ? `
${escapeHtml(album.Description)}
` : ''} +
+
#${album.Rank}
+
+
${escapeHtml(album.Album)}
+
${escapeHtml(album.Artist)}
+ ${album.Info ? `
${escapeHtml(album.Info)}
` : ''} +
${coverImagePath ? @@ -170,6 +231,13 @@ function createAlbumCard(album) { `
🎵
` }
+
${statusText}
+ ${album.Description ? `
${formatDescription(album.Description)}
` : ''} + `; @@ -315,11 +383,12 @@ function handleScroll() { } // Update statistics -function updateStats() { - const total = filteredData.length; - const newAlbums = filteredData.filter(album => album.Status === 'New in 2023').length; - const improved = filteredData.filter(album => album.Status.startsWith('+')).length; - const dropped = filteredData.filter(album => album.Status.startsWith('-') || album.Status.startsWith('Dropped')).length; +// Initialize stats with static values from the full dataset (called only once) +function initializeStats() { + const total = albumsData.length; + const newAlbums = albumsData.filter(album => album.Status === 'New in 2023').length; + const improved = albumsData.filter(album => album.Status.startsWith('+')).length; + const dropped = albumsData.filter(album => album.Status.startsWith('-') || album.Status.startsWith('Dropped')).length; document.getElementById('totalAlbums').textContent = total; document.getElementById('newAlbums').textContent = newAlbums; @@ -327,6 +396,11 @@ function updateStats() { document.getElementById('droppedAlbums').textContent = dropped; } +// Update stats function (now empty but kept for compatibility) +function updateStats() { + // Stats remain static and don't update when filtering +} + // Utility functions function debounce(func, wait) { let timeout; @@ -347,6 +421,54 @@ function escapeHtml(text) { return div.innerHTML; } +function formatDescription(text) { + if (!text) return ''; + + // Split by double line breaks or periods followed by capital letters + const paragraphs = text + .split(/\n\n|\. (?=[A-Z])/) + .map(p => p.trim()) + .filter(p => p.length > 0) + .map(p => p.endsWith('.') ? p : p + '.'); + + // If we only have one paragraph, try to split by sentences for better formatting + if (paragraphs.length === 1 && text.length > 200) { + const sentences = text.match(/[^.!?]+[.!?]+/g) || [text]; + if (sentences.length > 3) { + // Group sentences into 2-3 paragraphs + const third = Math.ceil(sentences.length / 3); + return [ + sentences.slice(0, third).join(' '), + sentences.slice(third, third * 2).join(' '), + sentences.slice(third * 2).join(' ') + ].filter(p => p.trim()).map(p => `

${escapeHtml(p.trim())}

`).join(''); + } + } + + return paragraphs.map(p => `

${escapeHtml(p)}

`).join(''); +} + +function generateWikipediaUrl(album, artist) { + // Clean up album and artist names + const albumName = album.trim(); + const artistName = artist.trim(); + + // Check if we have the exact Wikipedia URL from our mapping + if (wikipediaUrlMappings[albumName]) { + return `https://en.wikipedia.org/wiki/${wikipediaUrlMappings[albumName]}`; + } + + // Remove "The" from the beginning of artist names for URL formatting + const artistForUrl = artistName.replace(/^The /, ''); + + // Format for Wikipedia URL - replace spaces with underscores + const albumUrl = albumName.replace(/ /g, '_'); + const artistUrl = artistForUrl.replace(/ /g, '_'); + + // Default pattern: Album_Name_(Artist_Name_album) + return `https://en.wikipedia.org/wiki/${encodeURIComponent(albumUrl)}_(${encodeURIComponent(artistUrl)}_album)`; +} + function hideLoading() { loading.style.display = 'none'; albumsGrid.style.display = 'grid'; diff --git a/styles.css b/styles.css index 4d4f779..1bf54e0 100644 --- a/styles.css +++ b/styles.css @@ -222,11 +222,14 @@ body { border-radius: 12px; text-align: center; box-shadow: 0 4px 20px rgba(0,0,0,0.1); - transition: transform 0.3s ease; + transition: all 0.3s ease; + cursor: pointer; } .stat-item:hover { transform: translateY(-2px); + box-shadow: 0 6px 24px rgba(0,0,0,0.15); + background: rgba(102, 126, 234, 0.05); } .stat-number { @@ -260,14 +263,15 @@ body { transition: all 0.3s ease; cursor: pointer; display: flex; - align-items: center; - gap: 1.5rem; + flex-direction: column; + gap: 1rem; position: relative; } .album-cover { - width: 180px; - height: 180px; + width: 600px; + height: 600px; + max-width: 100%; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 8px; flex-shrink: 0; @@ -280,6 +284,8 @@ body { box-shadow: 0 4px 12px rgba(0,0,0,0.15); position: relative; overflow: hidden; + margin: 0 auto; + align-self: center; } .album-cover:has(.album-cover-image) { @@ -308,7 +314,7 @@ body { } .album-cover-icon { - font-size: 4rem; + font-size: 6rem; opacity: 0.8; z-index: 1; position: relative; @@ -366,22 +372,31 @@ body { box-shadow: 0 8px 32px rgba(0,0,0,0.15); } +.album-header-grid { + display: grid; + grid-template-columns: 100px 1fr; + gap: 1.5rem; + align-items: center; +} + .album-rank { font-size: 2.5rem; font-weight: 700; color: #667eea; - min-width: 80px; text-align: center; - flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + height: 100%; } -.album-content { - flex: 1; +.album-details { display: flex; flex-direction: column; - gap: 0.5rem; + gap: 0.25rem; } + .album-title { font-size: 1.3rem; font-weight: 600; @@ -432,9 +447,60 @@ body { } .album-description { - font-size: 0.9rem; + font-size: 0.95rem; color: #555; - line-height: 1.5; + line-height: 1.7; + margin-top: 1rem; + text-align: justify; + max-width: 800px; + margin-left: auto; + margin-right: auto; +} + +.album-description p { + margin: 0 0 1rem 0; + text-indent: 1.5em; +} + +.album-description p:first-child { + text-indent: 0; +} + +.album-description p:last-child { + margin-bottom: 0; +} + +.album-links { + margin-top: 1.5rem; + text-align: center; + padding-top: 1rem; + border-top: 1px solid #eee; +} + +.wikipedia-link { + display: inline-block; + color: #667eea; + text-decoration: none; + font-size: 0.9rem; + font-weight: 500; + padding: 0.5rem 1rem; + border-radius: 20px; + background: rgba(102, 126, 234, 0.1); + transition: all 0.3s ease; +} + +.wikipedia-link::before { + content: "🔗 "; + font-size: 0.8rem; +} + +.wikipedia-link:hover { + background: rgba(102, 126, 234, 0.2); + transform: translateY(-1px); +} + +.wikipedia-link:active { + transform: translateY(0); } @@ -531,13 +597,13 @@ body { } .album-cover { - width: 120px; - height: 120px; + width: 280px; + height: 280px; align-self: center; } .album-cover-icon { - font-size: 3rem; + font-size: 5rem; } .stats { @@ -561,4 +627,13 @@ body { .stats { grid-template-columns: 1fr; } + + .album-cover { + width: 240px; + height: 240px; + } + + .album-cover-icon { + font-size: 4.5rem; + } } \ No newline at end of file diff --git a/wikipedia_urls_mapping.json b/wikipedia_urls_mapping.json new file mode 100644 index 0000000..36b43b5 --- /dev/null +++ b/wikipedia_urls_mapping.json @@ -0,0 +1,498 @@ +{ + "What's Going On": "What%27s_Going_On_(Marvin_Gaye_album)", + "Pet Sounds": "Pet_Sounds", + "Blue": "Blue_(Joni_Mitchell_album)", + "Songs in the Key of Life": "Songs_in_the_Key_of_Life", + "Abbey Road": "Abbey_Road", + "Nevermind": "Nevermind", + "Rumours": "Rumours_(album)", + "Purple Rain": "Purple_Rain_(album)", + "Blood on the Tracks": "Blood_on_the_Tracks", + "The Miseducation of Lauryn Hill": "The_Miseducation_of_Lauryn_Hill", + "Revolver": "Revolver_(Beatles_album)", + "Thriller": "Thriller_(Michael_Jackson_album)", + "I Never Loved a Man the Way I Love You": "I_Never_Loved_a_Man_the_Way_I_Love_You", + "Exile on Main St.": "Exile_on_Main_St.", + "It Takes a Nation of Millions to Hold Us Back": "It_Takes_a_Nation_of_Millions_to_Hold_Us_Back", + "London Calling": "London_Calling", + "My Beautiful Dark Twisted Fantasy": "My_Beautiful_Dark_Twisted_Fantasy", + "Highway 61 Revisited": "Highway_61_Revisited", + "To Pimp a Butterfly": "To_Pimp_a_Butterfly", + "Kid A": "Kid_A", + "Born to Run": "Born_to_Run", + "Ready to Die": "Ready_to_Die", + "The Velvet Underground & Nico": "The_Velvet_Underground_%26_Nico", + "Sgt. Pepper's Lonely Hearts Club Band": "Sgt._Pepper%27s_Lonely_Hearts_Club_Band", + "Tapestry": "Tapestry_(Carole_King_album)", + "Horses": "Horses_(album)", + "Enter the Wu-Tang (36 Chambers)": "Enter_the_Wu-Tang_(36_Chambers)", + "Voodoo": "Voodoo_(D%27Angelo_album)", + "The Beatles": "The_Beatles_(album)", + "Are You Experienced": "Are_You_Experienced", + "Kind of Blue": "Kind_of_Blue", + "Lemonade": "Lemonade_(Beyonc%C3%A9_album)", + "Back to Black": "Back_to_Black", + "Innervisions": "Innervisions", + "Rubber Soul": "Rubber_Soul", + "Off the Wall": "Off_the_Wall", + "The Chronic": "The_Chronic", + "Blonde on Blonde": "Blonde_on_Blonde", + "Remain in Light": "Remain_in_Light", + "The Rise and Fall of Ziggy Stardust and the Spiders from Mars": "The_Rise_and_Fall_of_Ziggy_Stardust_and_the_Spiders_from_Mars", + "Let It Bleed": "Let_It_Bleed", + "OK Computer": "OK_Computer", + "The Low End Theory": "The_Low_End_Theory", + "Illmatic": "Illmatic", + "Sign o' the Times": "Sign_o%27_the_Times", + "Graceland": "Graceland_(album)", + "Ramones": "Ramones_(album)", + "Exodus": "Exodus_(Bob_Marley_and_the_Wailers_album)", + "Aquemini": "Aquemini", + "The Blueprint": "The_Blueprint", + "The Great Twenty-Eight": "The_Great_Twenty-Eight", + "Station to Station": "Station_to_Station", + "Electric Ladyland": "Electric_Ladyland", + "Star Time": "Star_Time_(album)", + "The Dark Side of the Moon": "The_Dark_Side_of_the_Moon", + "Exile in Guyville": "Exile_in_Guyville", + "The Band": "The_Band_(album)", + "Led Zeppelin IV": "Led_Zeppelin_IV", + "Talking Book": "Talking_Book", + "Astral Weeks": "Astral_Weeks", + "Paid in Full": "Paid_in_Full_(album)", + "Appetite for Destruction": "Appetite_for_Destruction", + "Aja": "Aja_(album)", + "Stankonia": "Stankonia", + "Live at the Apollo": "Live_at_the_Apollo_(1963_album)", + "A Love Supreme": "A_Love_Supreme", + "Reasonable Doubt": "Reasonable_Doubt_(album)", + "Hounds of Love": "Hounds_of_Love", + "Jagged Little Pill": "Jagged_Little_Pill", + "Straight Outta Compton": "Straight_Outta_Compton", + "Renaissance": "Renaissance_(Beyonce_album)", + "Harvest": "Harvest_(Neil_Young_album)", + "Loveless": "Loveless_(album)", + "The College Dropout": "The_College_Dropout", + "Lady Soul": "Lady_Soul", + "Super Fly": "Super_Fly_(soundtrack)", + "Who's Next": "Who%27s_Next", + "The Sun Sessions": "The_Sun_Sessions", + "Blonde": "Blonde_(Frank_Ocean_album)", + "Never Mind the Bollocks, Here's the Sex Pistols": "Never_Mind_the_Bollocks,_Here%27s_the_Sex_Pistols", + "Beyoncé": "Beyonc%C3%A9_(album)", + "There's a Riot Goin' On": "There%27s_a_Riot_Goin%27_On", + "Dusty in Memphis": "Dusty_in_Memphis", + "Back in Black": "Back_in_Black", + "John Lennon/Plastic Ono Band": "John_Lennon/Plastic_Ono_Band", + "The Doors": "The_Doors_(album)", + "Bitches Brew": "Bitches_Brew", + "Hunky Dory": "Hunky_Dory", + "Baduizm": "Baduizm", + "After the Gold Rush": "After_the_Gold_Rush", + "Darkness on the Edge of Town": "Darkness_on_the_Edge_of_Town", + "Axis: Bold as Love": "Axis:_Bold_as_Love", + "Supa Dupa Fly": "Supa_Dupa_Fly", + "Fun House": "Fun_House_(The_Stooges_album)", + "Take Care": "Take_Care_(album)", + "Automatic for the People": "Automatic_for_the_People", + "Master of Puppets": "Master_of_Puppets", + "Car Wheels on a Gravel Road": "Car_Wheels_on_a_Gravel_Road", + "Red": "Red_(Black_Uhuru_album)", + "Music from Big Pink": "Music_from_Big_Pink", + "Led Zeppelin": "Led_Zeppelin_(album)", + "The Clash": "The_Clash_(album)", + "3 Feet High and Rising": "3_Feet_High_and_Rising", + "Sticky Fingers": "Sticky_Fingers", + "At Fillmore East": "At_Fillmore_East", + "Live Through This": "Live_Through_This", + "Marquee Moon": "Marquee_Moon", + "When the Pawn...": "When_the_Pawn...", + "Transformer": "Transformer_(Lou_Reed_album)", + "Court and Spark": "Court_and_Spark", + "Control": "Control_(Janet_Jackson_album)", + "Goodbye Yellow Brick Road": "Goodbye_Yellow_Brick_Road", + "The Queen Is Dead": "The_Queen_Is_Dead", + "Is This It": "Is_This_It", + "Good Kid, M.A.A.D City": "Good_Kid,_M.A.A.D_City", + "Disintegration": "Disintegration_(The_Cure_album)", + "Late Registration": "Late_Registration", + "Hotel California": "Hotel_California_(Eagles_album)", + "Stand!": "Stand!", + "Moondance": "Moondance", + "This Year's Model": "This_Year%27s_Model", + "The Downward Spiral": "The_Downward_Spiral", + "Led Zeppelin II": "Led_Zeppelin_II", + "Achtung Baby": "Achtung_Baby", + "Paul's Boutique": "Paul%27s_Boutique", + "My Life": "My_Life_(Mary_J._Blige_album)", + "Modern Sounds in Country and Western Music": "Modern_Sounds_in_Country_and_Western_Music", + "A Night at the Opera": "A_Night_at_the_Opera_(Queen_album)", + "The Wall": "The_Wall", + "1999": "1999_(Prince_album)", + "Dummy": "Dummy_(album)", + "40 Greatest Hits": "40_Greatest_Hits_(Hank_Williams_album)", + "Hejira": "Hejira_(album)", + "The Score": "The_Score_(Fugees_album)", + "The Joshua Tree": "The_Joshua_Tree", + "Maggot Brain": "Maggot_Brain", + "21": "21_(Adele_album)", + "The Immaculate Collection": "The_Immaculate_Collection", + "Paranoid": "Paranoid_(album)", + "Catch a Fire": "Catch_a_Fire", + "Doolittle": "Doolittle_(album)", + "Born in the U.S.A.": "Born_in_the_U.S.A.", + "The Velvet Underground": "The_Velvet_Underground_(album)", + "Physical Graffiti": "Physical_Graffiti", + "The Marshall Mathers LP": "The_Marshall_Mathers_LP", + "Parallel Lines": "Parallel_Lines", + "Grace": "Grace_(Jeff_Buckley_album)", + "Channel Orange": "Channel_Orange", + "John Prine": "John_Prine_(album)", + "Nebraska": "Nebraska_(album)", + "Faith": "Faith_(George_Michael_album)", + "Pretenders": "Pretenders_(album)", + "Rid of Me": "Rid_of_Me", + "Amazing Grace": "Amazing_Grace_(Aretha_Franklin_album)", + "The Black Album": "The_Black_Album_(Jay-Z_album)", + "Let It Be": "Let_It_Be_(album)", + "(What's the Story) Morning Glory?": "(What%27s_the_Story)_Morning_Glory%3F", + "Mama's Gun": "Mama%27s_Gun", + "Synchronicity": "Synchronicity_(The_Police_album)", + "Ten": "Ten_(Pearl_Jam_album)", + "Crosby, Stills & Nash": "Crosby,_Stills_%26_Nash_(album)", + "Different Class": "Different_Class", + "Saturday Night Fever": "Saturday_Night_Fever_(soundtrack)", + "At Folsom Prison": "At_Folsom_Prison", + "Murmur": "Murmur_(album)", + "20 Golden Greats": "20_Golden_Greats_(Buddy_Holly_%26_The_Crickets_album)", + "Violator": "Violator_(album)", + "Can't Buy a Thrill": "Can%27t_Buy_a_Thrill", + "The Stranger": "The_Stranger_(album)", + "Folklore": "Folklore_(Taylor_Swift_album)", + "Daydream Nation": "Daydream_Nation", + "Bridge over Troubled Water": "Bridge_over_Troubled_Water", + "In Utero": "In_Utero_(album)", + "The Harder They Come": "The_Harder_They_Come_(soundtrack)", + "Damn": "Damn_(Kendrick_Lamar_album)", + "Fear of a Black Planet": "Fear_of_a_Black_Planet", + "Every Picture Tells a Story": "Every_Picture_Tells_a_Story", + "Otis Blue/Otis Redding Sings Soul": "Otis_Blue/Otis_Redding_Sings_Soul", + "Life After Death": "Life_After_Death", + "Forever Changes": "Forever_Changes", + "Bringing It All Back Home": "Bringing_It_All_Back_Home", + "Sweet Baby James": "Sweet_Baby_James", + "Brown Sugar": "Brown_Sugar_(D%27Angelo_album)", + "She's So Unusual": "She%27s_So_Unusual", + "Beggars Banquet": "Beggars_Banquet", + "Blood Sugar Sex Magik": "Blood_Sugar_Sex_Magik", + "AmeriKKKa's Most Wanted": "AmeriKKKa%27s_Most_Wanted", + "Electric Warrior": "Electric_Warrior", + "Dig Me Out": "Dig_Me_Out", + "Tommy": "Tommy_(The_Who_album)", + "At Last!": "At_Last!", + "Licensed to Ill": "Licensed_to_Ill", + "Willy and the Poor Boys": "Willy_and_the_Poor_Boys", + "Bad": "Bad_(album)", + "Songs of Leonard Cohen": "Songs_of_Leonard_Cohen", + "Body Talk": "Body_Talk_(Robyn_album)", + "Meet the Beatles!": "Meet_the_Beatles!", + "The B-52's": "The_B-52%27s_(album)", + "Slanted and Enchanted": "Slanted_and_Enchanted", + "Diamond Life": "Diamond_Life", + "Midnight Marauders": "Midnight_Marauders", + "Homogenic": "Homogenic", + "Pink Moon": "Pink_Moon", + "Graduation": "Graduation_(album)", + "Tea for the Tillerman": "Tea_for_the_Tillerman", + "Low": "Low_(David_Bowie_album)", + "Eagles": "Eagles_(album)", + "Tha Carter III": "Tha_Carter_III", + "Raising Hell": "Raising_Hell_(album)", + "The Birth of Soul": "The_Birth_of_Soul", + "Unknown Pleasures": "Unknown_Pleasures", + "Wild Is the Wind": "Wild_Is_the_Wind_(album)", + "The Idler Wheel...": "The_Idler_Wheel...", + "Wildflowers": "Wildflowers_(Tom_Petty_album)", + "American Beauty": "American_Beauty_(album)", + "Either/Or": "Either/Or_(album)", + "Definitely Maybe": "Definitely_Maybe", + "CrazySexyCool": "CrazySexyCool", + "Only Built 4 Cuban Linx...": "Only_Built_4_Cuban_Linx...", + "Déjà Vu": "D%C3%A9j%C3%A0_Vu_(Crosby,_Stills,_Nash_%26_Young_album)", + "Rage Against the Machine": "Rage_Against_the_Machine_(album)", + "Ray of Light": "Ray_of_Light", + "Imagine": "Imagine_(John_Lennon_album)", + "Fly": "Fly_(Dixie_Chicks_album)", + "Yankee Hotel Foxtrot": "Yankee_Hotel_Foxtrot", + "Layla and Other Assorted Love Songs": "Layla_and_Other_Assorted_Love_Songs", + "Here's Little Richard": "Here%27s_Little_Richard", + "De La Soul Is Dead": "De_La_Soul_Is_Dead", + "The Ultimate Collection": "The_Ultimate_Collection_(2000_Patsy_Cline_album)", + "Anti": "Anti_(album)", + "Damn the Torpedoes": "Damn_the_Torpedoes_(album)", + "Giant Steps": "Giant_Steps", + "Little Earthquakes": "Little_Earthquakes", + "Master of Reality": "Master_of_Reality", + "Metallica": "Metallica_(album)", + "Discovery": "Discovery_(Daft_Punk_album)", + "Red Headed Stranger": "Red_Headed_Stranger", + "Trans-Europe Express": "Trans-Europe_Express_(album)", + "Criminal Minded": "Criminal_Minded", + "Live at the Harlem Square Club, 1963": "Live_at_the_Harlem_Square_Club,_1963", + "Blue Lines": "Blue_Lines", + "Loaded": "Loaded_(The_Velvet_Underground_album)", + "Odessey and Oracle": "Odessey_and_Oracle", + "808s & Heartbreak": "808s_%26_Heartbreak", + "Heaven or Las Vegas": "Heaven_or_Las_Vegas", + "Mama Said Knock You Out": "Mama_Said_Knock_You_Out", + "Love Deluxe": "Love_Deluxe", + "American Idiot": "American_Idiot", + "Whitney Houston": "Whitney_Houston_(album)", + "Singles Going Steady": "Singles_Going_Steady", + "Honky Château": "Honky_Ch%C3%A2teau", + "Q: Are We Not Men? A: We Are Devo!": "Q._Are_We_Not_Men%3F_A:_We_Are_Devo!", + "The Piper at the Gates of Dawn": "The_Piper_at_the_Gates_of_Dawn", + "Head Hunters": "Head_Hunters", + "The Freewheelin' Bob Dylan": "The_Freewheelin%27_Bob_Dylan", + "Tracy Chapman": "Tracy_Chapman_(album)", + "Coat of Many Colors": "Coat_of_Many_Colors", + "The Hissing of Summer Lawns": "The_Hissing_of_Summer_Lawns", + "Pearl": "Pearl_(Janis_Joplin_album)", + "Cut": "Cut_(The_Slits_album)", + "Check Your Head": "Check_Your_Head", + "Power, Corruption & Lies": "Power,_Corruption_%26_Lies", + "A Hard Day's Night": "A_Hard_Day%27s_Night_(album)", + "Wish You Were Here": "Wish_You_Were_Here_(Pink_Floyd_album)", + "Wowee Zowee": "Wowee_Zowee", + "Help!": "Help!", + "Double Nickels on the Dime": "Double_Nickels_on_the_Dime", + "Sail Away": "Sail_Away_(Randy_Newman_album)", + "Yeezus": "Yeezus", + "Golden Hour": "Golden_Hour_(Kacey_Musgraves_album)", + "What's the 411?": "What%27s_the_411%3F", + "White Light/White Heat": "White_Light/White_Heat", + "Entertainment!": "Entertainment!", + "Sweetheart of the Rodeo": "Sweetheart_of_the_Rodeo", + "Curtis": "Curtis_(Curtis_Mayfield_album)", + "The Bends": "The_Bends_(album)", + "The Diary of Alicia Keys": "The_Diary_of_Alicia_Keys", + "Houses of the Holy": "Houses_of_the_Holy", + "MTV Unplugged in New York": "MTV_Unplugged_in_New_York", + "Get Rich or Die Tryin'": "Get_Rich_or_Die_Tryin%27", + "Nilsson Schmilsson": "Nilsson_Schmilsson", + "In the Wee Small Hours": "In_the_Wee_Small_Hours", + "Bad Girls": "Bad_Girls_(Donna_Summer_album)", + "Down Every Road 1962–1994": "Down_Every_Road_1962%E2%80%931994", + "Third/Sister Lovers": "Third/Sister_Lovers", + "Californication": "Californication_(album)", + "Mr. Tambourine Man": "Mr._Tambourine_Man_(album)", + "The Modern Lovers": "The_Modern_Lovers_(album)", + "Post": "Post_(Bj%C3%B6rk_album)", + "Speakerboxxx/The Love Below": "Speakerboxxx/The_Love_Below", + "The Writing's on the Wall": "The_Writing%27s_on_the_Wall", + "Van Halen": "Van_Halen_(album)", + "Last Splash": "Last_Splash", + "Weezer": "Weezer_(Blue_Album)", + "Random Access Memories": "Random_Access_Memories", + "Rust Never Sleeps": "Rust_Never_Sleeps", + "So": "So_(album)", + "Full Moon Fever": "Full_Moon_Fever", + "Live at the Regal": "Live_at_the_Regal", + "Come On Over": "Come_On_Over", + "New York Dolls": "New_York_Dolls_(album)", + "Tonight's the Night": "Tonight%27s_the_Night_(Neil_Young_album)", + "The Definitive Collection": "The_Definitive_Collection_(ABBA_album)", + "Just as I Am": "Just_as_I_Am_(Bill_Withers_album)", + "Alive!": "Alive!_(Kiss_album)", + "I'm Still in Love with You": "I%27m_Still_in_Love_with_You_(Al_Green_album)", + "Portrait of a Legend: 1951–1964": "Portrait_of_a_Legend:_1951%E2%80%931964", + "Here Come the Warm Jets": "Here_Come_the_Warm_Jets", + "Closer": "Closer_(Joy_Division_album)", + "Pink Flag": "Pink_Flag", + "On the Beach": "On_the_Beach_(Neil_Young_album)", + "A Seat at the Table": "A_Seat_at_the_Table", + "Stories from the City, Stories from the Sea": "Stories_from_the_City,_Stories_from_the_Sea", + "One in a Million": "One_in_a_Million_(Aaliyah_album)", + "El Mal Querer": "El_mal_querer", + "The Who Sell Out": "The_Who_Sell_Out", + "Lady in Satin": "Lady_in_Satin", + "The Velvet Rope": "The_Velvet_Rope", + "The Stone Roses": "The_Stone_Roses_(album)", + "Los Angeles": "Los_Angeles_(X_album)", + "Norman Fucking Rockwell!": "Norman_Fucking_Rockwell!", + "From Elvis in Memphis": "From_Elvis_in_Memphis", + "Sandinista!": "Sandinista!", + "A Rush of Blood to the Head": "A_Rush_of_Blood_to_the_Head", + "All Killer, No Filler: The Anthology": "All_Killer,_No_Filler:_The_Anthology", + "Dirty Mind": "Dirty_Mind", + "Live at Leeds": "Live_at_Leeds", + "Modern Vampires of the City": "Modern_Vampires_of_the_City", + "Endtroducing.....": "Endtroducing.....", + "Aftermath": "Aftermath_(Rolling_Stones_album)", + "Like a Prayer": "Like_a_Prayer_(album)", + "Elvis Presley": "Elvis_Presley_(album)", + "Still Bill": "Still_Bill", + "Abraxas": "Abraxas_(album)", + "The Basement Tapes": "The_Basement_Tapes", + "Avalon": "Avalon_(Roxy_Music_album)", + "John Wesley Harding": "John_Wesley_Harding", + "Another Green World": "Another_Green_World", + "Janet Jackson's Rhythm Nation 1814": "Janet_Jackson%27s_Rhythm_Nation_1814", + "Doggystyle": "Doggystyle", + "Siamese Dream": "Siamese_Dream", + "Greatest Hits": "Greatest_Hits_(Sly_and_the_Family_Stone_album)", + "Funky Kingston": "Funky_Kingston", + "The Wild, the Innocent & the E Street Shuffle": "The_Wild,_the_Innocent_%26_the_E_Street_Shuffle", + "AM": "AM_(Arctic_Monkeys_album)", + "Liquid Swords": "Liquid_Swords", + "Time (The Revelator)": "Time_(The_Revelator)", + "Kick Out the Jams": "Kick_Out_the_Jams", + "Music of My Mind": "Music_of_My_Mind", + "SOS": "SOS_(SZA_album)", + "The Slim Shady LP": "The_Slim_Shady_LP", + "The Cars": "The_Cars_(album)", + "Germfree Adolescents": "Germfree_Adolescents", + "Black Sabbath": "Black_Sabbath_(album)", + "Gris-Gris": "Gris-Gris", + "Rain Dogs": "Rain_Dogs", + "Sour": "Sour_(album)", + "Radio City": "Radio_City_(album)", + "One Nation Under a Groove": "One_Nation_Under_a_Groove", + "The Black Parade": "The_Black_Parade", + "Never Too Much": "Never_Too_Much_(album)", + "Mothership Connection": "Mothership_Connection", + "More Songs About Buildings and Food": "More_Songs_About_Buildings_and_Food", + "Madvillainy": "Madvillainy", + "Rocks": "Rocks_(Aerosmith_album)", + "If You're Reading This It's Too Late": "If_You%27re_Reading_This_It%27s_Too_Late", + "All Things Must Pass": "All_Things_Must_Pass", + "The Infamous": "The_Infamous", + "Tha Carter II": "Tha_Carter_II", + "Anthology": "Anthology_(The_Supremes_album)", + "Cheap Thrills": "Cheap_Thrills_(Big_Brother_and_the_Holding_Company_album)", + "Hot Buttered Soul": "Hot_Buttered_Soul", + "King of the Delta Blues Singers": "King_of_the_Delta_Blues_Singers", + "Dookie": "Dookie", + "In the Aeroplane Over the Sea": "In_the_Aeroplane_Over_the_Sea", + "Fever to Tell": "Fever_to_Tell", + "Run-D.M.C.": "Run-D.M.C._(album)", + "Moving Pictures": "Moving_Pictures_(Rush_album)", + "Mingus Ah Um": "Mingus_Ah_Um", + "(Pronounced 'Lĕh-'nérd 'Skin-'nérd)": "(Pronounced_%27L%C4%95h-%27n%C3%A9rd_%27Skin-%27n%C3%A9rd)", + "Currents": "Currents_(Tame_Impala_album)", + "Mezzanine": "Mezzanine_(album)", + "The Kinks Are the Village Green Preservation Society": "The_Kinks_Are_the_Village_Green_Preservation_Society", + "Rocket to Russia": "Rocket_to_Russia", + "Donuts": "Donuts_(album)", + "In Rainbows": "In_Rainbows", + "Young, Gifted and Black": "Young,_Gifted_and_Black", + "The Emancipation of Mimi": "The_Emancipation_of_Mimi", + "Surfer Rosa": "Surfer_Rosa", + "Kaleidoscope": "Kaleidoscope_(Kelis_album)", + "Proud Mary: The Best of Ike & Tina Turner": "Proud_Mary:_The_Best_of_Ike_%26_Tina_Turner", + "1989": "1989_(Taylor_Swift_album)", + "Diana": "Diana_(album)", + "Black Messiah": "Black_Messiah_(album)", + "Something/Anything?": "Something/Anything%3F", + "When We All Fall Asleep, Where Do We Go?": "When_We_All_Fall_Asleep,_Where_Do_We_Go%3F", + "The Raincoats": "The_Raincoats_(album)", + "Brian Wilson Presents Smile": "Brian_Wilson_Presents_Smile", + "Beauty and the Beat": "Beauty_and_the_Beat_(The_Go-Go%27s_album)", + "Blondie": "Blondie_(album)", + "Expensive Shit": "Expensive_Shit", + "Supreme Clientele": "Supreme_Clientele", + "Rapture": "Rapture_(Anita_Baker_album)", + "Nuggets: Original Artyfacts from the First Psychedelic Era, 1965–1968": "Nuggets:_Original_Artyfacts_from_the_First_Psychedelic_Era,_1965%E2%80%931968", + "69 Love Songs": "69_Love_Songs", + "Everybody Knows This Is Nowhere": "Everybody_Knows_This_Is_Nowhere", + "Ace of Spades": "Ace_of_Spades_(Mot%C3%B6rhead_album)", + "Workingman's Dead": "Workingman%27s_Dead", + "Wild Honey": "Wild_Honey_(album)", + "Love and Theft": "Love_and_Theft_(Bob_Dylan_album)", + "Going to a Go-Go": "Going_to_a_Go-Go", + "Cosmo's Factory": "Cosmo%27s_Factory", + "Risqué": "Risqu%C3%A9_(album)", + "Look-Ka Py Py": "Look-Ka_Py_Py", + "Things Fall Apart": "Things_Fall_Apart_(album)", + "The Shape of Jazz to Come": "The_Shape_of_Jazz_to_Come", + "Brothers in Arms": "Brothers_in_Arms_(album)", + "Chief": "Chief_(album)", + "That's the Way of the World": "That%27s_the_Way_of_the_World", + "Arular": "Arular", + "Let's Get It On": "Let%27s_Get_It_On", + "I Can Hear the Heart Beating as One": "I_Can_Hear_the_Heart_Beating_as_One", + "Odelay": "Odelay", + "Paul Simon": "Paul_Simon_(album)", + "Lucinda Williams": "Lucinda_Williams_(album)", + "Call Me": "Call_Me_(Al_Green_album)", + "New Day Rising": "New_Day_Rising", + "Reach Out": "Reach_Out_(Four_Tops_album)", + "Un Verano Sin Ti": "Un_Verano_Sin_Ti", + "How Will the Wolf Survive?": "How_Will_the_Wolf_Survive%3F", + "Confessions": "Confessions_(Usher_album)", + "Sound of Silver": "Sound_of_Silver", + "Crooked Rain, Crooked Rain": "Crooked_Rain,_Crooked_Rain", + "Actually": "Actually", + "All Eyez on Me": "All_Eyez_on_Me", + "Demon Days": "Demon_Days", + "Parklife": "Parklife", + "Sex Machine": "Sex_Machine_(album)", + "Coal Miner's Daughter": "Coal_Miner%27s_Daughter_(album)", + "Blackout": "Blackout_(Britney_Spears_album)", + "Beauty Behind the Madness": "Beauty_Behind_the_Madness", + "Scary Monsters (and Super Creeps)": "Scary_Monsters_(and_Super_Creeps)", + "Extraordinary Machine": "Extraordinary_Machine", + "Close to the Edge": "Close_to_the_Edge", + "Journey in Satchidananda": "Journey_in_Satchidananda", + "X 100pre": "X_100pre", + "Complete & Unbelievable: The Otis Redding Dictionary of Soul": "Complete_%26_Unbelievable:_The_Otis_Redding_Dictionary_of_Soul", + "Elephant": "Elephant_(album)", + "Ram": "Ram_(album)", + "First Take": "First_Take_(album)", + "Pretty Hate Machine": "Pretty_Hate_Machine", + "Ege Bamyası": "Ege_Bamyas%C4%B1", + "Al Green's Greatest Hits": "Al_Green%27s_Greatest_Hits", + "I Do Not Want What I Haven't Got": "I_Do_Not_Want_What_I_Haven%27t_Got", + "Southeastern": "Southeastern_(album)", + "Man on the Moon: The End of Day": "Man_on_the_Moon:_The_End_of_Day", + "Melodrama": "Melodrama_(Lorde_album)", + "For Emma, Forever Ago": "For_Emma,_Forever_Ago", + "The Gilded Palace of Sin": "The_Gilded_Palace_of_Sin", + "Eli and the Thirteenth Confession": "Eli_and_the_Thirteenth_Confession", + "3 + 3": "3_%2B_3", + "The Best of the Classic Years": "The_Best_of_the_Classic_Years", + "BLACKsummers'night": "BLACKsummers%27night", + "Some Girls": "Some_Girls", + "Clandestino": "Clandestino", + "400 Degreez": "400_Degreez", + "Surrealistic Pillow": "Surrealistic_Pillow", + "Ctrl": "Ctrl_(SZA_album)", + "Barrio Fino": "Barrio_Fino", + "#1 Record": "Number_1_Record", + "Sheryl Crow": "Sheryl_Crow_(album)", + "Kimono My House": "Kimono_My_House", + "Moanin' in the Moonlight": "Moanin%27_in_the_Moonlight", + "Something Else by the Kinks": "Something_Else_by_the_Kinks", + "Amor Prohibido": "Amor_Prohibido", + "The Weight of These Wings": "The_Weight_of_These_Wings", + "If You're Feeling Sinister": "If_You%27re_Feeling_Sinister", + "Bizarre Ride II the Pharcyde": "Bizarre_Ride_II_the_Pharcyde", + "The Anthology: 1947–1972": "The_Anthology:_1947%E2%80%931972", + "Born This Way": "Born_This_Way_(album)", + "I Want to See the Bright Lights Tonight": "I_Want_to_See_the_Bright_Lights_Tonight", + "Continuum": "Continuum_(John_Mayer_album)", + "Damaged": "Damaged_(Black_Flag_album)", + "The Stooges": "The_Stooges_(album)", + "Back to Mono (1958–1969)": "Back_to_Mono_(1958%E2%80%931969)", + "Heart Like a Wheel": "Heart_Like_a_Wheel", + "Harry's House": "Harry%27s_House", + "Nick of Time": "Nick_of_Time_(album)", + "Here, My Dear": "Here,_My_Dear", + "Presenting the Fabulous Ronettes Featuring Veronica": "Presenting_the_Fabulous_Ronettes_Featuring_Veronica", + "II": "II_(Boyz_II_Men_album)", + "¿Dónde Están los Ladrones?": "D%C3%B3nde_Est%C3%A1n_los_Ladrones%3F", + "The Indestructible Beat of Soweto": "The_Indestructible_Beat_of_Soweto", + "Suicide": "Suicide_(1977_album)", + "Ask Rufus": "Ask_Rufus", + "Funeral": "Funeral_(Arcade_Fire_album)" +} \ No newline at end of file