53 lines
1.4 KiB
JavaScript
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;
|