|
56 | 56 | background: white; |
57 | 57 | } |
58 | 58 |
|
59 | | - .card-back { |
60 | | - transform: rotateY(180deg); |
| 59 | + .card-back p.year { |
| 60 | + font-size: 24px; |
| 61 | + margin-top: 8px; |
61 | 62 | } |
62 | 63 |
|
63 | 64 | .hidden { |
|
176 | 177 | const card = document.createElement('div'); |
177 | 178 | card.className = 'card'; |
178 | 179 |
|
179 | | - // Create the inner structure first |
180 | 180 | const cardInner = document.createElement('div'); |
181 | 181 | cardInner.className = 'card-inner'; |
182 | 182 |
|
|
190 | 190 | <div class="p-4"> |
191 | 191 | <h3 class="text-xl font-bold">${track.name}</h3> |
192 | 192 | <p class="text-gray-600">${track.artist}</p> |
193 | | - <p class="text-gray-500">${track.year}</p> |
| 193 | + <p class="text-gray-500 year">${track.year}</p> |
194 | 194 | </div> |
195 | 195 | `; |
196 | 196 |
|
197 | | - // Assemble the card |
198 | 197 | cardInner.appendChild(cardFront); |
199 | 198 | cardInner.appendChild(cardBack); |
200 | 199 | card.appendChild(cardInner); |
201 | 200 |
|
202 | | - // Generate QR code after the element is in the DOM |
203 | | - setTimeout(() => { |
204 | | - new QRCode(cardFront, { |
205 | | - text: `https://www.gptgames.dev/tools/spotify_test.html?track=${track.id}`, |
206 | | - width: 200, |
207 | | - height: 200 |
208 | | - }); |
209 | | - }, 0); |
| 201 | + // Create QR code with larger size |
| 202 | + new QRCode(cardFront, { |
| 203 | + text: `https://www.gptgames.dev/tools/spotify_test.html?track=${track.id}`, |
| 204 | + width: 220, |
| 205 | + height: 220, |
| 206 | + colorDark: "#000000", |
| 207 | + colorLight: "#ffffff", |
| 208 | + }); |
210 | 209 |
|
211 | 210 | return card; |
212 | 211 | } |
213 | 212 |
|
| 213 | + |
214 | 214 | async function createQRCodesFromPlaylist() { |
215 | 215 | const input = prompt("Enter Spotify playlist URL:"); |
| 216 | + const maxTracks = 20; // Limit to 20 tracks |
| 217 | + |
216 | 218 | if (!input) return; |
217 | 219 |
|
218 | 220 | try { |
219 | 221 | const tracks = await getPlaylistTracks(input); |
220 | | - |
221 | 222 | if (tracks.length === 0) { |
222 | 223 | throw new Error('No valid tracks found in playlist'); |
223 | 224 | } |
224 | 225 |
|
225 | 226 | const printArea = document.getElementById('printArea'); |
226 | 227 | printArea.innerHTML = ''; |
227 | 228 |
|
228 | | - tracks.forEach(track => { |
| 229 | + // Take only the first 20 tracks |
| 230 | + tracks.slice(0, maxTracks).forEach(track => { |
229 | 231 | printArea.appendChild(createQRCard(track)); |
230 | 232 | }); |
231 | 233 |
|
232 | | - window.print(); |
| 234 | + // Add a small delay before printing to ensure QR codes are generated |
| 235 | + setTimeout(() => { |
| 236 | + window.print(); |
| 237 | + }, 500); |
| 238 | + |
233 | 239 | } catch (error) { |
234 | 240 | alert('Error processing tracks: ' + error.message); |
235 | 241 | console.error('Detailed error:', error); |
|
0 commit comments