-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
88 lines (77 loc) · 2.4 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
var express = require('express'),
_ = require('underscore'),
app = express(),
inflection = require('inflection'),
nouns = require('./data/nouns.json'),
bgs = require('./data/backgrounds');
var randBool = () => Number(Math.random() > 0.5);
var randNoun = () => Math.floor(Math.random() * nouns.length);
var randBg = () => Math.floor(Math.random() * bgs.length);
var createPath = function() {
var values = [];
while (values.length < 2) {
values.push(randNoun());
values = _.uniq(values);
};
while (values.length < 6) {
values.push(randBool());
}
values.push(randBg());
if (Math.random() < 0.5) {
let secondNoun;
do {
secondNoun = randNoun();
} while (values.slice(0, 2).includes(secondNoun));
values.push(secondNoun, randBool(), randBool());
}
return values.map(function(val) { return (val + 256).toString(16); }).join(':');
};
/**
*
* @param {number} article
* @param {number} noun
* @param {number} plural
* @returns {string}
*/
var formatNoun = (article, noun, plural) => (article ? 'the ' : '') + inflection.titleize(plural ? inflection.pluralize(nouns[noun]) : nouns[noun]);
var getParams = function(namepath) {
var params,
indices = namepath.split(':').map(function(val) { return parseInt(val, 16) - 256; });
if (indices.length < 7) { return false; }
var [
subject,
object,
subjectPlural,
objectPlural,
subjectArticle,
objectArticle,
bg,
extraObject,
extraObjectPlural,
extraObjectArticle,
] = indices;
params = {
subject: formatNoun(subjectArticle, subject, subjectPlural),
object: formatNoun(objectArticle, object, objectPlural) + (extraObject ? ' and ' + formatNoun(extraObjectArticle, extraObject, extraObjectPlural) : ''),
bg: bgs[bg]
};
return params;
};
app.get('/', function(req, res) {
var namepath = createPath();
res.redirect('/' + namepath);
});
app.get('/:namepath', function(req,res, next) {
var nameParams = getParams(req.params.namepath);
if (!nameParams) { next(); }
res.render('index', { nameParams: nameParams });
});
app.locals.i = inflection;
app.set('port', (process.env.PORT || 5000));
app.set('views', './views');
app.set('view engine', 'pug');
app.use(express.static('public'));
app.listen(app.get('port'), function() {
console.log('Node app is running on port', app.get('port'));
});
exports = module.exports = app;