document.addEventListener('DOMContentLoaded', () => { fetchFeeds(); fetchItems(); // Default to fetching recent items }); async function fetchFeeds() { try { const response = await fetch('/api/feed/'); if (!response.ok) throw new Error('Failed to fetch feeds'); const feeds = await response.json(); renderFeeds(feeds); } catch (err) { console.error(err); document.getElementById('feeds-nav').innerHTML = '
Error loading feeds
'; } } async function fetchItems(feedId = null) { const listEl = document.getElementById('entries-list'); listEl.innerHTML = '
Loading items...
'; let url = '/api/stream/'; if (feedId) { url += `?feed_id=${feedId}`; } try { const response = await fetch(url); if (!response.ok) throw new Error('Failed to fetch items'); const items = await response.json(); renderItems(items); } catch (err) { console.error(err); listEl.innerHTML = '
Error loading items
'; } } function renderFeeds(feeds) { const nav = document.getElementById('feeds-nav'); nav.innerHTML = ''; const allLink = document.createElement('div'); allLink.className = 'feed-item'; allLink.textContent = 'All Items'; allLink.onclick = () => { document.getElementById('feed-title').textContent = 'All Items'; fetchItems(); }; nav.appendChild(allLink); feeds.forEach(feed => { const div = document.createElement('div'); div.className = 'feed-item'; div.textContent = feed.title || feed.url; div.title = feed.url; div.onclick = () => { document.querySelectorAll('.feed-item').forEach(el => el.classList.remove('active')); div.classList.add('active'); document.getElementById('feed-title').textContent = feed.title; fetchItems(feed.id); }; nav.appendChild(div); }); } function renderItems(items) { const list = document.getElementById('entries-list'); list.innerHTML = ''; if (items.length === 0) { list.innerHTML = '
No items found.
'; return; } items.forEach(item => { const article = document.createElement('article'); article.className = 'entry'; const date = new Date(item.published_at || item.created_at).toLocaleString(); article.innerHTML = `
${item.title}
${item.feed ? `${item.feed.title} • ` : ''} ${date}
${item.description || ''}
`; list.appendChild(article); }); }