72 lines
1.6 KiB
JavaScript
72 lines
1.6 KiB
JavaScript
"use strict";
|
|
|
|
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();
|
|
|
|
/* GET home page. */
|
|
router.get("/", function (req, res) {
|
|
let cards = require("../lib/cards.json"),
|
|
rand_card_num = Math.floor(
|
|
Math.random() * Math.floor(cards.length - 1)
|
|
);
|
|
|
|
res.render("index", {
|
|
title: "Welcome",
|
|
query: req.query || {},
|
|
card: cards[rand_card_num],
|
|
random_num: rand_card_num,
|
|
});
|
|
});
|
|
|
|
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 });
|
|
}
|
|
});
|
|
|
|
router.get("/cards", function (req, res) {
|
|
res.redirect("/cards/all");
|
|
});
|
|
|
|
module.exports = router;
|