2015-05-21 11:07:40 -07:00
|
|
|
var R = require('ramda'),
|
2015-05-20 22:15:28 -04:00
|
|
|
debug = require('debug')('freecc:cntr:challengeMap'),
|
2015-05-21 11:07:40 -07:00
|
|
|
User = require('../models/User'),
|
|
|
|
resources = require('./resources');
|
2015-04-03 20:05:53 -07:00
|
|
|
|
2015-05-20 13:07:41 -04:00
|
|
|
var challengeTypes = {
|
|
|
|
'HTML_CSS_JQ': 0,
|
|
|
|
'JAVASCRIPT': 1,
|
|
|
|
'VIDEO': 2,
|
|
|
|
'ZIPLINE': 3,
|
|
|
|
'BASEJUMP': 4,
|
|
|
|
'BONFIRE': 5
|
|
|
|
};
|
|
|
|
|
2015-04-03 20:05:53 -07:00
|
|
|
module.exports = {
|
2015-05-21 11:07:40 -07:00
|
|
|
challengeMap: function challengeMap(req, res, next) {
|
2015-04-03 20:05:53 -07:00
|
|
|
var completedList = [];
|
|
|
|
|
|
|
|
if (req.user) {
|
2015-05-20 21:50:31 -04:00
|
|
|
completedList = req.user.completedChallenges;
|
2015-04-03 20:05:53 -07:00
|
|
|
}
|
|
|
|
|
2015-05-20 13:07:41 -04:00
|
|
|
var noDuplicatedChallenges = R.uniq(completedList);
|
|
|
|
|
2015-05-20 21:50:31 -04:00
|
|
|
|
2015-05-20 13:07:41 -04:00
|
|
|
var challengeList = resources.allChallenges();
|
|
|
|
var completedChallengeList = noDuplicatedChallenges
|
|
|
|
.map(function(challenge) {
|
|
|
|
return challenge._id;
|
|
|
|
});
|
|
|
|
|
|
|
|
var bonfireList = challengeList
|
|
|
|
.filter(function(challenge) {
|
|
|
|
return challenge.challengeType === challengeTypes.BONFIRE;
|
|
|
|
})
|
|
|
|
.map(function(bonfire) {
|
|
|
|
return ({
|
|
|
|
'_id': bonfire._id,
|
|
|
|
'name': bonfire.name
|
|
|
|
});
|
|
|
|
});
|
2015-04-03 20:05:53 -07:00
|
|
|
|
2015-05-20 13:07:41 -04:00
|
|
|
var waypoints = challengeList.filter(function(challenge) {
|
|
|
|
if (challenge.challengeType === challengeTypes.VIDEO
|
|
|
|
|| challenge.challengeType === challengeTypes.HTML_CSS_JQ
|
|
|
|
|| challenge.challengeType === challengeTypes.JAVASCRIPT) {
|
|
|
|
return challenge;
|
|
|
|
}
|
|
|
|
}).map(function(waypoint) {
|
|
|
|
return ({
|
|
|
|
'_id': waypoint._id,
|
|
|
|
'name': waypoint.name
|
|
|
|
});
|
2015-04-03 20:05:53 -07:00
|
|
|
});
|
2015-05-20 13:07:41 -04:00
|
|
|
|
|
|
|
var ziplines = challengeList.filter(function(challenge) {
|
|
|
|
if (challenge.challengeType === challengeTypes.ZIPLINE) {
|
|
|
|
return challenge;
|
|
|
|
}
|
|
|
|
}).map(function(zipline) {
|
|
|
|
return ({
|
|
|
|
'_id': zipline._id,
|
|
|
|
'name': zipline.name
|
|
|
|
});
|
2015-04-03 20:05:53 -07:00
|
|
|
});
|
2015-05-20 13:07:41 -04:00
|
|
|
|
|
|
|
var basejumps = challengeList.filter(function(challenge) {
|
|
|
|
if (challenge.challengeType === challengeTypes.BASEJUMP) {
|
|
|
|
return challenge;
|
|
|
|
}
|
|
|
|
}).map(function(basejump) {
|
|
|
|
return ({
|
|
|
|
'_id': basejump._id,
|
|
|
|
'name': basejump.name
|
|
|
|
});
|
2015-04-03 20:05:53 -07:00
|
|
|
});
|
|
|
|
|
2015-04-23 23:46:58 -07:00
|
|
|
function numberWithCommas(x) {
|
2015-05-21 11:07:40 -07:00
|
|
|
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
2015-04-23 23:46:58 -07:00
|
|
|
}
|
|
|
|
|
2015-05-21 11:07:40 -07:00
|
|
|
var date1 = new Date('10/15/2014');
|
2015-04-23 23:46:58 -07:00
|
|
|
var date2 = new Date();
|
|
|
|
var timeDiff = Math.abs(date2.getTime() - date1.getTime());
|
|
|
|
var daysRunning = Math.ceil(timeDiff / (1000 * 3600 * 24));
|
|
|
|
|
|
|
|
User.count({}, function (err, camperCount) {
|
|
|
|
if (err) {
|
|
|
|
debug('User err: ', err);
|
|
|
|
return next(err);
|
|
|
|
}
|
|
|
|
res.render('challengeMap/show', {
|
|
|
|
daysRunning: daysRunning,
|
|
|
|
camperCount: numberWithCommas(camperCount),
|
|
|
|
title: "A map of all Free Code Camp's Challenges",
|
|
|
|
bonfires: bonfireList,
|
|
|
|
waypoints: waypoints,
|
|
|
|
ziplines: ziplines,
|
|
|
|
basejumps: basejumps,
|
2015-05-20 13:07:41 -04:00
|
|
|
completedChallengeList: completedChallengeList
|
2015-04-23 23:46:58 -07:00
|
|
|
});
|
2015-04-03 20:05:53 -07:00
|
|
|
});
|
|
|
|
}
|
|
|
|
};
|