<!-- Custom text input --> <label>✏️ Your message:</label> <textarea id="userMessage" rows="2" placeholder="Type any text...">The quick brown fox jumps over the lazy dog</textarea>
<script> // ---------- DEFAULT FONT PLAYLIST ---------- let defaultFonts = ["Roboto", "Open Sans", "Playfair Display", "Fira Code", "Pacifico", "Montserrat"]; let playlist = [...defaultFonts]; let currentIndex = 0; let intervalId = null; let isPlaying = false; font playlist script
// export/import function exportPlaylist() const dataStr = JSON.stringify( fonts: playlist, savedText: userMessageTextarea.value , null, 2); const blob = new Blob([dataStr], type: "application/json"); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = "fontPlaylist.json"; a.click(); URL.revokeObjectURL(url); !-- Custom text input -->
<!-- Playback controls --> <div class="playlist-panel"> <div class="playback-buttons"> <button id="prevBtn" title="Previous Font">⏮️ Prev</button> <button id="playBtn" class="btn-primary">▶️ Play</button> <button id="pauseBtn">⏸️ Pause</button> <button id="nextBtn" title="Next Font">⏭️ Next</button> <button id="darkModeBtn">🌙 Dark/Light</button> </div> <div class="counter" id="fontCounter">Font 1 of 6</div> </div> ✏️ Your message:<
function nextFont() if (!playlist.length) return; currentIndex = (currentIndex + 1) % playlist.length; updateDisplay(); if (isPlaying) stopAutoRotate(); startAutoRotate(); // restart timer to avoid skipping beat else updateDisplay();
// Add font function addFont() let newFont = newFontNameInput.value.trim(); if (newFont === "") return alert("Enter a font name"); // simple check: avoid duplicate (case-insensitive) if (playlist.some(f => f.toLowerCase() === newFont.toLowerCase())) alert("Font already in playlist"); return; playlist.push(newFont); renderPlaylistUI(); if (playlist.length === 1) currentIndex = 0; updateDisplay(); newFontNameInput.value = ""; if (isPlaying) stopAutoRotate(); startAutoRotate();