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")); app.use(express.static("public")); 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(0, 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);