codex-mythica/routes/index.js
Eric Woodward 0f605db8fa ADDED card sorting.
ADDED pantheon to each card (duplicate of culture).
ADDED demo cards.
ADDED wikipedia links to most entries.
ADDED Lovecraft Wikia links to all Cthulhu cards.
UPDATED to 0.1.6.
2018-01-18 20:10:49 -05:00

53 lines
1.4 KiB
JavaScript

'use strict';
const
express = require('express'),
sortByName = function(list) {
let
coll_opts = {
sensitivity: 'accent',
numeric: true,
caseFirst: "upper"
},
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) {
res.render('index', { title: 'Welcome', query: (req.query || {}) });
});
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;