const copyToClipboard = () => if (!currentQuote) return; navigator.clipboard.writeText( "$currentQuote.text" — Pavel Florensky$currentQuote.source ? , $currentQuote.source : '' ); setCopied(true); setTimeout(() => setCopied(false), 2000); ;
const filteredQuotes = category === 'All' ? florenskyQuotes : florenskyQuotes.filter(q => q.category === category);
function handleCategoryChange(e) currentCategory = e.target.value; const filtered = getFilteredQuotes(); if (filtered.length > 0) updateQuoteDisplay(filtered[0]); else quoteTextEl.textContent = "No quotes in this category.";
<div style=styles.quoteCard> <p style=styles.quoteText>“currentQuote.text”</p> <p style=styles.author>— Pavel Florensky</p> currentQuote.year) && ( <p style=styles.meta> currentQuote.source && `📖 $currentQuote.source` currentQuote.year && ` • $currentQuote.year` </p> ) <div style=styles.actions> <button onClick=copyToClipboard style=styles.actionButton> copied ? '✓ Copied' : '📋 Copy' </button> <button onClick=() => window.open(`https://twitter.com/intent/tweet?text=$encodeURIComponent(`"$currentQuote.text" — Pavel Florensky`)`, '_blank') style=styles.actionButton> 🐦 Share </button> </div> </div> </div> ); ; pavel florensky quotes
let currentQuote = quotes[0]; let currentCategory = "All";
;
function handleRandom() const newQuote = getRandomQuoteFromFiltered(); if (newQuote) updateQuoteDisplay(newQuote); const copyToClipboard = () => if (
function copyQuote() const textToCopy = "$currentQuote.text" — Pavel Florensky$currentQuote.source ? , $currentQuote.source : '' ; navigator.clipboard.writeText(textToCopy); copyMsgSpan.textContent = '✓ Copied!'; setTimeout(() => copyMsgSpan.textContent = ''; , 2000);
function shareOnTwitter() const tweetText = "$currentQuote.text" — Pavel Florensky ; window.open( https://twitter.com/intent/tweet?text=$encodeURIComponent(tweetText) , '_blank');
if (!currentQuote) return <div>No quotes available in this category.</div>; '✓ Copied' : '📋 Copy' <
function getRandomQuoteFromFiltered() const filtered = getFilteredQuotes(); if (filtered.length === 0) return null; const randomIndex = Math.floor(Math.random() * filtered.length); return filtered[randomIndex];
const categories = ['All', ...new Set(florenskyQuotes.map(q => q.category))];
, [category]);
useEffect(() => if (filteredQuotes.length > 0) setCurrentQuote(filteredQuotes[0]);
const categorySelect = document.getElementById('categorySelect'); const randomBtn = document.getElementById('randomBtn'); const quoteTextEl = document.getElementById('quoteText'); const quoteAuthor = document.getElementById('quoteAuthor'); const quoteMeta = document.getElementById('quoteMeta'); const copyBtn = document.getElementById('copyBtn'); const shareBtn = document.getElementById('shareBtn'); const copyMsgSpan = document.getElementById('copyMsg');