Merge branch 'master' into helmet
Conflicts: controllers/resources.js package.json views/partials/meta.jade
This commit is contained in:
48
app.js
48
app.js
@ -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);
|
|
||||||
|
@ -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
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
@ -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");
|
||||||
}
|
}
|
||||||
|
@ -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!'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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: '' },
|
||||||
|
@ -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",
|
||||||
|
@ -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%);
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
@ -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));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -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
@ -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);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
@ -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
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
.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
|
| ,
|
||||||
.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
|
| , or
|
||||||
span Need a break? Check out our:
|
a(href="http://forum.freecodecamp.com", target="_blank") Forum
|
||||||
a(href="https://gitter.im/FreeCodeCamp/FreeCodeCamp", target="_blank") Chat Room
|
| .
|
||||||
| ,
|
|
||||||
a(href="http://blog.freecodecamp.com", target="_blank") Blog
|
|
||||||
| ,
|
|
||||||
a(href="https://twitter.com/freecodecamp", target="_blank") Twitter Feed
|
|
||||||
| , or
|
|
||||||
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
13
views/chromebook.jade
Normal 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
|
@ -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,
|
h3 Our students will help you build that donor tracking system, community message board, or whatever your organization needs,
|
||||||
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 • meet with them regularly to provide direction and answer questions.
|
li • Meet with them regularly to provide direction and answer questions
|
||||||
li • clearly communicate your project's goals: what will this project solve, and for whom?
|
li • Clearly communicate your project's goals: what will this project solve, and for whom?
|
||||||
li • understand that they will build your project using JavaScript frameworks (as opposed to older or proprietary tools)
|
li • Understand that they will build your project using JavaScript frameworks (as opposed to older or proprietary tools)
|
||||||
li • keep your expectations high. Our students' goal is to produce work that's up to your standards.
|
li • 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)
|
||||||
|
6
views/done-with-first-100-hours.jade
Normal file
6
views/done-with-first-100-hours.jade
Normal 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.
|
@ -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
|
|
12
views/javascript-in-your-inbox.jade
Normal file
12
views/javascript-in-your-inbox.jade
Normal 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
|
@ -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
|
||||||
|
11
views/live-pair-programming.jade
Normal file
11
views/live-pair-programming.jade
Normal 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
|
27
views/pair-program-with-team-viewer.jade
Normal file
27
views/pair-program-with-team-viewer.jade
Normal 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:
|
||||||
|
a(href="https://gitter.im/FreeCodeCamp/FreeCodeCamp", target="_blank") Chat Room
|
||||||
|
| ,
|
||||||
|
a(href="http://blog.freecodecamp.com", target="_blank") Blog
|
||||||
|
| ,
|
||||||
|
a(href="https://twitter.com/freecodecamp", target="_blank") Twitter Feed
|
||||||
|
| , or
|
||||||
|
a(href="https://reddit.com/r/freecodecamp", target="_blank") Subreddit
|
||||||
|
| .
|
||||||
|
.col-sm-12.col-md-4.col-xs-12
|
||||||
|
include ./partials/challenges
|
@ -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
|
||||||
|
| — 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'm currently working thru it to improve my JavaScript. The community is very welcoming! 😄
|
||||||
|
| — a touch of curaré (@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 @@
|
|||||||
| — Angel Jose (@ajose01)
|
| — 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
|
|
||||||
| — 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 @@
|
|||||||
| — Deb Simon-Heinfeld (@debBlufftonAGS)
|
| — 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."
|
@ -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
|
| (2 minutes)
|
||||||
| (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
|
| (5 minutes)
|
||||||
| (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
|
| (5 minutes)
|
||||||
| (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
|
| (60 minutes)
|
||||||
| (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
|
| (60 minutes)
|
||||||
| (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
|
| (60 minutes)
|
||||||
| (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
|
| (10 minutes)
|
||||||
| (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
|
| (60 minutes)
|
||||||
| (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
|
| (30 minutes)
|
||||||
| (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
|
| (30 minutes)
|
||||||
| (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
|
| (30 minutes)
|
||||||
| (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
|
| (30 minutes)
|
||||||
| (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
|
| (30 minutes)
|
||||||
| (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
|
| (60 minutes)
|
||||||
| (15 mins)
|
li
|
||||||
h4 Computer Science and JavaScript
|
a(href="/challenges/14", class="#{ cc[14] > 0 ? 'strikethrough' : '' }") Discover Chrome's DevTools
|
||||||
li
|
| (90 minutes)
|
||||||
a(href="/challenges/14", class="#{ cc.indexOf(14) > -1 ? 'strikethrough' : '' }") Codecademy's JavaScript track
|
li
|
||||||
| (10 hrs)
|
a(href="/challenges/15", class="#{ cc[15] > 0 ? 'strikethrough' : '' }") Tackle jQuery Exercises
|
||||||
li
|
| (60 minutes)
|
||||||
a(href="/challenges/15", class="#{ cc.indexOf(15) > -1 ? 'strikethrough' : '' }") Stanford's Introduction to Computer Science
|
li
|
||||||
| (24 hrs)
|
a(href="/challenges/16", class="#{ cc[16] > 0 ? 'strikethrough' : '' }") Customize Bootstrap
|
||||||
li
|
| (10 minutes)
|
||||||
a(href="/challenges/16", class="#{ cc.indexOf(16) > -1 ? 'strikethrough' : '' }") Get Help The Hacker Way with RSAP
|
li
|
||||||
| (30 mins)
|
a(href="/challenges/17", class="#{ cc[17] > 0 ? 'strikethrough' : '' }") Inject Animation into CSS
|
||||||
li
|
| (15 minutes)
|
||||||
a(href="/challenges/17", class="#{ cc.indexOf(17) > -1 ? 'strikethrough' : '' }") Learn Regular Expressions
|
li
|
||||||
| (1 hr)
|
a(href="/challenges/18", class="#{ cc[18] > 0 ? 'strikethrough' : '' }") Learn Basic Computer Science
|
||||||
li
|
| (120 minutes)
|
||||||
a(href="/challenges/18", class="#{ cc.indexOf(18) > -1 ? 'strikethrough' : '' }") Start Your First Pair Programming Session
|
li
|
||||||
| (30 mins | Pair)
|
a(href="/challenges/19", class="#{ cc[19] > 0 ? 'strikethrough' : '' }") Learn Loops
|
||||||
li
|
| (120 minutes)
|
||||||
a(href="/challenges/19", class="#{ cc.indexOf(19) > -1 ? 'strikethrough' : '' }") Easy Algorithm Scripting Challenges on Coderbyte
|
li
|
||||||
| (15 hrs | Pair)
|
a(href="/challenges/20", class="#{ cc[20] > 0 ? 'strikethrough' : '' }") Learn Computer Hardware
|
||||||
li
|
| (120 minutes)
|
||||||
a(href="/challenges/20", class="#{ cc.indexOf(20) > -1 ? 'strikethrough' : '' }") Stanford's Relational Databases Mini-course
|
li
|
||||||
| (1 hr)
|
a(href="/challenges/21", class="#{ cc[21] > 0 ? 'strikethrough' : '' }") Learn Computer Networking
|
||||||
li
|
| (120 minutes)
|
||||||
a(href="/challenges/21", class="#{ cc.indexOf(21) > -1 ? 'strikethrough' : '' }") Stanford's SQL Mini-course
|
li
|
||||||
| (4 hrs | Pair)
|
a(href="/challenges/22", class="#{ cc[22] > 0 ? 'strikethrough' : '' }") Learn Boolean Logic
|
||||||
li
|
| (120 minutes)
|
||||||
a(href="/challenges/22", class="#{ cc.indexOf(22) > -1 ? 'strikethrough' : '' }") Stanford's JSON Mini-course
|
li
|
||||||
| (1 hrs | Pair)
|
a(href="/challenges/23", class="#{ cc[23] > 0 ? 'strikethrough' : '' }") Learn Computer Security
|
||||||
li
|
| (120 minutes)
|
||||||
a(href="/challenges/23", class="#{ cc.indexOf(23) > -1 ? 'strikethrough' : '' }") Medium Algorithm Scripting Challenges on Coderbyte
|
li
|
||||||
| (15 hrs | Pair)
|
a(href="/challenges/24", class="#{ cc[24] > 0 ? 'strikethrough' : '' }") Build an Adventure Game
|
||||||
li
|
| (60 minutes)
|
||||||
a.disabled(href="/challenges/24", class="#{ cc.indexOf(24) > -1 ? 'strikethrough' : '' }") Build an Interview Question Machine
|
li
|
||||||
| (5 hrs | Pair)
|
a(href="/challenges/25", class="#{ cc[25] > 0 ? 'strikethrough' : '' }") Build Rock Paper Scissors
|
||||||
li
|
| (60 minutes)
|
||||||
a.disabled(href="/challenges/25", class="#{ cc.indexOf(25) > -1 ? 'strikethrough' : '' }") Build a Text-based Adventure
|
li
|
||||||
| (5 hrs | Pair)
|
a(href="/challenges/26", class="#{ cc[26] > 0 ? 'strikethrough' : '' }") Learn JavaScript For Loops
|
||||||
li
|
| (60 minutes)
|
||||||
a.disabled(href="/challenges/26", class="#{ cc.indexOf(26) > -1 ? 'strikethrough' : '' }") Hard Algorithm Scripting Challenges on Coderbyte
|
li
|
||||||
| (15 hrs | Pair)
|
a(href="/challenges/27", class="#{ cc[27] > 0 ? 'strikethrough' : '' }") Learn JavaScript While Loops
|
||||||
h4 Full Stack JavaScript Development
|
| (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
|
||||||
| (30 mins)
|
| (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
|
||||||
| (1 hr)
|
| (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
|
||||||
| (15 mins)
|
| (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
|
||||||
| (15 mins)
|
| (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
|
||||||
| (5 hrs)
|
| (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
|
||||||
| (30 mins)
|
| (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
|
||||||
| (1 hr)
|
| (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
|
||||||
| (10 hrs | Pair)
|
| (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
|
||||||
| (10 hrs | Pair)
|
| (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
|
||||||
| (5 hrs)
|
| (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
|
||||||
| (50 hrs | Pair)
|
| (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
|
||||||
| (50 hrs | Pair)
|
| (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
|
||||||
| (50 hrs | Pair)
|
| (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
|
||||||
| (150 hrs | Pair)
|
| (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
|
||||||
| (150 hrs | Pair)
|
| (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
|
||||||
| (5 hrs)
|
| (45 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/44", class="#{ cc[44] > 0 ? 'strikethrough' : '' }") Try Node.js Streams
|
||||||
|
| (45 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/45", class="#{ cc[45] > 0 ? 'strikethrough' : '' }") Learn how Node.js Modules Work
|
||||||
|
| (45 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/46", class="#{ cc[46] > 0 ? 'strikethrough' : '' }") Start an Express.js Server
|
||||||
|
| (45 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/47", class="#{ cc[47] > 0 ? 'strikethrough' : '' }") Use Socket.io
|
||||||
|
| (45 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/48", class="#{ cc[48] > 0 ? 'strikethrough' : '' }") Use Redis to Persist Data
|
||||||
|
| (45 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/49", class="#{ cc[49] > 0 ? 'strikethrough' : '' }") Dive Deeper into Express.js
|
||||||
|
| (45 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/50", class="#{ cc[50] > 0 ? 'strikethrough' : '' }") Set up Express.js Middleware
|
||||||
|
| (45 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/51", class="#{ cc[51] > 0 ? 'strikethrough' : '' }") Take Advantage of Parameters
|
||||||
|
| (45 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/52", class="#{ cc[52] > 0 ? 'strikethrough' : '' }") Add the Body Parser
|
||||||
|
| (45 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/53", class="#{ cc[53] > 0 ? 'strikethrough' : '' }") Configure Routes in Express.js
|
||||||
|
| (45 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/54", class="#{ cc[54] > 0 ? 'strikethrough' : '' }") Try MongoDB
|
||||||
|
| (30 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/55", class="#{ cc[55] > 0 ? 'strikethrough' : '' }") Get Started with Angular.js
|
||||||
|
| (45 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/56", class="#{ cc[56] > 0 ? 'strikethrough' : '' }") Apply Angular.js Directives
|
||||||
|
| (45 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/57", class="#{ cc[57] > 0 ? 'strikethrough' : '' }") Power Forms with Angular.js
|
||||||
|
| (45 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/58", class="#{ cc[58] > 0 ? 'strikethrough' : '' }") Customize Angular.js Directives
|
||||||
|
| (45 minutes)
|
||||||
|
li
|
||||||
|
a(href="/challenges/59", class="#{ cc[59] > 0 ? 'strikethrough' : '' }") Create Angular.js Services
|
||||||
|
| (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
|
@ -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
|
||||||
|
@ -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")
|
@ -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} [ #{user.challengesCompleted.length} ]
|
| #{user.profile.name || user.email || user.id} [ #{user.points} ]
|
||||||
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
|
@ -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">×</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">×</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>
|
|
Reference in New Issue
Block a user