able to seed and view wiki content
This commit is contained in:
15
app.js
15
app.js
@ -42,6 +42,7 @@ var express = require('express'),
|
||||
nonprofitController = require('./controllers/nonprofits'),
|
||||
bonfireController = require('./controllers/bonfire'),
|
||||
coursewareController = require('./controllers/courseware'),
|
||||
wikiController = require('./controllers/wiki'),
|
||||
|
||||
/**
|
||||
* Stories
|
||||
@ -243,8 +244,6 @@ app.get('/guide-to-our-nonprofit-projects', resourcesController.guideToOurNonpro
|
||||
app.get('/chromebook', resourcesController.chromebook);
|
||||
app.get('/deploy-a-website', resourcesController.deployAWebsite);
|
||||
app.get('/gmail-shortcuts', resourcesController.gmailShortcuts);
|
||||
app.get('/control-shortcuts', resourcesController.controlShortcuts);
|
||||
app.get('/control-shortcuts', resourcesController.deployAWebsite);
|
||||
app.get('/nodeschool-challenges', resourcesController.nodeSchoolChallenges);
|
||||
app.get('/stats', function(req, res) {
|
||||
res.redirect(301, '/learn-to-code');
|
||||
@ -425,7 +424,19 @@ app.get('/bonfire', function(req, res) {
|
||||
res.redirect(301, '/playground');
|
||||
});
|
||||
|
||||
/**
|
||||
* Wiki related routes
|
||||
*/
|
||||
|
||||
app.get(
|
||||
'/wiki/:wikiName',
|
||||
wikiController.returnIndividualWiki
|
||||
);
|
||||
|
||||
app.get(
|
||||
'/wiki',
|
||||
wikiController.showAllWikis
|
||||
);
|
||||
|
||||
app.post('/completed-bonfire/', bonfireController.completedBonfire);
|
||||
|
||||
|
@ -1,21 +0,0 @@
|
||||
var async = require('async'),
|
||||
User = require('../models/User'),
|
||||
Challenge = require('./../models/Challenge'),
|
||||
Bonfire = require('./../models/Bonfire'),
|
||||
Story = require('./../models/Story'),
|
||||
Comment = require('./../models/Comment'),
|
||||
resources = require('./resources.json'),
|
||||
steps = resources.steps,
|
||||
secrets = require('./../config/secrets'),
|
||||
moment = require('moment'),
|
||||
https = require('https'),
|
||||
debug = require('debug')('freecc:cntr:resources'),
|
||||
cheerio = require('cheerio'),
|
||||
request = require('request'),
|
||||
R = require('ramda');
|
||||
|
||||
nonprofitHome: function nonprofitHome(req, res) {
|
||||
res.render('nonprofits/home', {
|
||||
title: 'A guide to our Nonprofit Projects'
|
||||
});
|
||||
}
|
@ -3,7 +3,6 @@ var _ = require('lodash'),
|
||||
Bonfire = require('./../models/Bonfire'),
|
||||
User = require('./../models/User'),
|
||||
resources = require('./resources'),
|
||||
MDNlinks = require('./../seed_data/bonfireMDNlinks'),
|
||||
R = require('ramda');
|
||||
MDNlinks = require('./../seed_data/bonfireMDNlinks');
|
||||
|
||||
|
@ -1,61 +0,0 @@
|
||||
/**
|
||||
* GET /
|
||||
* Challenges.
|
||||
*/
|
||||
var _ = require('lodash'),
|
||||
debug = require('debug')('freecc:cntr:challenges'),
|
||||
Challenge = require('./../models/Challenge'),
|
||||
resources = require('./resources');
|
||||
|
||||
var highestChallengeNumber = 53;
|
||||
|
||||
|
||||
exports.returnNextChallenge = function(req, res) {
|
||||
if (req.user) {
|
||||
ch = req.user.challengesHash;
|
||||
if (req.user.challengesHash[0] > 0) {
|
||||
var max = Object.keys(ch).reduce(function(max, key) {
|
||||
return (max === undefined || ch[key] > ch[max]) ? +key : max;
|
||||
});
|
||||
nextChallenge = max + 1;
|
||||
res.redirect('challenges/' + nextChallenge);
|
||||
} else {
|
||||
res.redirect('challenges/0');
|
||||
}
|
||||
} else {
|
||||
return res.redirect('../challenges/0');
|
||||
}
|
||||
};
|
||||
|
||||
exports.returnChallenge = function(req, res) {
|
||||
var challengeNumber = parseInt(req.params.challengeNumber) || 0;
|
||||
if (challengeNumber === 2) {
|
||||
return res.redirect('../challenges/3');
|
||||
}
|
||||
if (challengeNumber > highestChallengeNumber) {
|
||||
req.flash('errors', {
|
||||
msg: "It looks like you've either completed all the challenges we have available or requested a challenge we don't have."
|
||||
});
|
||||
return res.redirect('../challenges/0');
|
||||
}
|
||||
Challenge.find({}, null, { sort: { challengeNumber: 1 } }, function(err, c) {
|
||||
if (err) {
|
||||
debug('Challenge err: ', err);
|
||||
next(err);
|
||||
}
|
||||
res.render('challenges/show', {
|
||||
title: 'Challenge: ' + c[challengeNumber].name,
|
||||
name: c[challengeNumber].name,
|
||||
video: c[challengeNumber].video,
|
||||
time: c[challengeNumber].time,
|
||||
steps: c[challengeNumber].steps,
|
||||
number: challengeNumber,
|
||||
cc: req.user ? req.user.challengesHash : undefined,
|
||||
points: req.user ? req.user.points : undefined,
|
||||
verb: resources.randomVerb(),
|
||||
phrase: resources.randomPhrase(),
|
||||
compliment: resources.randomCompliment(),
|
||||
challenges: c
|
||||
});
|
||||
});
|
||||
};
|
@ -108,12 +108,6 @@ module.exports = {
|
||||
});
|
||||
},
|
||||
|
||||
controlShortcuts: function controlShortcuts(req, res) {
|
||||
res.render('resources/control-shortcuts', {
|
||||
title: 'These Control Shortcuts will save you Hours'
|
||||
});
|
||||
},
|
||||
|
||||
chromebook: function chromebook(req, res) {
|
||||
res.render('resources/chromebook', {
|
||||
title: 'Win a Chromebook'
|
||||
|
40
controllers/wiki.js
Normal file
40
controllers/wiki.js
Normal file
@ -0,0 +1,40 @@
|
||||
var _ = require('lodash'),
|
||||
debug = require('debug')('freecc:cntr:wiki'),
|
||||
Wiki = require('./../models/Wiki'),
|
||||
resources = require('./resources'),
|
||||
R = require('ramda');
|
||||
|
||||
exports.returnIndividualWiki = function(req, res, next) {
|
||||
var dashedName = req.params.wikiName;
|
||||
|
||||
var wikiName = dashedName.replace(/\-/g, ' ');
|
||||
|
||||
Wiki.find({'name': new RegExp(wikiName, 'i')}, function(err, wiki) {
|
||||
if (err) {
|
||||
next(err);
|
||||
}
|
||||
|
||||
if (wiki.length < 1) {
|
||||
req.flash('errors', {
|
||||
msg: "404: We couldn't find a wiki entry with that name. Please double check the name."
|
||||
});
|
||||
|
||||
return res.redirect('/wiki');
|
||||
}
|
||||
|
||||
wiki = wiki.pop();
|
||||
var dashedNameFull = wiki.name.toLowerCase().replace(/\s/g, '-');
|
||||
if (dashedNameFull != dashedName) {
|
||||
return res.redirect('../wiki/' + dashedNameFull);
|
||||
}
|
||||
res.render('wiki/show', {
|
||||
title: wiki.name,
|
||||
description: wiki.description.join('')
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
exports.showAllWikis = function(req, res) {
|
||||
data.wikiList = resources.allWikiNames();
|
||||
res.send(data);
|
||||
};
|
@ -1,21 +0,0 @@
|
||||
var async = require('async'),
|
||||
User = require('../models/User'),
|
||||
Challenge = require('./../models/Challenge'),
|
||||
Bonfire = require('./../models/Bonfire'),
|
||||
Story = require('./../models/Story'),
|
||||
Comment = require('./../models/Comment'),
|
||||
resources = require('./resources.json'),
|
||||
steps = resources.steps,
|
||||
secrets = require('./../config/secrets'),
|
||||
moment = require('moment'),
|
||||
https = require('https'),
|
||||
debug = require('debug')('freecc:cntr:resources'),
|
||||
cheerio = require('cheerio'),
|
||||
request = require('request'),
|
||||
R = require('ramda');
|
||||
|
||||
nonprofitHome: function nonprofitHome(req, res) {
|
||||
res.render('nonprofits/home', {
|
||||
title: 'A guide to our Nonprofit Projects'
|
||||
});
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
var mongoose = require('mongoose');
|
||||
var secrets = require('../config/secrets');
|
||||
|
||||
/**
|
||||
*
|
||||
* @type {exports.Schema}
|
||||
*/
|
||||
|
||||
|
||||
var basejumpSchema = new mongoose.Schema({
|
||||
name: {
|
||||
type: String,
|
||||
unique: true
|
||||
},
|
||||
picture: String,
|
||||
video: String,
|
||||
gitHubLink: String,
|
||||
demoLink: String,
|
||||
details: Array
|
||||
});
|
||||
|
||||
module.exports = mongoose.model('Basejump', basejumpSchema);
|
@ -16,7 +16,7 @@ var coursewareSchema = new mongoose.Schema({
|
||||
tests: Array,
|
||||
challengeSeed: Array,
|
||||
completionMessage: String, // Congratulations! You've finished our HTML and CSS track!
|
||||
challengeType: Number // 0 = html, 1 = javascript only, 2 = video
|
||||
challengeType: Number // 0 = html, 1 = javascript only, 2 = video, 3 = bonfire, 4 = zipline, 5 = basejump
|
||||
});
|
||||
|
||||
module.exports = mongoose.model('Courseware', coursewareSchema);
|
||||
module.exports = mongoose.model('Courseware', coursewareSchema);
|
||||
|
@ -46,4 +46,4 @@ var storySchema = new mongoose.Schema({
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = mongoose.model('Story', storySchema);
|
||||
module.exports = mongoose.model('Story', storySchema);
|
||||
|
15
models/Wiki.js
Normal file
15
models/Wiki.js
Normal file
@ -0,0 +1,15 @@
|
||||
var mongoose = require('mongoose');
|
||||
var secrets = require('../config/secrets');
|
||||
|
||||
var wikiSchema = new mongoose.Schema({
|
||||
name: {
|
||||
type: String,
|
||||
unique: false
|
||||
},
|
||||
description: {
|
||||
type: Array,
|
||||
unique: false
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = mongoose.model('Wiki', wikiSchema);
|
@ -1,21 +0,0 @@
|
||||
var mongoose = require('mongoose');
|
||||
var secrets = require('../config/secrets');
|
||||
|
||||
/**
|
||||
*
|
||||
* @type {exports.Schema}
|
||||
*/
|
||||
|
||||
|
||||
var ziplineSchema = new mongoose.Schema({
|
||||
name: {
|
||||
type: String,
|
||||
unique: true
|
||||
},
|
||||
picture: String,
|
||||
video: String,
|
||||
codepenLink: String,
|
||||
details: Array
|
||||
});
|
||||
|
||||
module.exports = mongoose.model('Zipline', ziplineSchema);
|
@ -1,15 +1,17 @@
|
||||
require('dotenv').load();
|
||||
var Bonfire = require('../models/Bonfire.js'),
|
||||
Courseware = require('../models/Courseware.js'),
|
||||
Wiki = require('../models/Wiki.js'),
|
||||
mongoose = require('mongoose'),
|
||||
secrets = require('../config/secrets'),
|
||||
coursewares = require('./coursewares.json'),
|
||||
wikis = require('./wikis.json')
|
||||
bonfires = require('./bonfires.json');
|
||||
|
||||
mongoose.connect(secrets.db);
|
||||
|
||||
var counter = 0;
|
||||
var offerings = 2;
|
||||
var offerings = 3;
|
||||
|
||||
var CompletionMonitor = function() {
|
||||
counter++;
|
||||
@ -56,3 +58,20 @@ Courseware.remove({}, function(err, data) {
|
||||
});
|
||||
console.log('coursewares');
|
||||
});
|
||||
|
||||
Wiki.remove({}, function(err, data) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
} else {
|
||||
console.log('Deleted ', data);
|
||||
}
|
||||
Wiki.create(wikis, function(err, data) {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
} else {
|
||||
console.log('Saved ', data);
|
||||
}
|
||||
CompletionMonitor();
|
||||
});
|
||||
console.log('wikis');
|
||||
});
|
||||
|
25
seed_data/wikis.json
Normal file
25
seed_data/wikis.json
Normal file
@ -0,0 +1,25 @@
|
||||
[
|
||||
{
|
||||
"_id": "bd7158d9c442eddfaeb5bdef",
|
||||
"name": "Global Control Shortcuts for Mac",
|
||||
"description": [
|
||||
"<h2>These Global Control Shortcuts for Mac will save you hours by speeding up your typing</h2>",
|
||||
"<div class=\"embed-responsive embed-responsive-16by9\"><iframe src=\"//player.vimeo.com/video/107073108\" class=\"embed-responsive-item\"></iframe></div>",
|
||||
"<div class=\"text-left\">",
|
||||
" <h3>These global shortcuts work everywhere on a Mac:",
|
||||
" <ul>",
|
||||
" <li>Control + F = Forward</li>",
|
||||
" <li>Control + B = Backward</li>",
|
||||
" <li>Control + N = Next Line</li>",
|
||||
" <li>Control + P = Previous Line</li>",
|
||||
" <li>Control + H = Backspace</li>",
|
||||
" <li>Control + D = Delete</li>",
|
||||
" <li>Control + A = Beginning of Line</li>",
|
||||
" <li>Control + E = End of Line</li>",
|
||||
" <li>Control + K = Kill line</li>",
|
||||
" </ul>",
|
||||
" </h3>",
|
||||
"</div><a href=\"/login\" class=\"btn btn-cta signup-btn btn-primary\">Start learning to code (it's free)<br/></a>"
|
||||
]
|
||||
}
|
||||
]
|
@ -1,22 +0,0 @@
|
||||
extends ../layout
|
||||
block content
|
||||
.jumbotron.text-center
|
||||
h1.hug-top Global Control Shortcuts for Mac
|
||||
h2 These Global Control Shortcuts for Mac will save you hours by speeding up your typing
|
||||
br
|
||||
.embed-responsive.embed-responsive-16by9
|
||||
iframe.embed-responsive-item(src='//player.vimeo.com/video/107073108')
|
||||
.text-left
|
||||
h3 These global shortcuts work everywhere on a Mac:
|
||||
ul
|
||||
li Control + F = Forward
|
||||
li Control + B = Backward
|
||||
li Control + N = Next Line
|
||||
li Control + P = Previous Line
|
||||
li Control + H = Backspace
|
||||
li Control + D = Delete
|
||||
li Control + A = Beginning of Line
|
||||
li Control + E = End of Line
|
||||
li Control + K = Kill line
|
||||
a.btn.btn-cta.signup-btn.btn-primary(href="/login") Start learning to code (it's free)
|
||||
br
|
10
views/wiki/show.jade
Normal file
10
views/wiki/show.jade
Normal file
@ -0,0 +1,10 @@
|
||||
extends ../layout
|
||||
block content
|
||||
script.
|
||||
var challengeName = 'Wiki View';
|
||||
.col-xs-12.col-sm-12.col-md-12
|
||||
.panel.panel-info
|
||||
.panel-heading.text-center
|
||||
h1= title
|
||||
.panel-body
|
||||
h1!= description
|
Reference in New Issue
Block a user