// Load news on page load document.addEventListener('DOMContentLoaded', () => { loadNews(); loadStats(); }); async function loadNews() { const newsGrid = document.getElementById('newsGrid'); newsGrid.innerHTML = '
${article.summary || 'No summary available.'}
Read more → `; newsGrid.appendChild(card); }); } async function loadStats() { try { const response = await fetch('/api/stats'); const data = await response.json(); if (data.subscribers !== undefined) { document.getElementById('subscriberCount').textContent = data.subscribers.toLocaleString(); } } catch (error) { console.error('Error loading stats:', error); } } async function subscribe() { const emailInput = document.getElementById('emailInput'); const subscribeBtn = document.getElementById('subscribeBtn'); const formMessage = document.getElementById('formMessage'); const email = emailInput.value.trim(); if (!email || !email.includes('@')) { formMessage.textContent = 'Please enter a valid email address'; formMessage.className = 'form-message error'; return; } subscribeBtn.disabled = true; subscribeBtn.textContent = 'Subscribing...'; formMessage.textContent = ''; try { const response = await fetch('/api/subscribe', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: email }) }); const data = await response.json(); if (response.ok) { formMessage.textContent = data.message || 'Successfully subscribed! Check your email for confirmation.'; formMessage.className = 'form-message success'; emailInput.value = ''; loadStats(); // Refresh stats } else { formMessage.textContent = data.error || 'Failed to subscribe. Please try again.'; formMessage.className = 'form-message error'; } } catch (error) { formMessage.textContent = 'Network error. Please try again later.'; formMessage.className = 'form-message error'; } finally { subscribeBtn.disabled = false; subscribeBtn.textContent = 'Subscribe Free'; } } // Allow Enter key to submit document.getElementById('emailInput').addEventListener('keypress', (e) => { if (e.key === 'Enter') { subscribe(); } }); function showUnsubscribe() { document.getElementById('unsubscribeModal').style.display = 'block'; } function closeUnsubscribe() { document.getElementById('unsubscribeModal').style.display = 'none'; document.getElementById('unsubscribeEmail').value = ''; document.getElementById('unsubscribeMessage').textContent = ''; } async function unsubscribe() { const emailInput = document.getElementById('unsubscribeEmail'); const unsubscribeMessage = document.getElementById('unsubscribeMessage'); const email = emailInput.value.trim(); if (!email || !email.includes('@')) { unsubscribeMessage.textContent = 'Please enter a valid email address'; unsubscribeMessage.className = 'form-message error'; return; } try { const response = await fetch('/api/unsubscribe', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: email }) }); const data = await response.json(); if (response.ok) { unsubscribeMessage.textContent = data.message || 'Successfully unsubscribed.'; unsubscribeMessage.className = 'form-message success'; emailInput.value = ''; setTimeout(() => { closeUnsubscribe(); loadStats(); }, 2000); } else { unsubscribeMessage.textContent = data.error || 'Failed to unsubscribe. Please try again.'; unsubscribeMessage.className = 'form-message error'; } } catch (error) { unsubscribeMessage.textContent = 'Network error. Please try again later.'; unsubscribeMessage.className = 'form-message error'; } } // Close modal when clicking outside window.onclick = function(event) { const modal = document.getElementById('unsubscribeModal'); if (event.target === modal) { closeUnsubscribe(); } }