codex-mythica/routes/index.js

72 lines
1.6 KiB
JavaScript
Raw Permalink Normal View History

2024-10-15 20:37:26 +00:00
"use strict";
2018-01-08 00:12:11 +00:00
2024-10-15 20:37:26 +00:00
const express = require("express"),
sortByName = function (list) {
let coll_opts = {
sensitivity: "accent",
numeric: true,
caseFirst: "upper",
},
field = "name",
coll = new Intl.Collator({}, coll_opts);
list.sort((a, b) => {
if (a[field] && b[field]) {
return coll.compare(a[field], b[field]);
}
return 1;
});
return list;
};
let router = express.Router();
2018-01-08 00:12:11 +00:00
/* GET home page. */
2024-10-15 20:37:26 +00:00
router.get("/", function (req, res) {
let cards = require("../lib/cards.json"),
rand_card_num = Math.floor(
Math.random() * Math.floor(cards.length - 1)
);
2024-10-15 20:37:26 +00:00
res.render("index", {
title: "Welcome",
query: req.query || {},
card: cards[rand_card_num],
random_num: rand_card_num,
});
2018-01-08 00:12:11 +00:00
});
2024-10-15 20:37:26 +00:00
router.get("/cards/:card_num", (req, res) => {
req.params.card_num = req.params.card_num || "all";
let cards = require("../lib/cards.json"),
links = require("../lib/links.json"),
filtered = cards.filter(
(card) =>
card.num
.toLowerCase()
.indexOf(req.params.card_num.toLowerCase()) > -1 ||
req.params.card_num.toLowerCase() === "all"
);
if (filtered.length === 1) {
let card = filtered[0];
if (
links &&
card.hasOwnProperty("name") &&
links.hasOwnProperty(card.name)
) {
Object.assign(card, links[card.name]);
}
res.render("single", {
title: card.name + " (" + card.num + ")",
card: card,
});
} else {
filtered = sortByName(filtered);
res.render("all", { title: "All Cards", cards: filtered });
}
2018-01-08 00:12:11 +00:00
});
2024-10-15 20:37:26 +00:00
router.get("/cards", function (req, res) {
res.redirect("/cards/all");
2018-01-08 00:12:11 +00:00
});
module.exports = router;