Merge branch 'master' into helmet

Conflicts:
	controllers/resources.js
	package.json
	views/partials/meta.jade
This commit is contained in:
Michael Q Larson
2014-12-22 11:49:51 -08:00
32 changed files with 1665 additions and 949 deletions

48
app.js
View File

@ -33,6 +33,10 @@ var userController = require('./controllers/user');
var apiController = require('./controllers/api'); var apiController = require('./controllers/api');
var contactController = require('./controllers/contact'); var contactController = require('./controllers/contact');
/**
* User model
*/
var User = require('./models/User');
/** /**
* API keys and Passport configuration. * API keys and Passport configuration.
*/ */
@ -132,8 +136,13 @@ app.get(
app.get('/learn-to-code', resourcesController.learnToCode); app.get('/learn-to-code', resourcesController.learnToCode);
app.get('/privacy', resourcesController.privacy); app.get('/privacy', resourcesController.privacy);
app.get('/jquery-exercises', resourcesController.jqueryExercises); app.get('/jquery-exercises', resourcesController.jqueryExercises);
app.get('/text-based-adventure-tutorial-app', resourcesController.textBasedAdventureTutorial); app.get('/live-pair-programming', resourcesController.livePairProgramming);
app.get('/javascript-in-your-inbox', resourcesController.javaScriptInYourInbox);
app.get('/chromebook', resourcesController.chromebook);
app.get('/pair-program-with-team-viewer', resourcesController.pairProgramWithTeamViewer);
app.get('/done-with-first-100-hours', resourcesController.doneWithFirst100Hours);
app.get('/programmer-interview-questions-app', resourcesController.programmerInterviewQuestionsApp); app.get('/programmer-interview-questions-app', resourcesController.programmerInterviewQuestionsApp);
app.get('/about', resourcesController.about); app.get('/about', resourcesController.about);
app.get('/login', userController.getLogin); app.get('/login', userController.getLogin);
app.post('/login', userController.postLogin); app.post('/login', userController.postLogin);
@ -168,10 +177,19 @@ app.get('/account/unlink/:provider', userController.getOauthUnlink);
/** /**
* API examples routes. * API examples routes.
* accepts a post request. the challenge id req.body.challengeNumber
* and updates user.challengesHash & user.challengesCompleted
*
*/ */
app.post('/completed_challenge', function(req, res) { app.post('/completed_challenge', function(req, res) {
req.user.challengesCompleted.push(parseInt(req.body.cn)); req.user.challengesHash[parseInt(req.body.challengeNumber)] = Math.round(+new Date() / 1000);
req.user.save(); var ch = req.user.challengesHash;
var p = 0;
for (k in ch) {
if (ch[k] > 0) { p += 1}
}
req.user.points = p;
req.user.save();
}); });
/** /**
@ -235,27 +253,3 @@ app.listen(app.get('port'), function() {
}); });
module.exports = app; module.exports = app;
//app.get('/api', apiController.getApi);
//app.get('/api/lastfm', apiController.getLastfm);
//app.get('/api/nyt', apiController.getNewYorkTimes);
//app.get('/api/aviary', apiController.getAviary);
//app.get('/api/steam', apiController.getSteam);
//app.get('/api/stripe', apiController.getStripe);
//app.post('/api/stripe', apiController.postStripe);
//app.get('/api/scraping', apiController.getScraping);
//app.get('/api/twilio', apiController.getTwilio);
//app.post('/api/twilio', apiController.postTwilio);
//app.get('/api/clockwork', apiController.getClockwork);
//app.post('/api/clockwork', apiController.postClockwork);
//app.get('/api/foursquare', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getFoursquare);
//app.get('/api/tumblr', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getTumblr);
//app.get('/api/facebook', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getFacebook);
//app.get('/api/github', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getGithub);
//app.get('/api/twitter', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getTwitter);
//app.post('/api/twitter', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.postTwitter);
//app.get('/api/venmo', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getVenmo);
//app.post('/api/venmo', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.postVenmo);
//app.get('/api/linkedin', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getLinkedin);
//app.get('/api/instagram', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getInstagram);
//app.get('/api/yahoo', apiController.getYahoo);

View File

@ -7,7 +7,7 @@ var _ = require('lodash');
exports.returnChallenge = function(req, res, next) { exports.returnChallenge = function(req, res, next) {
var challengeNumber = parseInt(req.params.challengeNumber) || 0; var challengeNumber = parseInt(req.params.challengeNumber) || 0;
if (challengeNumber > 41) { challengeNumber = 0; } if (challengeNumber > 59) { challengeNumber = 0; }
Challenge.findOne({challengeNumber: challengeNumber}, function (err, c) { Challenge.findOne({challengeNumber: challengeNumber}, function (err, c) {
if (err) { if (err) {
console.error('Challenge err: ', err); console.error('Challenge err: ', err);
@ -19,7 +19,7 @@ exports.returnChallenge = function(req, res, next) {
video: c.video, video: c.video,
time: c.time, time: c.time,
steps: c.steps, steps: c.steps,
cc: req.user.challengesCompleted cc: req.user.challengesHash
}); });
}); });
}; };

View File

@ -5,9 +5,13 @@
exports.index = function(req, res) { exports.index = function(req, res) {
if (req.user) { if (req.user) {
if (req.user.challengesCompleted.length > 0) { ch = req.user.challengesHash;
nextChallenge = Math.max.apply(Math, req.user.challengesCompleted) + 1; if (req.user.challengesHash[0] > 0) {
res.redirect("challenges/" + nextChallenge); 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 { } else {
res.redirect("challenges/0"); res.redirect("challenges/0");
} }

View File

@ -27,32 +27,85 @@ exports.privacy = function(req, res) {
exports.statistics = function(req, res) { exports.statistics = function(req, res) {
res.render('statistics', { res.render('statistics', {
title: 'Code Camper Statistics', title: 'Code Camper Statistics',
totalUsers: totalUsers, //totalUsers: totalUsers,
//usersOverTenChallenges: usersOverTenChallenges //usersOverTenChallenges: usersOverTenChallenges
}); });
} }
exports.chromebook = function(req, res) {
res.render('chromebook', {
title: 'Win a Chromebook'
});
}
exports.jqueryExercises = function(req, res) { exports.jqueryExercises = function(req, res) {
res.render('jquery-exercises', { res.render('jquery-exercises', {
title: 'jQuery Exercises' title: 'jQuery Exercises'
}); });
} }
exports.livePairProgramming = function(req, res) {
res.render('live-pair-programming', {
title: 'Live Pair Programming'
});
}
exports.javaScriptInYourInbox = function(req, res) {
res.render('javascript-in-your-inbox', {
title: 'JavaScript in your Inbox'
});
}
exports.programmerInterviewQuestionsApp = function(req, res) { exports.programmerInterviewQuestionsApp = function(req, res) {
res.render('programmer-interview-questions-app', { res.render('programmer-interview-questions-app', {
title: 'programmer-interview-questions-app' title: 'Programmer Interview Questions App'
}); });
} }
exports.textBasedAdventureTutorial = function(req, res) { exports.pairProgramWithTeamViewer = function(req, res) {
res.render('text-based-adventure-tutorial-app', { res.render('pair-program-with-team-viewer', {
title: 'text-based-adventure-tutorial-app' title: 'Challenge: Pair Program with Team Viewer',
name: "Pair Program with Team Viewer",
video: '',
time: 30,
steps: ["In the spirit of keeping Free Code Camp 100% free, we've created directions for using a totally free pair programming tool called Team Viewer. It's not as user-friendly as Screen Hero, but it gets the job done (and works on Linux!).",
"Go to <a href='http://www.teamviewer.com/en/index.aspx' target='_blank'>http://www.teamviewer.com/en/index.aspx</a> and download Team Viewer. Be sure not to download the beta version, which isn't compatible with the current stable version everyone else will be using.",
"Install it and launch it",
"Go to the chat room and ask if anyone wants to pair program with you on a CoderByte challenge.",
"If someone is interested, they will be your \"pair\" - the person you pair programming with.",
"<strong>First, you will pair program on your pair's computer.</strong> Ask your pair for his or her Team Viewer ID and password.",
"Enter this id, and then password, to start the session.",
"Once the Team Viewer session starts, look at the the top of the screen. You will see 6 buttons. If you hover your cursor over the buttons, they will slide down so that you can read them. Click the audio/video button. This will allow you to turn on Voice Over IP and unmute your microphone, opening up your voice channel.",
"Note that you can now control your pair's keyboard and mouse, enabling you to step in and code yourself on your pair's computer when desired",
"Now you can click the X to end the pair programming session.",
"<strong>Next, you will pair program on your computer.</strong> Copy your Team Viewer ID and paste it into the private chat, so that your pair can use it to connect with you.",
"You will need to share your randomly generated password with your pair as well.",
"Once your pair connects, you will see a Team Viewer side menu. ",
"Click the audio button that drops down.",
"Click the headset icon and choose Voice over IP",
"Click the microphone button to unmute your microphone. Once your pair does the same, you two will have an open voice channel.",
"Now you can click the X to end the pair programming session.",
"Now it's time to tackle CoderByte.",
"Create a CoderByte account at <a href='http://coderbyte.com/sl/' target='_blank'>http://coderbyte.com/sl/</a>",
"Now go to <a href='http://coderbyte.com/CodingArea/Challenges/#easyChals' target='_blank'>http://coderbyte.com/CodingArea/Challenges/#easyChals</a> and start working through Coderbyte's easy algorithm scripting challenges using JavaScript.",
"When you are finished pair programming, click the X to end the session.",
"Congratulations! You have completed your first pair programming session.",
"You should pair program with different Code Campers until you've completed all the Easy, Medium and Hard CoderByte challenges. This is a big time investment, but the JavaScript practice you'll get, along with the scripting and algorithm experience, are well worth it!",
"You can complete CoderByte problems while you continue to work through Free Code Camp's challenges.",
"Be sure to pair program on these challenges, and remember to apply the RSAP methodology.",
"Click the button below to return to the Pair Programming challenge, then mark it complete."],
cc: req.user.challengesHash
}); });
} }
exports.about = function(req, res) { exports.about = function(req, res) {
res.render('about', { res.render('about', {
title: 'Who We Are' title: 'About Free Code Camp and Our Team of Volunteers'
});
}
exports.doneWithFirst100Hours = function(req, res) {
res.render('done-with-first-100-hours', {
title: 'Congratulations on finishing the first 100 hours of Free Code Camp!'
}); });
} }

View File

@ -5,6 +5,7 @@ var nodemailer = require('nodemailer');
var passport = require('passport'); var passport = require('passport');
var User = require('../models/User'); var User = require('../models/User');
var secrets = require('../config/secrets'); var secrets = require('../config/secrets');
var moment = require('moment');
/** /**
* GET /login * GET /login
@ -130,7 +131,9 @@ exports.postEmailSignup = function(req, res, next) {
exports.getAccount = function(req, res) { exports.getAccount = function(req, res) {
res.render('account/profile', { res.render('account/profile', {
title: 'Manage your Free Code Camp Account' title: 'Manage your Free Code Camp Account',
cc: req.user.challengesHash,
moment: moment
}); });
}; };

View File

@ -14,8 +14,70 @@ var userSchema = new mongoose.Schema({
instagram: String, instagram: String,
linkedin: String, linkedin: String,
tokens: Array, tokens: Array,
points: { type: Number, default: 0 },
challengesCompleted: { type: Array, default: [] }, challengesCompleted: { type: Array, default: [] },
challengesHash: {
0: { type: Number, default: 0 },
1: { type: Number, default: 0 },
2: { type: Number, default: 0 },
3: { type: Number, default: 0 },
4: { type: Number, default: 0 },
5: { type: Number, default: 0 },
6: { type: Number, default: 0 },
7: { type: Number, default: 0 },
8: { type: Number, default: 0 },
9: { type: Number, default: 0 },
10: { type: Number, default: 0 },
11: { type: Number, default: 0 },
12: { type: Number, default: 0 },
13: { type: Number, default: 0 },
14: { type: Number, default: 0 },
15: { type: Number, default: 0 },
16: { type: Number, default: 0 },
17: { type: Number, default: 0 },
18: { type: Number, default: 0 },
19: { type: Number, default: 0 },
20: { type: Number, default: 0 },
21: { type: Number, default: 0 },
22: { type: Number, default: 0 },
23: { type: Number, default: 0 },
24: { type: Number, default: 0 },
25: { type: Number, default: 0 },
26: { type: Number, default: 0 },
27: { type: Number, default: 0 },
28: { type: Number, default: 0 },
29: { type: Number, default: 0 },
30: { type: Number, default: 0 },
31: { type: Number, default: 0 },
32: { type: Number, default: 0 },
33: { type: Number, default: 0 },
34: { type: Number, default: 0 },
35: { type: Number, default: 0 },
36: { type: Number, default: 0 },
37: { type: Number, default: 0 },
38: { type: Number, default: 0 },
39: { type: Number, default: 0 },
40: { type: Number, default: 0 },
41: { type: Number, default: 0 },
42: { type: Number, default: 0 },
43: { type: Number, default: 0 },
44: { type: Number, default: 0 },
45: { type: Number, default: 0 },
46: { type: Number, default: 0 },
47: { type: Number, default: 0 },
48: { type: Number, default: 0 },
49: { type: Number, default: 0 },
50: { type: Number, default: 0 },
51: { type: Number, default: 0 },
52: { type: Number, default: 0 },
53: { type: Number, default: 0 },
54: { type: Number, default: 0 },
55: { type: Number, default: 0 },
56: { type: Number, default: 0 },
57: { type: Number, default: 0 },
58: { type: Number, default: 0 },
59: { type: Number, default: 0 }
},
profile: { profile: {
name: { type: String, default: '' }, name: { type: String, default: '' },
gender: { type: String, default: '' }, gender: { type: String, default: '' },

View File

@ -20,6 +20,7 @@
"connect-mongo": "^0.4.1", "connect-mongo": "^0.4.1",
"cookie-parser": "^1.3.3", "cookie-parser": "^1.3.3",
"csso": "^1.3.11", "csso": "^1.3.11",
"dateformat": "^1.0.11",
"dotenv": "^0.4.0", "dotenv": "^0.4.0",
"errorhandler": "^1.3.0", "errorhandler": "^1.3.0",
"express": "^4.10.4", "express": "^4.10.4",
@ -36,6 +37,7 @@
"lodash": "^2.4.1", "lodash": "^2.4.1",
"lusca": "^1.0.2", "lusca": "^1.0.2",
"method-override": "^2.3.0", "method-override": "^2.3.0",
"moment": "^2.8.4",
"mongoose": "^3.8.19", "mongoose": "^3.8.19",
"morgan": "^1.5.0", "morgan": "^1.5.0",
"newrelic": "^1.13.3", "newrelic": "^1.13.3",

View File

@ -14,8 +14,8 @@
@gray-light: lighten(@gray-base, 46.7%); // #777 @gray-light: lighten(@gray-base, 46.7%); // #777
@gray-lighter: lighten(@gray-base, 93.5%); // #eee @gray-lighter: lighten(@gray-base, 93.5%); // #eee
@brand-primary: #4e8c39; @brand-primary: #215f1e;
@brand-success: #2F8DA3; @brand-success: #457E86;
@brand-info: #5bc0de; @brand-info: #5bc0de;
@brand-warning: #f0ad4e; @brand-warning: #f0ad4e;
@brand-danger: #d9534f; @brand-danger: #d9534f;
@ -26,12 +26,12 @@
//## Settings for some of the most global styles. //## Settings for some of the most global styles.
//** Background color for `<body>`. //** Background color for `<body>`.
@body-bg: #c5b3a0; @body-bg: #457E86;
//** Global text color on `<body>`. //** Global text color on `<body>`.
@text-color: @gray-dark; @text-color: @gray-dark;
//** Global textual link color. //** Global textual link color.
@link-color: #4e8c39; @link-color: #215f1e;
//** Link hover color set via `darken()` function. //** Link hover color set via `darken()` function.
@link-hover-color: darken(@link-color, 15%); @link-hover-color: darken(@link-color, 15%);
//** Link hover decoration. //** Link hover decoration.
@ -487,7 +487,7 @@
// //
//## Define colors for form feedback states and, by default, alerts. //## Define colors for form feedback states and, by default, alerts.
@state-success-text: #3c763d; @state-success-text: #215f1e;
@state-success-bg: #dff0d8; @state-success-bg: #dff0d8;
@state-success-border: darken(spin(@state-success-bg, -10), 5%); @state-success-border: darken(spin(@state-success-bg, -10), 5%);

View File

@ -6,14 +6,23 @@
@import url(http://fonts.googleapis.com/css?family=Lato:300); @import url(http://fonts.googleapis.com/css?family=Lato:300);
@import url(http://fonts.googleapis.com/css?family=Lato:400); @import url(http://fonts.googleapis.com/css?family=Lato:400);
@import url(http://fonts.googleapis.com/css?family=Lato:500);
html,body,div,span,a,li,td,th { html,body,div,span,a,li,td,th {
font-family: 'Lato', sans-serif; font-family: 'Lato', sans-serif;
font-weight: 300; font-weight: 300;
} }
li {
white-space: pre; /* CSS 2.0 */
white-space: pre-wrap; /* CSS 2.1 */
white-space: pre-line; /* CSS 3.0 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: -moz-pre-wrap; /* Mozilla */
white-space: -hp-pre-wrap; /* HP Printers */
word-wrap: break-word; /* IE 5+ */
}
html { html {
position: relative; position: relative;
min-height: 100%; min-height: 100%;
@ -37,7 +46,7 @@ h1, h2 {
} }
.btn { .btn {
font-weight: 500; font-weight: 400;
} }
h1, h2, h3, h4, h5, h6, p, li { h1, h2, h3, h4, h5, h6, p, li {
@ -154,6 +163,7 @@ ul {
.nav-height { .nav-height {
height: 50px; height: 50px;
border: none;
} }
.landing-icon { .landing-icon {
@ -172,6 +182,10 @@ ul {
margin-top: -10px; margin-top: -10px;
} }
.negative-15 {
margin-top: -15px;
}
.landing-p { .landing-p {
font-size: 18px !important; font-size: 18px !important;
} }
@ -180,11 +194,6 @@ ul {
color: @brand-success; color: @brand-success;
} }
.delay-half {
-webkit-animation-delay: 0.5s;
animation-delay: 0.5s;
}
.delay-1 { .delay-1 {
-webkit-animation-delay: 1s; -webkit-animation-delay: 1s;
animation-delay: 1s; animation-delay: 1s;
@ -195,24 +204,9 @@ ul {
animation-delay: 2s; animation-delay: 2s;
} }
.delay-3 { .delay-10 {
-webkit-animation-delay: 3s; -webkit-animation-delay: 10s;
animation-delay: 3s; animation-delay: 10s;
}
.delay-4 {
-webkit-animation-delay: 4s;
animation-delay: 4s;
}
.delay-5 {
-webkit-animation-delay: 5s;
animation-delay: 5s;
}
.delay-6 {
-webkit-animation-delay: 6s;
animation-delay: 6s;
} }
.fast-animation { .fast-animation {
@ -220,11 +214,6 @@ ul {
animation-duration: 0.5s; animation-duration: 0.5s;
} }
.slow-animation {
-webkit-animation-duration: 2s;
animation-duration: 2s;
}
.disabled { .disabled {
pointer-events: none; pointer-events: none;
cursor: default; cursor: default;
@ -271,7 +260,7 @@ ul {
} }
.navbar { .navbar {
background-color: #502D16; background-color: #4a2b0f;
} }
.navbar-default .navbar-nav > li > a { .navbar-default .navbar-nav > li > a {
@ -282,7 +271,7 @@ ul {
} }
.hug-top { .hug-top {
margin-top: -40px; margin-top: -35px;
margin-bottom: -10px; margin-bottom: -10px;
} }
@ -316,9 +305,11 @@ ul {
box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3); box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
} }
.profile-image { .profile-image {
border-radius: 10px;
width: 200px; width: 200px;
height: 200px; height: 200px;
border-radius: 10px; padding-left: 5px;
padding-right: 5px;
} }
.team-member { .team-member {
@ -343,4 +334,26 @@ ul {
.masonry-relative { .masonry-relative {
position:relative; position:relative;
display: block; display: block;
}
.btn-big {
font-size: 30px;
}
.table {
margin-left: -16px;
}
thead {
font-size: 150%;
}
.hamburger {
background-color: #ddd;
text-align: left;
font-size: 20px;
}
.nowrap {
white-space: nowrap;
} }

View File

@ -20,14 +20,11 @@ $(document).ready(function() {
$('#complete-dialog').modal('show'); $('#complete-dialog').modal('show');
l = location.pathname.split('/'); l = location.pathname.split('/');
cn = l[l.length - 1] cn = l[l.length - 1]
console.log(cn);
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
data: {cn: cn}, data: {challengeNumber: cn},
url: '/completed_challenge/', url: '/completed_challenge/'
success: function(data) {
console.log('success');
console.log(JSON.stringify(data));
}
}); });
}); });

View File

@ -6,20 +6,44 @@
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<!-- created with Free Online Sitemap Generator www.xml-sitemaps.com --> <!-- created with Free Online Sitemap Generator www.xml-sitemaps.com -->
<url> <url>
<loc>http://www.freecodecamp.com/</loc> <loc>http://www.freecodecamp.com/</loc>
<changefreq>daily</changefreq> <changefreq>daily</changefreq>
</url> </url>
<url> <url>
<loc>http://www.freecodecamp.com/login</loc> <loc>http://www.freecodecamp.com/login</loc>
<changefreq>daily</changefreq> <changefreq>daily</changefreq>
</url> </url>
<url> <url>
<loc>http://www.freecodecamp.com/nonprofits</loc> <loc>http://www.freecodecamp.com/nonprofits</loc>
<changefreq>daily</changefreq> <changefreq>daily</changefreq>
</url> </url>
<url> <url>
<loc>http://www.freecodecamp.com/learn-to-code</loc> <loc>http://www.freecodecamp.com/learn-to-code</loc>
<changefreq>daily</changefreq> <changefreq>daily</changefreq>
</url> </url>
<url>
<loc>http://www.freecodecamp.com/about</loc>
<changefreq>daily</changefreq>
</url>
<url>
<loc>http://www.freecodecamp.com/chromebook</loc>
<changefreq>daily</changefreq>
</url>
<url>
<loc>http://www.freecodecamp.com/live-pair-programming</loc>
<changefreq>daily</changefreq>
</url>
<url>
<loc>http://www.freecodecamp.com/privacy</loc>
<changefreq>daily</changefreq>
</url>
<url>
<loc>http://www.freecodecamp.com/jquery-exercises</loc>
<changefreq>daily</changefreq>
</url>
<url>
<loc>http://www.freecodecamp.com/javascript-in-your-inbox</loc>
<changefreq>daily</changefreq>
</url>
</urlset> </urlset>

File diff suppressed because it is too large Load Diff

View File

@ -4,8 +4,12 @@ var secrets = require('../config/secrets');
var challenges = require('./challenges.json'); var challenges = require('./challenges.json');
mongoose.connect(secrets.db); mongoose.connect(secrets.db);
Challenge.create(challenges, function(err, data) { Challenge.remove({}, function(err, data){
if (err) console.log(err); if (err) console.log(err);
else console.log('Saved ', data ); else console.log('Deleted ', data );
process.exit(0); Challenge.create(challenges, function(err, data) {
}); if (err) console.log(err);
else console.log('Saved ', data );
process.exit(0);
});
});

View File

@ -1,4 +1,5 @@
extends layout extends layout
block content block content
h1 About Free Code Camp include partials/about-us
h2 this is a placeholder page. Our about us page is coming soon. br
include partials/faq

View File

@ -5,12 +5,12 @@ block content
a.btn.btn-lg.btn-block.btn-google-plus.btn-social(href='/auth/google') a.btn.btn-lg.btn-block.btn-google-plus.btn-social(href='/auth/google')
i.fa.fa-google-plus i.fa.fa-google-plus
| Sign in with Google | Sign in with Google
//a.btn.btn-lg.btn-block.btn-github.btn-social(href='/auth/github')
// i.fa.fa-github
// | Sign in with GitHub
a.btn.btn-lg.btn-block.btn-facebook.btn-social(href='/auth/facebook') a.btn.btn-lg.btn-block.btn-facebook.btn-social(href='/auth/facebook')
i.fa.fa-facebook i.fa.fa-facebook
| Sign in with Facebook | Sign in with Facebook
//a.btn.btn-lg.btn-block.btn-github.btn-social(href='/auth/github')
// i.fa.fa-github
// | Sign in with GitHub
a.btn.btn-lg.btn-block.btn-linkedin.btn-social(href='/auth/linkedin') a.btn.btn-lg.btn-block.btn-linkedin.btn-social(href='/auth/linkedin')
i.fa.fa-linkedin i.fa.fa-linkedin
| Sign in with LinkedIn | Sign in with LinkedIn

View File

@ -33,6 +33,253 @@ block content
span.ion-edit span.ion-edit
| Update my profile | Update my profile
h1 Completed Challenges
.col-xs-12
table.table.table-striped
thead
tr
th Challenge
th Date Finished
if cc[0] > 0
tr
td Learn how Free Code Camp Works
td=moment(cc[0], 'X').format("MMM DD, YYYY")
if cc[1] > 0
tr
td Join Our Chat Room
td=moment(cc[1], 'X').format("MMM DD, YYYY")
if cc[2] > 0
tr
td Subscribe to Our Subreddit
td=moment(cc[2], 'X').format("MMM DD, YYYY")
if cc[3] > 0
tr
td Build a Personal Website
td=moment(cc[3], 'X').format("MMM DD, YYYY")
if cc[4] > 0
tr
td Build a Responsive Blog Theme
td=moment(cc[4], 'X').format("MMM DD, YYYY")
if cc[5] > 0
tr
td Build a Small Business Website
td=moment(cc[5], 'X').format("MMM DD, YYYY")
if cc[6] > 0
tr
td Tweak HTML and CSS in CodePen
td=moment(cc[6], 'X').format("MMM DD, YYYY")
if cc[7] > 0
tr
td Build a CSS Robot
td=moment(cc[7], 'X').format("MMM DD, YYYY")
if cc[8] > 0
tr
td Get Started with jQuery
td=moment(cc[8], 'X').format("MMM DD, YYYY")
if cc[9] > 0
tr
td Traverse the DOM
td=moment(cc[9], 'X').format("MMM DD, YYYY")
if cc[10] > 0
tr
td Work with the DOM
td=moment(cc[10], 'X').format("MMM DD, YYYY")
if cc[11] > 0
tr
td Listen for DOM Events
td=moment(cc[11], 'X').format("MMM DD, YYYY")
if cc[12] > 0
tr
td Use jQuery for Styling
td=moment(cc[12], 'X').format("MMM DD, YYYY")
if cc[13] > 0
tr
td Build a MadLibs Game
td=moment(cc[13], 'X').format("MMM DD, YYYY")
if cc[14] > 0
tr
td Discover Chrome's DevTools
td=moment(cc[14], 'X').format("MMM DD, YYYY")
if cc[15] > 0
tr
td Tackle jQuery Exercises
td=moment(cc[15], 'X').format("MMM DD, YYYY")
if cc[16] > 0
tr
td Customize Bootstrap
td=moment(cc[16], 'X').format("MMM DD, YYYY")
if cc[17] > 0
tr
td Inject Animation into CSS
td=moment(cc[17], 'X').format("MMM DD, YYYY")
if cc[18] > 0
tr
td Learn Basic Computer Science
td=moment(cc[18], 'X').format("MMM DD, YYYY")
if cc[19] > 0
tr
td Learn Loops
td=moment(cc[19], 'X').format("MMM DD, YYYY")
if cc[20] > 0
tr
td Learn Computer Hardware
td=moment(cc[20], 'X').format("MMM DD, YYYY")
if cc[21] > 0
tr
td Learn Computer Networking
td=moment(cc[21], 'X').format("MMM DD, YYYY")
if cc[22] > 0
tr
td Learn Boolean Logic
td=moment(cc[22], 'X').format("MMM DD, YYYY")
if cc[23] > 0
tr
td Learn Computer Security
td=moment(cc[23], 'X').format("MMM DD, YYYY")
if cc[24] > 0
tr
td Build an Adventure Game
td=moment(cc[24], 'X').format("MMM DD, YYYY")
if cc[25] > 0
tr
td Build Rock Paper Scissors
td=moment(cc[25], 'X').format("MMM DD, YYYY")
if cc[26] > 0
tr
td Learn JavaScript For Loops
td=moment(cc[26], 'X').format("MMM DD, YYYY")
if cc[27] > 0
tr
td Learn JavaScript While Loops
td=moment(cc[27], 'X').format("MMM DD, YYYY")
if cc[28] > 0
tr
td Learn Control Flow
td=moment(cc[28], 'X').format("MMM DD, YYYY")
if cc[29] > 0
tr
td Build a Contact List
td=moment(cc[29], 'X').format("MMM DD, YYYY")
if cc[30] > 0
tr
td Build an Address Book
td=moment(cc[30], 'X').format("MMM DD, YYYY")
if cc[31] > 0
tr
td Build a Cash Register
td=moment(cc[31], 'X').format("MMM DD, YYYY")
if cc[32] > 0
tr
td Get Help the Hacker Way
td=moment(cc[32], 'X').format("MMM DD, YYYY")
if cc[33] > 0
tr
td Learn Regular Expressions
td=moment(cc[33], 'X').format("MMM DD, YYYY")
if cc[34] > 0
tr
td Pair Program on CoderByte
td=moment(cc[34], 'X').format("MMM DD, YYYY")
if cc[35] > 0
tr
td Learn Relational Database Theory
td=moment(cc[35], 'X').format("MMM DD, YYYY")
if cc[36] > 0
tr
td Pair Program to Query SQL pt 1
td=moment(cc[36], 'X').format("MMM DD, YYYY")
if cc[37] > 0
tr
td Pair Program to Query SQL pt 2
td=moment(cc[37], 'X').format("MMM DD, YYYY")
if cc[38] > 0
tr
td Pair Program to modify SQL pt 1
td=moment(cc[38], 'X').format("MMM DD, YYYY")
if cc[39] > 0
tr
td Pair Program to modify SQL pt 2
td=moment(cc[39], 'X').format("MMM DD, YYYY")
if cc[40] > 0
tr
td Learn JSON
td=moment(cc[40], 'X').format("MMM DD, YYYY")
if cc[41] > 0
tr
td Manage Source Code with Git
td=moment(cc[41], 'X').format("MMM DD, YYYY")
if cc[42] > 0
tr
td Get Started with Node.js
td=moment(cc[42], 'X').format("MMM DD, YYYY")
if cc[43] > 0
tr
td Try Node.js Events
td=moment(cc[43], 'X').format("MMM DD, YYYY")
if cc[44] > 0
tr
td Try Node.js Streams
td=moment(cc[44], 'X').format("MMM DD, YYYY")
if cc[45] > 0
tr
td Learn how Node.js Modules Work
td=moment(cc[45], 'X').format("MMM DD, YYYY")
if cc[46] > 0
tr
td Start an Express.js Server
td=moment(cc[46], 'X').format("MMM DD, YYYY")
if cc[47] > 0
tr
td Use Socket.io
td=moment(cc[47], 'X').format("MMM DD, YYYY")
if cc[48] > 0
tr
td Use Redis to Persist Data
td=moment(cc[48], 'X').format("MMM DD, YYYY")
if cc[49] > 0
tr
td Dive Deeper into Express.js
td=moment(cc[49], 'X').format("MMM DD, YYYY")
if cc[50] > 0
tr
td Set up Express.js Middleware
td=moment(cc[50], 'X').format("MMM DD, YYYY")
if cc[51] > 0
tr
td Take Advantage of Parameters
td=moment(cc[51], 'X').format("MMM DD, YYYY")
if cc[52] > 0
tr
td Add the Body Parser
td=moment(cc[52], 'X').format("MMM DD, YYYY")
if cc[53] > 0
tr
td Configure Routes in Express.js
td=moment(cc[53], 'X').format("MMM DD, YYYY")
if cc[54] > 0
tr
td Try MongoDB
td=moment(cc[54], 'X').format("MMM DD, YYYY")
if cc[55] > 0
tr
td Get Started with Angular.js
td=moment(cc[55], 'X').format("MMM DD, YYYY")
if cc[56] > 0
tr
td Apply Angular.js Directives
td=moment(cc[56], 'X').format("MMM DD, YYYY")
if cc[57] > 0
tr
td Power Forms with Angular.js
td=moment(cc[57], 'X').format("MMM DD, YYYY")
if cc[58] > 0
tr
td Customize Angular.js Directives
td=moment(cc[58], 'X').format("MMM DD, YYYY")
if cc[59] > 0
tr
td Create Angular.js Services
td=moment(cc[59], 'X').format("MMM DD, YYYY")
h3 Danger Zone h3 Danger Zone
button.btn.btn-danger.confirm-deletion button.btn.btn-danger.confirm-deletion
span.ion-trash-b span.ion-trash-b

View File

@ -3,34 +3,27 @@ block content
.row .row
.col-sm-12.col-md-8.col-xs-12 .col-sm-12.col-md-8.col-xs-12
.panel.panel-primary .panel.panel-primary
.panel-heading Challenge: #{name} .panel-heading #{name} (takes #{time} minutes)
.panel.panel-body .panel.panel-body
.challenge-brief .embed-responsive.embed-responsive-16by9
h3.text-center iframe.embed-responsive-item(src='//player.vimeo.com/video/#{video}')
span.ion-android-clock h3 Steps:
span Takes about #{time} h4
.btn.btn-primary.btn-large.btn-block.start-challenge Start the challenge ol
.challenge-content.hidden-element for step in steps
.responsive-container li!= step
iframe(src='//player.vimeo.com/video/#{video}', frameborder='0', webkitallowfullscreen='', mozallowfullscreen='', allowfullscreen='') .btn.btn-primary.btn-big.btn-block.completed-challenge I've completed this challenge
h3 Steps: .ten-pixel-break
h4 .btn.btn-success.btn-large.btn-block.skip-challenge I want to skip this challenge for now
ol - if (cc[2] > 0)
for step in steps .panel-footer.text-center
li!= step span Need a break? Check out our:&nbsp;
.btn.btn-primary.btn-large.btn-block.completed-challenge I've completed this challenge a(href="https://gitter.im/FreeCodeCamp/FreeCodeCamp", target="_blank") Chat Room
.ten-pixel-break | &nbsp;,&nbsp;
.btn.btn-success.btn-large.btn-block.skip-challenge I want to skip this challenge for now a(href="http://blog.freecodecamp.com", target="_blank") Blog
.panel-footer.text-center | &nbsp;,&nbsp;or&nbsp;
span Need a break? Check out our:&nbsp; a(href="http://forum.freecodecamp.com", target="_blank") Forum
a(href="https://gitter.im/FreeCodeCamp/FreeCodeCamp", target="_blank") Chat Room | .
| &nbsp;,&nbsp;
a(href="http://blog.freecodecamp.com", target="_blank") Blog
| &nbsp;,&nbsp;
a(href="https://twitter.com/freecodecamp", target="_blank") Twitter Feed
| &nbsp;,&nbsp;or&nbsp;
a(href="https://reddit.com/r/freecodecamp", target="_blank") Subreddit
| .
#complete-dialog.modal #complete-dialog.modal
.modal-dialog.animated.zoomIn.fast-animation .modal-dialog.animated.zoomIn.fast-animation
.modal-content .modal-content

13
views/chromebook.jade Normal file
View File

@ -0,0 +1,13 @@
extends layout
block content
.jumbotron.negative-15.text-center
h1.hug-top Win a Chromebook
h2 Quincy won a Chromebook at a San Francisco HTML5 meetup at Google.
h3 He wants to give it to someone who needs it.
img.image-responsive(src="https://s3.amazonaws.com/freecodecamp/chromebook.jpg" alt="HP Chromebook 11")
script(src='//widget-prime.rafflecopter.com/launch.js')
a#rcwidget_a7khonhd.rcptr(href='http://www.rafflecopter.com/rafl/display/d70901b10/', rel='nofollow', data-raflid='d70901b10', data-theme='classic', data-template='') a Rafflecopter giveaway
.animated.zoomInDown.delay-10
p Finished signing up for the giveaway?
a.btn.btn-cta.signup-btn.btn-primary(href="/login") Start learning to code (it's free)
br

View File

@ -1,18 +1,18 @@
extends layout extends layout
block content block content
.jumbotron .jumbotron.negative-15
h1.animated.lightSpeedIn.text-center We'll code software solutions for your nonprofit, for free! h1.animated.lightSpeedIn.text-center.hug-top We'll code software solutions for your nonprofit, for free!
.animated.fadeIn.delay-2.landing-panel-body .animated.fadeIn.delay-2.landing-panel-body
h3 Our students will help you build that donor tracking system, community message board, or whatever your organization needs,&nbsp; h3 Our students will help you build that donor tracking system, community message board, or whatever your organization needs,&nbsp;
strong at no cost. strong at no cost.
h3 In exchange, we ask only that you: h3 In exchange, we ask only that you:
h4 h4
ul ul
li &#8226 meet with them regularly to provide direction and answer questions. li &#8226 Meet with them regularly to provide direction and answer questions
li &#8226 clearly communicate your project's goals: what will this project solve, and for whom? li &#8226 Clearly communicate your project's goals: what will this project solve, and for whom?
li &#8226 understand that they will build your project using JavaScript frameworks (as opposed to older or proprietary tools) li &#8226 Understand that they will build your project using JavaScript frameworks (as opposed to older or proprietary tools)
li &#8226 keep your expectations high. Our students' goal is to produce work that's up to your standards. li &#8226 Keep your expectations high. Our students' goal is to produce work that's up to your standards
h3 If you're OK with these terms, great! We'd love to help you! Fill in this form and we'll get right back to you. h3 If you're OK with these terms, great! We'd love to help you! Fill in this form and we'll get right back to you.
form.form-horizontal(role='form', method='POST') form.form-horizontal(role='form', method='POST')
input(type='hidden', name='_csrf', value=_csrf) input(type='hidden', name='_csrf', value=_csrf)

View File

@ -0,0 +1,6 @@
extends layout
block content
.jumbotron.negative-15.text-center
h1.hug-top Congratulations on finishing the first 100 hours of Free Code Camp!
h2 Now you're ready to continue your learning by building solutions for nonprofits!
h3 Private message Quincy Larson in the Free Code Camp Chatroom and he'll help you get started on your first project.

View File

@ -1,30 +1,30 @@
extends layout extends layout
block content block content
.jumbotron .jumbotron.negative-15
.text-center .text-center
h1.hug-top Code with Us h1.hug-top Code with Us
h2 Let's learn to code by building projects for nonprofits h2 Let's learn to code by building projects for nonprofits
.row .row
.col-xs-12.col-sm-12.col-md-3 .col-xs-12.col-sm-12.col-md-3
h3 Get Connected h3.nowrap Get Connected
.negative-45 .negative-45
span.landing-icon.ion-network.text-primary(title='Get great references and connections to help you get a job') span.landing-icon.ion-network.text-primary(title='Get great references and connections to help you get a job')
.negative-45 .negative-45
p.landing-p Join a community of motivated professionals learning to code. p.landing-p Join a community of motivated professionals learning to code.
.col-xs-12.col-sm-12.col-md-3 .col-xs-12.col-sm-12.col-md-3
h3 Learn JavaScript h3.nowrap Learn JavaScript
.negative-45 .negative-45
span.landing-icon.ion-settings.text-primary(title='Learn to code') span.landing-icon.ion-settings.text-primary(title='Learn to code')
.negative-45 .negative-45
p.landing-p Work together on Full Stack JavaScript coding challenges. p.landing-p Work together on Full Stack JavaScript coding challenges.
.col-xs-12.col-sm-12.col-md-3 .col-xs-12.col-sm-12.col-md-3
h3 Build your Portfolio h3.nowrap Build your Portfolio
.negative-45 .negative-45
span.landing-icon.ion-social-github.text-primary(title='Build a portfolio of apps for nonprofits') span.landing-icon.ion-social-github.text-primary(title='Build a portfolio of apps for nonprofits')
.negative-45 .negative-45
p.landing-p Build apps that solve real problems for real people. p.landing-p Build apps that solve real problems for real people.
.col-xs-12.col-sm-12.col-md-3 .col-xs-12.col-sm-12.col-md-3
h3 Help Nonprofits h3.nowrap Help Nonprofits
.negative-45 .negative-45
span.landing-icon.ion-ios7-people.text-primary(title='Help nonprofits') span.landing-icon.ion-ios7-people.text-primary(title='Help nonprofits')
.negative-45 .negative-45
@ -37,11 +37,4 @@ block content
br br
include partials/about-us include partials/about-us
br br
include partials/faq include partials/faq
br
.jumbotron
.text-center
a.btn.btn-cta.signup-btn.cta.btn-primary(href="/login") Start learning to code (it's free)
br
br
a.btn.nonprofit-cta.btn-success(href="/nonprofits") I'm with a nonprofit and want help coding something

View File

@ -0,0 +1,12 @@
extends layout
block content
.jumbotron.negative-15.text-center
h1.hug-top Win a Chromebook
h2 Sign up for Inbox.js - JavaScript challenges in your inbox - and enter to win a Chromebook!
img.image-responsive(src="https://s3.amazonaws.com/freecodecamp/chromebook.jpg" alt="HP Chromebook 11")
script(src='//widget-prime.rafflecopter.com/launch.js')
a#rcwidget_a7khonhd.rcptr(href='http://www.rafflecopter.com/rafl/display/d70901b10/', rel='nofollow', data-raflid='d70901b10', data-theme='classic', data-template='') a Rafflecopter giveaway
.animated.zoomInDown.delay-10
p Finished signing up for the giveaway?
a.btn.btn-cta.signup-btn.btn-primary(href="/login") Start learning to code (it's free)
br

View File

@ -9,7 +9,6 @@ html
meta(http-equiv='X-UA-Compatible', content='IE=edge') meta(http-equiv='X-UA-Compatible', content='IE=edge')
meta(name='viewport', content='width=device-width, initial-scale=1.0') meta(name='viewport', content='width=device-width, initial-scale=1.0')
meta(name='csrf-token', content=_csrf) meta(name='csrf-token', content=_csrf)
title #{title} - Hackathon Starter
!= css('main') != css('main')
body body

View File

@ -0,0 +1,11 @@
extends layout
block content
.jumbotron.negative-15.text-center
h1.hug-top Live Pair Programming
h2 We live pair program every Tuesday from 6 p.m. to 7 p.m. (Pacific Time). Our next session is December 30th.
br
a.btn.btn-cta.signup-btn.btn-primary(href="http://www.crowdcast.io/e/freecodecamp-live_2" target='_blank') Watch our most recent pair programming video
p Got 3 minutes? Start learning to code with us!
br
a.btn.btn-cta.signup-btn.btn-primary(href="/login") Start learning to code (it's free)
br

View File

@ -0,0 +1,27 @@
extends ./layout
block content
.row
.col-sm-12.col-md-8.col-xs-12
.panel.panel-primary
.panel-heading #{name} (takes #{time} minutes)
.panel.panel-body
//.embed-responsive.embed-responsive-16by9
// iframe.embed-responsive-item(src='//player.vimeo.com/video/#{video}')
h3 Steps:
h4
ol
for step in steps
li!= step
a.btn.btn-primary.btn-big.btn-block.completed-challenge(href='/challenges/34') Take me back to the Pair Programming Challenge
.panel-footer.text-center
span Need a break? Check out our:&nbsp;
a(href="https://gitter.im/FreeCodeCamp/FreeCodeCamp", target="_blank") Chat Room
| &nbsp;,&nbsp;
a(href="http://blog.freecodecamp.com", target="_blank") Blog
| &nbsp;,&nbsp;
a(href="https://twitter.com/freecodecamp", target="_blank") Twitter Feed
| &nbsp;,&nbsp;or&nbsp;
a(href="https://reddit.com/r/freecodecamp", target="_blank") Subreddit
| .
.col-sm-12.col-md-4.col-xs-12
include ./partials/challenges

View File

@ -1,99 +1,30 @@
.panel.panel-primary .panel.panel-primary
.panel-heading.landing-panel-heading.text-center We are Free Code Camp .panel-heading.landing-panel-heading.text-center What Our Code Campers are Saying
.panel-body .panel-body
.landing-panel-body.text-center .landing-panel-body.text-center
.col-xs-12
h2.text-center Our team
.fifteen-pixel-break
script.
$(function () {
var parent = $("#shuffle");
var divs = parent.children();
while (divs.length) {
parent.append(divs.splice(Math.floor(Math.random() * divs.length), 1)[0]);
}
});
#shuffle
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Nique Devereaux
h4.negative-10.text-nowrap Alliance Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/nique-devereaux.jpg' alt="Nique Devereaux's picture")
h4.text-nowrap Tempe, Arizona
p.negative-10 "Gamer ever since Pong. Coder ever since I discovered how much I enjoy telling machines what to do."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Berkeley Martinez
h4.negative-10.text-nowrap JavaScript Engineer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/berkeley-martinez.jpg' alt="Berkeley Martinez's picture")
h4.text-nowrap San Francisco, California
p.negative-10 "Former mechanical engineer. Coding is pure creation. I can fly, but only once."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Mychael Zuniga
h4.negative-10.text-nowrap JavaScript Engineer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/mychael-zuniga.jpg' alt="Mychael Zuniga's picture")
h4.text-nowrap San Diego, California
p.negative-10 "I'm a college student who turned to code as an avenue for creative expression. I love political science and economics."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Brian Ball
h4.negative-10.text-nowrap Product Manager
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/brian-ball.jpg' alt="Brian Ball's picture")
h4.text-nowrap San Francisco, California
p.negative-10 "I build products people use. I'm fascinated by how fast the internet is changing the world."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Darryl Dixon
h4.negative-10.text-nowrap Community Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/darryl-dixon.jpg' alt="Darryl Dixon's picture")
h4.text-nowrap Newport News, Virginia
p.negative-10 "I'm a self-taught graphic designer. I'm learning web development here and want you to learn with me."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Kathy O'Driscoll
h4.negative-10.text-nowrap Community Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/kathy-odriscoll.jpg' alt="Kathy O'Driscoll's picture")
h4.text-nowrap Los Angeles, California
p.negative-10 "Mother and grandmother. All my life I've dabbled in getting machines to do my bidding. Now it's becoming my career."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Ryan Malm
h4.negative-10.text-nowrap Visual Designer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/ryan-malm.jpg' alt="Ryan Malm's picture")
h4.text-nowrap Omaha, Nebraska
p.negative-10 "I love origami, piano, and playing minecraft with my kids. My JavaScript grows stronger every day."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Charles Watson
h4.negative-10.text-nowrap iOS Engineer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/charles-watson.jpg' alt="Charles Watson's picture")
h4.text-nowrap Minneapolis, Minnesota
p.negative-10 "I skipped college. I build iOS apps. I love the obstacles and puzzles that coding presents me."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Quincy Larson
h4.negative-10.text-nowrap Instructional Designer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/quincy-larson.jpg' alt="Quincy Larson's picture")
h4.text-nowrap San Francisco, California
p.negative-10 "I worked as a school director in China before learning to code. It's clear that everyone can - and should - learn to code."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Mark Howard
h4.negative-10.text-nowrap Digital Marketer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/mark-howard.jpg' alt="Mark Howard's picture")
h4.text-nowrap San Diego, California
p.negative-10 "I enjoy helping people, at scale. Code is the best way to do that."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Nathan Leniz
h4.negative-10.text-nowrap Community Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/nathan-leniz.jpg' alt="Nathan Leniz's picture")
h4.text-nowrap Seoul, South Korea
p.negative-10 "I learned to code for the games, and stayed for the algorithms."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Jason Rueckert
h4.negative-10.text-nowrap Live Content Manager
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/jason-rueckert.jpg' alt="Jason Rueckert's picture")
h4.text-nowrap Seattle, Washington
p.negative-10 "My high school job was testing basketball shoes for Nike. I learned code to work smarter, not harder. I have no thyroid."
.col-xs-12
h2.text-center Our chat room
.embed-responsive.embed-responsive-4by3
iframe(style="display: none;" onload="this.style.display='block';" src="https://gitter.im/FreeCodeCamp/FreeCodeCamp")
.col-xs-12
h2.text-center What our students are saying
.col-xs-12 .col-xs-12
.masonry-row .masonry-row
.masonry-block
.masonry-relative
blockquote.twitter-tweet(lang='en')
p
| My boss was impressed by the troubleshooting I learned through
a(href='https://twitter.com/FreeCodeCamp') @FreeCodeCamp
| and I just got a raise! Sweet!
a(href='http://t.co/om7DqQoyAr') http://t.co/om7DqQoyAr
| &mdash; Alec Hansen (@AlecMHansen)
a(href='https://twitter.com/AlecMHansen/status/544975882771648512') December 16, 2014
script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8')
.masonry-block
.masonry-relative
blockquote.twitter-tweet(lang='en')
p
a(href='https://twitter.com/DrivenByTatiana') @DrivenByTatiana
a(href='https://twitter.com/FreeCodeCamp') @FreeCodeCamp
| - Cool. I&apos;m currently working thru it to improve my JavaScript. The community is very welcoming! &#x1F604;
| &mdash; a touch of curar&eacute; (@cynthialanel)
a(href='https://twitter.com/cynthialanel/status/544768565467807744') December 16, 2014
script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8')
.masonry-block .masonry-block
.masonry-relative .masonry-relative
blockquote.twitter-tweet(lang='en') blockquote.twitter-tweet(lang='en')
@ -220,21 +151,6 @@
| &mdash; Angel Jose (@ajose01) | &mdash; Angel Jose (@ajose01)
a(href='https://twitter.com/ajose01/status/532729251754033152') November 13, 2014 a(href='https://twitter.com/ajose01/status/532729251754033152') November 13, 2014
script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8') script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8')
.masonry-block
.masonry-relative
blockquote.twitter-tweet(lang='en')
p
| no school today: with
a(href='https://twitter.com/BlueninjaSF') @blueninjaSF
| at
a(href='https://twitter.com/AWSloft') @awsloft
| working on
a(href='https://twitter.com/FreeCodeCamp') @freecodecamp
| - first website. check!
a(href='http://t.co/yJ8ycEti9B') pic.twitter.com/yJ8ycEti9B
| &mdash; brian ball (@brianball)
a(href='https://twitter.com/brianball/status/532243325290827777') November 11, 2014
script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8')
.masonry-block .masonry-block
.masonry-relative .masonry-relative
blockquote.twitter-tweet(lang='en') blockquote.twitter-tweet(lang='en')
@ -250,3 +166,91 @@
| &mdash; Deb Simon-Heinfeld (@debBlufftonAGS) | &mdash; Deb Simon-Heinfeld (@debBlufftonAGS)
a(href='https://twitter.com/debBlufftonAGS/status/532198725129867265') November 11, 2014 a(href='https://twitter.com/debBlufftonAGS/status/532198725129867265') November 11, 2014
script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8') script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8')
.panel.panel-primary
.panel-heading.landing-panel-heading.text-center Our Team of Volunteers
.panel-body
.landing-panel-body.text-center
.col-xs-12
script.
$(function () {
var parent = $("#shuffle");
var divs = parent.children();
while (divs.length) {
parent.append(divs.splice(Math.floor(Math.random() * divs.length), 1)[0]);
}
});
#shuffle
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Nique Devereaux
h4.negative-10.text-nowrap Alliance Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/nique-devereaux.jpg' alt="Nique Devereaux's picture")
h4.text-nowrap Tempe, Arizona
p.negative-10 "Gamer ever since Pong. Coder ever since I discovered how much I enjoy telling machines what to do."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Berkeley Martinez
h4.negative-10.text-nowrap JavaScript Engineer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/berkeley-martinez.jpg' alt="Berkeley Martinez's picture")
h4.text-nowrap San Francisco, California
p.negative-10 "Former mechanical engineer. Coding is pure creation. I can fly, but only once."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Mychael Zuniga
h4.negative-10.text-nowrap JavaScript Engineer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/mychael-zuniga.jpg' alt="Mychael Zuniga's picture")
h4.text-nowrap San Diego, California
p.negative-10 "I'm a college student who turned to code as an avenue for creative expression. I love political science and economics."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Brian Ball
h4.negative-10.text-nowrap Product Manager
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/brian-ball.jpg' alt="Brian Ball's picture")
h4.text-nowrap San Francisco, California
p.negative-10 "I build products people use. I'm fascinated by how fast the internet is changing the world."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Darryl Dixon
h4.negative-10.text-nowrap Community Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/darryl-dixon.jpg' alt="Darryl Dixon's picture")
h4.text-nowrap Newport News, Virginia
p.negative-10 "I'm a self-taught graphic designer. I'm learning web development here and want you to learn with me."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Kathy O'Driscoll
h4.negative-10.text-nowrap Community Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/kathy-odriscoll.jpg' alt="Kathy O'Driscoll's picture")
h4.text-nowrap Los Angeles, California
p.negative-10 "Mother and grandmother. All my life I've dabbled in getting machines to do my bidding. Now it's becoming my career."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Ryan Malm
h4.negative-10.text-nowrap Visual Designer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/ryan-malm.jpg' alt="Ryan Malm's picture")
h4.text-nowrap Omaha, Nebraska
p.negative-10 "I love origami, piano, and playing minecraft with my kids. My JavaScript grows stronger every day."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Charles Watson
h4.negative-10.text-nowrap iOS Engineer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/charles-watson.jpg' alt="Charles Watson's picture")
h4.text-nowrap Minneapolis, Minnesota
p.negative-10 "I skipped college. I build iOS apps. I love the obstacles and puzzles that coding presents me."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Quincy Larson
h4.negative-10.text-nowrap Instructional Designer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/quincy-larson.jpg' alt="Quincy Larson's picture")
h4.text-nowrap San Francisco, California
p.negative-10 "I worked as a school director in China before learning to code. It's clear that everyone can - and should - learn to code."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Mark Howard
h4.negative-10.text-nowrap Digital Marketer
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/mark-howard.jpg' alt="Mark Howard's picture")
h4.text-nowrap San Diego, California
p.negative-10 "I enjoy helping people, at scale. Code is the best way to do that."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Nathan Leniz
h4.negative-10.text-nowrap Community Builder
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/nathan-leniz.jpg' alt="Nathan Leniz's picture")
h4.text-nowrap Seoul, South Korea
p.negative-10 "I learned to code for the games, and stayed for the algorithms."
.col-xs-12.col-sm-4.col-md-3.team-member
h3.negative-10.text-nowrap Jason Rueckert
h4.negative-10.text-nowrap Live Content Manager
img.profile-image(src='https://s3.amazonaws.com/freecodecamp/jason-rueckert.jpg' alt="Jason Rueckert's picture")
h4.text-nowrap Seattle, Washington
p.negative-10 "My high school job was testing basketball shoes for Nike. I learned code to work smarter, not harder. I have no thyroid."

View File

@ -2,135 +2,185 @@
.panel-heading Challenges .panel-heading Challenges
.panel-body .panel-body
ol(start='0') ol(start='0')
h4 Web Design li
li a(href="/challenges/0", class="#{ cc[0] > 0 ? 'strikethrough' : '' }") Learn how Free Code Camp Works
a(href="/challenges/0", class="#{ cc.indexOf(0) > -1 ? 'strikethrough' : '' }") A One-minute Introduction to Free Code Camp | &nbsp; (2 minutes)
| &nbsp; (1 min) li
li a(href="/challenges/1", class="#{ cc[1] > 0 ? 'strikethrough' : '' }") Join Our Chat Room
a(href="/challenges/1", class="#{ cc.indexOf(1) > -1 ? 'strikethrough' : '' }") Enter the Free Code Camp Chat Room | &nbsp; (5 minutes)
| &nbsp; (10 mins) li
li a(href="/challenges/2", class="#{ cc[2] > 0 ? 'strikethrough' : '' }") Subscribe to Our Subreddit
a(href="/challenges/2", class="#{ cc.indexOf(2) > -1 ? 'strikethrough' : '' }") Create a Website and Deploy it to the Internet | &nbsp; (5 minutes)
| &nbsp; (5 mins) li
li a(href="/challenges/3", class="#{ cc[3] > 0 ? 'strikethrough' : '' }") Build a Personal Website
a(href="/challenges/3", class="#{ cc.indexOf(3) > -1 ? 'strikethrough' : '' }") Install Github's Atom Text Editor | &nbsp; (60 minutes)
| &nbsp; (5 mins) li
li a(href="/challenges/4", class="#{ cc[4] > 0 ? 'strikethrough' : '' }") Build a Responsive Blog Theme
a(href="/challenges/4", class="#{ cc.indexOf(4) > -1 ? 'strikethrough' : '' }") Modify and Redeploy Your Website | &nbsp; (60 minutes)
| &nbsp; (5 mins) li
li a(href="/challenges/5", class="#{ cc[5] > 0 ? 'strikethrough' : '' }") Build a Small Business Website
a(href="/challenges/5", class="#{ cc.indexOf(5) > -1 ? 'strikethrough' : '' }") Add Dynamic Content to your Website | &nbsp; (60 minutes)
| &nbsp; (10 mins) li
li a(href="/challenges/6", class="#{ cc[6] > 0 ? 'strikethrough' : '' }") Tweak HTML and CSS in CodePen
a(href="/challenges/6", class="#{ cc.indexOf(6) > -1 ? 'strikethrough' : '' }") Codecademy's HTML & CSS track | &nbsp; (10 minutes)
| &nbsp; (7 hrs) li
li a(href="/challenges/7", class="#{ cc[7] > 0 ? 'strikethrough' : '' }") Build a CSS Robot
a(href="/challenges/7", class="#{ cc.indexOf(7) > -1 ? 'strikethrough' : '' }") Experiment with HTML and CSS in CodePen | &nbsp; (60 minutes)
| &nbsp; (10 mins) li
li a(href="/challenges/8", class="#{ cc[8] > 0 ? 'strikethrough' : '' }") Get Started with jQuery
a(href="/challenges/8", class="#{ cc.indexOf(8) > -1 ? 'strikethrough' : '' }") Codecademy's jQuery track | &nbsp; (30 minutes)
| &nbsp; (3 hrs) li
li a(href="/challenges/9", class="#{ cc[9] > 0 ? 'strikethrough' : '' }") Traverse the DOM
a(href="/challenges/9", class="#{ cc.indexOf(9) > -1 ? 'strikethrough' : '' }") Code School's Try jQuery | &nbsp; (30 minutes)
| &nbsp; (4 hrs) li
li a(href="/challenges/10", class="#{ cc[10] > 0 ? 'strikethrough' : '' }") Work with the DOM
a(href="/challenges/10", class="#{ cc.indexOf(10) > -1 ? 'strikethrough' : '' }") Code School's Discover DevTools | &nbsp; (30 minutes)
| &nbsp; (2 hrs) li
li a(href="/challenges/11", class="#{ cc[11] > 0 ? 'strikethrough' : '' }") Listen for DOM Events
a(href="/challenges/11", class="#{ cc.indexOf(11) > -1 ? 'strikethrough' : '' }") jQuery Exercises | &nbsp; (30 minutes)
| &nbsp; (1 hr) li
li a(href="/challenges/12", class="#{ cc[12] > 0 ? 'strikethrough' : '' }") Use jQuery for Styling
a(href="/challenges/12", class="#{ cc.indexOf(12) > -1 ? 'strikethrough' : '' }") Customize Bootstrap with Bootswatch | &nbsp; (30 minutes)
| &nbsp; (10 mins) li
li a(href="/challenges/13", class="#{ cc[13] > 0 ? 'strikethrough' : '' }") Build a MadLibs Game
a(href="/challenges/13", class="#{ cc.indexOf(13) > -1 ? 'strikethrough' : '' }") Inject Life with CSS Transformations | &nbsp; (60 minutes)
| &nbsp; (15 mins) li
h4 Computer Science and JavaScript a(href="/challenges/14", class="#{ cc[14] > 0 ? 'strikethrough' : '' }") Discover Chrome's DevTools
li | &nbsp; (90 minutes)
a(href="/challenges/14", class="#{ cc.indexOf(14) > -1 ? 'strikethrough' : '' }") Codecademy's JavaScript track li
| &nbsp; (10 hrs) a(href="/challenges/15", class="#{ cc[15] > 0 ? 'strikethrough' : '' }") Tackle jQuery Exercises
li | &nbsp; (60 minutes)
a(href="/challenges/15", class="#{ cc.indexOf(15) > -1 ? 'strikethrough' : '' }") Stanford's Introduction to Computer Science li
| &nbsp; (24 hrs) a(href="/challenges/16", class="#{ cc[16] > 0 ? 'strikethrough' : '' }") Customize Bootstrap
li | &nbsp; (10 minutes)
a(href="/challenges/16", class="#{ cc.indexOf(16) > -1 ? 'strikethrough' : '' }") Get Help The Hacker Way with RSAP li
| &nbsp; (30 mins) a(href="/challenges/17", class="#{ cc[17] > 0 ? 'strikethrough' : '' }") Inject Animation into CSS
li | &nbsp; (15 minutes)
a(href="/challenges/17", class="#{ cc.indexOf(17) > -1 ? 'strikethrough' : '' }") Learn Regular Expressions li
| &nbsp; (1 hr) a(href="/challenges/18", class="#{ cc[18] > 0 ? 'strikethrough' : '' }") Learn Basic Computer Science
li | &nbsp; (120 minutes)
a(href="/challenges/18", class="#{ cc.indexOf(18) > -1 ? 'strikethrough' : '' }") Start Your First Pair Programming Session li
| &nbsp; (30 mins | Pair) a(href="/challenges/19", class="#{ cc[19] > 0 ? 'strikethrough' : '' }") Learn Loops
li | &nbsp; (120 minutes)
a(href="/challenges/19", class="#{ cc.indexOf(19) > -1 ? 'strikethrough' : '' }") Easy Algorithm Scripting Challenges on Coderbyte li
| &nbsp; (15 hrs | Pair) a(href="/challenges/20", class="#{ cc[20] > 0 ? 'strikethrough' : '' }") Learn Computer Hardware
li | &nbsp; (120 minutes)
a(href="/challenges/20", class="#{ cc.indexOf(20) > -1 ? 'strikethrough' : '' }") Stanford's Relational Databases Mini-course li
| &nbsp; (1 hr) a(href="/challenges/21", class="#{ cc[21] > 0 ? 'strikethrough' : '' }") Learn Computer Networking
li | &nbsp; (120 minutes)
a(href="/challenges/21", class="#{ cc.indexOf(21) > -1 ? 'strikethrough' : '' }") Stanford's SQL Mini-course li
| &nbsp; (4 hrs | Pair) a(href="/challenges/22", class="#{ cc[22] > 0 ? 'strikethrough' : '' }") Learn Boolean Logic
li | &nbsp; (120 minutes)
a(href="/challenges/22", class="#{ cc.indexOf(22) > -1 ? 'strikethrough' : '' }") Stanford's JSON Mini-course li
| &nbsp; (1 hrs | Pair) a(href="/challenges/23", class="#{ cc[23] > 0 ? 'strikethrough' : '' }") Learn Computer Security
li | &nbsp; (120 minutes)
a(href="/challenges/23", class="#{ cc.indexOf(23) > -1 ? 'strikethrough' : '' }") Medium Algorithm Scripting Challenges on Coderbyte li
| &nbsp; (15 hrs | Pair) a(href="/challenges/24", class="#{ cc[24] > 0 ? 'strikethrough' : '' }") Build an Adventure Game
li | &nbsp; (60 minutes)
a.disabled(href="/challenges/24", class="#{ cc.indexOf(24) > -1 ? 'strikethrough' : '' }") Build an Interview Question Machine li
| &nbsp; (5 hrs | Pair) a(href="/challenges/25", class="#{ cc[25] > 0 ? 'strikethrough' : '' }") Build Rock Paper Scissors
li | &nbsp; (60 minutes)
a.disabled(href="/challenges/25", class="#{ cc.indexOf(25) > -1 ? 'strikethrough' : '' }") Build a Text-based Adventure li
| &nbsp; (5 hrs | Pair) a(href="/challenges/26", class="#{ cc[26] > 0 ? 'strikethrough' : '' }") Learn JavaScript For Loops
li | &nbsp; (60 minutes)
a.disabled(href="/challenges/26", class="#{ cc.indexOf(26) > -1 ? 'strikethrough' : '' }") Hard Algorithm Scripting Challenges on Coderbyte li
| &nbsp; (15 hrs | Pair) a(href="/challenges/27", class="#{ cc[27] > 0 ? 'strikethrough' : '' }") Learn JavaScript While Loops
h4 Full Stack JavaScript Development | &nbsp; (60 minutes)
li li
a.disabled(href="/challenges/27", class="#{ cc.indexOf(27) > -1 ? 'strikethrough' : '' }") Code School's Try Git a(href="/challenges/28", class="#{ cc[28] > 0 ? 'strikethrough' : '' }") Learn Control Flow
| &nbsp; (30 mins) | &nbsp; (60 minutes)
li li
a.disabled(href="/challenges/28", class="#{ cc.indexOf(28) > -1 ? 'strikethrough' : '' }") Install Node.js a(href="/challenges/29", class="#{ cc[29] > 0 ? 'strikethrough' : '' }") Build a Contact List
| &nbsp; (1 hr) | &nbsp; (60 minutes)
li li
a.disabled(href="/challenges/29", class="#{ cc.indexOf(29) > -1 ? 'strikethrough' : '' }") Clone a Github Repo a(href="/challenges/30", class="#{ cc[30] > 0 ? 'strikethrough' : '' }") Build an Address Book
| &nbsp; (15 mins) | &nbsp; (60 minutes)
li li
a.disabled(href="/challenges/30", class="#{ cc.indexOf(30) > -1 ? 'strikethrough' : '' }") Deploy an app to Heroku a(href="/challenges/31", class="#{ cc[31] > 0 ? 'strikethrough' : '' }") Build a Cash Register
| &nbsp; (15 mins) | &nbsp; (60 minutes)
li li
a.disabled(href="/challenges/31", class="#{ cc.indexOf(31) > -1 ? 'strikethrough' : '' }") Code School's Real-time web with Node.JS a(href="/challenges/32", class="#{ cc[32] > 0 ? 'strikethrough' : '' }") Get Help the Hacker Way
| &nbsp; (5 hrs) | &nbsp; (30 minutes)
li li
a.disabled(href="/challenges/32", class="#{ cc.indexOf(32) > -1 ? 'strikethrough' : '' }") Try MongoDB a(href="/challenges/33", class="#{ cc[33] > 0 ? 'strikethrough' : '' }") Learn Regular Expressions
| &nbsp; (30 mins) | &nbsp; (60 minutes)
li li
a.disabled(href="/challenges/33", class="#{ cc.indexOf(33) > -1 ? 'strikethrough' : '' }") Explore your Network with the LinkedIn API a(href="/challenges/34", class="#{ cc[34] > 0 ? 'strikethrough' : '' }") Pair Program on CoderByte
| &nbsp; (1 hr) | &nbsp; (60 minutes)
li li
a.disabled(href="/challenges/34", class="#{ cc.indexOf(34) > -1 ? 'strikethrough' : '' }") Build your first API a(href="/challenges/35", class="#{ cc[35] > 0 ? 'strikethrough' : '' }") Learn Relational Database Theory
| &nbsp; (10 hrs | Pair) | &nbsp; (30 minutes)
li li
a.disabled(href="/challenges/35", class="#{ cc.indexOf(35) > -1 ? 'strikethrough' : '' }") Aggregate Data with Chron Jobs and Screen Scraping a(href="/challenges/36", class="#{ cc[36] > 0 ? 'strikethrough' : '' }") Pair Program to Query SQL pt 1
| &nbsp; (10 hrs | Pair) | &nbsp; (90 minutes)
li li
a.disabled(href="/challenges/36", class="#{ cc.indexOf(36) > -1 ? 'strikethrough' : '' }") Code School's Shaping up with Angular.JS a(href="/challenges/37", class="#{ cc[37] > 0 ? 'strikethrough' : '' }") Pair Program to Query SQL pt 2
| &nbsp; (5 hrs) | &nbsp; (60 minutes)
li li
a.disabled(href="/challenges/37", class="#{ cc.indexOf(37) > -1 ? 'strikethrough' : '' }") Reverse Engineer SnapChat a(href="/challenges/38", class="#{ cc[38] > 0 ? 'strikethrough' : '' }") Pair Program to modify SQL pt 1
| &nbsp; (50 hrs | Pair) | &nbsp; (90 minutes)
li li
a.disabled(href="/challenges/38", class="#{ cc.indexOf(38) > -1 ? 'strikethrough' : '' }") Reverse Engineer Reddit a(href="/challenges/39", class="#{ cc[39] > 0 ? 'strikethrough' : '' }") Pair Program to modify SQL pt 2
| &nbsp; (50 hrs | Pair) | &nbsp; (60 minutes)
li li
a.disabled(href="/challenges/39", class="#{ cc.indexOf(39) > -1 ? 'strikethrough' : '' }") Reverse Engineer Pintrest a(href="/challenges/40", class="#{ cc[40] > 0 ? 'strikethrough' : '' }") Learn JSON
| &nbsp; (50 hrs | Pair) | &nbsp; (30 minutes)
li li
a.disabled(href="/challenges/40", class="#{ cc.indexOf(40) > -1 ? 'strikethrough' : '' }") Help a Nonprofit: Team Project a(href="/challenges/41", class="#{ cc[41] > 0 ? 'strikethrough' : '' }") Manage Source Code with Git
| &nbsp; (150 hrs | Pair) | &nbsp; (30 minutes)
li li
a.disabled(href="/challenges/41", class="#{ cc.indexOf(41) > -1 ? 'strikethrough' : '' }") Help a Nonprofit: Solo Project a(href="/challenges/42", class="#{ cc[42] > 0 ? 'strikethrough' : '' }") Get Started with Node.js
| &nbsp; (150 hrs | Pair) | &nbsp; (45 minutes)
li li
a.disabled(href="/challenges/42", class="#{ cc.indexOf(42) > -1 ? 'strikethrough' : '' }") Crack the Coding Interview a(href="/challenges/43", class="#{ cc[43] > 0 ? 'strikethrough' : '' }") Try Node.js Events
| &nbsp; (5 hrs) | &nbsp; (45 minutes)
li
a(href="/challenges/44", class="#{ cc[44] > 0 ? 'strikethrough' : '' }") Try Node.js Streams
| &nbsp; (45 minutes)
li
a(href="/challenges/45", class="#{ cc[45] > 0 ? 'strikethrough' : '' }") Learn how Node.js Modules Work
| &nbsp; (45 minutes)
li
a(href="/challenges/46", class="#{ cc[46] > 0 ? 'strikethrough' : '' }") Start an Express.js Server
| &nbsp; (45 minutes)
li
a(href="/challenges/47", class="#{ cc[47] > 0 ? 'strikethrough' : '' }") Use Socket.io
| &nbsp; (45 minutes)
li
a(href="/challenges/48", class="#{ cc[48] > 0 ? 'strikethrough' : '' }") Use Redis to Persist Data
| &nbsp; (45 minutes)
li
a(href="/challenges/49", class="#{ cc[49] > 0 ? 'strikethrough' : '' }") Dive Deeper into Express.js
| &nbsp; (45 minutes)
li
a(href="/challenges/50", class="#{ cc[50] > 0 ? 'strikethrough' : '' }") Set up Express.js Middleware
| &nbsp; (45 minutes)
li
a(href="/challenges/51", class="#{ cc[51] > 0 ? 'strikethrough' : '' }") Take Advantage of Parameters
| &nbsp; (45 minutes)
li
a(href="/challenges/52", class="#{ cc[52] > 0 ? 'strikethrough' : '' }") Add the Body Parser
| &nbsp; (45 minutes)
li
a(href="/challenges/53", class="#{ cc[53] > 0 ? 'strikethrough' : '' }") Configure Routes in Express.js
| &nbsp; (45 minutes)
li
a(href="/challenges/54", class="#{ cc[54] > 0 ? 'strikethrough' : '' }") Try MongoDB
| &nbsp; (30 minutes)
li
a(href="/challenges/55", class="#{ cc[55] > 0 ? 'strikethrough' : '' }") Get Started with Angular.js
| &nbsp; (45 minutes)
li
a(href="/challenges/56", class="#{ cc[56] > 0 ? 'strikethrough' : '' }") Apply Angular.js Directives
| &nbsp; (45 minutes)
li
a(href="/challenges/57", class="#{ cc[57] > 0 ? 'strikethrough' : '' }") Power Forms with Angular.js
| &nbsp; (45 minutes)
li
a(href="/challenges/58", class="#{ cc[58] > 0 ? 'strikethrough' : '' }") Customize Angular.js Directives
| &nbsp; (45 minutes)
li
a(href="/challenges/59", class="#{ cc[59] > 0 ? 'strikethrough' : '' }") Create Angular.js Services
| &nbsp; (45 minutes)
a.btn.btn-primary(href="/done-with-first-100-hours", class="#{ cc[59] > 0 ? '' : 'disabled' }") I've finished all Free Code Camp challenges and all the Easy and Medium CoderByte Challenges

View File

@ -34,9 +34,10 @@
ul ul
p.landing-p It takes about 1,000 hours of coding to develop the skills you'll need to get an entry level software engineering job. Many in-person coding bootcamps jam all this into 12 weeks of intensive study. Free Code Camp is fully online, and there will always be other people at your skill level that you can pair program with, so you can learn at your own pace. Here are some example coding schedules: p.landing-p It takes about 1,000 hours of coding to develop the skills you'll need to get an entry level software engineering job. Many in-person coding bootcamps jam all this into 12 weeks of intensive study. Free Code Camp is fully online, and there will always be other people at your skill level that you can pair program with, so you can learn at your own pace. Here are some example coding schedules:
table.table table.table
th Time budgeted thead
th Hours per week th Time budgeted
th Weeks to complete th Hours per week
th Weeks to complete
tr.info tr.info
td Weekends td Weekends
td 10 hours/week td 10 hours/week
@ -69,4 +70,13 @@
p.landing-p Our name is Free Code Camp. We are a free code camp. If you had to pay us (or sign over future earnings), we'd have to change our name. And we are not going to do that. p.landing-p Our name is Free Code Camp. We are a free code camp. If you had to pay us (or sign over future earnings), we'd have to change our name. And we are not going to do that.
h2 Does Free Code Camp have an application process? h2 Does Free Code Camp have an application process?
ul ul
p.landing-p Unlike most bootcamps, anyone can study at Free Code Camp. We're not going to tell you that you can't become a software engineer. We believe the only person who should be able to tell you that is you. If you perservere, and keep working through our challenges and nonprofits' projects, you will become an employable software engineer. p.landing-p Unlike most bootcamps, anyone can study at Free Code Camp. We're not going to tell you that you can't become a software engineer. We believe the only person who should be able to tell you that is you. If you perservere, and keep working through our challenges and nonprofits' projects, you will become an employable software engineer.
br
br
.text-center
a.btn.btn-cta.signup-btn.cta.btn-primary(href="/login") Start learning to code (it's free)
br
br
a.btn.nonprofit-cta.btn-success(href="/nonprofits") I'm with a nonprofit and want help coding something
br
br

View File

@ -3,25 +3,26 @@ meta(http-equiv='X-UA-Compatible', content='IE=edge')
meta(name='viewport', content='width=device-width, initial-scale=1.0') meta(name='viewport', content='width=device-width, initial-scale=1.0')
meta(name='csrf-token', content=_csrf) meta(name='csrf-token', content=_csrf)
meta(name='keywords', content='learn to code, learn how to code, code, coding, software engineer, software developer, mean stack, pair programming, node.js, angular.js, express.js, mongoDB, coding bootcamp') meta(name='keywords', content='learn to code, learn how to code, code, coding, software engineer, software developer, mean stack, pair programming, node.js, angular.js, express.js, mongoDB, coding bootcamp')
meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", property="og:title") meta(content="Free Code Camp is a community of busy people learning to code by collaborating on projects for nonprofits. Learn Full-stack JavaScript, build a portfolio, and get great references with our coding bootcamp.", property="og:title")
meta(content="FreeCodeCamp", property="og:site_name") meta(content="FreeCodeCamp", property="og:site_name")
meta(name='twitter:widgets:csp', content='on') meta(name='twitter:widgets:csp', content='on')
meta(name='p:domain_verify', content='d0bc047a482c03c24f1168004c2a216a')
meta(content="http://www.freecodecamp.com", property="og:url") meta(content="http://www.freecodecamp.com", property="og:url")
meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", property="og:description") meta(content="Free Code Camp is a community of busy people learning to code by collaborating on projects for nonprofits. Learn Full-stack JavaScript, build a portfolio, and get great references with our coding bootcamp.", property="og:description")
meta(content="https://pbs.twimg.com/profile_images/522961310212833280/XE6vGAaO.jpeg", property="og:image") meta(content="https://pbs.twimg.com/profile_images/522961310212833280/XE6vGAaO.jpeg", property="og:image")
meta(content="article", property="og:type") meta(content="article", property="og:type")
meta(content="https://www.facebook.com/freecodecamp", property="article:publisher") meta(content="https://www.facebook.com/freecodecamp", property="article:publisher")
meta(content="Responsive", property="article:section") meta(content="Responsive", property="article:section")
//meta(content="44011818", property="fb:admins") //meta(content="44011818", property="fb:admins")
//Google //Google
meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", name="description") meta(content="Free Code Camp is a community of busy people learning to code by collaborating on projects for nonprofits. Learn Full-stack JavaScript, build a portfolio, and get great references with our coding bootcamp.", name="description")
link(href="https://plus.google.com/114148836969274586544", rel="author") link(href="https://plus.google.com/114148836969274586544", rel="author")
//Twitter //Twitter
meta(content="freecodecamp", name="twitter:creator") meta(content="freecodecamp", name="twitter:creator")
meta(content="http://www.freecodecamp.com", name="twitter:url") meta(content="http://www.freecodecamp.com", name="twitter:url")
meta(content="freecodecamp", name="twitter:site") meta(content="freecodecamp", name="twitter:site")
//meta(content="summary_large_image", name="twitter:card") //meta(content="summary_large_image", name="twitter:card")
meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", name="twitter:title") meta(content="Free Code Camp is a community of busy people learning to code by collaborating on projects for nonprofits. Learn Full-stack JavaScript, build a portfolio, and get great references with our coding bootcamp.", name="twitter:title")
meta(content="https://pbs.twimg.com/profile_images/522961310212833280/XE6vGAaO.jpeg", name="twitter:image:src") meta(content="https://pbs.twimg.com/profile_images/522961310212833280/XE6vGAaO.jpeg", name="twitter:image:src")
meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", name="twitter:description") meta(content="Free Code Camp is a community of busy people learning to code by collaborating on projects for nonprofits. Learn Full-stack JavaScript, build a portfolio, and get great references with our coding bootcamp.", name="twitter:description")
meta(content="a40ee5d5dba3bb091ad783ebd2b1383f", name="p:domain_verify") meta(content="a40ee5d5dba3bb091ad783ebd2b1383f", name="p:domain_verify")

View File

@ -3,35 +3,55 @@
.navbar-header .navbar-header
if user if user
button.navbar-toggle(type='button', data-toggle='collapse', data-target='.navbar-collapse') button.navbar-toggle(type='button', data-toggle='collapse', data-target='.navbar-collapse')
span.sr-only Toggle navigation span.sr-only Toggle navigation
span.icon-bar span.icon-bar
span.icon-bar span.icon-bar
span.icon-bar span.icon-bar
a.navbar-brand(href='/') a.navbar-brand(href='/')
img.nav-logo(src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg') img.img-responsive.nav-logo(src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg')
.collapse.navbar-collapse .collapse.navbar-collapse
ul.nav.navbar-nav.navbar-right ul.nav.navbar-nav.navbar-right
if !user if !user
a.btn.btn-primary.btn-nav.btn-sm(href='/login') Sign in a.btn.btn-primary.btn-nav.btn-sm(href='/login') Sign in
else else
li.dropdown(class=title=='Account Management'?'active':undefined) li.dropdown(class=title=='Account Management'?'active':undefined)
a.dropdown-toggle(href='#', data-toggle='dropdown') a.dropdown-toggle.text-center(href='#', data-toggle='dropdown')
if user.profile.picture if user.profile.picture
img(src='#{user.profile.picture}') img(src='#{user.profile.picture}')
else else
img(src='#{user.gravatar(60)}') img(src='#{user.gravatar(60)}')
| #{user.profile.name || user.email || user.id}&nbsp;[&nbsp;#{user.challengesCompleted.length}&nbsp;]&nbsp; | #{user.profile.name || user.email || user.id}&nbsp;[&nbsp;#{user.points}&nbsp;]
i.caret i.caret
ul.dropdown-menu ul.dropdown-menu.text-right
li li.hamburger
a(href='/') a(href='/')
span.ion-map span.ion-map
| My Challenges | My Challenges
li - if (cc[1] > 0)
li.hamburger
a(href='https://gitter.im/FreeCodeCamp/FreeCodeCamp', target='_blank')
span.ion-coffee
| Chat Room
- else
li.hamburger.disabled
a(href='https://gitter.im/FreeCodeCamp/FreeCodeCamp', target='_blank')
span.ion-coffee
| Chat Room (do Challenge 1 first)
- if (cc[2] > 0)
li.hamburger
a(href='http://forum.freecodecamp.com/', target='_blank')
span.ion-planet
| Forum
- else
li.hamburger.disabled
a(href='http://forum.freecodecamp.com/', target='_blank')
span.ion-planet
| Forum (do Challenge 2 first)
li.hamburger
a(href='/account') a(href='/account')
span.ion-person span.ion-person
| My Account | My Account
li li.hamburger
a(href='/logout') a(href='/logout')
span.ion-log-out span.ion-log-out
| Logout | Logout

View File

@ -1,202 +0,0 @@
extends layout
block content
script.
$(document).ready(function () {
var directions = {
0: "To get started, open your Chrome DevTools. The #next-exercise button is disabled below. Try using jQuery's .attr() method to turn the disabled attribute to false.",
1: "Move the .target element from #location1 to #location2.",
2: "Change the background color of .target to red.",
3: "Change the background color of the even-numbered targets to red.",
4: "Change the background color of the target4 to red.",
5: "Clone the target2 in #location1 so that it also exists in #location2.",
6: "Remove the target3 from element from #location1.",
7: "Check the following checkboxes using jQuery.",
8: "Make the text input field read-only.",
9: "Select the target2 option in the select box.",
10: "Add the following css classes to .target: 'animated' and 'hinge'.",
11: "Use jQuery to read the data of .target.",
12: "Use 'length' to count the number of child elements in #location1, then display that value in #location2.",
13: "There's an element hidden in #location1. Show it using jQuery, and then click on it."
};
var hint = {
0: "$('#next-exercise').attr('disabled', false);",
1: "$('.target').appendTo('#location2');",
2: "$('.target').css('background', 'red');",
3: "$('.target:even').css('background', 'red');",
4: "$('.target:nth-child(4)').css('background', 'red');",
5: "$('.target:nth-child(2)').clone().appendTo($('#location2'));",
6: "$('.target:nth-child(3)').remove();",
7: "$('#location1 input').attr('checked', 'true')",
8: "$('#location1 input').attr('readonly', 'true')",
9: "$('#location1 select').val('target2');",
10: "$('.target').addClass('animated hinge');",
11: "$('.target').data();",
12: "$('#location2').text($('#location1').children().length)",
13: "$('#finished-button').show().click();"
};
var elements = {
0: "",
1: "<div class='btn btn-default target'>.target</div>",
2: "<div class='btn btn-default target'>.target</div>",
3: "<div class='btn btn-default target'>target0</div><div class='btn btn-default target'>target1</div><div class='btn btn-default target'>target2</div><div class='btn btn-default target'>target3</div><div class='btn btn-default target'>target4</div>",
4: "<div class='btn btn-default target'>target1</div><div class='btn btn-default target'>target2</div><div class='btn btn-default target'>target3</div><div class='btn btn-default target'>target4</div><div class='btn btn-default target'>target5</div>",
5: "<div class='btn btn-default target'>target1</div><div class='btn btn-default target'>target2</div><div class='btn btn-default target'>target3</div><div class='btn btn-default target'>target4</div><div class='btn btn-default target'>target5</div>",
6: "<div class='btn btn-default target'>target1</div><div class='btn btn-default target'>target2</div><div class='btn btn-default target'>target3</div><div class='btn btn-default target'>target4</div><div class='btn btn-default target'>target5</div>",
7: "<input type='checkbox'>checkbox1</input><br><input type='checkbox'>checkbox2</input>",
8: "<input type='text' value='target'>",
9: "<select><option value='target0'>target0</option><option value='target1'>target1</option><option value='target2'>target2</option><option value='target3'>target3</option></select>",
10: "<div class='btn btn-default target'>.target</div>",
11: "<div class='btn btn-default target' data-lookAtMe='This is some super secret data hidden in the DOM!'>.target</div>",
12: "<div class='btn btn-default target'>target1</div><div class='btn btn-default target'>target2</div><div class='btn btn-default target'>target3</div><div class='btn btn-default target'>target4</div><div class='btn btn-default target'>target5</div>",
13: "<div class='btn btn-default target' id='finished-button'>Finish!</div>"
};
function refreshEverything() {
$('#directions').text("Exercise " + currentExercise + ": " + directions[currentExercise]);
$('#location1').html(elements[currentExercise]);
$('#hint').text(hint[currentExercise]);
handleExerciseTransition();
}
$('#exercise-directory').on('click', 'li', event, function () {
currentExercise = $(this).index();
event.preventDefault();
refreshEverything(event);
});
$('#next-exercise').on('click', event, function () {
++currentExercise;
event.preventDefault();
refreshEverything(event);
});
$('#solution-button').on('click', function () {
$('#hint-modal').modal({backdrop: "static"});
});
$('#location1').on('click', '#finished-button', function () {
$('#finished-modal').modal({backdrop: "static"});
});
function handleExerciseTransition() {
if (currentExercise === 0) {
$('#next-exercise').attr('disabled', true);
} else {
$('#next-exercise').attr('disabled', false);
}
if (currentExercise === 2 || currentExercise === 6) {
$('#location2 .target').remove();
}
if (currentExercise === 13) {
$('#location2').text('');
$('#finished-button').hide();
$('#next-exercise').attr('disabled', true);
}
}
var currentExercise = 0;
refreshEverything(currentExercise);
});
style.
#directions {
text-align: left;
font-size: 15px;
}
.well {
text-align: left;
height: 200px;
}
#exercise-directory {
font-size: 20px;
}
#current-exercise {
text-size: 250px;
}
html.
<div class="container">
<div class="row">
<div class=" col-xs-12 col-sm-8">
<div class="jumbotron">
<div class="row">
<div class="col-xs-12 text-center">
<img src="http://3.bp.blogspot.com/-vgd3mMqeBzk/VGzEmodGqmI/AAAAAAAAAZY/OCcbFvYKzF0/s780/logo4.0LG.png" alt="free code learning at freecodecamp.com" class="img-responsive">
<h1>jQuery Exercises</h1>
</div>
</div>
<br>
<div class="text-primary" id="directions">
</div>
<br>
<div class="row">
<div class="col-xs-6">#location1</div>
<div class="col-xs-6">#location2</div>
</div>
<div class="row">
<div class="col-xs-6 well" id="location1"></div>
<div class="col-xs-6 well" id="location2"></div>
</div>
<div class="btn btn-primary btn-lg btn-block" id="next-exercise">
#next-exercise
</div>
<br>
<button class="btn btn-block btn-lg btn-info" id="solution-button">
#solution-button
</button>
</br>
<div class="text-center">
Created for <a href="http://www.FreeCodeCamp.com">Free Code Camp</a><br/>by <a href="https://twitter.com/ossia">Quincy Larson</a>,
<a href="https://www.twitter.com/terakilobyte">Nathan Leniz</a>, <a href="https://twitter.com/iheartkode"> Mark Howard</a> and <a href="https://twitter.com/ryanmalm">Ryan Malm</a>. Please <a href="http://codepen.io/ossia/pen/raVEgN">fork this.</a>
</div>
</div>
</div>
<div class="col-xs-12 col-sm-4" id="exercise-directory">
<div class="panel panel-primary">
<div class="panel panel-heading">List of Exercises</div>
<div class="panel-body">
<ol start="0">
<li> <a href='#'>Re-enable an element</a></li>
<li> <a href='#'>Change an element's parent</a></li>
<li> <a href='#'>Change an element's CSS</a></li>
<li> <a href='#'>Use jQuery filters to modify even elements</a></li>
<li> <a href='#'>Change nth child</a></li>
<li> <a href='#'>Clone an element</a></li>
<li> <a href='#'>Remove an element</a></li>
<li> <a href='#'>Check checkboxes</a></li>
<li> <a href='#'>Make text read-only</a></li>
<li> <a href='#'>Select an option in a select box</a></li>
<li> <a href='#'>Add a CSS class to an element</a></li>
<li> <a href='#'>Lookup an element's data attribute</a></li>
<li> <a href='#'>Count child elements</a></li>
<li> <a href='#'>Show an element and click on it</a></li>
</ol>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="hint-modal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
<h4 class="modal-title" id="myModalLabel">Your hint</h4>
</div>
<div class="modal-body">
<div id="hint">
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="finished-modal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
<h4 class="modal-title" id="myModalLabel">Congratulations! You've finished our jQuery exercises! <a href="http://www.freecodecamp.com/">Go back to Free Code Camp </a> and mark this challenge complete.</h4>
</div>
<div class="modal-body">
<div id="hint"></div>
</div>
</div>
</div>
</div>