Merge branch 'master' into staging
This commit is contained in:
10
app.js
10
app.js
@ -43,6 +43,7 @@ var express = require('express'),
|
||||
fieldGuideController = require('./controllers/fieldGuide'),
|
||||
challengeMapController = require('./controllers/challengeMap'),
|
||||
challengeController = require('./controllers/challenge'),
|
||||
jobsController = require('./controllers/jobs'),
|
||||
|
||||
/**
|
||||
* Stories
|
||||
@ -159,9 +160,8 @@ var trusted = [
|
||||
'*.ytimg.com',
|
||||
'*.bitly.com',
|
||||
'http://cdn.inspectlet.com/',
|
||||
'http://hn.inspectlet.com/',
|
||||
'*.simplyhired.com',
|
||||
'*.simply-partner.com'
|
||||
'wss://inspectletws.herokuapp.com/',
|
||||
'http://hn.inspectlet.com/'
|
||||
];
|
||||
|
||||
app.use(helmet.csp({
|
||||
@ -269,8 +269,6 @@ app.get('/pmi-acp-agile-project-managers-form',
|
||||
|
||||
app.get('/nonprofits', resourcesController.nonprofits);
|
||||
|
||||
app.get('/nonprofits/getNonprofitList', nonprofitController.showAllNonprofits);
|
||||
|
||||
app.get('/nonprofits-form', resourcesController.nonprofitsForm);
|
||||
|
||||
app.get('/map',
|
||||
@ -354,7 +352,7 @@ app.get(
|
||||
|
||||
app.get(
|
||||
'/jobs',
|
||||
resourcesController.jobs
|
||||
jobsController.jobsDirectory
|
||||
);
|
||||
|
||||
app.get(
|
||||
|
14
controllers/jobs.js
Normal file
14
controllers/jobs.js
Normal file
@ -0,0 +1,14 @@
|
||||
var moment = require('moment'),
|
||||
Job = require('./../models/Job'),
|
||||
resources = require('./resources');
|
||||
|
||||
exports.jobsDirectory = function(req, res, next) {
|
||||
Job.find({}, function(err, jobs) {
|
||||
if (err) { return next(err); }
|
||||
|
||||
res.render('jobs/directory', {
|
||||
title: 'Junior JavaScript Engineer Jobs',
|
||||
jobs: jobs
|
||||
});
|
||||
});
|
||||
};
|
@ -13,92 +13,6 @@ exports.nonprofitsDirectory = function(req, res, next) {
|
||||
});
|
||||
};
|
||||
|
||||
exports.areYouWithARegisteredNonprofit = function(req, res) {
|
||||
res.render('nonprofits/are-you-with-a-registered-nonprofit', {
|
||||
title: 'Are you with a with a registered nonprofit',
|
||||
step: 1
|
||||
});
|
||||
};
|
||||
|
||||
exports.areTherePeopleThatAreAlreadyBenefitingFromYourServices =
|
||||
function(req, res) {
|
||||
res.render(
|
||||
'nonprofits/' +
|
||||
'are-there-people-that-are-already-benefiting-from-your-services',
|
||||
{
|
||||
title: 'Are there people already benefiting from your services',
|
||||
step: 2
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
exports.okWithJavaScript = function(req, res) {
|
||||
res.render('nonprofits/ok-with-javascript', {
|
||||
title: 'Are you OK with us using JavaScript',
|
||||
step: 3
|
||||
});
|
||||
};
|
||||
|
||||
exports.inExchangeWeAsk = function(req, res) {
|
||||
res.render('nonprofits/in-exchange-we-ask', {
|
||||
title: 'In exchange we ask that you ...',
|
||||
step: 4
|
||||
});
|
||||
};
|
||||
|
||||
exports.howCanFreeCodeCampHelpYou = function(req, res) {
|
||||
res.render('nonprofits/how-can-free-code-camp-help-you', {
|
||||
title: 'Are you with a with a registered nonprofit',
|
||||
step: 5
|
||||
});
|
||||
};
|
||||
|
||||
exports.whatDoesYourNonprofitDo = function(req, res) {
|
||||
res.render('nonprofits/what-does-your-nonprofit-do', {
|
||||
existingParams: req.params,
|
||||
title: 'What does your nonprofit do?',
|
||||
step: 6
|
||||
});
|
||||
};
|
||||
|
||||
exports.linkUsToYourWebsite = function(req, res) {
|
||||
res.render('nonprofits/link-us-to-your-website', {
|
||||
title: 'Link us to your website',
|
||||
step: 7
|
||||
});
|
||||
};
|
||||
|
||||
exports.tellUsYourEmail = function(req, res) {
|
||||
res.render('nonprofits/tell-us-your-email', {
|
||||
title: 'Tell us your email',
|
||||
step: 8
|
||||
});
|
||||
};
|
||||
|
||||
exports.tellUsYourName = function(req, res) {
|
||||
res.render('nonprofits/tell-us-your-name', {
|
||||
title: 'Tell us your name',
|
||||
step: 9
|
||||
});
|
||||
};
|
||||
|
||||
exports.yourNonprofitProjectApplicationHasBeenSubmitted = function(req, res) {
|
||||
res.render(
|
||||
'nonprofits/your-nonprofit-project-application-has-been-submitted',
|
||||
{
|
||||
title: 'Your Nonprofit Project application has been submitted!',
|
||||
step: 10,
|
||||
getBackDay: moment().weekday(5).format('dddd')
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
exports.otherSolutions = function(req, res) {
|
||||
res.render('nonprofits/other-solutions', {
|
||||
title: 'Here are some other possible solutions for you'
|
||||
});
|
||||
};
|
||||
|
||||
exports.returnIndividualNonprofit = function(req, res, next) {
|
||||
var dashedName = req.params.nonprofitName;
|
||||
var nonprofitName = dashedName.replace(/\-/g, ' ');
|
||||
@ -179,12 +93,6 @@ exports.returnIndividualNonprofit = function(req, res, next) {
|
||||
);
|
||||
};
|
||||
|
||||
exports.showAllNonprofits = function(req, res) {
|
||||
var data = {};
|
||||
data.nonprofitsList = resources.allNonprofitNames();
|
||||
res.send(data);
|
||||
};
|
||||
|
||||
exports.interestedInNonprofit = function(req, res, next) {
|
||||
if (req.user) {
|
||||
Nonprofit.findOne(
|
||||
|
@ -234,12 +234,6 @@ module.exports = {
|
||||
}
|
||||
},
|
||||
|
||||
jobs: function jobs(req, res) {
|
||||
res.render('resources/jobs', {
|
||||
title: 'Job Board for Front End Developer and Full Stack JavaScript Developer Jobs'
|
||||
});
|
||||
},
|
||||
|
||||
jobsForm: function jobsForm(req, res) {
|
||||
res.render('resources/jobs-form', {
|
||||
title: 'Employer Partnership Form for Job Postings, Recruitment and Corporate Sponsorships'
|
||||
@ -607,8 +601,8 @@ module.exports = {
|
||||
var challenge = req.body.payload.challenge;
|
||||
|
||||
slack.send({
|
||||
text: "*" + userName + "* wants help with " + challenge + ". " +
|
||||
code + "Hey, *" + userName + "*, if no one helps you right " +
|
||||
text: "*@" + userName + "* wants help with " + challenge + ". " +
|
||||
code + "Hey, *@" + userName + "*, if no one helps you right " +
|
||||
"away, try typing out your problem in detail to me. Like this: " +
|
||||
"http://en.wikipedia.org/wiki/Rubber_duck_debugging",
|
||||
channel: '#help',
|
||||
@ -622,11 +616,11 @@ module.exports = {
|
||||
var userName = req.user.profile.username;
|
||||
var challenge = req.body.payload.challenge;
|
||||
slack.send({
|
||||
text: "Anyone want to pair with @" + userName + " on " + challenge +
|
||||
"?\nMake sure you install Screen Hero here:" +
|
||||
text: "Anyone want to pair with *@" + userName + "* on " + challenge +
|
||||
"?\nMake sure you install Screen Hero here: " +
|
||||
"http://freecodecamp.com/field-guide/how-do-i-install-screenhero\n" +
|
||||
"Then start your pair program session with *" + userName +
|
||||
"* by typing \"/hero @" + userName + "\" into Slack.\n And *"+ userName +
|
||||
"Then start your pair program session with *@" + userName +
|
||||
"* by typing \"/hero @" + userName + "\" into Slack.\n And *@"+ userName +
|
||||
"*, be sure to launch Screen Hero, then keep coding. " +
|
||||
"Another camper may pair with you soon.",
|
||||
channel: '#letspair',
|
||||
|
18
models/Job.js
Normal file
18
models/Job.js
Normal file
@ -0,0 +1,18 @@
|
||||
var mongoose = require('mongoose');
|
||||
var secrets = require('../config/secrets');
|
||||
|
||||
/**
|
||||
*
|
||||
* @type {exports.Schema}
|
||||
*/
|
||||
|
||||
var Long = mongoose.Types.Long;
|
||||
var jobSchema = new mongoose.Schema({
|
||||
position: String,
|
||||
company: String,
|
||||
logoUrl: String,
|
||||
postingUrl: String,
|
||||
copy: Array
|
||||
});
|
||||
|
||||
module.exports = mongoose.model('Job', jobSchema);
|
@ -17,7 +17,7 @@ $(document).ready(function() {
|
||||
setCSRFToken($('meta[name="csrf-token"]').attr('content'));
|
||||
|
||||
$('#i-want-help').on('click', function() {
|
||||
/*
|
||||
$('#help-modal').modal('hide');
|
||||
var editorValue = editor.getValue();
|
||||
var currentLocation = window.location.href;
|
||||
$.post(
|
||||
@ -34,11 +34,10 @@ $(document).ready(function() {
|
||||
}
|
||||
}
|
||||
);
|
||||
*/
|
||||
});
|
||||
|
||||
$('#i-want-help-editorless').on('click', function() {
|
||||
/*
|
||||
$('#help-editorless-modal').modal('hide');
|
||||
var currentLocation = window.location.href;
|
||||
$.post(
|
||||
'/get-help',
|
||||
@ -53,14 +52,15 @@ $(document).ready(function() {
|
||||
}
|
||||
}
|
||||
);
|
||||
*/
|
||||
});
|
||||
|
||||
$('#report-issue').on('click', function() {
|
||||
window.open('https://github.com/freecodecamp/freecodecamp/issues/new?title=Challenge '+ window.location.href +' has an issue &body=Please%20tell%20us%20in%20detail%20here%20how%20we%20can%20make%20this%20challenge%20better.', '_blank')
|
||||
$('#issue-modal').modal('hide');
|
||||
window.open('https://github.com/freecodecamp/freecodecamp/issues/new?&body=Challenge '+ window.location.href +' has an issue. Please describe how to reproduce it, and include links to screen shots if possible.', '_blank')
|
||||
});
|
||||
|
||||
$('#i-want-to-pair').on('click', function() {
|
||||
$('#pair-modal').modal('hide');
|
||||
var currentLocation = window.location.href;
|
||||
$.post(
|
||||
'/get-pair',
|
||||
@ -138,6 +138,26 @@ $(document).ready(function() {
|
||||
$('#complete-courseware-dialog').modal('show');
|
||||
});
|
||||
|
||||
$('#completed-courseware-editorless').on('click', function() {
|
||||
$('#complete-courseware-editorless-dialog').modal('show');
|
||||
});
|
||||
|
||||
$('#trigger-pair-modal').on('click', function() {
|
||||
$('#pair-modal').modal('show');
|
||||
});
|
||||
|
||||
$('#trigger-help-modal').on('click', function() {
|
||||
$('#help-modal').modal('show');
|
||||
});
|
||||
|
||||
$('#trigger-help-editorless-modal').on('click', function() {
|
||||
$('#help-editorless-modal').modal('show');
|
||||
});
|
||||
|
||||
$('#trigger-issue-modal').on('click', function() {
|
||||
$('#issue-modal').modal('show');
|
||||
});
|
||||
|
||||
$('#completed-zipline-or-basejump').on('click', function() {
|
||||
$('#complete-zipline-or-basejump-dialog').modal('show');
|
||||
});
|
||||
@ -145,6 +165,11 @@ $(document).ready(function() {
|
||||
$('#complete-courseware-dialog').on('hidden.bs.modal', function() {
|
||||
editor.focus();
|
||||
});
|
||||
|
||||
$('#complete-challenge-dialog').on('hidden.bs.modal', function() {
|
||||
editor.focus();
|
||||
});
|
||||
|
||||
var challengeTypes = {
|
||||
'HTML_CSS_JQ': 0,
|
||||
'JAVASCRIPT': 1,
|
||||
@ -160,7 +185,6 @@ $(document).ready(function() {
|
||||
case challengeTypes.HTML_CSS_JQ:
|
||||
case challengeTypes.JAVASCRIPT:
|
||||
case challengeTypes.VIDEO:
|
||||
console.log(challenge_Id);
|
||||
$.post(
|
||||
'/completed-challenge/',
|
||||
{
|
||||
|
@ -16,7 +16,7 @@
|
||||
"To enable the \"Go to my next challenge\" button on this exercise, change your <code>h1</code> tag's text to say \"Hello World\" instead of \"Hello\"."
|
||||
],
|
||||
"tests": [
|
||||
"assert.isTrue((/hello(\\s)+world/gi).test($('h1').text()), 'Your h1 element should have the text \"Hello World\"')"
|
||||
"assert.isTrue((/hello(\\s)+world/gi).test($('h1').text()), 'Your <code>h1</code> element should have the text \"Hello World\"')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<h1>Hello</h1>"
|
||||
@ -39,14 +39,15 @@
|
||||
"difficulty": 0.010,
|
||||
"description": [
|
||||
"Add an <code>h2</code> tag that says \"CatPhotoApp\" to create a second HTML <code>element</code> below your \"Hello World\" <code>h1</code> element.",
|
||||
"The h2 element you enter will create an h2 element on the website.",
|
||||
"The <code>h2</code> element you enter will create an <code>h2</code> element on the website.",
|
||||
"This element tells the browser how to render the text that it contains.",
|
||||
"<code>h2</code> elements are slightly smaller than <code>h1</code> elements. There are also <code>h3</code>, <code>h4</code>, <code>h5</code> and <code>h6</code> elements."
|
||||
],
|
||||
"tests": [
|
||||
"assert(($('h2').length > 0), 'Create an <code>h2</code> elements.')",
|
||||
"assert.isTrue((/cat(\\s)?photo(\\s)?app/gi).test($('h2').text()), 'Your h2 element should have the text \"CatPhotoApp\"')",
|
||||
"assert.isTrue((/hello(\\s)+world/gi).test($('h1').text()), 'Your h1 element should have the text \"Hello World\"')"
|
||||
"assert(($('h2').length > 0), 'Create an <code>h2</code> element.')",
|
||||
"assert(new RegExp('</h2>', 'gi').test(editor), 'Be sure to complete your <code>h2</code> element with a closing tag.')",
|
||||
"assert.isTrue((/cat(\\s)?photo(\\s)?app/gi).test($('h2').text()), 'Your <code>h2</code> element should have the text \"CatPhotoApp\"')",
|
||||
"assert.isTrue((/hello(\\s)+world/gi).test($('h1').text()), 'Your <code>h1</code> element should have the text \"Hello World\"')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<h1>Hello World</h1>"
|
||||
@ -68,13 +69,14 @@
|
||||
"name": "Waypoint: Inform with the Paragraph Element",
|
||||
"difficulty": 0.011,
|
||||
"description": [
|
||||
"Create a paragraph element below your h2 element, and give it the text \"Hello Paragraph\". As soon as you create the opening <code><p></code> tag, one of our tests will pass (since this is valid HTML). Be sure to close the element by adding a closing <code></p></code> tag.",
|
||||
"Paragraph elements are the preferred element for normal-sized paragraph text on websites.",
|
||||
"You can create a paragraph element like so: <code><p>I'm a p tag!</p></code>"
|
||||
"Create a <code>p</code> element below your <code>h2</code> element, and give it the text \"Hello Paragraph\".",
|
||||
"<code>p</code> elements are the preferred element for normal-sized paragraph text on websites. P is short for \"paragraph\".",
|
||||
"You can create a <code>p</code> element like so: <code><p>I'm a p tag!</p></code>"
|
||||
],
|
||||
"tests": [
|
||||
"assert(($('p').length > 0), 'Create a paragraph element.')",
|
||||
"assert.isTrue((/hello(\\s)+paragraph/gi).test($('p').text()), 'Your paragraph element should have the text \"Hello Paragraph\"')"
|
||||
"assert(($('p').length > 0), 'Create a <code>p</code> element.')",
|
||||
"assert.isTrue((/hello(\\s)+paragraph/gi).test($('p').text()), 'Your <code>p</code> element should have the text \"Hello Paragraph\".')",
|
||||
"assert(new RegExp('</p>', 'gi').test(editor), 'Be sure to complete your <code>p</code> element with a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<h1>Hello World</h1>",
|
||||
@ -97,13 +99,13 @@
|
||||
"name": "Waypoint: Visually Separate Elements with Line Breaks",
|
||||
"difficulty": 0.012,
|
||||
"description": [
|
||||
"Add a <code>line break</code> between the <code><h2></code> and <code><p></code> elements.",
|
||||
"You can create a line break element with <code><br/></code>.",
|
||||
"Note that <code><br/></code> has no closing tag. It is a <code>self-closing</code> element. See how a forward-slash precedes the closing bracket?",
|
||||
"You'll encounter other <code>self-closing</code> element tags soon."
|
||||
"Add a <code>br</code> element to your page, preferably between two of your elements.",
|
||||
"<code>br</code> elements, also known as \"line break\" elements, can be created with <code><br></code>.",
|
||||
"Note that <code><br></code> has no closing tag. It is a \"self-closing\" element.",
|
||||
"You'll encounter other self-closing element tags soon."
|
||||
],
|
||||
"tests": [
|
||||
"assert(($('br').length > 0), 'You should have a br element between your h2 and paragraph elements.')"
|
||||
"assert(($('br').length > 0), 'Add a <code>br</code> element to your page, preferably between two of your elements.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<h1>Hello World</h1>",
|
||||
@ -127,15 +129,16 @@
|
||||
"name": "Waypoint: Uncomment HTML",
|
||||
"difficulty": 0.013,
|
||||
"description": [
|
||||
"Uncomment the <code>h1</code>, <code>h2</code> and <code>p</code> elements.",
|
||||
"Uncomment your <code>h1</code>, <code>h2</code> and <code>p</code> elements.",
|
||||
"Commenting is a way that you can leave comments within your code without affecting the code itself.",
|
||||
"Commenting is also a convenient way to make code inactive without having to delete it entirely.",
|
||||
"You can start a comment with <code><!--</code> and end a comment with <code>--></code>."
|
||||
],
|
||||
"tests": [
|
||||
"assert($('h1').length > 0, 'The h1 element should not be commented. It should be visible in the browser.')",
|
||||
"assert($('h2').length > 0, 'The h2 element should not be commented. It should be visible in the browser.')",
|
||||
"assert($('p').length > 0, 'The paragraph element should not be commented. It should be visible in the browser.')"
|
||||
"assert($('h1').length > 0, 'Make your <code>h1</code> element visible on your page by uncommenting it.')",
|
||||
"assert($('h2').length > 0, 'Make your <code>h2</code> element visible on your page by uncommenting it.')",
|
||||
"assert($('p').length > 0, 'Make your <code>p</code> element visible on your page by uncommenting it.')",
|
||||
"assert(!new RegExp('-->', 'gi').test(editor), 'Be sure to delete the <code>--></code> that ends the comment.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<!--",
|
||||
@ -165,14 +168,14 @@
|
||||
"name": "Waypoint: Comment out HTML",
|
||||
"difficulty": 0.014,
|
||||
"description": [
|
||||
"Comment out the <code>h1</code> element and the <code>p</code> element, but leave the <code>h2</code> element uncommented.",
|
||||
"Comment out your <code>h1</code> element and your <code>p</code> element, but leave your <code>h2</code> element uncommented.",
|
||||
"Remember that in order to start a comment, you need to use <code><!--</code> and to end a comment, you need to use <code>--></code>.",
|
||||
"Here you'll need to end the comment before the h2 element begins."
|
||||
"Here you'll need to end the comment before your <code>h2</code> element begins."
|
||||
],
|
||||
"tests": [
|
||||
"assert(($('h1').length == 0), 'The h1 element should be commented. It should not be visible in the browser.')",
|
||||
"assert(($('h2').length > 0), 'The h2 element should not commented. It should be visible in the browser.')",
|
||||
"assert(($('p').length == 0), 'The paragraph element should be commented. It should not be visible in the browser.')"
|
||||
"assert(($('h1').length === 0), 'Comment out your <code>h1</code> element so that it is not visible on your page.')",
|
||||
"assert(($('h2').length > 0), 'Leave your <code>h2</code> element uncommented so that is not visible on your page.')",
|
||||
"assert(($('p').length === 0), 'Comment out your <code>p</code> element so that it is not visible on your page.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<!--",
|
||||
@ -202,14 +205,14 @@
|
||||
"name": "Waypoint: Fill in the Blank with Placeholder Text",
|
||||
"difficulty": 0.015,
|
||||
"description": [
|
||||
"Change the text in the <code>p</code> element to use the first few words of <code>Kitty Ipsum</code> text.",
|
||||
"Web developers traditionally use <code>Lorem Ipsum</code> as placeholder text. It's called Lorem Ipsum text because those are the first two words of a famous passage by Cicero of Ancient Rome.",
|
||||
"Lorem Ipsum text has been used as placeholder text by typesetters since the 16th century, and this tradition continues on the web.",
|
||||
"Well, 5 centuries is long enough. Since we're building a CatPhotoApp, let's use something called <a href='http://kittyipsum.com/'>Kitty Ipsum</a>!",
|
||||
"Here are the first few words of Kitty Ipsum text, which you can copy and paste into the right position: <code>Kitty ipsum dolor sit amet, shed everywhere shed everywhere stretching attack your ankles chase the red dot, hairball run catnip eat the grass sniff.</code>"
|
||||
"Replace the text inside your <code>p</code> element with the first few words of the provided \"Ktty Ipsum\" text.",
|
||||
"Web developers traditionally use \"Lorem Ipsum\" text as placeholder text. It's called \"Lorem Ipsum\" text because those are the first two words of a famous passage by Cicero of Ancient Rome.",
|
||||
"\"Lorem Ipsum\" text has been used as placeholder text by typesetters since the 16th century, and this tradition continues on the web.",
|
||||
"Well, 5 centuries is long enough. Since we're building a CatPhotoApp, let's use something called \"Kitty Ipsum\"!",
|
||||
"Here are the first few words of \"Kitty Ipsum\" text, which you can copy and paste into the right position: <code>Kitty ipsum dolor sit amet, shed everywhere shed everywhere stretching attack your ankles chase the red dot, hairball run catnip eat the grass sniff.</code>"
|
||||
],
|
||||
"tests": [
|
||||
"assert.isTrue((/Kitty(\\s)+ipsum(\\s)+dolor/gi).test($('p').text()), 'Your paragraph element should contain the first few words of the famous Kitty Ipsum text.')"
|
||||
"assert.isTrue((/Kitty(\\s)+ipsum(\\s)+dolor/gi).test($('p').text()), 'Your <code>p</code> element should contain the first few words of the provided \"Kitty Ipsum\" text.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<h1>Hello World</h1>",
|
||||
@ -237,15 +240,15 @@
|
||||
"name": "Waypoint: Delete HTML Elements",
|
||||
"difficulty": 0.016,
|
||||
"description": [
|
||||
"Delete the h1 and br elements so we can simplify our view.",
|
||||
"Our phone doesn't have much space, for HTML elements.",
|
||||
"Delete your <code>h1</code> and <code>br</code> elements so we can simplify our view.",
|
||||
"Our phone doesn't have much vertical space.",
|
||||
"Let's remove the unnecessary elements so we can start building our CatPhotoApp."
|
||||
],
|
||||
"tests": [
|
||||
"assert(($('h1').length == 0), 'Delete the h1 element.')",
|
||||
"assert(($('h2').length > 0), 'Leave the h2 element on the page.')",
|
||||
"assert(($('br').length == 0), 'Delete the br element.')",
|
||||
"assert(($('p').length > 0), 'Leave the paragraph element on the page.')"
|
||||
"assert(($('h1').length == 0), 'Delete your <code>h1</code> element.')",
|
||||
"assert(($('h2').length > 0), 'Leave your <code>h2</code> element on the page.')",
|
||||
"assert(($('br').length == 0), 'Delete your <code>br</code> element.')",
|
||||
"assert(($('p').length > 0), 'Leave your <code>p</code> element on the page.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<h1>Hello World</h1>",
|
||||
@ -273,13 +276,13 @@
|
||||
"name": "Waypoint: Change the Color of Text",
|
||||
"difficulty": 0.017,
|
||||
"description": [
|
||||
"Change the <code>h2</code> element's style so that its text color is red.",
|
||||
"We can do this by changing the <code>style</code> of the <code>h2</code> element.",
|
||||
"Change your <code>h2</code> element's style so that its text color is red.",
|
||||
"We can do this by changing the \"style\" of your <code>h2</code> element.",
|
||||
"The style that is responsible for the color of an element's text is the \"color\" style.",
|
||||
"Here's how you would set your <code>h2</code> element's text color to blue: <code><h2 style=\"color: blue\">CatPhotoApp</h2></code>"
|
||||
"Here's how you would set your <code>h2</code> element's text color to blue: <code><h2 style=\"color: blue\">CatPhotoApp</h2></code>."
|
||||
],
|
||||
"tests": [
|
||||
"assert($('h2').css('color') === 'rgb(255, 0, 0)', 'Your h2 element should be red.')"
|
||||
"assert($('h2').css('color') === 'rgb(255, 0, 0)', 'Your <code>h2</code> element should be red.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<h2>CatPhotoApp</h2>",
|
||||
@ -303,17 +306,17 @@
|
||||
"name": "Waypoint: Use CSS Selectors to Style Elements",
|
||||
"difficulty": 0.018,
|
||||
"description": [
|
||||
"Delete your <code>h2</code> element's <code>style</code> tag and write the CSS to make all <code>h2</code> elements blue.",
|
||||
"With CSS, there are hundreds of <code>CSS attributes</code> that you can use to change the way an element looks on a web page.",
|
||||
"When you entered <code><h2 style=\"color: red\">CatPhotoApp<h2></code>, you were giving that individual h2 element an <code>inline style</code>",
|
||||
"That's one way to add style to an element, but a better way is by using <code>Cascading Style Sheets (CSS)</code>.",
|
||||
"At the top of your code, create a <code>style tag</code> like this: <code><style></style></code>",
|
||||
"Inside that style element, you can create a <code>css selector</code> for all <code>h2</code> elements. For example, if you wanted all <code>h2</code> elements to be red, your style element would look like this: <code><style>h2 {color: red;}</style></code>",
|
||||
"Note that it's important to have <code>opening and closing curly braces</code> (<code>{</code> and <code>}</code>) around each element's style. You also need to make sure your element's style is between the opening and closing style tags. Finally, be sure to add the semicolon to the end of each of your element's styles."
|
||||
"Delete your <code>h2</code> element's style attribute and instead create a CSS <code>style</code> element. Add the necessary CSS to turn all <code>h2</code> elements blue.",
|
||||
"With CSS, there are hundreds of CSS \"attributes\" that you can use to change the way an element looks on your page.",
|
||||
"When you entered <code><h2 style=\"color: red\">CatPhotoApp<h2></code>, you were giving that individual <code>h2</code> element an \"inline style\".",
|
||||
"That's one way to add style to an element, but a better way is by using Cascading Style Sheets (CSS).",
|
||||
"At the top of your code, create a <code>style</code> element like this: <code><style></style></code>",
|
||||
"Inside that style element, you can create a \"CSS selector\" for all <code>h2</code> elements. For example, if you wanted all <code>h2</code> elements to be red, your style element would look like this: <code><style>h2 {color: red;}</style></code>",
|
||||
"Note that it's important to have both opening and closing curly braces (<code>{</code> and <code>}</code>) around each element's style. You also need to make sure your element's style is between the opening and closing style tags. Finally, be sure to add the semicolon to the end of each of your element's styles."
|
||||
],
|
||||
"tests": [
|
||||
"assert($('h2').css('color') === 'rgb(0, 0, 255)', 'Your h2 element should be blue.')",
|
||||
"assert(!$('h2').attr('style'), 'You should remove the style attribute from your h2 element.')"
|
||||
"assert($('h2').css('color') === 'rgb(0, 0, 255)', 'Your <code>h2</code> element should be blue.')",
|
||||
"assert(!$('h2').attr('style'), 'Remove the style attribute from your <code>h2</code> element.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<h2 style='color: red'>CatPhotoApp</h2>",
|
||||
@ -341,14 +344,14 @@
|
||||
"Classes are reusable styles that can be added to HTML elements.",
|
||||
"Here's the anatomy of a CSS class:",
|
||||
"<img class='img-responsive' alt='a diagram of how style tags are composed, which is also described in detail on the following lines.' src='https://www.evernote.com/l/AHSCzZV0l_dDLrqD8r9JsHaBWfEzdN0OpRwB/image.png'/>",
|
||||
"You can see that we've created a CSS class called \"blue-text\" within the <code><style></code> tag.",
|
||||
"Here you can see that we've created a CSS class called \"blue-text\" within the <code><style></code> tag.",
|
||||
"You can apply a class to an HTML element like this: <code><h2 class=\"blue-text\">CatPhotoApp<h2></code>",
|
||||
"Note that in your CSS <code>style</code> element, classes should start with a period. In your HTML elements' class declarations, classes shouldn't start with a period.",
|
||||
"Instead of creating a new Style tag, try removing the h2 style declaration from the existing style element, and replace it with the class declaration for \".red-text\"."
|
||||
"Instead of creating a new <code>style</code> element, try removing the <code>h2</code> style declaration from your existing style element, then replace it with the class declaration for \".red-text\"."
|
||||
],
|
||||
"tests": [
|
||||
"assert($('h2').css('color') === 'rgb(255, 0, 0)', 'Your h2 element should be red.')",
|
||||
"assert($('h2').hasClass('red-text'), 'You h2 element should have the class \"red-text\".')"
|
||||
"assert($('h2').css('color') === 'rgb(255, 0, 0)', 'Your <code>h2</code> element should be red.')",
|
||||
"assert($('h2').hasClass('red-text'), 'Your <code>h2</code> element should have the class \"red-text\".')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<style>",
|
||||
@ -378,14 +381,15 @@
|
||||
"name": "Waypoint: Style Multiple Elements with a CSS Class",
|
||||
"difficulty": 0.020,
|
||||
"description": [
|
||||
"Apply the \"red-text\" class to the <code>h2</code> and <code>p</code> elements.",
|
||||
"Remember that you can attach classes to HTML elements by using the <code>class=\"class\"</code> within the relevant element's opening tag."
|
||||
"Apply the \"red-text\" class to your <code>h2</code> and <code>p</code> elements.",
|
||||
"Remember that you can attach classes to HTML elements by using <code>class=\"your-class-here\"</code> within the relevant element's opening tag.",
|
||||
"Remember that CSS selectors require a period at the beginning like this: <code>.red-text { color: blue; }</code>, but that class declarations don't use a period, like this: <code><h2 class=\"blue-text\">CatPhotoApp<h2></code>."
|
||||
],
|
||||
"tests": [
|
||||
"assert($('h2').css('color') === 'rgb(255, 0, 0)', 'Your h2 element should be red.')",
|
||||
"assert($('h2').hasClass('red-text'), 'You h2 element should have the class \"red-text\".')",
|
||||
"assert($('p').css('color') === 'rgb(255, 0, 0)', 'Your paragraph element should be red.')",
|
||||
"assert($('p').hasClass('red-text'), 'You paragraph element should have the class \"red-text\".')"
|
||||
"assert($('h2').css('color') === 'rgb(255, 0, 0)', 'Your <code>h2</code> element should be red.')",
|
||||
"assert($('h2').hasClass('red-text'), 'Your <code>h2</code> element should have the class \"red-text\".')",
|
||||
"assert($('p').css('color') === 'rgb(255, 0, 0)', 'Your <code>p</code> element should be red.')",
|
||||
"assert($('p').hasClass('red-text'), 'Your <code>p</code> element should have the class \"red-text\".')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<style>",
|
||||
@ -415,14 +419,15 @@
|
||||
"name": "Waypoint: Change the Font Size of an Element",
|
||||
"difficulty": 0.021,
|
||||
"description": [
|
||||
"Create a second <code>p</code> element. Then, inside your <code><style></code> element, set the font size of all <code>p</code> elements to 16 pixels.",
|
||||
"Font size is controlled by the <code>font-size</code> CSS attribute, like this: <code>h1 { font-size: 30px; }</code>.",
|
||||
"First, create a second paragraph element with the following Kitty Ipsum text: <code>Purr jump eat the grass rip the couch scratched sunbathe, shed everywhere rip the couch sleep in the sink fluffy fur catnip scratched.</code>",
|
||||
"See if you can figure out how to give both of your paragraph elements the font-size of 16 pixels (<code>16px</code>). You can do this inside the same <code><style></code> tag that we created for your \"red-text\" class."
|
||||
"Create a second <code>p</code> element. Then, inside your <code><style></code> element, set the \"font-size\" of all <code>p</code> elements to 16 pixels.",
|
||||
"Font size is controlled by the \"font-size\" CSS attribute, like this: <code>h1 { font-size: 30px; }</code>.",
|
||||
"First, create a second <code>p</code> element with the following Kitty Ipsum text: <code>Purr jump eat the grass rip the couch scratched sunbathe, shed everywhere rip the couch sleep in the sink fluffy fur catnip scratched.</code>",
|
||||
"See if you can figure out how to give both of your <code>p</code> elements the font-size of 16 pixels (<code>16px</code>). You can do this inside the same <code><style></code> tag that we created for your \"red-text\" class."
|
||||
],
|
||||
"tests": [
|
||||
"assert($('p').length > 1, 'You need 2 paragraph elements with Kitty Ipsum text.')",
|
||||
"assert($('p').css('font-size') === '16px', 'Your paragraph elements should have the font-size of 16px.')"
|
||||
"assert($('p').length > 1, 'You need 2 <code>p</code> elements with Kitty Ipsum text.')",
|
||||
"assert(editor.match(/<\\/p>/g).length > 1, 'Be sure that each of your <code>p</code> elements has a closing tag.')",
|
||||
"assert($('p').css('font-size') === '16px', 'Give your <code>p</code> elements the font-size of 16px.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<style>",
|
||||
@ -452,12 +457,12 @@
|
||||
"name": "Waypoint: Set the Font Family of an Element",
|
||||
"difficulty": 0.022,
|
||||
"description": [
|
||||
"Make all paragraph elements use the \"Monospace\" font.",
|
||||
"You can set an element's font by using the <code>font-family</code> attribute.",
|
||||
"For example, if you wanted to set your h2 element's font to \"Sans-serif\", you would use the following CSS: <code>h2 { font-family: 'Sans-serif'; }</code>"
|
||||
"Make all of your <code>p</code> elements use the \"Monospace\" font.",
|
||||
"You can set an element's font by using the \"font-family\" attribute.",
|
||||
"For example, if you wanted to set your <code>h2</code> element's font to \"Sans-serif\", you would use the following CSS: <code>h2 { font-family: 'Sans-serif'; }</code>"
|
||||
],
|
||||
"tests": [
|
||||
"assert($('p').css('font-family').match(/monospace/i), 'Your paragraph elements should use the font \"Monospace\".')"
|
||||
"assert($('p').css('font-family').match(/monospace/i), 'Your <code>p</code> elements should use the font \"Monospace\".')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<style>",
|
||||
@ -493,13 +498,15 @@
|
||||
"difficulty": 0.023,
|
||||
"description": [
|
||||
"Apply the <code>font-family</code> of \"Lobster\" to your <code>h2</code> element.",
|
||||
"First, you'll need to make a <code>call</code> to Google to grab the \"Lobster\" font and load it into your HTML.",
|
||||
"First, you'll need to make a \"call\" to Google to grab the \"Lobster\" font and load it into your HTML.",
|
||||
"Copy the following code snippet and paste it into your code editor above your <code>style</code> element:",
|
||||
"<code><link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'></code>",
|
||||
"Now you can set \"Lobster\" as a font-family attribute on your <code>h2</code> element."
|
||||
],
|
||||
"tests": [
|
||||
"assert($('h2').css('font-family').match(/lobster/i), 'Your h2 element should use the font \"Lobster\".')"
|
||||
"assert(new RegExp('googleapis', 'gi').test(editor), 'Import the \"Lobster\" font.')",
|
||||
"assert($('h2').css('font-family').match(/lobster/i), 'Your <code>h2</code> element should use the font \"Lobster\".')",
|
||||
"assert($('p').css('font-family').match(/monospace/i), 'Your <code>p</code> element should still use the font \"Monospace\".')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<style>",
|
||||
@ -584,8 +591,8 @@
|
||||
"name": "Waypoint: Override Styles with Important",
|
||||
"difficulty": 0.025,
|
||||
"description": [
|
||||
"Create a \"blue-text\" class that gives an element the font-color of blue. Also create a \"urgently-red\" class that give an element the font-color of red, but use <code>!important</code> to ensure the element is rendered as being red. Apply both classes to your <code>h2</code> element.",
|
||||
"You can add more than one class to an element by seperating the class declarations with a space, like this: <code><h2 class='green-text giant-text'>This will be giant green text</h2></code>.",
|
||||
"Create a \"blue-text\" class that gives an element the font-color of blue. Also create an \"urgently-red\" class that gives an element the font-color of red, but add <code>!important</code> to the class to ensure the element is rendered as being red. Apply both classes to your <code>h2</code> element.",
|
||||
"You can add more than one class to an element by separating the class declarations with a space, like this: <code><h2 class='green-text giant-text'>This will be giant green text</h2></code>.",
|
||||
"Sometimes HTML elements will receive conflicting information from CSS classes as to how they should be styled.",
|
||||
"If there's a conflict in the CSS, the browser will use whichever style declaration is closest to the bottom of the CSS document (whichever declaration comes last). Note that in-line style declarations are the final authority in how an HTML element will be rendered.",
|
||||
"There's one way to ensure that an element is rendered with a certain style, regardless of where that declaration is located. That one way is to use <code>!important</code>.",
|
||||
@ -594,9 +601,9 @@
|
||||
"Now see if you can make sure the h2 element is rendered in the color red without removing the \"blue-text\" class, doing an in-line styling, or changing the sequence of CSS class declarations."
|
||||
],
|
||||
"tests": [
|
||||
"assert(new RegExp('.blue-text', 'gi').test(editor), 'Ensure you implemented the css class \".blue-text\"')",
|
||||
"assert(new RegExp('.urgently-red', 'gi').test(editor), 'Ensure you implemented the css class \".urgently-red\"')",
|
||||
"assert(new RegExp('red !important', 'gi').test(editor), 'Ensure you added the \"!important\" declaration!')",
|
||||
"assert(new RegExp('.blue-text', 'gi').test(editor), 'Create the CSS class \"blue-text\"')",
|
||||
"assert(new RegExp('.urgently-red', 'gi').test(editor), 'Create the CSS class \"urgently-red\"')",
|
||||
"assert(new RegExp('red.?!important', 'gi').test(editor), 'Add the \"!important\" declaration!')",
|
||||
"assert($('h2').hasClass('blue-text'), 'Your h2 element should have the class \"blue-text\".')",
|
||||
"assert($('h2').hasClass('urgently-red'), 'Your h2 element should have the class \"urgently-red\".')",
|
||||
"assert($('h2').css('color') === 'rgb(255, 0, 0)', 'Your h2 element should be red.')"
|
||||
@ -737,14 +744,15 @@
|
||||
"name": "Waypoint: Add Borders Around your Elements",
|
||||
"difficulty": 0.028,
|
||||
"description": [
|
||||
"Create a class called \"thick-green-border\" that puts a 10-pixel-wide green border with a style of \"solid\" around an HTML element, and apply it to your cat photo.",
|
||||
"Create a class called \"thick-green-border\" that puts a 10-pixel-wide green border with a style of \"solid\" around an HTML element, and apply that class to your cat photo.",
|
||||
"CSS borders have attributes like style, color and width.",
|
||||
"For example, if we wanted to create a red, 5 pixel border around an HTML element, we could use this class: <code><style> .thin-red-border { border-color: red; border-width: 5px; border-style: solid; } </style></code>."
|
||||
],
|
||||
"tests": [
|
||||
"assert($('img').hasClass('smaller-image'), 'Your <code>img</code> element should have the class \"smaller-image\".')",
|
||||
"assert($('img').hasClass('thick-green-border'), 'Your <code>img</code> element should have the class \"thick-green-border\".')",
|
||||
"assert(parseInt($('img').css('border-width')) >= 9 && new RegExp('solid').test($('img').css('border-style')), 'You need to specify a border width of 10px and a border style of \"solid\".')"
|
||||
"assert(parseInt($('img').css('border-top-width')), 'Give your image a border width of 10px.')",
|
||||
"assert(new RegExp('border-style:.?solid', 'gi').test(editor), 'Give your image a border style of \"solid\".')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -969,15 +977,17 @@
|
||||
"name": "Waypoint: Wrap an Anchor Element within a Paragraph",
|
||||
"difficulty": 0.032,
|
||||
"description": [
|
||||
"Now wrap your anchor element within a <code>paragraph</code> element so that the surrounding paragraph says \"click here for cat photos\", but where only \"cat photos\" is a link - the rest is plain text.",
|
||||
"Again, here's a diagram of an <code>anchor tag</code> for your reference:",
|
||||
"Now wrap your anchor element within a <code>p</code> element so that the surrounding paragraph says \"click here for cat photos\", but where only \"cat photos\" is a link - the rest is plain text.",
|
||||
"Again, here's a diagram of an <code>a</code> element for your reference:",
|
||||
"<img class='img-responsive' alt='a diagram of how anchor tags are composed with the same text as on the following line' src='https://www.evernote.com/l/AHSaNaepx_lG9LhhPkVYmagcedpmAeITDsQB/image.png'/>",
|
||||
"Here's an example: <code><p>Here's a <a href='http://freecodecamp.com'> link to Free Code Camp</a> for you to follow.</p></code>"
|
||||
],
|
||||
"tests": [
|
||||
"assert((/photo/gi).test($('a').text()), 'You need an <code>anchor</code> element that links to \"catphotoapp.com\".')",
|
||||
"assert($('a').filter(function(index) { return /photo/gi.test($('a')[index]); }).length === 1, 'Your <code>anchor</code> element should have the anchor text of \"cat photos\"')",
|
||||
"assert($('a').parent().is('p'), 'Your anchor element should be wrapped within a paragraph element.')"
|
||||
"assert($('a').attr('href').match(/catphotoapp.com/gi).length > 0, 'You need an <code>a</code> element that links to \"catphotoapp.com\".')",
|
||||
"assert($('a').text().match(/cat\\sphotos/gi).length > 0, 'Your <code>a</code> element should have the anchor text of \"cat photos\"')",
|
||||
"assert($('a').parent().is('p'), 'Your anchor element should be wrapped within a paragraph element.')",
|
||||
"assert($('p').text().match(/click\\shere\\sfor/gi), 'Your <code>p</code> element should have the text \"click here for\".')",
|
||||
"assert(editor.match(/<\\/p>/g).length > 2, 'Be sure that each of your <code>p</code> elements has a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -1102,8 +1112,9 @@
|
||||
"Once you've done this, hover over your image with your cursor. Your cursor's normal pointer should become the link clicking pointer. The photo is now a link."
|
||||
],
|
||||
"tests": [
|
||||
"expect($('a').children('img').length, 'Wrap your image element inside an anchor element that has its <code>href</code> attribute set to \"#\"').to.equal(1);",
|
||||
"expect(new RegExp('#').test($('a').children('img').parent().attr('href')), 'Make sure to specify the \"src\" attribute as \"#\"').to.be.true;"
|
||||
"assert(new RegExp('#').test($('a').children('img').parent().attr('href')), 'Your <code>anchor</code> element should be a dead link with a <code>href</code> attribute set to \"#\".')",
|
||||
"assert($('a').children('img').length > 0, 'Wrap your image element inside an anchor element.')",
|
||||
"assert(editor.match(/<\\/a>/g).length > 1, 'Be sure that each of your <code>a</code> elements has a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -1285,7 +1296,7 @@
|
||||
"name": "Waypoint: Create an Ordered List",
|
||||
"difficulty": 0.037,
|
||||
"description": [
|
||||
"Create an <code>ordered list</code> of the the top 3 things cats hate the most.",
|
||||
"Create an <code>ordered list</code> of the top 3 things cats hate the most.",
|
||||
"HTML has a special element for creating ordered lists, or numbered-style lists.",
|
||||
"Ordered lists start with a <code><ol></code> element. Then they contain some number of <code><li></code> elements.",
|
||||
"For example: <code><ol><li>hydrogen</li><li>helium</li><ol></code> would create a numbered list of \"hydrogen\" and \"helium\"."
|
||||
@ -1504,7 +1515,9 @@
|
||||
],
|
||||
"tests": [
|
||||
"assert($('form').length > 0, 'Wrap your text input element within a <code>form</code> element.')",
|
||||
"assert($('form').attr('action'), 'Your <code>form</code> element should have an <code>action</code> attribute.')"
|
||||
"assert($('form').attr('action'), 'Your <code>form</code> element should have an <code>action</code> attribute.')",
|
||||
"assert(editor.match(/<\\/form>/g), 'Make sure your <code>form</code> elements has a closing tag.')",
|
||||
"assert(editor.match(/\\/submit-cat-photo/ig), 'Make sure your <code>form</code> action is set to <code>/submit-cat-photo</code>.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -1573,10 +1586,13 @@
|
||||
"description": [
|
||||
"Add a submit button to your form field with type <code>submit</code> and a test value of \"Submit\".",
|
||||
"Let's add a submit button to your form. Clicking this button will send the data from your form to the URL you specified with your form's <code>action</code> attribute.",
|
||||
"Here's an example submit button: <code><button type='submit'>this button submits the form</button><code>"
|
||||
"Here's an example submit button: <code><button type='submit'>this button submits the form</button></code>"
|
||||
],
|
||||
"tests": [
|
||||
"assert(new RegExp('<button type=.submit.>Submit</button>', 'gi').test(editor), 'Make sure you have completely declared your button!');"
|
||||
"assert($('form').children('button').length > 0, 'Your form should have a button inside it.')",
|
||||
"assert($('button').attr('type') === 'submit', 'Your submit button should have be of input type \"submit\".')",
|
||||
"assert($('button').text().match(/submit/gi), 'Your submit button should have the text \"submit\".')",
|
||||
"assert(editor.match(/<\\/button>/g), 'Be sure that your <code>button</code> element has a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -2104,7 +2120,7 @@
|
||||
"description": [
|
||||
"Change the <code>margin</code> of the green box to match that of the red box.",
|
||||
"An element's <code>margin</code> controls the amount of space between an element's <code>border</code> and surrounding elements.",
|
||||
"Here, we can see that the green box and the red box and the green box are nested within the yellow box. Note that the red box has more <code>margin</code> than the green box, making it appear smaller.",
|
||||
"Here, we can see that the green box and the red box are nested within the yellow box. Note that the red box has more <code>margin</code> than the green box, making it appear smaller.",
|
||||
"When you increase the green box's <code>margin</code>, it will increase the distance between its border and surrounding elements."
|
||||
],
|
||||
"tests": [
|
||||
@ -2420,8 +2436,7 @@
|
||||
"description": [
|
||||
"Let's try this again, but with <code>margin</code> this time. Use <code>Clockwise Notation</code> to give an element a margin of 40 pixels on its top and left side, but only 20 pixels on its bottom and right side.",
|
||||
"Instead of specifying an element's <code>margin-top</code>, <code>margin-right</code>, <code>margin-bottom</code>, and <code>margin-left</code> attributes, you can specify them all in one line, like this: <code>margin: 10px 20px 10px 20px;</code>.",
|
||||
"These four values work like a clock: top, right, bottom, left, and will produce the exact same result as using the side-specific padding instructions.",
|
||||
"You can also use this notation for margins!"
|
||||
"These four values work like a clock: top, right, bottom, left, and will produce the exact same result as using the side-specific margin instructions."
|
||||
],
|
||||
"tests": [
|
||||
"assert($('.green-box').css('margin-top') === '40px', 'Your <code>green-box</code> class should give the top of elements 40px of margin.')",
|
||||
|
@ -690,7 +690,7 @@
|
||||
"name": "Waypoint: Ditch Custom CSS for Bootstrap",
|
||||
"difficulty": 0.055,
|
||||
"description": [
|
||||
"Delete the following from your style tag: <code>.red-text</code>, <code>p</code>, <code>.smaller-image</code>. Delete the <code>p</code> element with the dead link. Remove your <code>red-text</code> class from your <code>h2</code> element and instead apply the <code>text-primary</code> Bootstrap class. Replace the <code>smaller-image</code> class on your top image with the <code>img-responsive</code> class.",
|
||||
"<ol><li>Delete <code>.red-text</code>, <code>p</code>, and <code>.smaller-image</code> from your <code>style</code> element.</li> <li>Delete the <code>p</code> element that contains the dead link.</li> <li>Remove the <code>red-text</code> class from your <code>h2</code> element and replace it with the <code>text-primary</code> Bootstrap class.</li> <li>Remove the <code>smaller-image</code> class from your first <code>img</code> element and replace it with the <code>img-responsive</code> class.</li></ol>",
|
||||
"We can clean up our code and make our Cat Photo App look more conventional by using Bootstrap's built-in styles instead of the custom styles we created earlier.",
|
||||
"Don't worry - there will be plenty of time to customize our CSS later."
|
||||
],
|
||||
@ -881,7 +881,9 @@
|
||||
"Go ahead and add a <code><i class=\"fa fa-thumbs-up\"></i></code> within your like button's element."
|
||||
],
|
||||
"tests": [
|
||||
"assert($('.fa-thumbs-up').length > 0, 'You should add a <code><i class=\"fa fa-thumbs-up\"></i></code> within your like button element.')"
|
||||
"assert($('.fa-thumbs-up').length > 0, 'Add a <code>i</code> element with the classes \"fa\" and \"fa-thumbs-up\".')",
|
||||
"assert($('button').children('i').length > 0, 'Wrap your <code>i</code> element within your <code>button</code> element.')",
|
||||
"assert(editor.match(/<\\/i>/g), 'Be sure to close your <code>i</code> element with a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -1229,7 +1231,7 @@
|
||||
"tests": [
|
||||
"assert($('.btn-primary').length > 1, 'Give the submit button in your form the classes \"btn btn-primary\".')",
|
||||
"assert($('.fa-paper-plane').length > 0, 'Add a <code><i class=\"fa fa-paper-plane\"></i></code> within your submit button element.')",
|
||||
"assert($('.form-control').length > 0, 'Give the the text input field in your form the class \"form-control\".')"
|
||||
"assert($('.form-control').length > 0, 'Give the text input field in your form the class \"form-control\".')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -1325,7 +1327,7 @@
|
||||
"name": "Waypoint: Line up Form Elements Responsively with Bootstrap",
|
||||
"difficulty": 0.062,
|
||||
"description": [
|
||||
"Now let's get your form input and your submission button on the same line. We'll do this the same way we have previously: by using a \"row\" element with \"col-xs-*\" elements withing it.",
|
||||
"Now let's get your form input and your submission button on the same line. We'll do this the same way we have previously: by using a \"row\" element with \"col-xs-*\" elements within it.",
|
||||
"Wrap both your form's text input field and submit button within a div with the class \"row\". Wrap your form's text input field within a div with the class of \"col-xs-7\". Wrap your form's submit button the in a div with the class \"col-xs-5\".",
|
||||
"This is the last challenge we'll do for our Cat Photo App for now. We hope you've enjoyed learning Font Awesome, Bootstrap, and responsive design!"
|
||||
],
|
||||
@ -1424,4 +1426,4 @@
|
||||
"descriptionPt": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -133,9 +133,11 @@
|
||||
"Click the \"Start Editing\" button.",
|
||||
"In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.",
|
||||
"Run this command: <code>npm install how-to-npm -g</code>",
|
||||
"Now start this tutorial by running <code>how-to-npm</code>",
|
||||
"Now start this tutorial by running <code>npm install how-to-npm@2.0.0</code>.",
|
||||
"Note that you can resize the c9.io's windows by dragging their borders.",
|
||||
"Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: <code>cd ~/workspace</code>.",
|
||||
"Note that you can only add dist tags to the specific version numbers published in steps 8 and 10. If you receive a 403 or 404 error, run <code>how-to-npm</code> and try again.",
|
||||
"Also, if you experience a bug, and you think you understand the concept, you can skip a step by running <code>how-to-npm verify skip</code> in the terminal.",
|
||||
"Complete \"Install NPM\"",
|
||||
"Complete \"Dev Environment\"",
|
||||
"Complete \"Login\"",
|
||||
@ -144,16 +146,15 @@
|
||||
"Complete \"Listing Dependencies\"",
|
||||
"Complete \"NPM Test\"",
|
||||
"Complete \"Package Niceties\"",
|
||||
"Complete \"Publish\". Note that you may have to return to the \"Dev Environment\" challenge and run <code>npm adduser</code> first.",
|
||||
"Complete \"Version\". Note that <code>npm version</code> is supposed to automatically update your <code>package.json</code> but it doesn’t. You have to manually edit the version number in your <code>package.json</code> before you can verify and continue.",
|
||||
"Complete \"Publish\"",
|
||||
"Complete \"Version\"",
|
||||
"Complete \"Publish Again\"",
|
||||
"Complete \"Dist Tag\"",
|
||||
"Complete \"Dist Tag Removal\"",
|
||||
"Complete \"Outdated\". Note that <code>npm outdated</code> produces no result, so you you may have to guess the outdated package, or ask how-to-npm to reveal the answer.",
|
||||
"Complete \"Outdated\"",
|
||||
"Complete \"Update\"",
|
||||
"Complete \"RM\"",
|
||||
"Complete \"Finale\"",
|
||||
"Once you've completed these first 7 challenges, move on to our next waypoint."
|
||||
"Complete \"Finale\""
|
||||
],
|
||||
"challengeType": 2,
|
||||
"tests": [],
|
||||
|
@ -6,7 +6,7 @@
|
||||
"_id": "bd7129d8c441eddfbeb5bddf",
|
||||
"name": "Waypoint: Practice Functional Programming",
|
||||
"difficulty": 0.01,
|
||||
"challengeSeed": "114604814",
|
||||
"challengeSeed": "129169463",
|
||||
"description": [
|
||||
"Functional programming holds the key to unlocking JavaScript's powerful asynchronous features.",
|
||||
"Jafar Husain's 42-step interactive Functional Programming course will familiarize you with the various ways you can recombine these functions.",
|
||||
|
@ -282,6 +282,8 @@
|
||||
" <h3>Find your city below and join their group. This is a great way to hang out with other coders, share insights, and pair program.</h3>",
|
||||
" <h4>",
|
||||
" <ol>",
|
||||
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.albany.ny/' target='_blank'>Albany</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.berkeley/' target='_blank'>Alameda</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.amsterdam/' target='_blank'>Amsterdam</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.your.apucarana.parana/' target='_blank'>Apucarana</a></li>",
|
||||
@ -297,10 +299,12 @@
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.berkeley/' target='_blank'>Berkeley</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.berlin/' target='_blank'>Berlin</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.bhaktapur/' target='_blank'>Bhaktapur</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.bijeljina/' target='_blank'>Bijeljina</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.bismarck.north.dakota/' target='_blank'>Bismarck, ND</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.bogota/' target='_blank'>Bogota</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.boston/' target='_blank'>Boston</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.boulder/' target='_blank'>Boulder</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.brasilia/' target='_blank'>Brasilia</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.bratislava/' target='_blank'>Bratislava</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.brussels/' target='_blank'>Brussels</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.buenos.aires/' target='_blank'>Buenos Aires</a></li>",
|
||||
@ -322,6 +326,7 @@
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.dallas/' target='_blank'>Dallas</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.delhi/' target='_blank'>Delhi</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.denver/' target='_blank'>Denver</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.detroit/' target='_blank'>Detroit</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.dhaka/' target='_blank'>Dhaka</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.doha/' target='_blank'>Doha</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.dubai/' target='_blank'>Dubai</a></li>",
|
||||
@ -344,6 +349,7 @@
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.hamptonroads/' target='_blank'>Hampton Roads</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.hochiminhcity/' target='_blank'>Ho Chi Minh City</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.hyderabad/' target='_blank'>Hyderabad</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.joao.pessoa/' target='_blank'>Joao Pessoa</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.kaduna/' target='_blank'>Kaduna</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.kalamazoo/' target='_blank'>Kalamazoo</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.kansascity/' target='_blank'>Kansas City</a></li>",
|
||||
@ -413,7 +419,10 @@
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.tirana/' target='_blank'>Tirana</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.tulsa/' target='_blank'>Tulsa</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.northern.arizona/' target='_blank'>Verde Valley</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.vlc/' target='_blank'>Valencia</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.vancouver.bc.canada/' target='_blank'>Vancouver</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.washington.dc/' target='_blank'>Washington, DC</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.zurich/' target='_blank'>Zurich</a></li>",
|
||||
" </ol>",
|
||||
" </h4>",
|
||||
" <h3>If you didn't see your city on this list, you should create your own Facebook group for your city. Please follow these steps:</h3>",
|
||||
@ -464,11 +473,12 @@
|
||||
"name": "Why doesn't Free Code Camp teach technical interviewing skills?",
|
||||
"description": [
|
||||
"<div class=\"col-xs-12 col-sm-10 col-sm-offset-1\">",
|
||||
" <h3>The skills you need to successfully interview for a job are quite different from the skills you'll need on the job.</h3><br>",
|
||||
" <p class='large-p'>More and more employers are moving to a pair-programming-centric interview style. If you apply to these places, you don't need to make special preparations your interview - just pair program like you would on any Free Code Camp project.</p>",
|
||||
" <p class='large-p'>If you intend to apply for a job at a larger tech company like Apple, Microsoft, Google, Facebook or Amazon, you can prepare for your interviews by simply working through this single authoritative book. Many of the questions you'll be asked during your interviews will come straight out of this book, which is standard-issue in Silicon Valley.</p>",
|
||||
" <h3>The skills you'll need to succeed in the job interview are quite different from the skills you'll need to succeed on the job.</h3><br>",
|
||||
" <p class='large-p'>Employers are gradually moving to a pair-programming interview format. You don't need to make special preparations for these types of interviews - just pair program like you would on any Free Code Camp project.</p>",
|
||||
" <p class='large-p'>If you intend to apply for a job at older tech companies like Apple, Microsoft, Google, Facebook or Amazon, you should prepare for your interviews by working through this single authoritative book: </p>",
|
||||
" <img src='http://a3.mzstatic.com/us/r1000/095/Purple/3f/58/42/mzl.xypmpeal.320x480-75.jpg' class='img-center img-responsive'>",
|
||||
" <p class='large-p'>You can download the 4th edition of this book in PDF form for free <a href='http://www.mktechnicalclasses.com/Notes/Cracking%20the%20Coding%20Interview,%204%20Edition%20-%20150%20Programming%20Interview%20Questions%20and%20Solutions.pdf' target='_blank'>here</a> or buy the 5th edition of the book <a href='http://www.amazon.com/gp/product/098478280X/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=098478280X&linkCode=as2&tag=out0b4b-20&linkId=4LOZ5JGICYZJO33D' target='_blank'>here</a>.",
|
||||
" <p class='large-p'>Many of the questions you'll be asked during your interviews will come straight out of this book, which is standard-issue in Silicon Valley.</p>",
|
||||
" <p class='large-p'>We may focus more on interview preparation in the future if we determine that it's necessary. In the mean time, Free Code Camp will continue to focus skills that are directly related to becoming a job-ready software engineer.",
|
||||
"</div>"
|
||||
]
|
||||
|
30
seed_data/jobs.json
Normal file
30
seed_data/jobs.json
Normal file
@ -0,0 +1,30 @@
|
||||
[
|
||||
{
|
||||
"id": "bd7167d8c441cbafaeb5bdef",
|
||||
"company": "Livestream",
|
||||
"position": "Junior Backend Developer (Node.js)",
|
||||
"logoUrl": "https://s3.amazonaws.com/prod-heroku/greenhouse_job_boards/logos/000/001/189/resized/livestream_logo-rgb_standard-cc718e67ce1a0f6fa400f609bdefe605.png?1429547161",
|
||||
"postingUrl": "https://boards.greenhouse.io/livestream/jobs/59458?t=ek25h0#.VWeTk1xVhBc?source=freecodecamp.com"
|
||||
},
|
||||
{
|
||||
"id": "bd7167d8c442cbafaeb5bdef",
|
||||
"company": "Adobe",
|
||||
"position": "Junior JavaScript Engineer",
|
||||
"logoUrl": "http://cdn-3.famouslogos.us/images/adobe-logo.jpg",
|
||||
"postingUrl": "https://adobe.taleo.net/careersection/2/jobdetail.ftl?job=32619&lang=en"
|
||||
},
|
||||
{
|
||||
"id": "bd7167d8c443cbafaeb5bdef",
|
||||
"company": "Bookspan",
|
||||
"position": "Full Stack JavaScript Developer (Junior)",
|
||||
"logoUrl": "https://tm-prod.global.ssl.fastly.net/uploaded/companies/227/small_logo.png?v=db9dbe",
|
||||
"postingUrl": "http://bookspan.theresumator.com/apply/10190b666b74087b537f4659756f7c5679000704722064232c1d2e3b2b102501310437/Fullstack-Javascript-Developer-junior?source=freecodecamp.com&sid=zvi9YD9OcHwoDZNgM3XI9uPszGvqxJo6eHf"
|
||||
},
|
||||
{
|
||||
"id": "bd7167d8c444cbafaeb5bdef",
|
||||
"company": "Good Eggs",
|
||||
"position": "Full Stack Developer",
|
||||
"logoUrl": "https://d1qb2nb5cznatu.cloudfront.net/startups/i/72165-64efbd521cdfe3357c811758f5436e7d-medium_jpg.jpg",
|
||||
"postingUrl": "http://www.jobscore.com/jobs2/goodeggs/full-stack-developer/cQ_hd-0USr4Om7eJe4iefn?Board=freecodecamp.com"
|
||||
}
|
||||
]
|
@ -2,17 +2,19 @@ require('dotenv').load();
|
||||
var Challenge = require('../models/Challenge.js'),
|
||||
FieldGuide = require('../models/FieldGuide.js'),
|
||||
Nonprofit = require('../models/Nonprofit.js'),
|
||||
Job = require('../models/Job.js'),
|
||||
mongoose = require('mongoose'),
|
||||
secrets = require('../config/secrets'),
|
||||
fieldGuides = require('./field-guides.json'),
|
||||
nonprofits = require('./nonprofits.json'),
|
||||
jobs = require('./jobs.json'),
|
||||
fs = require('fs');
|
||||
|
||||
mongoose.connect(secrets.db);
|
||||
var challenges = fs.readdirSync(__dirname + '/challenges');
|
||||
|
||||
var counter = 0;
|
||||
var offerings = 2 + challenges.length;
|
||||
var offerings = 3 + challenges.length;
|
||||
|
||||
var CompletionMonitor = function() {
|
||||
counter++;
|
||||
@ -42,6 +44,7 @@ Challenge.remove({}, function(err, data) {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
FieldGuide.remove({}, function(err, data) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
@ -75,3 +78,20 @@ Nonprofit.remove({}, function(err, data) {
|
||||
});
|
||||
console.log('nonprofits');
|
||||
});
|
||||
|
||||
Job.remove({}, function(err, data) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
} else {
|
||||
console.log('Deleted ', data);
|
||||
}
|
||||
Job.create(jobs, function(err, data) {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
} else {
|
||||
console.log('Saved ', data);
|
||||
}
|
||||
CompletionMonitor();
|
||||
});
|
||||
console.log('jobs');
|
||||
});
|
||||
|
@ -260,28 +260,28 @@ block content
|
||||
.panel.panel-info
|
||||
.panel-heading.text-center Manage your account here:
|
||||
.panel-body
|
||||
- if (!user.google || !user.facebook || !user.linkedin || !user.twitter)
|
||||
- if (!user.google)
|
||||
if (!user.google || !user.facebook || !user.linkedin || !user.twitter)
|
||||
if (!user.google)
|
||||
.col-xs-12
|
||||
a.btn.btn-lg.btn-block.btn-google-plus.btn-link-social(href='/auth/google')
|
||||
i.fa.fa-google-plus
|
||||
| Link Google with my account
|
||||
- if (!user.facebook)
|
||||
if (!user.facebook)
|
||||
.col-xs-12
|
||||
a.btn.btn-lg.btn-block.btn-facebook.btn-link-social(href='/auth/facebook')
|
||||
i.fa.fa-facebook
|
||||
| Link Facebook with my account
|
||||
//- if (!user.github)
|
||||
//if (!user.github)
|
||||
// .col-xs-12
|
||||
// a.btn.btn-lg.btn-block.btn-github.btn-link-social(href='/auth/github')
|
||||
// i.fa.fa-github
|
||||
// | Link GitHub with my account
|
||||
- if (!user.linkedin)
|
||||
if (!user.linkedin)
|
||||
.col-xs-12
|
||||
a.btn.btn-lg.btn-block.btn-linkedin.btn-link-social(href='/auth/linkedin')
|
||||
i.fa.fa-linkedin
|
||||
| Link LinkedIn with my account
|
||||
- if (!user.twitter)
|
||||
if (!user.twitter)
|
||||
.col-xs-12
|
||||
a.btn.btn-lg.btn-block.btn-twitter.btn-link-social(href='/auth/twitter')
|
||||
i.fa.fa-twitter
|
||||
|
@ -23,15 +23,15 @@ block content
|
||||
else
|
||||
img.img-center.img-responsive.public-profile-img(src='https://s3.amazonaws.com/freecodecamp/camper-image-placeholder.png')
|
||||
h1.text-center.negative-5.profile-social-icons
|
||||
- if (twitterHandle)
|
||||
if (twitterHandle)
|
||||
a.fa.fa-twitter-square.text-primary(title="@#{username}'s Twitter Profile", href="http://twitter.com/#{twitterHandle}", target='_blank')
|
||||
- if (githubProfile)
|
||||
if (githubProfile)
|
||||
a.fa.fa-github-square.text-primary(title="@#{username}'s GitHub Profile", href=githubProfile, target='_blank')
|
||||
- if (codepenProfile)
|
||||
if (codepenProfile)
|
||||
a.ion-social-codepen.text-primary(title="@#{username}'s CodePen Profile", href=codepenProfile, target='_blank')
|
||||
- if (linkedinProfile)
|
||||
if (linkedinProfile)
|
||||
a.fa.fa-linkedin-square.text-primary(title="@#{username}'s LinkedIn Profile", href=linkedinProfile, target='_blank')
|
||||
- if (facebookProfile)
|
||||
if (facebookProfile)
|
||||
a.fa.fa-facebook-square.text-primary(title="@#{username}'s Facebook Profile", href=facebookProfile, target='_blank')
|
||||
.visible-md.visible-lg
|
||||
.col-xs-12.col-sm-12.col-md-4.text-justify
|
||||
@ -137,7 +137,7 @@ block content
|
||||
h4.col-sm-6.text-left Current Streak: #{currentStreak}
|
||||
|
||||
|
||||
- if (challenges.length > 0)
|
||||
if (challenges.length > 0)
|
||||
.col-sm-12
|
||||
table.table.table-striped
|
||||
thead
|
||||
@ -154,7 +154,7 @@ block content
|
||||
a(href=challenge.solution, target='_blank') View my solution
|
||||
|
||||
br
|
||||
- if (bonfires.length > 0)
|
||||
if (bonfires.length > 0)
|
||||
.col-sm-12
|
||||
table.table.table-striped
|
||||
thead
|
||||
|
@ -94,13 +94,13 @@ block content
|
||||
if (user && user.sentSlackInvite)
|
||||
.button-spacer
|
||||
.btn-group.input-group.btn-group-justified
|
||||
label.btn.btn-success#i-want-help(disabled)
|
||||
label.btn.btn-success#trigger-help-modal
|
||||
i.fa.fa-medkit
|
||||
| Help(disabled)
|
||||
label.btn.btn-success#i-want-to-pair
|
||||
| Help
|
||||
label.btn.btn-success#trigger-pair-modal
|
||||
i.fa.fa-user-plus
|
||||
| Pair
|
||||
label.btn.btn-success#report-issue
|
||||
label.btn.btn-success#trigger-issue-modal
|
||||
i.fa.fa-bug
|
||||
| Bug
|
||||
.button-spacer
|
||||
@ -136,20 +136,21 @@ block content
|
||||
.text-center
|
||||
.animated.zoomInDown.delay-half
|
||||
span.completion-icon.ion-checkmark-circled.text-primary
|
||||
- if (user)
|
||||
if (user)
|
||||
|
||||
a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block#next-courseware-button(name='_csrf', value=_csrf) Go to my next challenge (ctrl + enter)
|
||||
|
||||
|
||||
- if (user.progressTimestamps.length > 2)
|
||||
a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(target="_blank", href="https://twitter.com/intent/tweet?text=I%20just%20#{verb}%20%40FreeCodeCamp%20Bonfire:%20#{name}&url=http%3A%2F%2Ffreecodecamp.com/challenges/#{dashedName}&hashtags=LearnToCode, JavaScript")
|
||||
if (user.progressTimestamps.length > 2)
|
||||
a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(target="_blank", href="https://twitter.com/intent/tweet?text=I%20just%20#{verb}%20%40FreeCodeCamp%20#{name}&url=http%3A%2F%2Ffreecodecamp.com/challenges/#{dashedName}&hashtags=LearnToCode, JavaScript")
|
||||
i.fa.fa-twitter  
|
||||
= phrase
|
||||
- else
|
||||
else
|
||||
a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
|
||||
|
||||
include ../partials/challenge-modals
|
||||
script.
|
||||
var MDNlinks = !{JSON.stringify(MDNlinks)};
|
||||
if (!MDNlinks.length) {
|
||||
$('#MDN-links').addClass('collapse');
|
||||
}
|
||||
|
||||
|
@ -38,7 +38,7 @@ block content
|
||||
span.ion-arrow-up-b
|
||||
| Less information
|
||||
br
|
||||
- if (user)
|
||||
if (user)
|
||||
a.btn.btn-primary.btn-big.btn-block#next-courseware-button
|
||||
| Go to my next challenge
|
||||
br
|
||||
@ -46,16 +46,16 @@ block content
|
||||
if (user.sentSlackInvite)
|
||||
.button-spacer
|
||||
.btn-group.input-group.btn-group-justified
|
||||
label.btn.btn-success#i-want-help(disabled)
|
||||
label.btn.btn-success#trigger-help-modal
|
||||
i.fa.fa-medkit
|
||||
| Help(disabled)
|
||||
label.btn.btn-success#report-issue
|
||||
| Help
|
||||
label.btn.btn-success#trigger-issue-modal
|
||||
i.fa.fa-bug
|
||||
| Bug
|
||||
.button-spacer
|
||||
script.
|
||||
var userLoggedIn = true;
|
||||
- else
|
||||
else
|
||||
a.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
|
||||
script.
|
||||
var userLoggedIn = false;
|
||||
@ -91,4 +91,5 @@ block content
|
||||
.animated.zoomInDown.delay-half
|
||||
span.completion-icon.ion-checkmark-circled.text-primary
|
||||
a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
|
||||
include ../partials/challenge-modals
|
||||
script(src="/js/lib/coursewares/coursewaresHCJQFramework_0.1.7.js")
|
||||
|
@ -38,13 +38,13 @@ block content
|
||||
if (user && user.sentSlackInvite)
|
||||
.button-spacer
|
||||
.btn-group.input-group.btn-group-justified
|
||||
label.btn.btn-success#i-want-help
|
||||
label.btn.btn-success#trigger-help-modal
|
||||
i.fa.fa-medkit
|
||||
| Help
|
||||
label.btn.btn-success#i-want-to-pair
|
||||
label.btn.btn-success#trigger-pair-modal
|
||||
i.fa.fa-user-plus
|
||||
| Pair
|
||||
label.btn.btn-success#report-issue
|
||||
label.btn.btn-success#trigger-issue-modal
|
||||
i.fa.fa-bug
|
||||
| Bug
|
||||
.spacer
|
||||
@ -77,11 +77,12 @@ block content
|
||||
.text-center
|
||||
.animated.zoomInDown.delay-half
|
||||
span.completion-icon.ion-checkmark-circled.text-primary
|
||||
- if (user)
|
||||
if (user)
|
||||
a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block#next-courseware-button(name='_csrf', value=_csrf, ng-disabled='completedWithForm.$invalid && existingUser.length > 0') Go to my next challenge (ctrl + enter)
|
||||
- if (points && points > 2)
|
||||
a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(href="https://twitter.com/intent/tweet?text=I%20just%20#{verb}%20%40FreeCodeCamp%20Bonfire:%20#{name}&url=http%3A%2F%2Ffreecodecamp.com/bonfires/#{dashedName}&hashtags=LearnToCode, JavaScript" target="_blank")
|
||||
if (points && points > 2)
|
||||
a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(href="https://twitter.com/intent/tweet?text=I%20just%20#{verb}%20%40FreeCodeCamp%20#{name}&url=http%3A%2F%2Ffreecodecamp.com/challenges/#{dashedName}&hashtags=LearnToCode, JavaScript" target="_blank")
|
||||
i.fa.fa-twitter  
|
||||
= phrase
|
||||
- else
|
||||
else
|
||||
a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
|
||||
include ../partials/challenge-modals
|
||||
|
@ -17,16 +17,16 @@ block content
|
||||
iframe.embed-responsive-item(src='//player.vimeo.com/video/#{video}')
|
||||
br
|
||||
if (user)
|
||||
a.btn.btn-primary.btn-big.btn-block#completed-courseware I've completed this challenge (ctrl + enter)
|
||||
a.btn.btn-primary.btn-big.btn-block#completed-courseware-editorless I've completed this challenge (ctrl + enter)
|
||||
script.
|
||||
var userLoggedIn = true;
|
||||
.button-spacer
|
||||
if (user.sentSlackInvite)
|
||||
.btn-group.input-group.btn-group-justified
|
||||
.btn.btn-success.btn-big#i-want-help-editorless(disabled)
|
||||
.btn.btn-success.btn-big#trigger-help-editorless-modal
|
||||
i.fa.fa-medkit
|
||||
| Get help(disabled)
|
||||
.btn.btn-success.btn-big#report-issue
|
||||
| Get help
|
||||
.btn.btn-success.btn-big#trigger-issue-modal
|
||||
i.fa.fa-bug
|
||||
| Report a bug
|
||||
.button-spacer
|
||||
@ -41,22 +41,21 @@ block content
|
||||
var controlEnterHandler = function(e) {
|
||||
$('body').unbind('keypress');
|
||||
if (e.ctrlKey && e.keyCode == 13) {
|
||||
$('#complete-courseware-dialog').modal('show');
|
||||
$('#complete-courseware-editorless-dialog').modal('show');
|
||||
} else {
|
||||
$('body').bind('keypress', controlEnterHandler);
|
||||
}
|
||||
};
|
||||
var modalControlEnterHandler = function(e) {
|
||||
$('#complete-courseware-dialog').unbind('keypress');
|
||||
$('#complete-courseware-editorless-dialog').unbind('keypress');
|
||||
if (e.ctrlKey && e.keyCode == 13) {
|
||||
$('#next-courseware-button').click();
|
||||
} else {
|
||||
$('#complete-courseware-dialog').bind('keypress', modalControlEnterHandler);
|
||||
$('#complete-courseware-editorless-dialog').bind('keypress', modalControlEnterHandler);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
#complete-courseware-dialog.modal(tabindex='-1')
|
||||
#complete-courseware-editorless-dialog.modal(tabindex='-1')
|
||||
.modal-dialog.animated.zoomIn.fast-animation
|
||||
.modal-content
|
||||
.modal-header.challenge-list-header= compliment
|
||||
@ -65,17 +64,17 @@ block content
|
||||
.text-center
|
||||
.animated.zoomInDown.delay-half
|
||||
span.completion-icon.ion-checkmark-circled.text-primary
|
||||
- if (user)
|
||||
if (user)
|
||||
a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block#next-courseware-button(name='_csrf', value=_csrf) On to my next challenge (ctrl + enter)
|
||||
script.
|
||||
$('#complete-courseware-dialog').bind('keypress', modalControlEnterHandler);
|
||||
$('#complete-courseware-editorless-dialog').bind('keypress', modalControlEnterHandler);
|
||||
|
||||
- if (user.progressTimestamps.length > 2)
|
||||
if (user.progressTimestamps.length > 2)
|
||||
.button-spacer
|
||||
a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(href="https://twitter.com/intent/tweet?text=I%20just%20#{verb}%20%40FreeCodeCamp%20Challenge:%20#{name}&url=http%3A%2F%2Ffreecodecamp.com/challenges/#{dashedName}&hashtags=LearnToCode, JavaScript" target="_blank")
|
||||
a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(href="https://twitter.com/intent/tweet?text=I%20just%20#{verb}%20%40FreeCodeCamp%20#{name}&url=http%3A%2F%2Ffreecodecamp.com/challenges/#{dashedName}&hashtags=LearnToCode, JavaScript" target="_blank")
|
||||
i.fa.fa-twitter  
|
||||
= phrase
|
||||
- else
|
||||
else
|
||||
a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
|
||||
h1 #{name}
|
||||
script.
|
||||
@ -84,3 +83,4 @@ block content
|
||||
var challenge_Id = !{JSON.stringify(challengeId)};
|
||||
var challenge_Name = !{JSON.stringify(name)};
|
||||
var challengeType = !{JSON.stringify(challengeType)};
|
||||
include ../partials/challenge-modals
|
||||
|
@ -21,13 +21,13 @@ block content
|
||||
if (user.sentSlackInvite)
|
||||
.button-spacer
|
||||
.btn-group.input-group.btn-group-justified
|
||||
.btn.btn-success.btn-big#i-want-help-editorless(disabled)
|
||||
.btn.btn-success.btn-big#trigger-help-editorless-modal
|
||||
i.fa.fa-medkit
|
||||
| Help(disabled)
|
||||
.btn.btn-success.btn-big#i-want-to-pair
|
||||
| Help
|
||||
.btn.btn-success.btn-big#trigger-pair-modal
|
||||
i.fa.fa-user-plus
|
||||
| Pair
|
||||
.btn.btn-success.btn-big#report-issue
|
||||
.btn.btn-success.btn-big#trigger-issue-modal
|
||||
i.fa.fa-bug
|
||||
| Bug
|
||||
.button-spacer
|
||||
@ -69,7 +69,7 @@ block content
|
||||
.text-center
|
||||
.animated.zoomInDown.delay-half
|
||||
span.completion-icon.ion-checkmark-circled.text-primary
|
||||
- if (user)
|
||||
if (user)
|
||||
form.form-horizontal(novalidate='novalidate', name='completedWithForm')
|
||||
.form-group.text-center
|
||||
.col-xs-10.col-xs-offset-1.col-sm-8.col-sm-offset-2.col-md-8.col-md-offset-2.animated.fadeIn
|
||||
@ -91,13 +91,8 @@ block content
|
||||
a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block#next-courseware-button(name='_csrf', value=_csrf, ng-disabled='completedWithForm.$invalid') Go to my next challenge (ctrl + enter)
|
||||
script.
|
||||
$('#complete-zipline-or-basejump-dialog').on('keypress', modalControlEnterHandler);
|
||||
|
||||
if (user.progressTimestamps.length > 2)
|
||||
.button-spacer
|
||||
a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(target="_blank")
|
||||
i.fa.fa-twitter  
|
||||
= phrase
|
||||
else
|
||||
a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
|
||||
script.
|
||||
$('body').on('keypress', controlEnterHandler);
|
||||
include ../partials/challenge-modals
|
||||
|
@ -4,7 +4,7 @@ block content
|
||||
if (user && user.progressTimestamps.length > 0)
|
||||
.col-xs-12
|
||||
.embed-responsive.embed-responsive-16by9
|
||||
iframe.embed-responsive-item(src='//player.vimeo.com/video/128853855')
|
||||
iframe.embed-responsive-item(src='//player.vimeo.com/video/129168884')
|
||||
br
|
||||
h3 Note: If you're using Firefox and the buttons aren't working, do a full refresh (control + f5 on Windows and command + shift + r on Mac). We're working on this.
|
||||
h3 Note: If you've already completed the HTML, CSS, Bootstrap Waypoints, you do not need to do these new Waypoints.
|
||||
|
33
views/jobs/directory.jade
Normal file
33
views/jobs/directory.jade
Normal file
@ -0,0 +1,33 @@
|
||||
extends ../layout
|
||||
block content
|
||||
script.
|
||||
var challengeName = 'Jobs View';
|
||||
.row
|
||||
|
||||
.panel.panel-info
|
||||
.panel-heading.text-center Junior JavaScript Engineer Jobs
|
||||
.panel-body
|
||||
.col-xs-12.col-sm-12.col-md-10.col-md-offset-1
|
||||
h2.text-center We want all our campers to get awesome software engineer jobs.
|
||||
h2.text-center
|
||||
a(href='https://www.linkedin.com/groups?viewMembers=&gid=6966827&sik=1432338555021' target='_blank') Many already have
|
||||
| .
|
||||
p.text-center.large-p.hidden-xs.hidden-sm This is a small sampling of the 1,000s of junior software engineer jobs. Learn about the  
|
||||
a(href='http://blog.freecodecamp.com/2014/10/the-real-reason-to-learn-mean-stack.html' target='_blank') the job market in aggregate
|
||||
| .
|
||||
.spacer
|
||||
|
||||
.text-center
|
||||
a.btn.btn-primary.btn-big(href='/jobs-form') My organization is hiring software engineers
|
||||
.spacer
|
||||
.spacer
|
||||
for job in jobs
|
||||
.spacer
|
||||
.row
|
||||
.col-xs-12.col-sm-2
|
||||
img.img-responsive.img-center(src=job.logoUrl)
|
||||
.col-xs-12.col-sm-10
|
||||
h2.negative-15= job.position
|
||||
h3.negative-15= job.company
|
||||
a.text-center.btn.btn-primary.btn-lg(href=job.postingUrl target='_blank') More info
|
||||
.spacer
|
@ -1,65 +0,0 @@
|
||||
extends ../layout
|
||||
block content
|
||||
.jumbotron.text-center
|
||||
h1.hug-top Here are some other solutions we recommend
|
||||
.spacer
|
||||
h2 Please note that Free Code Camp is not partnered with, nor do we receive a referral fee from, any of the following providers. We simply want to help guide you towards a solution for your organization.
|
||||
h3 Skills-based Volunteer Organizations
|
||||
ul
|
||||
li
|
||||
a(href='http://www.volunteermatch.com') Volunteer Match
|
||||
li
|
||||
a(href='http://www.catchafire.com') Catchafire
|
||||
h3 DIY Websites
|
||||
ul
|
||||
li
|
||||
a(href='http://www.wix.com') Wix
|
||||
li
|
||||
a(href='http://www.squarespace.com/') Square Space
|
||||
|
||||
h3 Donor and Volunteer Management Systems
|
||||
ul
|
||||
li
|
||||
a(href='https://www.thedatabank.com/') The Data Bank
|
||||
li
|
||||
a(href='http://www.donorsnap.com/') DonorSnap
|
||||
li
|
||||
a(href='http://www.donorperfect.com/') Donor Perfect
|
||||
li
|
||||
a(href='https://www.blackbaud.com/fundraising-crm/etapestry-donor-management') eTapestry
|
||||
li
|
||||
a(href='http://www.z2systems.com/') NeonCRM
|
||||
li
|
||||
a(href='http://www.regpacks.com/volunteer-management/') Regpack
|
||||
li
|
||||
a(href='http://sumac.com/') Sumac
|
||||
li
|
||||
a(href='http://www.volgistics.com/') Volgistics
|
||||
h3 Inventory Management Systems
|
||||
ul
|
||||
li
|
||||
a(href='https://www.ezofficeinventory.com/industries/non-profits') EZ Office Inventory
|
||||
li
|
||||
a(href='https://www.ordoro.com') Ordoro
|
||||
li
|
||||
a(href='http://www.unleashedsoftware.com') Unleashed
|
||||
h3 E-Learning platforms
|
||||
ul
|
||||
li
|
||||
a(href='http://www.dokeos.com/') Dokeos
|
||||
li
|
||||
a(href='http://www.efrontlearning.net/') eFront
|
||||
li
|
||||
a(href='https://moodle.org/') Moodle
|
||||
li
|
||||
a(href='https://sakaiproject.org/') Sakai
|
||||
h3 Community Management
|
||||
ul
|
||||
li
|
||||
a(href='https://civicrm.org/') CiviCRM
|
||||
li
|
||||
a(href='http://tcmgr.com/') Total Community Manager
|
||||
h3 Electronic Forms
|
||||
ul
|
||||
li
|
||||
a(href='http://www.google.com/forms') Google Forms
|
52
views/partials/challenge-modals.jade
Normal file
52
views/partials/challenge-modals.jade
Normal file
@ -0,0 +1,52 @@
|
||||
#pair-modal.modal(tabindex='-1')
|
||||
.modal-dialog.animated.zoomIn.fast-animation
|
||||
.modal-content
|
||||
.modal-header.challenge-list-header Ready to pair program?
|
||||
a.close.closing-x(href='#', data-dismiss='modal', aria-hidden='true') ×
|
||||
.modal-body.text-center
|
||||
h3 This will create a pair programming request.
|
||||
h3 You'll need  
|
||||
a(href='/field-guide/how-do-i-install-screenhero' target='_blank') Screen Hero
|
||||
| .
|
||||
h3 Other campers may then message you about pair programming.
|
||||
a.btn.btn-lg.btn-primary.btn-block#i-want-to-pair(name='_csrf', value=_csrf) Create my pair request
|
||||
a.btn.btn-lg.btn-info.btn-block(href='#', data-dismiss='modal', aria-hidden='true') Cancel
|
||||
|
||||
#issue-modal.modal(tabindex='-1')
|
||||
.modal-dialog.animated.zoomIn.fast-animation
|
||||
.modal-content
|
||||
.modal-header.challenge-list-header Did you find a bug?
|
||||
a.close.closing-x(href='#', data-dismiss='modal', aria-hidden='true') ×
|
||||
.modal-body.text-center
|
||||
h3 This will open our GitHub Issues page.
|
||||
h3 Please tell us how to reproduce the bug and link us to screen shots if possible.
|
||||
a.btn.btn-lg.btn-primary.btn-block#report-issue(name='_csrf', value=_csrf) Create my GitHub issue
|
||||
a.btn.btn-lg.btn-info.btn-block(href='#', data-dismiss='modal', aria-hidden='true') Cancel
|
||||
|
||||
#help-modal.modal(tabindex='-1')
|
||||
.modal-dialog.animated.zoomIn.fast-animation
|
||||
.modal-content
|
||||
.modal-header.challenge-list-header Need some help?
|
||||
a.close.closing-x(href='#', data-dismiss='modal', aria-hidden='true') ×
|
||||
.modal-body.text-center
|
||||
h3 Remember to use  
|
||||
a(href='/field-guide/how-do-i-get-help-when-i-get-stuck' target='_blank') RSAP
|
||||
| .
|
||||
h3 If you've already read the errors and searched Google, you should ask for help.
|
||||
h3 This will open a help request in our Help chat room.
|
||||
a.btn.btn-lg.btn-primary.btn-block#i-want-help(name='_csrf', value=_csrf) Ask for help
|
||||
a.btn.btn-lg.btn-info.btn-block(href='#', data-dismiss='modal', aria-hidden='true') Cancel
|
||||
|
||||
#help-editorless-modal.modal(tabindex='-1')
|
||||
.modal-dialog.animated.zoomIn.fast-animation
|
||||
.modal-content
|
||||
.modal-header.challenge-list-header Need some help?
|
||||
a.close.closing-x(href='#', data-dismiss='modal', aria-hidden='true') ×
|
||||
.modal-body.text-center
|
||||
h3 Remember to use  
|
||||
a(href='/field-guide/how-do-i-get-help-when-i-get-stuck' target='_blank') RSAP
|
||||
| .
|
||||
h3 If you've already read the errors and searched Google, you should ask for help.
|
||||
h3 This will open a help request in our Help chat room.
|
||||
a.btn.btn-lg.btn-primary.btn-block#i-want-help-editorless(name='_csrf', value=_csrf) Ask for help
|
||||
a.btn.btn-lg.btn-info.btn-block(href='#', data-dismiss='modal', aria-hidden='true') Cancel
|
@ -4,26 +4,26 @@ meta(http-equiv='X-UA-Compatible', content='IE=edge')
|
||||
meta(name='viewport', content='width=device-width, initial-scale=1.0')
|
||||
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(property="og:title", content="Free Code Camp is a community of busy people who learn to code by collaborating on projects for nonprofits. Build your full stack JavaScript Portfolio today.")
|
||||
meta(property="og:site_name", content="FreeCodeCamp")
|
||||
meta(property="og:title", content="Learn to code")
|
||||
meta(property="og:site_name", content="Free Code Camp")
|
||||
meta(name='twitter:widgets:csp', content='on')
|
||||
meta(name='p:domain_verify', content='d0bc047a482c03c24f1168004c2a216a')
|
||||
meta(property="og:url", content="http://www.freecodecamp.com")
|
||||
meta(property="og:description", content="Free Code Camp is a community of busy people who learn to code by collaborating on projects for nonprofits. Build your full stack JavaScript Portfolio today.")
|
||||
meta(property="og:description", content="We're a community where you learn to code by helping nonprofits. Build your full stack JavaScript Portfolio today.")
|
||||
meta(property="og:image", content="https://s3.amazonaws.com/freecodecamp/curriculum-diagram-full.jpg")
|
||||
meta(property="og:type", content="article")
|
||||
meta(property="article:publisher", content="https://www.facebook.com/freecodecamp")
|
||||
meta(property="article:section", content="Responsive")
|
||||
link(rel="publisher", href="https://plus.google.com/+Freecodecamp")
|
||||
link(rel="author", href="https://plus.google.com/+Freecodecamp")
|
||||
meta(name="description", content="Free Code Camp is a community of busy people who learn to code by collaborating on projects for nonprofits. Build your full stack JavaScript Portfolio today.")
|
||||
meta(name="description", content="A community where you learn to code by helping nonprofits. Build your full stack JavaScript Portfolio today.")
|
||||
meta(name="twitter:creator", content="@freecodecamp")
|
||||
meta(name="twitter:url", content="http://www.freecodecamp.com")
|
||||
meta(name="twitter:site", content="@freecodecamp")
|
||||
meta(name="twitter:card", content="summary_large_image")
|
||||
meta(name="twitter:image:src", content="https://s3.amazonaws.com/freecodecamp/curriculum-diagram-full.jpg")
|
||||
meta(name="twitter:title", content="Free Code Camp: a community of busy people learning to code")
|
||||
meta(name="twitter:description", content="We're 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 online coding bootcamp.")
|
||||
meta(name="twitter:title", content="Learn to code by helping nonprofits")
|
||||
meta(name="twitter:description", content="We're a community where you learn to code by helping nonprofits. Build your full stack JavaScript Portfolio today.")
|
||||
meta(content="a40ee5d5dba3bb091ad783ebd2b1383f", name="p:domain_verify")
|
||||
meta(name="msapplication-TileColor", content="#FFFFFF")
|
||||
meta(name="msapplication-TileImage", content="/")
|
||||
|
@ -1,16 +0,0 @@
|
||||
extends ../layout-wide
|
||||
block content
|
||||
.row
|
||||
.col-xs-12.col-sm-8.col-sm-offset-2.text-center
|
||||
h2 We want all our campers to get awesome software engineer jobs (
|
||||
a(href='https://www.linkedin.com/groups?viewMembers=&gid=6966827&sik=1432338555021' target='_blank') and many already have
|
||||
| ).
|
||||
h3.hidden-xs.hidden-sm This is a small sampling of the 1,000s of junior software engineer jobs. Learn about the  
|
||||
a(href='http://blog.freecodecamp.com/2014/10/the-real-reason-to-learn-mean-stack.html' target='_blank') the job market in aggregate
|
||||
| .
|
||||
.spacer
|
||||
a.btn.btn-primary.btn-big(href='/jobs-form') My organization is hiring software engineers
|
||||
.spacer
|
||||
.embed-responsive.embed-responsive-4by3.hidden-xs.hidden-sm
|
||||
iframe.embed-responsive-item(src="http://freecodecamp.simply-partner.com" scrolling="no")
|
||||
.spacer
|
Reference in New Issue
Block a user