113 lines
2.7 KiB
JavaScript
113 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);
|