Files
einundzwanzig.space/tasks/generate_pages.js
2021-09-18 14:20:35 +02:00

40 lines
2.4 KiB
JavaScript

const pug = require('pug')
const { mkdirSync, writeFileSync } = require('fs')
const { dirname, resolve } = require('path')
const config = require('../pug.config')
const site = require('../generated/site-data.json')
const episodes = require('../generated/episodes.json')
const spenden = require('../generated/spenden.json')
const team = require('../content/team.json')
const crew = require('../content/crew.json')
const meetups = require('../content/meetups.json')
const soundboard = require('../content/soundboard.json')
const renderPage = (template, out, data = {}) => {
const file = resolve(__dirname, '..', `src/${template}.pug`)
const options = Object.assign({}, config, { site }, data)
const rendered = pug.renderFile(file, options)
const dest = out === 'index' ? 'index.html' : `${out}/index.html`
const dst = resolve(__dirname, '..', 'dist', dest)
const dir = dirname(dst)
mkdirSync(dir, { recursive: true })
writeFileSync(dst, rendered)
}
renderPage('index', 'index', { navCurrent: 'index', currentEpisode: episodes[0] })
renderPage('podcast', 'podcast', { navCurrent: 'podcast', episodes: [...episodes] })
renderPage('team', 'team', { navCurrent: 'team', team, crew })
renderPage('meetups', 'meetups', { navCurrent: 'meetups', meetups })
renderPage('spenden', 'spenden', { navCurrent: 'spenden', spenden })
renderPage('media', 'media', { navCurrent: 'media' })
renderPage('soundboard', 'soundboard', { navCurrent: 'soundboard', soundboard })
renderPage('category', 'podcast/news', { navCurrent: 'podcast', category: 'news', categoryName: 'News', episodes: episodes.filter(e => e.category === 'news') })
renderPage('category', 'podcast/interviews', { navCurrent: 'podcast', category: 'interview', categoryName: 'Interviews', episodes: episodes.filter(e => e.category === 'interview') })
renderPage('category', 'podcast/lesestunde', { navCurrent: 'podcast', category: 'lesestunde', categoryName: 'Lesestunde', episodes: episodes.filter(e => e.category === 'lesestunde') })
renderPage('category', 'podcast/der-weg', { navCurrent: 'podcast', category: 'der-weg', categoryName: 'Der Weg', episodes: episodes.filter(e => e.category === 'der-weg') })
renderPage('category', 'podcast/verschiedenes', { navCurrent: 'podcast', category: 'verschiedenes', categoryName: 'Verschiedenes', episodes: episodes.filter(e => e.category === 'verschiedenes') })
episodes.forEach(episode => renderPage('episode', `podcast/${episode.slug}`, { navCurrent: 'podcast', episode }))