Make all site content editable from admin; add per-page content blocks

This commit is contained in:
nmemmert
2026-05-05 16:17:23 -04:00
parent 79eb72635e
commit 7c02062663
11 changed files with 1762 additions and 2502 deletions
+28 -13
View File
@@ -2003,7 +2003,7 @@ function extractCdata(raw) {
return cdata ? cdata[1].trim() : raw.trim()
}
function parseRssItems(xml, limit = 6) {
function parseRssItems(xml, limit = Infinity) {
const items = []
const itemRegex = /<item>([\s\S]*?)<\/item>/g
let match
@@ -2034,24 +2034,39 @@ function parseRssItems(xml, limit = 6) {
return items
}
app.get('/api/episodes', async (_req, res) => {
async function fetchAllEpisodes() {
const now = Date.now()
if (episodesCache && (now - episodesCacheAt) < EPISODES_CACHE_TTL) {
return res.json({ episodes: episodesCache })
return episodesCache
}
const controller = new AbortController()
const timeout = setTimeout(() => controller.abort(), 8000)
const response = await fetch(RSS_FEED_URL, { signal: controller.signal })
clearTimeout(timeout)
if (!response.ok) throw new Error(`RSS fetch failed: ${response.status}`)
const xml = await response.text()
const episodes = parseRssItems(xml)
episodesCache = episodes
episodesCacheAt = now
return episodes
}
app.get('/api/episodes', async (_req, res) => {
try {
const controller = new AbortController()
const timeout = setTimeout(() => controller.abort(), 8000)
const response = await fetch(RSS_FEED_URL, { signal: controller.signal })
clearTimeout(timeout)
if (!response.ok) throw new Error(`RSS fetch failed: ${response.status}`)
const xml = await response.text()
const episodes = parseRssItems(xml, 6)
episodesCache = episodes
episodesCacheAt = now
res.json({ episodes })
const episodes = await fetchAllEpisodes()
res.json({ episodes: episodes.slice(0, 6) })
} catch (err) {
console.error('[episodes] RSS fetch error:', err.message)
res.json({ episodes: (episodesCache ?? []).slice(0, 6) })
}
})
app.get('/api/episodes/all', async (_req, res) => {
try {
const episodes = await fetchAllEpisodes()
res.json({ episodes })
} catch (err) {
console.error('[episodes/all] RSS fetch error:', err.message)
res.json({ episodes: episodesCache ?? [] })
}
})