diff --git a/app.js b/app.js index f22e0a2aee..08058238d7 100644 --- a/app.js +++ b/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); diff --git a/controllers/basejumps.js b/controllers/basejumps.js deleted file mode 100644 index e9687201a6..0000000000 --- a/controllers/basejumps.js +++ /dev/null @@ -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' - }); -} \ No newline at end of file diff --git a/controllers/bonfire.js b/controllers/bonfire.js index a753b55177..4f11a99a23 100644 --- a/controllers/bonfire.js +++ b/controllers/bonfire.js @@ -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'); diff --git a/controllers/challenges.js b/controllers/challenges.js deleted file mode 100644 index 6658e18e13..0000000000 --- a/controllers/challenges.js +++ /dev/null @@ -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 - }); - }); -}; diff --git a/controllers/resources.js b/controllers/resources.js index 1c1da1d056..adb4606a72 100644 --- a/controllers/resources.js +++ b/controllers/resources.js @@ -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' diff --git a/controllers/wiki.js b/controllers/wiki.js new file mode 100644 index 0000000000..6172e0f225 --- /dev/null +++ b/controllers/wiki.js @@ -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); +}; diff --git a/controllers/ziplines.js b/controllers/ziplines.js deleted file mode 100644 index e9687201a6..0000000000 --- a/controllers/ziplines.js +++ /dev/null @@ -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' - }); -} \ No newline at end of file diff --git a/models/Basejump.js b/models/Basejump.js deleted file mode 100644 index 15eddc5dac..0000000000 --- a/models/Basejump.js +++ /dev/null @@ -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); \ No newline at end of file diff --git a/models/Courseware.js b/models/Courseware.js index aa4f8ca5d4..66e67af545 100644 --- a/models/Courseware.js +++ b/models/Courseware.js @@ -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); \ No newline at end of file +module.exports = mongoose.model('Courseware', coursewareSchema); diff --git a/models/Story.js b/models/Story.js index d5d163ccf1..13f279de18 100644 --- a/models/Story.js +++ b/models/Story.js @@ -46,4 +46,4 @@ var storySchema = new mongoose.Schema({ } }); -module.exports = mongoose.model('Story', storySchema); \ No newline at end of file +module.exports = mongoose.model('Story', storySchema); diff --git a/models/Wiki.js b/models/Wiki.js new file mode 100644 index 0000000000..e7eb8a183b --- /dev/null +++ b/models/Wiki.js @@ -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); diff --git a/models/Zipline.js b/models/Zipline.js deleted file mode 100644 index a8d49fd173..0000000000 --- a/models/Zipline.js +++ /dev/null @@ -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); diff --git a/seed_data/seed.js b/seed_data/seed.js index fcdb461528..f58fab7204 100644 --- a/seed_data/seed.js +++ b/seed_data/seed.js @@ -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'); +}); diff --git a/seed_data/wikis.json b/seed_data/wikis.json new file mode 100644 index 0000000000..3dec5421f8 --- /dev/null +++ b/seed_data/wikis.json @@ -0,0 +1,25 @@ +[ + { + "_id": "bd7158d9c442eddfaeb5bdef", + "name": "Global Control Shortcuts for Mac", + "description": [ + "

These Global Control Shortcuts for Mac will save you hours by speeding up your typing

", + "
", + "
", + "

These global shortcuts work everywhere on a Mac:", + " ", + "

", + "
Start learning to code (it's free)
" + ] + } +] diff --git a/views/resources/control-shortcuts.jade b/views/resources/control-shortcuts.jade deleted file mode 100644 index 25b43a1011..0000000000 --- a/views/resources/control-shortcuts.jade +++ /dev/null @@ -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 diff --git a/views/wiki/show.jade b/views/wiki/show.jade new file mode 100644 index 0000000000..6a44d6eaba --- /dev/null +++ b/views/wiki/show.jade @@ -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