pronoun-monster/app.js
2023-03-15 00:13:40 -05:00

68 lines
2.3 KiB
JavaScript

import express from 'express'
import { engine } from 'express-handlebars'
import fetchData from './data.js'
const app = express()
const data = fetchData()
app.engine('handlebars', engine())
app.set('view engine', 'handlebars')
app.set('views', './src/views')
app.use(express.static('dist'))
const siteName = "Pronoun Monster"
const pronounsToDisplayOnHome = 6
function constructLexicon(nominative, accusative, pronominalPossessive, predicativePossessive, reflexive) {
return {
nominative: { name: "Nominative", value: nominative},
accusative: { name: "Accusative", value: accusative},
pronominalPossessive: { name: "Pronominal Possessive", value: pronominalPossessive},
predicativePossessive: { name: "Predicative Possessive", value: predicativePossessive},
reflexive: { name: "Reflexive", value: reflexive}
}
}
app.get('/', (req, res) => {
const pageTitle = siteName;
const pronounListLimited = data.map(pronounObject => Object.values(pronounObject).join('/')).slice(pronounsToDisplayOnHome)
res.render('home', { siteName, pageTitle, pronounList: pronounListLimited } )
})
app.get('/list', (req, res) => {
const pageTitle = "List";
const pronounList = data.map(pronounObject => Object.values(pronounObject).join('/'))
res.render('list', { siteName, pageTitle, pronounList } )
})
app.get('/:nominative/:accusative/:predicative_possessive/:reflexive', (req, res) => {
const {
nominative,
accusative,
predicative_possessive: predicativePossessive,
reflexive,
} = req.params
const lexicon = constructLexicon(nominative, accusative, accusative, predicativePossessive, reflexive);
const pageTitle = Object.values(lexicon).map(entry => entry.value).join("/") + " - " + siteName;
res.render('individual', { siteName, pageTitle, lexicon })
})
app.get('/:nominative/:accusative/:pronominal_possessive/:predicative_possessive/:reflexive', (req, res) => {
const {
nominative,
accusative,
pronominal_possessive: pronominalPossessive,
predicative_possessive: predicativePossessive,
reflexive,
} = req.params
const lexicon = constructLexicon(nominative, accusative, pronominalPossessive, predicativePossessive, reflexive);
const pageTitle = Object.values(lexicon).map(entry => entry.value).join("/") + " - " + siteName;
res.render('individual', { siteName, pageTitle, lexicon })
})
app.listen(3000)