able to seed and view wiki content

This commit is contained in:
Michael Q Larson
2015-03-30 13:48:54 -07:00
parent b6da312547
commit 660214f87e
16 changed files with 126 additions and 181 deletions

15
app.js
View File

@ -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);

View File

@ -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'
});
}

View File

@ -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');

View File

@ -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
});
});
};

View File

@ -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
View 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);
};

View File

@ -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'
});
}

View File

@ -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);

View File

@ -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);

15
models/Wiki.js Normal file
View 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);

View File

@ -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);

View File

@ -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
View 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>"
]
}
]

View File

@ -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
View 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