pronoun-monster/app.js
2023-03-16 00:34:58 -05:00

114 lines
2.7 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"));
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);