Update challengeMap display, more consistent dasherization

This commit is contained in:
terakilobyte
2015-05-25 16:02:25 -04:00
parent f9386d1291
commit fb3447c366
6 changed files with 54 additions and 29 deletions

View File

@ -135,7 +135,8 @@ exports.returnCurrentChallenge = function(req, res, next) {
} }
var nameString = req.user.currentChallenge.challengeName.trim() var nameString = req.user.currentChallenge.challengeName.trim()
.toLowerCase() .toLowerCase()
.replace(/\s/g, '-'); .replace(/\s/g, '-')
.replace(/[^a-z0-9\-]/gi, '');
req.user.save(function(err) { req.user.save(function(err) {
if (err) { if (err) {
return next(err); return next(err);
@ -147,7 +148,10 @@ exports.returnCurrentChallenge = function(req, res, next) {
exports.returnIndividualChallenge = function(req, res, next) { exports.returnIndividualChallenge = function(req, res, next) {
var dashedName = req.params.challengeName; var dashedName = req.params.challengeName;
var challengeName = dashedName.replace(/\-/g, ' '); var challengeName = dashedName.replace(/\-/g, ' ')
.split(' ')
.slice(1)
.join(' ');
Challenge.find({'name': new RegExp(challengeName, 'i')}, Challenge.find({'name': new RegExp(challengeName, 'i')},
function(err, challengeFromMongo) { function(err, challengeFromMongo) {
@ -164,7 +168,10 @@ exports.returnIndividualChallenge = function(req, res, next) {
} }
var challenge = challengeFromMongo.pop(); var challenge = challengeFromMongo.pop();
// Redirect to full name if the user only entered a partial // Redirect to full name if the user only entered a partial
var dashedNameFull = challenge.name.toLowerCase().replace(/\s/g, '-'); var dashedNameFull = challenge.name
.toLowerCase()
.replace(/\s/g, '-')
.replace(/[^a-z0-9\-]/gi, '');
if (dashedNameFull !== dashedName) { if (dashedNameFull !== dashedName) {
return res.redirect('../challenges/' + dashedNameFull); return res.redirect('../challenges/' + dashedNameFull);
} else { } else {

View File

@ -23,7 +23,7 @@ module.exports = {
var noDuplicatedChallenges = R.uniq(completedList); var noDuplicatedChallenges = R.uniq(completedList);
var challengeList = resources.allChallenges(); var challengeList = resources.getChallengeMapForDisplay();
var completedChallengeList = noDuplicatedChallenges var completedChallengeList = noDuplicatedChallenges
.map(function(challenge) { .map(function(challenge) {
return challenge._id; return challenge._id;

View File

@ -5,7 +5,8 @@ var R = require('ramda'),
exports.returnIndividualFieldGuide = function(req, res, next) { exports.returnIndividualFieldGuide = function(req, res, next) {
var dashedName = req.params.fieldGuideName; var dashedName = req.params.fieldGuideName;
var fieldGuideName = dashedName.replace(/\-/g, ' '); var fieldGuideName = dashedName.replace(/\-/g, ' ')
.replace(/[^a-z0-9\s]/gi, '');
if (req.user) { if (req.user) {
var completed = req.user.completedFieldGuides; var completed = req.user.completedFieldGuides;
@ -39,7 +40,9 @@ exports.returnIndividualFieldGuide = function(req, res, next) {
var fieldGuide = R.head(fieldGuideFromMongo); var fieldGuide = R.head(fieldGuideFromMongo);
var dashedNameFull = var dashedNameFull =
fieldGuide.name.toLowerCase().replace(/\s/g, '-').replace(/\?/g, ''); fieldGuide.name.toLowerCase()
.replace(/\s/g, '-')
.replace(/[^a-z0-9\-]/gi, '');
if (dashedNameFull !== dashedName) { if (dashedNameFull !== dashedName) {
return res.redirect('../field-guide/' + dashedNameFull); return res.redirect('../field-guide/' + dashedNameFull);
@ -68,7 +71,7 @@ exports.showAllFieldGuides = function(req, res) {
exports.returnNextFieldGuide = function(req, res, next) { exports.returnNextFieldGuide = function(req, res, next) {
if (!req.user) { if (!req.user) {
return res.redirect('/field-guide/how-do-i-use-this-guide?'); return res.redirect('/field-guide/how-do-i-use-this-guide');
} }
var displayedFieldGuides = var displayedFieldGuides =
@ -89,9 +92,11 @@ exports.returnNextFieldGuide = function(req, res, next) {
].join('') ].join('')
}); });
} }
return res.redirect('../field-guide/how-do-i-use-this-guide?'); return res.redirect('../field-guide/how-do-i-use-this-guide');
} }
var nameString = fieldGuide.name.toLowerCase().replace(/\s/g, '-'); var nameString = fieldGuide.name.toLowerCase()
.replace(/\s/g, '-')
.replace(/[^a-z0-9\-]/gi, '');
return res.redirect('../field-guide/' + nameString); return res.redirect('../field-guide/' + nameString);
}); });
}; };

View File

@ -28,7 +28,7 @@ var async = require('async'),
* Cached values * Cached values
*/ */
var allFieldGuideIds, allFieldGuideNames, allNonprofitNames, var allFieldGuideIds, allFieldGuideNames, allNonprofitNames,
challengeMap, challengeMapWithIds, challengeMap, challengeMapForDisplay, challengeMapWithIds,
challengeMapWithNames, allChallengeIds, allChallenges; challengeMapWithNames, allChallengeIds, allChallenges;
/** /**
@ -67,13 +67,24 @@ Array.zip = function(left, right, combinerFunction) {
}); });
challengeMap = _.cloneDeep(localChallengeMap); challengeMap = _.cloneDeep(localChallengeMap);
} }
//todo remove this debug
debug(challengeMap);
})(); })();
module.exports = { module.exports = {
getChallengeMapForDisplay: function() {
if (!challengeMapForDisplay) {
challengeMapForDisplay = {};
Object.keys(challengeMap).forEach(function(key) {
challengeMapForDisplay[key] = {
name: challengeMap[key].name,
challenges: challengeMap[key].challenges
}
});
}
return challengeMapForDisplay;
},
getChallengeMapWithIds: function() { getChallengeMapWithIds: function() {
if (!challengeMapWithIds) { if (!challengeMapWithIds) {
challengeMapWithIds = {}; challengeMapWithIds = {};

View File

@ -1,5 +1,5 @@
{ {
"name": "Waypoint: Basic HTML5 and CSS", "name": "Basic HTML5 and CSS",
"order" : 0.002, "order" : 0.002,
"challenges": [ "challenges": [
{ {

View File

@ -23,23 +23,25 @@ block content
span.text-primary #{daysRunning}   span.text-primary #{daysRunning}  
| days ago. | days ago.
.spacer .spacer
h3.negative-15 .negative-15
ol for challengeBlock in challengeList
for challenge in challengeList h3 #{challengeBlock.name}
if completedChallengeList.indexOf(challenge._id) > -1 ol
.row for challenge in challengeBlock.challenges
.hidden-xs.col-sm-3.col-md-2.text-primary.ion-checkmark-circled.padded-ionic-icon.text-center if completedChallengeList.indexOf(challenge._id) > -1
.col-xs-12.col-sm-9.col-md-10 .row
li.faded .hidden-xs.col-sm-3.col-md-2.text-primary.ion-checkmark-circled.padded-ionic-icon.text-center.large-p
a(href="/challenges/#{challenge.name}")= challenge.name .col-xs-12.col-sm-9.col-md-10
li.faded.large-p
a(href="/challenges/#{challenge.name}")= challenge.name
else else
.row .row
.hidden-xs.col-sm-3.col-md-2 .hidden-xs.col-sm-3.col-md-2
span span
.col-xs-12.col-sm-9.col-md-10 .col-xs-12.col-sm-9.col-md-10
li li.large-p
a(href="/challenges/#{challenge.name}")= challenge.name a(href="/challenges/#{challenge.name}")= challenge.name
h2 h2
span.ion-ios-heart   Nonprofit Projects (800 hours of real-world experience)* span.ion-ios-heart   Nonprofit Projects (800 hours of real-world experience)*