"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;