mirror of
https://github.com/Einundzwanzig-Podcast/einundzwanzig.space.git
synced 2025-12-11 15:26:50 +00:00
65 lines
3.4 KiB
JavaScript
65 lines
3.4 KiB
JavaScript
const pug = require('pug')
|
|
const { resolve } = require('path')
|
|
const { write } = require('../helpers')
|
|
const { slugify, participantsWithAliases, participantToId } = require('../helpers')
|
|
const config = require('../pug.config')
|
|
const site = require('../generated/site-data.json')
|
|
const episodes = require('../generated/episodes.json')
|
|
const spendenregister = require('../generated/spendenregister.json')
|
|
const spendenuebersicht = require('../content/spendenuebersicht.json').reverse()
|
|
const participantsRaw = require('../content/participants.json')
|
|
const shops = require('../content/shops.json')
|
|
const soundboard = require('../content/soundboard.json')
|
|
const adventskalender = require('../content/adventskalender-2022.json')
|
|
|
|
const categories = {
|
|
'news': 'News',
|
|
'interview': 'Interviews',
|
|
'lesestunde': 'Lesestunde',
|
|
'der-weg': 'Der Weg',
|
|
'on-tour': 'On Tour',
|
|
'nostrtalk': 'NostrTalk',
|
|
'filterfrei': 'FilterFrei',
|
|
'verschiedenes': 'Verschiedenes'
|
|
}
|
|
|
|
const participants = participantsWithAliases(participantsRaw)
|
|
|
|
const changedFile = process.argv.length > 2 && process.argv[2]
|
|
|
|
const renderPage = (template, out, data = {}) => {
|
|
const templateFile = `src/${template}.pug`
|
|
const needsRender = !changedFile || changedFile === templateFile || changedFile.startsWith('src/includes') || changedFile.endsWith('.js') || changedFile.endsWith('.json')
|
|
if (!needsRender) return
|
|
|
|
const dest = out === 'index' ? 'index.html' : `${out}/index.html`
|
|
const pagePath = out === 'index' ? '/' : `/${out}/`
|
|
const file = resolve(__dirname, '..', templateFile)
|
|
const options = Object.assign({}, config, { site }, data, { pagePath })
|
|
const rendered = pug.renderFile(file, options)
|
|
|
|
write(`dist/${dest}`, rendered)
|
|
}
|
|
|
|
renderPage('index', 'index', { navCurrent: 'index', currentEpisode: episodes[0], participants })
|
|
renderPage('podcast', 'podcast', { navCurrent: 'podcast', episodes: [...episodes], participants })
|
|
renderPage('gesundes-geld', 'gesundes-geld', { meetups: site.meetups, upcomingMeetups: site.upcomingMeetups })
|
|
renderPage('meetups', 'meetups', { navCurrent: 'meetups', meetups: site.meetups, upcomingMeetups: site.upcomingMeetups })
|
|
renderPage('spenden', 'spenden', { navCurrent: 'spenden', spendenregister, spendenuebersicht })
|
|
renderPage('media', 'media', { navCurrent: 'media' })
|
|
renderPage('soundboard', 'soundboard', { navCurrent: 'soundboard', soundboard })
|
|
renderPage('shops', 'shops', { navCurrent: 'shops', shops })
|
|
renderPage('verein', 'verein', { navCurrent: 'verein' })
|
|
renderPage('kontakt', 'kontakt', { navCurrent: 'kontakt' })
|
|
renderPage('datenschutz', 'datenschutz', { navCurrent: 'datenschutz' })
|
|
renderPage('adventskalender', 'adventskalender', { adventskalender })
|
|
|
|
episodes.forEach(episode => renderPage('episode', `podcast/${episode.slug}`, { navCurrent: 'podcast', episode, participants }))
|
|
Object.keys(categories).forEach(category => renderPage('category', `podcast/${slugify(categories[category])}`, { navCurrent: 'podcast', category, categoryName: categories[category], episodes: episodes.filter(e => e.category === category), participants }))
|
|
Object.keys(participantsRaw).forEach(id => {
|
|
const member = participantsRaw[id]
|
|
const aliases = (member.aliases || []).map(m => m.toLowerCase()).concat(member.name.toLowerCase())
|
|
const eps = episodes.filter(e => e.participants.find(p => [id, ...aliases].includes(participantToId(p))))
|
|
renderPage('member', `p/${slugify(id)}`, { navCurrent: 'podcast', member, episodes: eps, participants })
|
|
})
|