Merge branch 'staging' of https://github.com/FreeCodeCamp/freecodecamp into greasan-translateDE
This commit is contained in:
@ -1,19 +0,0 @@
|
||||
var debug = require('debug')('freecc:models:user');
|
||||
|
||||
module.exports = function(User) {
|
||||
debug('setting up user hooks');
|
||||
/*
|
||||
* NOTE(berks): not sure if this is still needed
|
||||
User.observe('before save', function setUsername(ctx, next) {
|
||||
// set username from twitter
|
||||
if (ctx.instance.username && ctx.instance.username.match(/twitter/g)) {
|
||||
ctx.instance.username =
|
||||
ctx.instance.username.match(/twitter/g) ?
|
||||
ctx.instance.username.split('.').pop().toLowerCase() :
|
||||
ctx.instance.username;
|
||||
debug('username set', ctx.instance.username);
|
||||
}
|
||||
next();
|
||||
});
|
||||
*/
|
||||
};
|
@ -3,6 +3,7 @@
|
||||
"base": "User",
|
||||
"trackChanges": false,
|
||||
"idInjection": true,
|
||||
"strict": true,
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
|
@ -53,7 +53,6 @@
|
||||
"gulp-minify-css": "~0.5.1",
|
||||
"helmet": "~0.9.0",
|
||||
"helmet-csp": "^0.2.3",
|
||||
"hpp": "^0.2.0",
|
||||
"jade": "~1.8.0",
|
||||
"less": "~1.7.5",
|
||||
"less-middleware": "~2.0.1",
|
||||
@ -97,6 +96,7 @@
|
||||
"gulp-eslint": "~0.9.0",
|
||||
"gulp-inject": "~1.0.2",
|
||||
"gulp-nodemon": "^2.0.3",
|
||||
"loopback-explorer": "^1.7.2",
|
||||
"mocha": "~2.0.1",
|
||||
"multiline": "~1.0.1",
|
||||
"supertest": "~0.15.0"
|
||||
|
@ -255,6 +255,10 @@ ul {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.large-li {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.text-success {
|
||||
color: @brand-success;
|
||||
}
|
||||
@ -615,8 +619,11 @@ thead {
|
||||
}
|
||||
|
||||
.hamburger-dropdown {
|
||||
@media (max-width: 768px) {
|
||||
margin-top: -5px;
|
||||
@media (max-width: 991px) {
|
||||
margin-top: -5px !important;
|
||||
}
|
||||
@media (min-width: 768px) and (max-width: 991px) {
|
||||
width: 105%;
|
||||
}
|
||||
}
|
||||
|
||||
@ -782,7 +789,7 @@ iframe.iphone {
|
||||
width: 100%;
|
||||
border-radius: 5px;
|
||||
overflow-y: visible;
|
||||
|
||||
height: 500px;
|
||||
}
|
||||
}
|
||||
|
||||
@ -889,8 +896,7 @@ iframe.iphone {
|
||||
.hamburger-text {
|
||||
line-height: 0.75em;
|
||||
margin-top: 10px;
|
||||
font-size: 16px;
|
||||
margin-left: -8px;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.tight-h3 {
|
||||
@ -1101,6 +1107,7 @@ hr {
|
||||
.iframe-scroll {
|
||||
position: fixed !important;
|
||||
margin-top: 75px;
|
||||
z-index: 1;
|
||||
}
|
||||
}
|
||||
@media only screen and (max-width: 992px) {
|
||||
|
43080
public/js/lib/codemirror/addon/emmet/emmet.js
vendored
Normal file
43080
public/js/lib/codemirror/addon/emmet/emmet.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@ -16,6 +16,14 @@ var editor = CodeMirror.fromTextArea(document.getElementById("codeEditor"), {
|
||||
onKeyEvent: doLinting
|
||||
});
|
||||
|
||||
var defaultKeymap = {
|
||||
'Cmd-E': 'emmet.expand_abbreviation',
|
||||
'Tab': 'emmet.expand_abbreviation_with_tab',
|
||||
'Enter': 'emmet.insert_formatted_line_break_only'
|
||||
};
|
||||
|
||||
emmetCodeMirror(editor, defaultKeymap);
|
||||
|
||||
|
||||
// Hijack tab key to insert two spaces instead
|
||||
editor.setOption("extraKeys", {
|
||||
@ -78,19 +86,20 @@ setTimeout(updatePreview, 300);
|
||||
* "post" methods
|
||||
*/
|
||||
|
||||
var testResults = [];
|
||||
var postSuccess = function(data) {
|
||||
var testDoc = document.createElement("div");
|
||||
$(testDoc)
|
||||
.html("<div class='row'><div class='col-xs-2 text-center'><i class='ion-checkmark-circled big-success-icon'></i></div><div class='col-xs-10 test-output test-vertical-center wrappable'>" + JSON.parse(data) + "</div></div><div class='ten-pixel-break'/>")
|
||||
.appendTo($('#testSuite'));
|
||||
.html("<div class='row'><div class='col-xs-2 text-center'><i class='ion-checkmark-circled big-success-icon'></i></div><div class='col-xs-10 test-output test-vertical-center wrappable'>" + JSON.parse(data) + "</div></div><div class='ten-pixel-break'/>");
|
||||
$('#testSuite').append(testDoc);
|
||||
testSuccess();
|
||||
};
|
||||
|
||||
var postError = function(data) {
|
||||
var testDoc = document.createElement("div");
|
||||
$(testDoc)
|
||||
.html("<div class='row'><div class='col-xs-2 text-center'><i class='ion-close-circled big-error-icon'></i></div><div class='col-xs-10 test-vertical-center test-output wrappable'>" + JSON.parse(data) + "</div></div><div class='ten-pixel-break'/>")
|
||||
.prependTo($('#testSuite'))
|
||||
.html("<div class='row'><div class='col-xs-2 text-center'><i class='ion-close-circled big-error-icon'></i></div><div class='col-xs-10 test-vertical-center test-output wrappable'>" + JSON.parse(data) + "</div></div><div class='ten-pixel-break'/>");
|
||||
$('#testSuite').append(testDoc);
|
||||
};
|
||||
var goodTests = 0;
|
||||
var testSuccess = function() {
|
||||
@ -99,6 +108,7 @@ var testSuccess = function() {
|
||||
showCompletion();
|
||||
}
|
||||
};
|
||||
|
||||
var challengeSeed = challengeSeed || null;
|
||||
var allSeeds = '';
|
||||
(function() {
|
@ -183,7 +183,7 @@ var createTestDisplay = function() {
|
||||
console.log('Should be displaying bad tests');
|
||||
$(testDoc)
|
||||
.html("<div class='row'><div class='col-xs-2 text-center'><i class='ion-close-circled big-error-icon'></i></div><div class='col-xs-10 test-output wrappable test-vertical-center grayed-out-test-output'>" + test.text + "</div><div class='col-xs-10 test-output wrappable'>" + test.err + "</div></div><div class='ten-pixel-break'/>")
|
||||
.prependTo($('#testSuite'))
|
||||
.appendTo($('#testSuite'));
|
||||
} else {
|
||||
$(testDoc)
|
||||
.html("<div class='row'><div class='col-xs-2 text-center'><i class='ion-checkmark-circled big-success-icon'></i></div><div class='col-xs-10 test-output test-vertical-center wrappable grayed-out-test-output'>" + test.text + "</div></div><div class='ten-pixel-break'/>")
|
||||
@ -213,16 +213,17 @@ var runTests = function(err, data) {
|
||||
} else if (userTests) {
|
||||
userTests.push(false);
|
||||
pushed = true;
|
||||
userTests.forEach(function(test, ix, arr){
|
||||
userTests.forEach(function(chaiTestFromJSON, indexOfTestArray, __testArray){
|
||||
try {
|
||||
if (test) {
|
||||
var output = eval(reassembleTest(test, data));
|
||||
if (chaiTestFromJSON) {
|
||||
var output = eval(reassembleTest(chaiTestFromJSON, data));
|
||||
debugger;
|
||||
}
|
||||
} catch(error) {
|
||||
allTestsPassed = false;
|
||||
arr[ix].err = error.message;
|
||||
__testArray[indexOfTestArray].err = error.message;
|
||||
} finally {
|
||||
if (!test) {
|
||||
if (!chaiTestFromJSON) {
|
||||
createTestDisplay();
|
||||
}
|
||||
}
|
@ -422,14 +422,18 @@ profileValidation.directive('uniqueUsername', ['$http', function($http) {
|
||||
link: function (scope, element, attrs, ngModel) {
|
||||
element.bind("keyup", function (event) {
|
||||
ngModel.$setValidity('unique', true);
|
||||
if (element.val()) {
|
||||
$http.get("/api/checkUniqueUsername/" + element.val()).success(function (data) {
|
||||
if (element.val() === scope.storedUsername) {
|
||||
ngModel.$setValidity('unique', true);
|
||||
} else if (data) {
|
||||
ngModel.$setValidity('unique', false);
|
||||
}
|
||||
});
|
||||
var username = element.val();
|
||||
if (username) {
|
||||
var config = { params: { username: username } };
|
||||
$http
|
||||
.get('/api/users/exists', config)
|
||||
.success(function (exists) {
|
||||
if (username === scope.storedUsername) {
|
||||
ngModel.$setValidity('unique', true);
|
||||
} else if (exists) {
|
||||
ngModel.$setValidity('unique', false);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -449,11 +453,13 @@ profileValidation.directive('existingUsername',
|
||||
element.removeClass('ng-dirty');
|
||||
ngModel.$setPristine();
|
||||
}
|
||||
if (element.val()) {
|
||||
var username = element.val();
|
||||
if (username) {
|
||||
var config = { params: { username: username } };
|
||||
$http
|
||||
.get('/api/checkExistingUsername/' + element.val())
|
||||
.success(function (data) {
|
||||
ngModel.$setValidity('exists', data);
|
||||
.get('/api/users/exists', config)
|
||||
.success(function(exists) {
|
||||
ngModel.$setValidity('exists', exists);
|
||||
});
|
||||
}
|
||||
});
|
||||
@ -468,14 +474,18 @@ profileValidation.directive('uniqueEmail', ['$http', function($http) {
|
||||
link: function getUnique (scope, element, attrs, ngModel) {
|
||||
element.bind("keyup", function (event) {
|
||||
ngModel.$setValidity('unique', true);
|
||||
var email = element.val();
|
||||
if (element.val()) {
|
||||
$http.get("/api/checkUniqueEmail/" + encodeURIComponent(element.val())).success(function (data) {
|
||||
if (element.val() === scope.storedEmail) {
|
||||
ngModel.$setValidity('unique', true);
|
||||
} else if (data) {
|
||||
ngModel.$setValidity('unique', false);
|
||||
}
|
||||
});
|
||||
var config = { params: { email: email } };
|
||||
$http
|
||||
.get('/api/users/exists', config)
|
||||
.success(function (exists) {
|
||||
if (email === scope.storedEmail) {
|
||||
ngModel.$setValidity('unique', true);
|
||||
} else if (exists) {
|
||||
ngModel.$setValidity('unique', false);
|
||||
}
|
||||
});
|
||||
};
|
||||
});
|
||||
}
|
||||
|
@ -11,7 +11,7 @@
|
||||
"The user may fill out the form field any way they choose as long as it is a valid US number. The following are all valid formats for US numbers:",
|
||||
"555-555-5555, (555)555-5555, (555) 555-5555, 555 555 5555, 5555555555, 1 555 555 5555",
|
||||
"For this challenge you will be presented with a string such as \"800-692-7753\" or \"8oo-six427676;laskdjf\". Your job is to validate or reject the US phone number based on any combination of the formats provided above. The area code is required. If the country code is provided, you must confirm that the country code is \"1\". Return true if the string is a valid US phone number; otherwise false.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"tests": [
|
||||
"expect(telephoneCheck(\"555-555-5555\")).to.be.a(\"boolean\");",
|
||||
@ -69,7 +69,7 @@
|
||||
"description": [
|
||||
"Create a function that takes two or more arrays and returns an array of the symmetric difference of the provided arrays.",
|
||||
"The mathematical term symmetric difference refers to the elements in two sets that are in either the first or second set, but not in both.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function sym(args) {",
|
||||
@ -108,7 +108,7 @@
|
||||
"cid is a 2d array listing available currency.",
|
||||
"Return the string \"Insufficient Funds\" if cash-in-drawer is less than the change due. Return the string \"Closed\" if cash-in-drawer is equal to the change due.",
|
||||
"Otherwise, return change in coin and bills, sorted in highest to lowest order.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function drawer(price, cash, cid) {",
|
||||
@ -160,7 +160,7 @@
|
||||
"difficulty": "4.04",
|
||||
"description": [
|
||||
"Compare and update inventory stored in a 2d array against a second 2d array of a fresh delivery. Update current inventory item quantity, and if an item cannot be found, add the new item and quantity into the inventory array in alphabetical order.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function inventory(arr1, arr2) {",
|
||||
@ -215,7 +215,7 @@
|
||||
"description": [
|
||||
"Return the number of total permutations of the provided string that don't have repeated consecutive letters.",
|
||||
"For example, 'aab' should return 2 because it has 6 total permutations, but only 2 of them don't have the same letter (in this case 'a') repeating.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function permAlone(str) {",
|
||||
@ -259,7 +259,7 @@
|
||||
"For example, if the year and month are the same then only the day range should be displayed.",
|
||||
"Secondly, if the starting year is the current year, and the ending year can be inferred by the reader, the year should be omitted.",
|
||||
"Input date is formatted as YYYY-MM-DD",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function friendly(str) {",
|
||||
|
@ -58,7 +58,7 @@
|
||||
"Set the config flag for your Heroku environment and add MongoLab for your MongoDB instance by running the following command: <code>cd ~/workspace/dist && heroku config:set NODE_ENV=production && heroku addons:add mongolab</code>.",
|
||||
"As you build your app, you should frequently commit changes to your codebase. Make sure you're in the <code>~/workspace</code> directory by running <code>cd ~/workspace</code>. Then you can this code to stage the changes to your changes and commit them: <code>git commit -am \"your commit message\"</code>. Note that you should replace \"your commit message\" with a short summary of the changes you made to your code, such as \"added a records controller and corresponding routes\".",
|
||||
"You can push these new commits to GitHub by running <code>git push origin master</code>, and to Heroku by running <code>grunt --force && grunt buildcontrol:heroku</code>.",
|
||||
"Now you're ready to move on to your first Basejump. Click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku. If you pair programmed with a friend, enter his or her Free Code Camp username as well so that you both get credit for completing it."
|
||||
"Now you're ready to move on to your first Basejump. Click the \"I've completed this challenge\" and move on."
|
||||
],
|
||||
"challengeType": 2,
|
||||
"tests": []
|
||||
|
@ -91,7 +91,7 @@
|
||||
"Reverse the provided string.",
|
||||
"You may need to turn the string into an array before you can reverse it.",
|
||||
"Your result must be a string.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function reverseString(str) {",
|
||||
@ -133,7 +133,7 @@
|
||||
"If the integer is represented with the letter n, a factorial is the product of all positive integers less than or equal to n.",
|
||||
"Factorials are often represented with the shorthand notation n!",
|
||||
"For example: 5! = 1 * 2 * 3 * 4 * 5 = 120f",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function factorialize(num) {",
|
||||
@ -166,7 +166,7 @@
|
||||
"A palindrome is a word or sentence that's spelled the same way both forward and backward, ignoring punctuation, case, and spacing.",
|
||||
"You'll need to remove punctuation and turn everything lower case in order to check for palindromes.",
|
||||
"We'll pass strings with varying formats, such as \"racecar\", \"RaceCar\", and \"race CAR\" among others.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"tests": [
|
||||
"expect(palindrome(\"eye\")).to.be.a(\"boolean\");",
|
||||
@ -210,7 +210,7 @@
|
||||
"description": [
|
||||
"Return the length of the longest word in the provided sentence.",
|
||||
"Your response should be a number.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function findLongestWord(str) {",
|
||||
@ -249,7 +249,7 @@
|
||||
"description": [
|
||||
"Return the provided string with the first letter of each word capitalized.",
|
||||
"For the purpose of this exercise, you should also capitalize connecting words like 'the' and 'of'.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function titleCase(str) {",
|
||||
@ -287,7 +287,7 @@
|
||||
"Return an array consisting of the largest number from each provided sub-array. For simplicity, the provided array will contain exactly 4 sub-arrays.",
|
||||
"Remember, you can iterate through an array with a simple for loop, and access each member with array syntax arr[i] .",
|
||||
"If you are writing your own Chai.js tests, be sure to use a deep equal statement instead of an equal statement when comparing arrays.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function largestOfFour(arr) {",
|
||||
@ -323,7 +323,7 @@
|
||||
"difficulty": "1.07",
|
||||
"description": [
|
||||
"Check if a string (first argument) ends with the given target string (second argument).",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function end(str, target) {",
|
||||
@ -336,6 +336,8 @@
|
||||
],
|
||||
"tests": [
|
||||
"assert.strictEqual(end('Bastian', 'n'), true, 'should equal true if target equals end of string');",
|
||||
"assert.strictEqual(end('Connor', 'n'), false, 'should equal false if target does not equal end of string');",
|
||||
"assert.strictEqual(end('Walking on water and developing software from a specification are easy if both are frozen.', 'specification'), false, 'should equal false if target does not equal end of string');",
|
||||
"assert.strictEqual(end('He has to give me a new name', 'name'), true, 'should equal true if target equals end of string');",
|
||||
"assert.strictEqual(end('If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing', 'mountain'), false, 'should equal false if target does not equal end of string');"
|
||||
],
|
||||
@ -360,7 +362,7 @@
|
||||
"difficulty": "1.08",
|
||||
"description": [
|
||||
"Repeat a given string (first argument) n times (second argument). Return an empty string if n is a negative number.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function repeat(str, num) {",
|
||||
@ -397,7 +399,7 @@
|
||||
"description": [
|
||||
"Truncate a string (first argument) if it is longer than the given maximum string length (second argument). Return the truncated string with a '...' ending.",
|
||||
"Note that the three dots at the end add to the string length.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function truncate(str, num) {",
|
||||
@ -433,7 +435,7 @@
|
||||
"difficulty": "1.10",
|
||||
"description": [
|
||||
"Write a function that splits an array (first argument) into groups the length of size (second argument) and returns them as a multidimensional array.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function chunk(arr, size) {",
|
||||
@ -470,7 +472,7 @@
|
||||
"difficulty": "1.11",
|
||||
"description": [
|
||||
"Return the remaining elements of an array after chopping off n elements from the head.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function slasher(arr, howMany) {",
|
||||
@ -509,9 +511,8 @@
|
||||
"Return true if the string in the first element of the array contains all of the letters of the string in the second element of the array.",
|
||||
"For example, ['hello', 'Hello'], should return true because all of the letters in the second string are present in the first, ignoring case.",
|
||||
"The arguments ['hello', 'hey'] should return false because the string 'hello' does not contain a 'y'.",
|
||||
"Another example, ['Alien', 'line'], should return true because all of the letters in 'line' are present in 'Alien'.",
|
||||
"Lastly, ['Mary', 'Aarmy'] should return false because 'Mary' is only 4 letters while 'Aarmy' is 5, so 'Mary' can't possibly contain 'Aarmy'",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Lastly, ['Alien', 'line'], should return true because all of the letters in 'line' are present in 'Alien'.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function mutation(arr) {",
|
||||
@ -525,7 +526,7 @@
|
||||
"expect(mutation(['hello', 'Hello'])).to.be.true;",
|
||||
"expect(mutation(['zyxwvutsrqponmlkjihgfedcba', 'qrstu'])).to.be.true;",
|
||||
"expect(mutation(['Mary', 'Army'])).to.be.true;",
|
||||
"expect(mutation(['Mary', 'Aarmy'])).to.be.false;",
|
||||
"expect(mutation(['Mary', 'Aarmy'])).to.be.true;",
|
||||
"expect(mutation(['Alien', 'line'])).to.be.true;",
|
||||
"expect(mutation(['floor', 'for'])).to.be.true;"
|
||||
],
|
||||
@ -551,7 +552,7 @@
|
||||
"description": [
|
||||
"Remove all falsey values from an array.",
|
||||
"Falsey values in javascript are false, null, 0, \"\", undefined, and NaN.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function bouncer(arr) {",
|
||||
@ -588,7 +589,7 @@
|
||||
"difficulty": "1.55",
|
||||
"description": [
|
||||
"Make a function that looks through a list (first argument) and returns an array of all objects that have equivalent property values (second argument).",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function where(collection, source) {",
|
||||
@ -626,7 +627,7 @@
|
||||
"difficulty": "1.60",
|
||||
"description": [
|
||||
"You will be provided with an initial array (the first argument in the destroyer function), followed by one or more arguments. Remove all elements from the initial array that are of the same value as these arguments.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function destroyer(arr) {",
|
||||
@ -663,7 +664,7 @@
|
||||
"description": [
|
||||
"Return the lowest index at which a value (second argument) should be inserted into a sorted array (first argument).",
|
||||
"For example, where([1,2,3,4], 1.5) should return 1 because it is greater than 1 (0th index), but less than 2 (1st index).",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function where(arr, num) {",
|
||||
@ -699,7 +700,7 @@
|
||||
"description": [
|
||||
"We'll pass you an array of two numbers. Return the sum of those two numbers and all numbers between them.",
|
||||
"The lowest number will not always come first.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function sumAll(arr) {",
|
||||
@ -738,7 +739,7 @@
|
||||
"difficulty": "2.01",
|
||||
"description": [
|
||||
"Compare two arrays and return a new array with any items not found in both of the original arrays.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function diff(arr1, arr2) {",
|
||||
@ -791,7 +792,7 @@
|
||||
"description": [
|
||||
"Convert the given number into a roman numeral.",
|
||||
"All <a href=\"http://www.mathsisfun.com/roman-numerals.html\">roman numerals</a> answers should be provided in upper-case.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function convert(num) {",
|
||||
@ -834,7 +835,7 @@
|
||||
"Second argument is the word that you will be replacing (before).",
|
||||
"Third argument is what you will be replacing the second argument with (after).",
|
||||
"NOTE: Preserve the case of the original word when you are replacing it. For example if you mean to replace the word 'Book' with the word 'dog', it should be replaced as 'Dog'",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function replace(str, before, after) {",
|
||||
@ -875,7 +876,7 @@
|
||||
"Translate the provided string to pig latin.",
|
||||
"<a href=\"http://en.wikipedia.org/wiki/Pig_Latin\">Pig Latin</a> takes the first consonant (or consonant cluster) of an English word, moves it to the end of the word and suffixes an \"ay\".",
|
||||
"If a word begins with a vowel you just add \"way\" to the end.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function translate(str) {",
|
||||
@ -916,7 +917,7 @@
|
||||
"The DNA strand is missing the pairing element. Match each character with the missing element and return the results as a 2d array.",
|
||||
"<a href=\"http://en.wikipedia.org/wiki/Base_pair\">Base pairs</a> are a pair of AT and CG. Match the missing element to the provided character.",
|
||||
"Return the provided character as the first element in each array.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function pair(str) {",
|
||||
@ -948,7 +949,7 @@
|
||||
"description": [
|
||||
"Find the missing letter in the passed letter range and return it.",
|
||||
"If all letters are present in the range, return undefined.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function fearNotLetter(str) {",
|
||||
@ -985,7 +986,7 @@
|
||||
"description": [
|
||||
"Check if a value is classified as a boolean primitive. Return true or false.",
|
||||
"Boolean primitives are true and false.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function boo(bool) {",
|
||||
@ -1029,7 +1030,7 @@
|
||||
"In other words, all values present from all arrays should be included in their original order, but with no duplicates in the final array.",
|
||||
"The unique numbers should be sorted by their original order, but the final array should not be sorted in numerical order.",
|
||||
"Check the assertion tests for examples.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function unite(arr1, arr2, arr3) {",
|
||||
@ -1063,7 +1064,7 @@
|
||||
"difficulty": "2.07",
|
||||
"description": [
|
||||
"Convert the characters \"&\", \"<\", \">\", '\"', and \"'\", in a string to their corresponding HTML entities.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function convert(str) {",
|
||||
@ -1098,7 +1099,7 @@
|
||||
"difficulty": "2.08",
|
||||
"description": [
|
||||
"Convert a string to spinal case. Spinal case is all-lowercase-words-joined-by-dashes.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function spinalCase(str) {",
|
||||
@ -1139,7 +1140,7 @@
|
||||
"Return the sum of all odd Fibonacci numbers up to and including the passed number if it is a Fibonacci number.",
|
||||
"The first few numbers of the Fibonacci sequence are 1, 1, 2, 3, 5 and 8, and each subsequent number is the sum of the previous two numbers.",
|
||||
"As an example, passing 4 to the function should return 5 because all the odd Fibonacci numbers under 4 are 1, 1, and 3.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function sumFibs(num) {",
|
||||
@ -1179,7 +1180,7 @@
|
||||
"Sum all the prime numbers up to and including the provided number.",
|
||||
"A prime number is defined as having only two divisors, 1 and itself. For example, 2 is a prime number because it's only divisible by 1 and 2. 1 isn't a prime number, because it's only divisible by itself.",
|
||||
"The provided number may not be a prime.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function sumPrimes(num) {",
|
||||
@ -1216,7 +1217,7 @@
|
||||
"description": [
|
||||
"Find the smallest number that is evenly divisible by all numbers in the provided range.",
|
||||
"The range will be an array of two numbers that will not necessarily be in numerical order.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function smallestCommons(arr) {",
|
||||
@ -1253,7 +1254,7 @@
|
||||
"difficulty": "2.12",
|
||||
"description": [
|
||||
"Create a function that looks through an array (first argument) and returns the first element in the array that passes a truth test (second argument).",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function find(arr, func) {",
|
||||
@ -1288,7 +1289,7 @@
|
||||
"difficulty": "2.13",
|
||||
"description": [
|
||||
"Drop the elements of an array (first argument), starting from the front, until the predicate (second argument) returns true.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function drop(arr, func) {",
|
||||
@ -1325,7 +1326,7 @@
|
||||
"difficulty": "2.14",
|
||||
"description": [
|
||||
"Flatten a nested array. You must account for varying levels of nesting.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function steamroller(arr) {",
|
||||
@ -1362,7 +1363,7 @@
|
||||
"description": [
|
||||
"Return an English translated sentence of the passed binary string.",
|
||||
"The binary string will be space separated.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function binaryAgent(str) {",
|
||||
@ -1399,7 +1400,7 @@
|
||||
"Check if the predicate (second argument) returns truthy (defined) for all elements of a collection (first argument).",
|
||||
"For this, check to see if the property defined in the second argument is present on every element of the collection.",
|
||||
"Remember, you can access object properties through either dot notation or [] notation.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function every(collection, pre) {",
|
||||
@ -1437,7 +1438,7 @@
|
||||
"Create a function that sums two arguments together. If only one argument is provided, return a function that expects one additional argument and will return the sum.",
|
||||
"For example, add(2, 3) should return 5, and add(2) should return a function that is waiting for an argument so that <code>var sum2And = add(2); return sum2And(3); // 5</code>",
|
||||
"If either argument isn't a valid number, return undefined.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function add() {",
|
||||
|
@ -37,7 +37,7 @@
|
||||
"La mayoría de los elementos HTML tienen una <code>etiqueta de apertura</code> y una <code>etiqueta de cierre</code>. Las etiquetas de apertura se ven como: <code><h1></code>. Las etiquetas de cierre se ven como: <code></h1></code>. Fíjate que la única diferencia entre las etiquetas de apertura y de cierre es que estas últimas tienen un / después de su signo de apertura (<).",
|
||||
"Una vez que hayas completado cada desafío, y que hayas pasado todas sus pruebas, el botón \"Ir a mi siguiente desafío\" se activará. Haz click en él - o presiona control y enter al mismo tiempo - para avanzar al siguiente desafío.",
|
||||
"Para activar el botón \"Ir a mi siguiente desafío\" de este ejercicio, cambia tu texto de la etiqueta <code>h1</code> para que diga \"Hello World\" en lugar de \"Hello\"."
|
||||
],
|
||||
],
|
||||
"namePt": "",
|
||||
"descriptionPt": []
|
||||
},
|
||||
@ -73,7 +73,7 @@
|
||||
"El elemento h2 que ingreses creará un elemento h2 en el sitio web.",
|
||||
"Este elemento le dice al navegador cómo mostrar el texto que contiene.",
|
||||
"Los elementos <code>h2</code> son ligeramente más pequeños que los elementos <code>h1</code>. También hay elementos <code>h3</code>, <code>h4</code>, <code>h5</code> y <code>h6</code>."
|
||||
],
|
||||
],
|
||||
"namePt": "",
|
||||
"descriptionPt": []
|
||||
},
|
||||
@ -107,7 +107,7 @@
|
||||
"Crea un elemento párrafo debajo de tu elemento h2, y dale el texto \"Hello Paragraph\". Apenas escribas la etiqueta de apertura <code><p></code>, una de nuestras pruebas pasarán (ya que ésta es HTML válido). Asegúrate de cerrar el elemento agregando la etiqueta de cierre <code></p></code>.",
|
||||
"Los elementos párrafo son los principales elementos para los párrafos de texto en tamaño normal en sitios web.",
|
||||
"Tú puedes crear un elemento párrafo como éste: <code><p>I'm a p tag!</p></code>."
|
||||
],
|
||||
],
|
||||
"namePt": "",
|
||||
"descriptionPt": []
|
||||
},
|
||||
@ -203,7 +203,7 @@
|
||||
"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.')",
|
||||
"assert(editor.match(/-->/g).length > 0, 'Be sure to close each of your comments with <code>--></code>.')"
|
||||
"assert(editor.match(/-->/g).length > 1, 'Be sure to close each of your comments with <code>--></code>.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<!--",
|
||||
@ -440,7 +440,7 @@
|
||||
"description": [
|
||||
"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>."
|
||||
"Remember that CSS selectors require a period at the beginning like this: <code>.blue-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 <code>h2</code> element should be red.')",
|
||||
@ -557,7 +557,7 @@
|
||||
"description": [
|
||||
"Apply the <code>font-family</code> of \"Lobster\" to your <code>h2</code> element.",
|
||||
"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:",
|
||||
"Copy the following code snippet and paste it into your code editor:",
|
||||
"<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."
|
||||
],
|
||||
@ -602,7 +602,7 @@
|
||||
"description": [
|
||||
"Make all your <code>h2</code> elements use \"Lobster\" as their font family, but degrade to the \"Monospace\" font when the \"Lobster\" font isn't available.",
|
||||
"You can leave \"Lobster\" your <code>h2</code> element's font-family, and have it \"degrade\" to a different font when \"Lobster\" isn't available.",
|
||||
"For example, if you wanted an element to use the \"Helvetica\" font, but also degrade to the \"Sans-Serif\" font when \"Helvetica\" wasn't available, you could do use this CSS style: <code>p { font-family: Helvetica, Sans-Serif; }</code>.",
|
||||
"For example, if you wanted an element to use the \"Helvetica\" font, but also degrade to the \"Sans-Serif\" font when \"Helvetica\" wasn't available, you could use this CSS style: <code>p { font-family: Helvetica, Sans-Serif; }</code>.",
|
||||
"There are several default fonts that are available in all browsers. These include \"Monospace\", \"Serif\" and \"Sans-Serif\". See if you can set your <code>h2</code> elements to use \"Lobster\" and degrade to \"Monospace\".",
|
||||
"Now try commenting out your call to Google Fonts, so that the \"Lobster\" font isn't available. Notice how it degrades to the \"Monospace\" font."
|
||||
],
|
||||
@ -659,8 +659,8 @@
|
||||
"Now see if you can make sure the <code>h2</code> element is rendered in the color red without removing the \"blue-text\" class, doing an in-line styling, and without changing the sequence of CSS class declarations."
|
||||
],
|
||||
"tests": [
|
||||
"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('\\.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\".')",
|
||||
@ -810,7 +810,8 @@
|
||||
"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($('img').hasClass('thick-green-border') && parseInt($('img').css('border-top-width')), 'Give your image a border width of 10px.')",
|
||||
"assert(new RegExp('solid', 'gi').test(editor), 'Give your image a border style of \"solid\".')"
|
||||
"assert(new RegExp('solid', 'gi').test(editor), 'Give your image a border style of \"solid\".')",
|
||||
"assert($('img').css('border-left-color') === 'rgb(0, 128, 0)', 'Your <code>img</code> element should be green.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -1036,7 +1037,7 @@
|
||||
"name": "Waypoint: Wrap an Anchor Element within a Paragraph",
|
||||
"difficulty": 0.032,
|
||||
"description": [
|
||||
"Now wrap your <code>a</code> 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.",
|
||||
"Now wrap your <code>a</code> element within a new <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>."
|
||||
@ -1044,7 +1045,8 @@
|
||||
"tests": [
|
||||
"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[href=\\'http://www.catphotoapp.com\\']').parent().is('p'), 'Your <code>a</code> element should be wrapped within a paragraph element.')",
|
||||
"assert($('p') && $('p').length > 2, 'Create a new <code>p</code> element around your <code>a</code> element. \"click here for\".')",
|
||||
"assert($('a[href=\\'http://www.catphotoapp.com\\']').parent().is('p'), 'Your <code>a</code> element should be wrapped within your new <code>p</code> 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) && editor.match(/<p/g) && editor.match(/<\\/p>/g).length === editor.match(/<p/g).length, 'Make sure each of your <code>p</code> elements has a closing tag.')",
|
||||
"assert(editor.match(/<\\/a>/g) && editor.match(/<a/g) && editor.match(/<\\/a>/g).length === editor.match(/<a/g).length, 'Make sure each of your <code>a</code> elements has a closing tag.')"
|
||||
@ -1301,8 +1303,8 @@
|
||||
"tests": [
|
||||
"assert($('ul').length > 0, 'Create a <code>ul</code> element.')",
|
||||
"assert($('li').length > 2, 'Add three <code>li</code> elements to your <code>ul</code> element.')",
|
||||
"assert(editor.match(/<\\/ul>/g) && editor.match(/<\\/ul>/g).length === editor.match(/<ul>/g).length, 'Make sure your <code>ul</code> element has a closing tag.')",
|
||||
"assert(editor.match(/<\\/li>/g) && editor.match(/<\\/li>/g).length === editor.match(/<li>/g).length, 'Make sure your <code>li</code> element has a closing tag.')"
|
||||
"assert(editor.match(/<\\/ul>/g) && editor.match(/<ul/g) && editor.match(/<\\/ul>/g).length === editor.match(/<ul/g).length, 'Make sure your <code>ul</code> element has a closing tag.')",
|
||||
"assert(editor.match(/<\\/li>/g) && editor.match(/<li/g) && editor.match(/<\\/li>/g).length === editor.match(/<li/g).length, 'Make sure your <code>li</code> element has a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -1892,7 +1894,7 @@
|
||||
"assert($('input[type=\"checkbox\"]').length > 2, 'Your page should have three checkbox elements.')",
|
||||
"assert($('label:has(input[type=\"checkbox\"])').length > 2, 'Each of your three checkbox elements should be wrapped in its own <code>label</code> element.')",
|
||||
"assert(editor.match(/<\\/label>/g) && editor.match(/<label/g) && editor.match(/<\\/label>/g).length === editor.match(/<label/g).length, 'Make sure each of your <code>label</code> elements has a closing tag.')",
|
||||
"assert($('input[type=\"checkbox\"]:nth-child(1)').attr('name') === 'trait', 'Give your radio buttons the <code>name</code> attribute of \"personality\".')"
|
||||
"assert($('input[type=\"checkbox\"]:nth-child(1)').attr('name') === 'personality', 'Give your checkboxes buttons the <code>name</code> attribute of \"personality\".')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
|
@ -57,7 +57,7 @@
|
||||
"challengeSeed": ["114614220"],
|
||||
"description": [
|
||||
"Let's learn more about the loops that make virtually all programs possible - the \"For Loop\" and \"While Loop\". First, we'll learn the For Loop.",
|
||||
"Go to <a href='http://www.codecademy.com/courses/javascript-beginner-en-NhsaT/0/1' target='_blank'>http://www.codecademy.com/courses/javascript-beginner-en-NhsaT/0/1web</a> and complete both the both For and While loop section.",
|
||||
"Go to <a href='http://www.codecademy.com/courses/javascript-beginner-en-NhsaT/0/1' target='_blank'>http://www.codecademy.com/courses/javascript-beginner-en-NhsaT/0/1web</a> and complete the section.",
|
||||
"Be sure to also complete this section: <a href='http://www.codecademy.com/courses/javascript-beginner-en-XEDZA/0/1' target='_blank'>http://www.codecademy.com/courses/javascript-beginner-en-XEDZA/0/1</a>."
|
||||
],
|
||||
"challengeType": 2,
|
||||
|
@ -16,7 +16,7 @@
|
||||
],
|
||||
"tests": [
|
||||
"assert($('img').hasClass('img-responsive'), 'Your new image should have the class \"img-responsive\".')",
|
||||
"assert(new RegExp('http://bit.ly/fcc-kittens2', 'gi').test($('img.img-responsive').attr('src')), 'You should add a second image with the <code>src</code> of <code>http://bit.ly/fcc-kittens2</code>.')"
|
||||
"assert(new RegExp('http://bit.ly/fcc-kittens2', 'gi').test($('img.img-responsive').attr('src')), 'Add a second image with the <code>src</code> of <code>http://bit.ly/fcc-kittens2</code>.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -182,7 +182,7 @@
|
||||
"tests": [
|
||||
"assert($('button').hasClass('btn'), 'Your new button should have the class \"btn\".')",
|
||||
"assert(new RegExp('like this photo','gi').test($('button.btn').text()), 'Your button should have the text \"like this photo\".')",
|
||||
"assert(editor.match(/<\\/button>/g) && editor.match(/<\\/button>/g).length === editor.match(/<button>/g).length, 'Make sure your <code>button</code> element has a closing tag.')"
|
||||
"assert(editor.match(/<\\/button>/g) && editor.match(/<button/g) && editor.match(/<\\/button>/g).length === editor.match(/<button/g).length, 'Make sure all your <code>button</code> elements have a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -269,7 +269,7 @@
|
||||
"tests": [
|
||||
"assert($('button').hasClass('btn'), 'Your button should still have the class \"btn\".')",
|
||||
"assert($('button').hasClass('btn-block'), 'Your button should have the class \"btn-block\".')",
|
||||
"assert(editor.match(/<\\/button>/g) && editor.match(/<\\/button>/g).length === editor.match(/<button>/g).length, 'Make sure your <code>button</code> element has a closing tag.')"
|
||||
"assert(editor.match(/<\\/button>/g) && editor.match(/<button/g) && editor.match(/<\\/button>/g).length === editor.match(/<button/g).length, 'Make sure all your <code>button</code> elements have a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -355,7 +355,7 @@
|
||||
"tests": [
|
||||
"assert($('button').hasClass('btn-primary'), 'Your button should have the class \"btn-primary\".')",
|
||||
"assert($('button').hasClass('btn-block') && $('button').hasClass('btn'), 'Your button should still have the \"btn\" and \"btn-block\" classes.')",
|
||||
"assert(editor.match(/<\\/button>/g) && editor.match(/<\\/button>/g).length === editor.match(/<button>/g).length, 'Make sure your <code>button</code> element has a closing tag.')"
|
||||
"assert(editor.match(/<\\/button>/g) && editor.match(/<button/g) && editor.match(/<\\/button>/g).length === editor.match(/<button/g).length, 'Make sure all your <code>button</code> elements have a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -442,7 +442,7 @@
|
||||
"assert($('button').hasClass('btn-info'), 'Your new button should have the class \"btn-info\".')",
|
||||
"assert($('button.btn-block.btn').length > 1, 'Both of your Bootstrap buttons should have the \"btn\" and \"btn-block\" classes.')",
|
||||
"assert(new RegExp('info', 'gi').test($('button.btn-info').text()), 'Your new button should have the text \"Info\".')",
|
||||
"assert(editor.match(/<\\/button>/g) && editor.match(/<\\/button>/g).length === editor.match(/<button>/g).length, 'Make sure each of your <code>button</code> elements has a closing tag.')"
|
||||
"assert(editor.match(/<\\/button>/g) && editor.match(/<button/g) && editor.match(/<\\/button>/g).length === editor.match(/<button/g).length, 'Make sure all your <code>button</code> elements have a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -529,7 +529,7 @@
|
||||
"assert($('button').hasClass('btn-danger'), 'Your new button should have the class \"btn-danger\".')",
|
||||
"assert($('button.btn-block.btn').length > 2, 'All of your Bootstrap buttons should have the \"btn\" and \"btn-block\" classes.')",
|
||||
"assert(new RegExp('delete', 'gi').test($('button.btn-danger').text()), 'Your new button should have the text \"delete\".')",
|
||||
"assert(editor.match(/<\\/button>/g) && editor.match(/<\\/button>/g).length === editor.match(/<button>/g).length, 'Make sure each of your <code>button</code> elements has a closing tag.')"
|
||||
"assert(editor.match(/<\\/button>/g) && editor.match(/<button/g) && editor.match(/<\\/button>/g).length === editor.match(/<button/g).length, 'Make sure all your <code>button</code> elements have a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -618,10 +618,10 @@
|
||||
"The \"row\" class is applied to a <code>div</code>, and the buttons themselves can be wrapped within it."
|
||||
],
|
||||
"tests": [
|
||||
"assert($('div.row:has(button)').length > 2, 'Your buttons should be wrapped within a div with the class \"row\".')",
|
||||
"assert($('div.col-xs-4').length > 2, 'Each of your Bootstrap buttons should be wrapped in a div with the class \"col-xs-4\".')",
|
||||
"assert(editor.match(/<\\/button>/g) && editor.match(/<\\/button>/g).length === editor.match(/<button>/g).length, 'Make sure each of your <code>button</code> elements has a closing tag.')",
|
||||
"assert(editor.match(/<\\/div>/g) && editor.match(/<\\/div>/g).length === editor.match(/<div>/g).length, 'Make sure each of your <code>div</code> elements has a closing tag.')"
|
||||
"assert($('div.row:has(button)'), 'Your buttons should all be wrapped within the same <code>div</code> element with the class \"row\".')",
|
||||
"assert($('div.col-xs-4:has(button)').length > 2, 'Each of your Bootstrap buttons should be wrapped within its own a <code>div</code> element with the class \"col-xs-4\".')",
|
||||
"assert(editor.match(/<\\/button>/g) && editor.match(/<button/g) && editor.match(/<\\/button>/g).length === editor.match(/<button/g).length, 'Make sure each of your <code>button</code> elements has a closing tag.')",
|
||||
"assert(editor.match(/<\\/div>/g) && editor.match(/<div/g) && editor.match(/<\\/div>/g).length === editor.match(/<div/g).length, 'Make sure each of your <code>div</code> elements has a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -702,7 +702,7 @@
|
||||
"name": "Waypoint: Ditch Custom CSS for Bootstrap",
|
||||
"difficulty": 0.055,
|
||||
"description": [
|
||||
"Delete the \".red-text\", \"p\", and \".smaller-image\" CSS declarations from your <code>style</code> element. Then Delete the <code>p</code> element that contains a dead link. Then remove the \"red-text\" class from your <code>h2</code> element and replace it with the \"text-primary\" Bootstrap class. Finally, remove the \"smaller-image\" class from your first <code>img</code> element and replace it with the <code>img-responsive</code> class.",
|
||||
"Delete the \".red-text\", \"p\", and \".smaller-image\" CSS declarations from your <code>style</code> element so that the only declarations left in your <code>style</code> element are \"h2\" and \"thick-green-border\". Then Delete the <code>p</code> element that contains a dead link. Then remove the \"red-text\" class from your <code>h2</code> element and replace it with the \"text-primary\" Bootstrap class. Finally, remove the \"smaller-image\" class from your first <code>img</code> element and replace it with the <code>img-responsive</code> class.",
|
||||
"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."
|
||||
],
|
||||
@ -710,7 +710,8 @@
|
||||
"assert(!$('h2').hasClass('red-text'), 'You h2 element should no longer have the class \"red-text\".')",
|
||||
"assert($('h2').hasClass('text-primary'), 'You h2 element should now have the class \"text-primary\".')",
|
||||
"assert(!$('p').css('font-family').match(/monospace/i), 'Your paragraph elements should no longer use the font \"Monospace\".')",
|
||||
"assert($('img').hasClass('img-responsive') && !$('img').hasClass('smaller-image'), 'Remove the \"smaller-image\" class from your top image and replace it with the \"img-responsive\" class.')"
|
||||
"assert(!$('img').hasClass('smaller-image'), 'Remove the \"smaller-image\" class from your top image.')",
|
||||
"assert($('.img-responsive').length > 1, 'Add the \"img-responsive\" class to your top image.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -813,7 +814,7 @@
|
||||
"assert($('div.row:has(h2)').length > 0 && $('div.row:has(img)').length > 0, 'Your <code>h2</code> element and topmost <code>img</code> element should both be wrapped together within a <code>div</code> element with the class \"row\".')",
|
||||
"assert($('div.col-xs-4:has(img)').length > 0, 'Wrap your topmost <code>img</code> element within a <code>div</code> with the class \"col-xs-4\".')",
|
||||
"assert($('div.col-xs-8:has(h2)').length > 0, 'Wrap your <code>h2</code> element within a <code>div</code> with the class \"col-xs-8\".')",
|
||||
"assert(editor.match(/<\\/div>/g) && editor.match(/<\\/div>/g).length === editor.match(/<div>/g).length, 'Make sure each of your <code>div</code> elements has a closing tag.')"
|
||||
"assert(editor.match(/<\\/div>/g) && editor.match(/<div/g) && editor.match(/<\\/div>/g).length === editor.match(/<div/g).length, 'Make sure each of your <code>div</code> elements has a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -889,15 +890,14 @@
|
||||
"name": "Waypoint: Add Font Awesome Icons to our Buttons",
|
||||
"difficulty": 0.057,
|
||||
"description": [
|
||||
"Use Font Awesome to add a \"like\" icon to your like button.",
|
||||
"Use Font Awesome to add a \"thumbs-up\" icon to your like button by giving it a <code>i</code> element with the classes \"fa\" and \"fa-thumbs-up\".",
|
||||
"Font Awesome is a convenient library of icons. These icons are vector graphics, stored in the \".svg\" file format. These icons are treated just like fonts. You can specify their size using pixels, and they will assume the font size of their parent HTML elements.",
|
||||
"Go ahead and add a <code><i class=\"fa fa-thumbs-up\"></i></code> within your like button's element."
|
||||
],
|
||||
"tests": [
|
||||
"assert($('i').hasClass('fa fa-thumbs-up'), 'Add an <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.')",
|
||||
"assert(editor.match(/<\\/i>/g) && editor.match(/<\\/i/g).length === editor.match(/<i>/g).length, 'Make sure your <code>i</code> element has a closing tag.')"
|
||||
"assert(editor.match(/<\\/i>/g), 'Make sure your <code>i</code> element has a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -984,7 +984,7 @@
|
||||
"tests": [
|
||||
"assert($('i').hasClass('fa fa-trash'), 'You should add a <code><i class=\"fa fa-trash\"></i></code> within your delete button element.')",
|
||||
"assert($('i').hasClass('fa fa-info-circle'), 'You should add a <code><i class=\"fa fa-info-circle\"></i></code> within your info button element.')",
|
||||
"assert(editor.match(/<\\/i>/g) && editor.match(/<\\/i/g).length === editor.match(/<i>/g).length, 'Make sure each of your <code>i</code> elements has a closing tag.')"
|
||||
"assert(editor.match(/<\\/i>/g) && editor.match(/<\\/i/g).length > 2, 'Make sure each of your <code>i</code> elements has a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -1070,7 +1070,7 @@
|
||||
"tests": [
|
||||
"assert($('div.row:has(input[type=\\'radio\\'])').length > 0, 'Wrap all of your radio buttons inside one <code>div</code> with the class \"row\".')",
|
||||
"assert($('div.col-xs-6:has(input[type=\\'radio\\'])').length > 1, 'Wrap each of your radio buttons inside its own <code>div</code> with the class \"col-xs-6\".')",
|
||||
"assert(editor.match(/<\\/div>/g) && editor.match(/<\\/div>/g).length === editor.match(/<div>/g).length, 'Make sure each of your <code>div</code> elements has a closing tag.')"
|
||||
"assert(editor.match(/<\\/div>/g) && editor.match(/<div/g) && editor.match(/<\\/div>/g).length === editor.match(/<div/g).length, 'Make sure each of your <code>div</code> elements has a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -1156,7 +1156,7 @@
|
||||
"tests": [
|
||||
"assert($('div.row:has(input[type=\\'checkbox\\'])').length > 0, 'Wrap all of your checkboxes inside one <code>div</code> with the class \"row\".')",
|
||||
"assert($('div.col-xs-4:has(input[type=\\'checkbox\\'])').length > 2, 'Wrap each of your checkboxes inside its own <code>div</code> with the class \"col-xs-4\".')",
|
||||
"assert(editor.match(/<\\/div>/g) && editor.match(/<\\/div>/g).length === editor.match(/<div>/g).length, 'Make sure each of your <code>div</code> elements has a closing tag.')"
|
||||
"assert(editor.match(/<\\/div>/g) && editor.match(/<div/g) && editor.match(/<\\/div>/g).length === editor.match(/<div/g).length, 'Make sure each of your <code>div</code> elements has a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -1250,7 +1250,7 @@
|
||||
"assert($('button[type=\\'submit\\']').hasClass('btn btn-primary'), 'Give the submit button in your form the classes \"btn btn-primary\".')",
|
||||
"assert($('button[type=\\'submit\\']:has(i.fa.fa-paper-plane)').length > 0, 'Add a <code><i class=\"fa fa-paper-plane\"></i></code> within your submit <code>button</code> element.')",
|
||||
"assert($('input[type=\\'text\\']').hasClass('form-control'), 'Give the text <code>input<code> in your form the class \"form-control\".')",
|
||||
"assert(editor.match(/<\\/i>/g) && editor.match(/<\\/i/g).length === editor.match(/<i>/g).length, 'Make sure each of your <code>i</code> elements has a closing tag.')"
|
||||
"assert(editor.match(/<\\/i>/g) && editor.match(/<\\/i/g).length > 3, 'Make sure each of your <code>i</code> elements has a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
@ -1354,7 +1354,7 @@
|
||||
"assert($('div.row:has(input[type=\\'text\\'])').length > 0 && $('div.row:has(button[type=\\'submit\\'])').length > 0, 'Wrap your form submission button and text area in a div with class \"row\".')",
|
||||
"assert($('div.col-xs-5:has(button[type=\\'submit\\'])').length > 0, 'Wrap your form submission button in a div with the class \"col-xs-5\".')",
|
||||
"assert($('div.col-xs-7:has(input[type=\\'text\\'])').length > 0, 'Wrap your form text area in a div with the class \"col-xs-7\".')",
|
||||
"assert(editor.match(/<\\/div>/g) && editor.match(/<\\/div>/g).length === editor.match(/<div>/g).length, 'Make sure each of your <code>div</code> elements has a closing tag.')"
|
||||
"assert(editor.match(/<\\/div>/g) && editor.match(/<div/g) && editor.match(/<\\/div>/g).length === editor.match(/<div/g).length, 'Make sure each of your <code>div</code> elements has a closing tag.')"
|
||||
],
|
||||
"challengeSeed": [
|
||||
"<link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>",
|
||||
|
@ -153,9 +153,9 @@
|
||||
"challengeSeed": ["125407435"],
|
||||
"description": [
|
||||
"Free Code Camp has an up-to-date field guide that will answer your many questions.",
|
||||
"Click the \"Field Guide\" button in the upper right hand corner.",
|
||||
"Click the \"Guide\" button in the upper right hand corner.",
|
||||
"You can browse the field guide at your convenience. Most of its articles take less than 1 minute to read.",
|
||||
"When you click the Field Guide button, it will always take you back to whichever article you were last reading.",
|
||||
"When you click the \"Guide\" button, it will always take you back to whichever article you were last reading.",
|
||||
"Read a few field guide articles, then move on to your next challenge."
|
||||
],
|
||||
"challengeType": 2,
|
||||
|
@ -11,7 +11,7 @@
|
||||
"Those methods are getFirstName(), getLastName(), getFullName(), setFirstName(first), setLastName(last), and setFullName(firstAndLast).",
|
||||
"All functions that take an argument have an arity of 1, and the argument will be a string.",
|
||||
"These methods must be the only available means for interacting with the object.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"var Person = function(firstAndLast) {",
|
||||
@ -60,10 +60,10 @@
|
||||
"description": [
|
||||
"Return a new array that transforms the element's average altitude into their orbital periods.",
|
||||
"The array will contain objects in the format <code>{name: 'name', avgAlt: avgAlt}</code>.",
|
||||
"You can read about orbital periods <a href=\"http://en.wikipedia.org/wiki/Orbital_period\">on wikipedia</a>.",
|
||||
"You can read about orbital periods <a href=\"http://en.wikipedia.org/wiki/Orbital_period\" target='_blank'>on wikipedia</a>.",
|
||||
"The values should be rounded to the nearest whole number. The body being orbited is Earth.",
|
||||
"The radius of the earth is 6367.4447 kilometers, and the GM value of earth is 398600.4418",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function orbitalPeriod(arr) {",
|
||||
@ -101,7 +101,7 @@
|
||||
"Return the sum of all indices of elements of 'arr' that can be paired with one other element to form a sum that equals the value in the second argument 'arg'. If multiple sums are possible, return the smallest sum. Once an element has been used, it cannot be reused to pair with another.",
|
||||
"For example, pairwise([1, 4, 2, 3, 0, 5], 7) should return 11 because 4, 2, 3 and 5 can be paired with each other to equal 7.",
|
||||
"pairwise([1, 3, 2, 4], 4) would only equal 1, because only the first two elements can be paired to equal 4, and the first element has an index of 0!",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"challengeSeed": [
|
||||
"function pairwise(arr, arg) {",
|
||||
|
@ -11,16 +11,17 @@
|
||||
"Now you're ready to start our Zipline challenges. These front-end development challenges will give you many opportunities to apply the HTML, CSS, jQuery and JavaScript you've learned to build static (database-less) applications.",
|
||||
"For many of these challenges, you will be using JSON data from external API endpoints, such as Twitch.tv and Twitter. Note that you don't need to have a database to use these data.",
|
||||
"The easiest way to manipulate these data is with <a href='http://api.jquery.com/jquery.getjson/' target='_blank'>jQuery $.getJSON()</a>.",
|
||||
"Whatever you do, don't get discouraged! Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck.",
|
||||
"Whatever you do, don't get discouraged! Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck.",
|
||||
"We'll build these challenges using CodePen, a popular tool for creating, sharing, and discovering static web applications.",
|
||||
"Go to <a href='http://codepen.io' target='_blank'>http://codepen.io</a> and create an account.",
|
||||
"Click your user image in the top right corner, then click the \"New pen\" button that drops down.",
|
||||
"Drag the windows around and press the buttons in the lower-right hand corner to change the orientation to suit your preference.",
|
||||
"Click the gear next to CSS. Then in the \"External CSS File or Another Pen\" text field, type \"bootstrap\" and scroll down until you see the latest version of Bootstrap. Click it.",
|
||||
"Verify that bootstrap is active by adding the following code to your HTML: <code><h1 class='text-primary'>Hello CodePen!</h1></code>. The text's color should be Bootstrap blue.",
|
||||
"Click the gear next the JavaScript. Click the \"Latest version of...\" select box and choose jQuery.",
|
||||
"Click the gear next to JavaScript. Click the \"Latest version of...\" select box and choose jQuery.",
|
||||
"Now add the following code to your JavaScript: <code>$(document).ready(function() { $('.text-primary').text('Hi CodePen!') });</code>. Click the \"Save\" button at the top. Your \"Hello CodePen!\" should change to \"Hi CodePen!\". This means that jQuery is working.",
|
||||
"Now you're ready for your first Zipline. Click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair."
|
||||
"You can use this CodePen that you've just created as a starting point for your Ziplines. Just click the \"fork\" button at the top of your CodePen and it will create a duplicate CodePen.",
|
||||
"Now you're ready for your first Zipline. Click the \"I've completed this challenge\" button."
|
||||
],
|
||||
"challengeType": 2,
|
||||
"tests": [],
|
||||
@ -53,7 +54,7 @@
|
||||
"<span class='text-info'>Hint:</span> Here's an example call to Twitch.tv's JSON API: <code>https://api.twitch.tv/kraken/streams/freecodecamp</code>.",
|
||||
"<span class='text-info'>Hint:</span> The relevant documentation about this API call is here: <a href='https://github.com/justintv/Twitch-API/blob/master/v3_resources/streams.md#get-streamschannel' target='_blank'>https://github.com/justintv/Twitch-API/blob/master/v3_resources/streams.md#get-streamschannel</a>.",
|
||||
"<span class='text-info'>Hint:</span> Here's an array of the Twitch.tv usernames of people who regularly stream coding: <code>[\"freecodecamp\", \"storbeck\", \"terakilobyte\", \"habathcx\",\"RobotCaleb\",\"comster404\",\"brunofin\",\"thomasballinger\",\"noobs2ninjas\",\"beohoff\"]</code>",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try using <a href='http://api.jquery.com/jquery.each/'>jQuery's $.getJSON()</a> to consume APIs.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try using <a href='http://api.jquery.com/jquery.each/'>jQuery's $.getJSON()</a> to consume APIs.",
|
||||
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
|
||||
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
|
||||
],
|
||||
@ -83,7 +84,7 @@
|
||||
"Here are the <a href='http://en.wikipedia.org/wiki/User_story' target='_blank'>user stories</a> you must enable, and optional bonus user stories:",
|
||||
"<span class='text-info'>User Story:</span> As a user, I can click a button to show me a new random quote.",
|
||||
"<span class='text-info'>Bonus User Story:</span> As a user, I can press a button to tweet out a quote.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try using <a href='http://api.jquery.com/jquery.each/'>jQuery's $.getJSON()</a> to consume APIs.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try using <a href='http://api.jquery.com/jquery.each/'>jQuery's $.getJSON()</a> to consume APIs.",
|
||||
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
|
||||
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
|
||||
],
|
||||
@ -115,7 +116,7 @@
|
||||
"<span class='text-info'>Bonus User Story:</span> As a user, I can see an icon depending on the temperature..",
|
||||
"<span class='text-info'>Bonus User Story:</span> As a user, I see a different background image depending on the temperature (e.g. snowy mountain, hot desert).",
|
||||
"<span class='text-info'>Bonus User Story:</span> As a user, I can push a button to toggle between Fahrenheit and Celsius.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try using <a href='http://api.jquery.com/jquery.each/'>jQuery's $.getJSON()</a> to consume APIs.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try using <a href='http://api.jquery.com/jquery.each/'>jQuery's $.getJSON()</a> to consume APIs.",
|
||||
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
|
||||
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
|
||||
],
|
||||
@ -148,7 +149,7 @@
|
||||
"<span class='text-info'>User Story:</span> As a user, I can click a link to go directly to the post's discussion page.",
|
||||
"<span class='text-info'>Bonus User Story:</span> As a user, I can see how many upvotes each story has.",
|
||||
"<span class='text-info'>Hint:</span> Here's the Camper News Hot Stories API endpoint: <code>http://www.freecodecamp.com/stories/hotStories</code>.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try using <a href='http://api.jquery.com/jquery.each/'>jQuery's $.getJSON()</a> to consume APIs.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try using <a href='http://api.jquery.com/jquery.each/'>jQuery's $.getJSON()</a> to consume APIs.",
|
||||
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
|
||||
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
|
||||
],
|
||||
@ -180,7 +181,7 @@
|
||||
"<span class='text-info'>Bonus User Story:</span>As a user, I can click a button to see a random Wikipedia entry.",
|
||||
"<span class='text-info'>Bonus User Story:</span>As a user, when I type in the search box, I can see a dropdown menu with autocomplete options for matching Wikipedia entries.",
|
||||
"<span class='text-info'>Hint:</span> Here's an entry on using Wikipedia's API: <code>http://www.mediawiki.org/wiki/API:Main_page</code>.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck. Try using <a href='http://api.jquery.com/jquery.each/'>jQuery's $.getJSON()</a> to consume APIs.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try using <a href='http://api.jquery.com/jquery.each/'>jQuery's $.getJSON()</a> to consume APIs.",
|
||||
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
|
||||
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
|
||||
],
|
||||
@ -211,7 +212,7 @@
|
||||
"<span class='text-info'>User Story:</span> As a user, I can start a 25 minute pomodoro, and the timer will go off once 25 minutes has elapsed.",
|
||||
"<span class='text-info'>Bonus User Story:</span> As a user, I can reset the clock for my next pomodoro.",
|
||||
"<span class='text-info'>Bonus User Story:</span> As a user, I can customize the length of each pomodoro.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck.",
|
||||
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
|
||||
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
|
||||
],
|
||||
@ -242,7 +243,7 @@
|
||||
"<span class='text-info'>User Story:</span> As a user, I can add, subtract, multiply and divide two numbers.",
|
||||
"<span class='text-info'>Bonus User Story:</span> I can clear the input field with a clear button.",
|
||||
"<span class='text-info'>Bonus User Story:</span> I can keep chaining mathematical operations together until I hit the clear button, and the calculator will tell me the correct output.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck.",
|
||||
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
|
||||
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
|
||||
],
|
||||
@ -274,7 +275,7 @@
|
||||
"<span class='text-info'>Bonus User Story:</span> As a user, I can never actually win against the computer - at best I can tie.",
|
||||
"<span class='text-info'>Bonus User Story:</span> As a user, my game will reset as soon as it's over so I can play again.",
|
||||
"<span class='text-info'>Bonus User Story:</span> As a user, I can choose whether I want to play as X or O.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck'>RSAP</a> if you get stuck.",
|
||||
"Remember to use <a href='/field-guide/how-do-i-get-help-when-I-get-stuck' target='_blank'>RSAP</a> if you get stuck.",
|
||||
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
|
||||
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
|
||||
],
|
||||
|
@ -1,6 +1,6 @@
|
||||
[
|
||||
{
|
||||
"id": "bd7158d9c441eddfaeb5bdef",
|
||||
"_id": "bd7158d9c441eddfaeb5bdef",
|
||||
"name": "How do I use this guide?",
|
||||
"dashedName": "how-do-i-use-this-guide",
|
||||
"description": [
|
||||
@ -12,7 +12,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c441eddfaeb5bdff",
|
||||
"_id": "bd7158d9c441eddfaeb5bdff",
|
||||
"name": "What exactly is Free Code Camp?",
|
||||
"dashedName": "what-exactly-is-free-code-camp",
|
||||
"description": [
|
||||
@ -21,16 +21,16 @@
|
||||
" <p class='large-p'>We help our campers (students):</p>",
|
||||
" <p class='large-p'>",
|
||||
" <ol>",
|
||||
" <li>Learn full stack JavaScript</li>",
|
||||
" <li>Build a portfolio of real apps that real people are using</li>",
|
||||
" <li>Get a coding job</li>",
|
||||
" <li class='large-li'>Learn full stack JavaScript</li>",
|
||||
" <li class='large-li'>Build a portfolio of real apps that real people are using</li>",
|
||||
" <li class='large-li'>Get a coding job</li>",
|
||||
" </ol>",
|
||||
" </p>",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c441eddfaeb5bd1f",
|
||||
"_id": "bd7158d9c441eddfaeb5bd1f",
|
||||
"name": "Why do I need Free Code Camp?",
|
||||
"dashedName": "why-do-i-need-free-code-camp",
|
||||
"description": [
|
||||
@ -39,8 +39,8 @@
|
||||
" <p class='large-p'>Most people who successfully learn to code:</p>",
|
||||
" <p class='large-p'>",
|
||||
" <ol>",
|
||||
" <li>Make friends with people who code</li>",
|
||||
" <li>Code a little every day</li>",
|
||||
" <li class='large-li'>Make friends with people who code</li>",
|
||||
" <li class='large-li'>Code a little every day</li>",
|
||||
" </ol>",
|
||||
" </p>",
|
||||
" <p class='large-p'>We give you the structure and the community you need so you can successfully learn to code.</p>",
|
||||
@ -48,7 +48,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c441eddfaeb5bd2f",
|
||||
"_id": "bd7158d9c441eddfaeb5bd2f",
|
||||
"name": "What are the main advantages of Free Code Camp?",
|
||||
"dashedName": "what-are-the-main-advantages-of-free-code-camp",
|
||||
"description": [
|
||||
@ -56,16 +56,16 @@
|
||||
" <h3>Our main advantage is that we're accessible to busy adults who want to change careers. Specifically, we're:</h3>",
|
||||
" <p class='large-p'>",
|
||||
" <ul>",
|
||||
" <li>• Free</li>",
|
||||
" <li>• Self-paced</li>",
|
||||
" <li>• Browser-based</li>",
|
||||
" <li class='large-li'>• Free</li>",
|
||||
" <li class='large-li'>• Self-paced</li>",
|
||||
" <li class='large-li'>• Browser-based</li>",
|
||||
" </ul>",
|
||||
" </p>",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c441eddfaeb5bd3f",
|
||||
"_id": "bd7158d9c441eddfaeb5bd3f",
|
||||
"name": "How does Free Code Camp work?",
|
||||
"dashedName": "how-does-free-code-camp-work",
|
||||
"description": [
|
||||
@ -87,7 +87,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c441eddfaeb5bd4f",
|
||||
"_id": "bd7158d9c441eddfaeb5bd4f",
|
||||
"name": "Will I really be able to get software engineering job after Free Code Camp?",
|
||||
"dashedName": "will-i-really-be-able-to-get-a-software-engineering-job-after-free-code-camp",
|
||||
"description": [
|
||||
@ -97,17 +97,17 @@
|
||||
" <h3>Here are the facts:</h3>",
|
||||
" <p class='large-p'>",
|
||||
" <ul>",
|
||||
" <li>• There are hundreds of thousands of unfilled coding jobs.</li>",
|
||||
" <li>• Employers and the US government have joined together to promote nontraditional coding programs like Free Code Camp.</li>",
|
||||
" <li>• Full stack JavaScript is one of best paying skill sets, and has a ton of job openings.</li>",
|
||||
" <li>• The best proof that you're an employable developer is a portfolio filled with real apps that real people are using.</li>",
|
||||
" <li class='large-li'>• There are hundreds of thousands of unfilled coding jobs.</li>",
|
||||
" <li class='large-li'>• Employers and the US government have joined together to promote nontraditional coding programs like Free Code Camp.</li>",
|
||||
" <li class='large-li'>• Full stack JavaScript is one of best paying skill sets, and has a ton of job openings.</li>",
|
||||
" <li class='large-li'>• The best proof that you're an employable developer is a portfolio filled with real apps that real people are using.</li>",
|
||||
" </ul>",
|
||||
" </p>",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c440eddfaeb5bdef",
|
||||
"_id": "bd7158d9c440eddfaeb5bdef",
|
||||
"name": "What will I learn, and in what sequence?",
|
||||
"dashedName": "what-will-i-learn-and-in-what-sequence",
|
||||
"description": [
|
||||
@ -115,36 +115,36 @@
|
||||
" <h3>First, you'll learn basic web design tools like:</h3>",
|
||||
" <p class='large-p'>",
|
||||
" <ul>",
|
||||
" <li>• HTML - the structure of web pages</li>",
|
||||
" <li>• CSS - the visual style of web pages</li>",
|
||||
" <li>• Bootstrap - a \"responsive design\" tool that helps your websites look great on tablets and phones</li>",
|
||||
" <li>• jQuery - an easy tool for controlling content in the browser</li>",
|
||||
" <li>• Chrome DevTools - a tool for understanding and debugging websites, right in your browser</li>",
|
||||
" <li class='large-li'>• HTML - the structure of web pages</li>",
|
||||
" <li class='large-li'>• CSS - the visual style of web pages</li>",
|
||||
" <li class='large-li'>• Bootstrap - a \"responsive design\" tool that helps your websites look great on tablets and phones</li>",
|
||||
" <li class='large-li'>• jQuery - an easy tool for controlling content in the browser</li>",
|
||||
" <li class='large-li'>• Chrome DevTools - a tool for understanding and debugging websites, right in your browser</li>",
|
||||
" </ul>",
|
||||
" </p>",
|
||||
" <h3>Then you'll learn computer science and the art of programming:</h3>",
|
||||
" <p class='large-p'>",
|
||||
" <ul>",
|
||||
" <li>• JavaScript - the one programming language that all web browsers use</li>",
|
||||
" <li>• Algorithms - step-by-step recipes for getting things done</li>",
|
||||
" <li class='large-li'>• JavaScript - the one programming language that all web browsers use</li>",
|
||||
" <li class='large-li'>• Algorithms - step-by-step recipes for getting things done</li>",
|
||||
" </ul>",
|
||||
" </p>",
|
||||
" <h3>Finally you'll learn Agile Methodologies and Full Stack JavaScript to build projects for nonprofits:</h3>",
|
||||
" <p class='large-p'>",
|
||||
" <ul>",
|
||||
" <li>• Agile - a set of software development principles that focus the design and production of a project on the needs of its users</li>",
|
||||
" <li>• Git - a version control system for saving and sharing your projects</li>",
|
||||
" <li>• MongoDB - a popular non-relational database</li>",
|
||||
" <li>• Angular.js - a tool for making exciting web interfaces</li>",
|
||||
" <li>• Express.js - a powerful web development framework</li>",
|
||||
" <li>• Node.js - a platform for creating scalable network applications.</li>",
|
||||
" <li class='large-li'>• Agile - a set of software development principles that focus the design and production of a project on the needs of its users</li>",
|
||||
" <li class='large-li'>• Git - a version control system for saving and sharing your projects</li>",
|
||||
" <li class='large-li'>• MongoDB - a popular non-relational database</li>",
|
||||
" <li class='large-li'>• Angular.js - a tool for making exciting web interfaces</li>",
|
||||
" <li class='large-li'>• Express.js - a powerful web development framework</li>",
|
||||
" <li class='large-li'>• Node.js - a platform for creating scalable network applications.</li>",
|
||||
" </ul>",
|
||||
" </p>",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c434eddfaeb5bdef",
|
||||
"_id": "bd7158d9c434eddfaeb5bdef",
|
||||
"name": "How long does Free Code Camp take?",
|
||||
"dashedName": "how-long-does-free-code-camp-take",
|
||||
"description": [
|
||||
@ -182,7 +182,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c438eddfaeb5bdef",
|
||||
"_id": "bd7158d9c438eddfaeb5bdef",
|
||||
"name": "Why does Free Code Camp use JavaScript instead of Ruby or Python?",
|
||||
"dashedName": "why-does-free-code-camp-use-javascript-instead-of-ruby-or-python",
|
||||
"description": [
|
||||
@ -196,7 +196,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c437eddfaeb5bdef",
|
||||
"_id": "bd7158d9c437eddfaeb5bdef",
|
||||
"name": "What is pair programming, and why is it special?",
|
||||
"dashedName": "what-is-pair-programming-and-why-is-it-special",
|
||||
"description": [
|
||||
@ -209,7 +209,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c436eddfaeb5bd2f",
|
||||
"_id": "bd7158d9c436eddfaeb5bd2f",
|
||||
"name": "How do I get help when I get stuck?",
|
||||
"dashedName": "how-do-i-get-help-when-i-get-stuck",
|
||||
"description": [
|
||||
@ -217,10 +217,10 @@
|
||||
" <h3>When you get stuck, remember: RSAP.</h3>",
|
||||
" <p class='large-p'>",
|
||||
" <ol>",
|
||||
" <li><span class='text-info'>Read</span> the documentation or error</li>",
|
||||
" <li><span class='text-info'>Search</span> Google</li>",
|
||||
" <li><span class='text-info'>Ask</span> your friends for help</li>",
|
||||
" <li><span class='text-info'>Post</span> on Stack Overflow</li>",
|
||||
" <li class='large-li'><span class='text-info'>Read</span> the documentation or error</li>",
|
||||
" <li class='large-li'><span class='text-info'>Search</span> Google</li>",
|
||||
" <li class='large-li'><span class='text-info'>Ask</span> your friends for help</li>",
|
||||
" <li class='large-li'><span class='text-info'>Post</span> on Stack Overflow</li>",
|
||||
" </ol>",
|
||||
" </p>",
|
||||
" <p class='large-p'>This is the most time-efficient way to handle being stuck, and it's the most respectful of other people's time, too.</p>",
|
||||
@ -232,7 +232,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c436eddfaeb5bd3f",
|
||||
"_id": "bd7158d9c436eddfaeb5bd3f",
|
||||
"name": "Can I jump around in this guide?",
|
||||
"dashedName": "can-i-jump-around-in-this-guide",
|
||||
"description": [
|
||||
@ -244,7 +244,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c436eddfaeb5bdef",
|
||||
"_id": "bd7158d9c436eddfaeb5bdef",
|
||||
"name": "If Free Code Camp is free, how does it make money?",
|
||||
"dashedName": "if-free-code-camp-is-free-how-does-it-make-money",
|
||||
"description": [
|
||||
@ -257,7 +257,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c435eddfaeb5bdef",
|
||||
"_id": "bd7158d9c435eddfaeb5bdef",
|
||||
"name": "Does Free Code Camp have an application process?",
|
||||
"dashedName": "does-free-code-camp-have-an-application-process",
|
||||
"description": [
|
||||
@ -269,7 +269,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c436eddfaeb5bd3b",
|
||||
"_id": "bd7158d9c436eddfaeb5bd3b",
|
||||
"name": "How can I stream my live coding sessions on Free Code Camp's Twitch.tv channel?",
|
||||
"dashedName": "how-can-i-stream-my-live-coding-sessions-on-free-code-camps-twitch-tv-channel",
|
||||
"description": [
|
||||
@ -278,9 +278,9 @@
|
||||
"<p class='large-p'>Please follow these steps to get started:</p>",
|
||||
" <p class='large-p'>",
|
||||
" <ol>",
|
||||
" <li>Follow <a href='http://www.hdpvrcapture.com/wordpress/?p=5951' target='_blank'>this tutorial</a> to set up your computer for streaming.</li>",
|
||||
" <li>Contact Jason Ruekert - he's @jsonify in Slack. He's in charge of our Twitch.tv channel. Tell him what you'd like to stream, and when you're available to stream.</li>",
|
||||
" <li>Jason will pair with you using Screen Hero to verify your computer is configured properly to stream.</li>",
|
||||
" <li class='large-li'>Follow <a href='http://www.hdpvrcapture.com/wordpress/?p=5951' target='_blank'>this tutorial</a> to set up your computer for streaming.</li>",
|
||||
" <li class='large-li'>Contact Jason Ruekert - he's @jsonify in Slack. He's in charge of our Twitch.tv channel. Tell him what you'd like to stream, and when you're available to stream.</li>",
|
||||
" <li class='large-li'>Jason will pair with you using Screen Hero to verify your computer is configured properly to stream.</li>",
|
||||
" </ol>",
|
||||
" </p>",
|
||||
" <p class='large-p'>Be respectful of your audience. Everything you stream should be related to coding JavaScript, and should be acceptable for children. (Yes, children do sometimes watch our Twitch stream to learn to code).</p>",
|
||||
@ -290,7 +290,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c436eddfaeb5bd3d",
|
||||
"_id": "bd7158d9c436eddfaeb5bd3d",
|
||||
"name": "How can I find other Free Code Camp campers in my city?",
|
||||
"dashedName": "how-can-i-find-other-free-code-camp-campers-in-my-city",
|
||||
"description": [
|
||||
@ -298,182 +298,200 @@
|
||||
" <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.ahmedabad/' target='_blank'>Ahmedabad</a></li>",
|
||||
" <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>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.aracaju/' target='_blank'>Aracaju</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.asheville/' target='_blank'>Asheville</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.atlanta/' target='_blank'>Atlanta</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.austin/' target='_blank'>Austin</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.baltimore.md/' target='_blank'>Baltimore</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.bandung/' target='_blank'>Bandung</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.belem/' target='_blank'>Belem</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.belgrade/' target='_blank'>Belgrade</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.bellingham/' target='_blank'>Bellingham</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.bengaluru/' target='_blank'>Bengaluru</a></li>",
|
||||
" <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.oxford.al/' target='_blank'>Birmingham, Alabama</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>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.bucharest/' target='_blank'>Bucharest</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.budapest/' target='_blank'>Budapest</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.cairo/' target='_blank'>Cairo</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.calgary/' target='_blank'>Calgary</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.campinas/' target='_blank'>Campinas</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.cape.town/' target='_blank'>Cape Town</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.caracas/' target='_blank'>Caracas</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.charlotte.nc/' target='_blank'>Charlotte</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.chennai/' target='_blank'>Chennai</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.chicago/' target='_blank'>Chicago</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.cincinnati/' target='_blank'>Cincinnati</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.cluj' target='_blank'>Cluj</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.coimbatore' target='_blank'>Coimbatore</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.coventry/' target='_blank'>Coventry</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.curitiba/' target='_blank'>Curitiba</a></li>",
|
||||
" <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>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.edmonton/' target='_blank'>Edmonton</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.northern.arizona/' target='_blank'>Flagstaff</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.florianopolis/' target='_blank'>Florianopolis</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.dallas/' target='_blank'>Fort Worth</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.frankfurt.main/' target='_blank'>Frankfurt</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.freehold/' target='_blank'>Freehold</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.geneva/' target='_blank'>Geneva</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.Glendora.California/' target='_blank'>Glendora</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.jakarta/' target='_blank'>Jakarta</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.Hermosillo/' target='_blank'>Hermosillo</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.hk/' target='_blank'>Hong Kong</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.houston/' target='_blank'>Houston</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.istanbul/' target='_blank'>Istanbul</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.indianapolis/' target='_blank'>Indianapolis</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.iasi.romania/' target='_blank'>Iasi</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.irkutsk/' target='_blank'>Irkutsk</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.islamabad/' target='_blank'>Islamabad</a></li>",
|
||||
" <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.johannesburg/' target='_blank'>Johannesburg</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>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.karachi/' target='_blank'>Karachi</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.kathmandu/' target='_blank'>Kathmandu</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.kemerovo/' target='_blank'>Kemerovo</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.kiev/' target='_blank'>Kiev</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.kolkata/' target='_blank'>Kolkata</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.krasnodar/' target='_blank'>Krasnodar</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.kryvyi.rih/' target='_blank'>Kryvyi Rih</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.lagos/' target='_blank'>Lagos</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.lahore/' target='_blank'>Lahore</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.limassol/' target='_blank'>Limassol</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.london/' target='_blank'>London</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.los.angeles/' target='_blank'>Los Angeles</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.lubbock/' target='_blank'>Lubbock</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.manila/' target='_blank'>Manila</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.miami/' target='_blank'>Miami</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.minneapolis/' target='_blank'>Minneapolis</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.missoula/' target='_blank'>Missoula</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.montreal/' target='_blank'>Montreal</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.moscow/' target='_blank'>Moscow</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.munich/' target='_blank'>Munich</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.mysore/' target='_blank'>Mysore</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.nairobi/' target='_blank'>Nairobi</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.nashville/' target='_blank'>Nashville</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.new.haven/' target='_blank'>New Haven</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.neworleans/' target='_blank'>New Orleans</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.new.york.city/' target='_blank'>New York City</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.berkeley/' target='_blank'>Oakland</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.oklahoma.city/' target='_blank'>Oklahoma City</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.omaha/' target='_blank'>Omaha</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.orange.county/' target='_blank'>Orange County</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.orlando.fl/' target='_blank'>Orlando</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.your.apucarana.parana/' target='_blank'>Parana</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.paris/' target='_blank'>Paris</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.philadelphia/' target='_blank'>Philadelphia</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.pittsburgh.pa/' target='_blank'>Pittsburgh</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.poitiers/' target='_blank'>Poitiers</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.tempe.phoenix.scottsdale/' target='_blank'>Phoenix</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.portland/' target='_blank'>Portland</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.northern.arizona/' target='_blank'>Prescott</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.pristina/' target='_blank'>Pristina</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.providence/' target='_blank'>Providence</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.provo/' target='_blank'>Provo</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.raleigh/' target='_blank'>Raleigh</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.recife' target='_blank'>Recife</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.richmond/' target='_blank'>Richmond</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.rio.de.janeiro/' target='_blank'>Rio de Janeiro</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.rotterdam/' target='_blank'>Rotterdam</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.sacramento/' target='_blank'>Sacramento</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.saint.george/' target='_blank'>Saint George</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.saint.louis/' target='_blank'>Saint Louis</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.salt.lake.city/' target='_blank'>Salt Lake City</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.san.bernardino/' target='_blank'>San Bernardino</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.san.diego/' target='_blank'>San Diego</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.san.francisco' target='_blank'>San Francisco</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.san.jose' target='_blank'>San Jose</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.sao.paulo/' target='_blank'>Sao Paulo</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.tempe.phoenix.scottsdale/' target='_blank'>Scottsdale</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.northern.arizona/' target='_blank'>Sedona</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.seattle/' target='_blank'>Seattle</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.singapore/' target='_blank'>Singapore</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.solo/' target='_blank'>Solo</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.taipei/' target='_blank'>Taipei</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.tampa/' target='_blank'>Tampa</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.tempe.phoenix.scottsdale/' target='_blank'>Tempe</a></li>",
|
||||
" <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.winnipeg/' target='_blank'>Winnipeg</a></li>",
|
||||
" <li><a href='https://www.facebook.com/groups/free.code.camp.zurich/' target='_blank'>Zurich</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.accra/' target='_blank'>Accra</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.ahmedabad/' target='_blank'>Ahmedabad</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.albany.ny/' target='_blank'>Albany</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.berkeley/' target='_blank'>Alameda</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.amsterdam/' target='_blank'>Amsterdam</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.your.apucarana.parana/' target='_blank'>Apucarana</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.aracaju/' target='_blank'>Aracaju</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.asheville/' target='_blank'>Asheville</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.atlanta/' target='_blank'>Atlanta</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.austin/' target='_blank'>Austin</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.baltimore.md/' target='_blank'>Baltimore</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.bandung/' target='_blank'>Bandung</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.belem/' target='_blank'>Belem</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.belgrade/' target='_blank'>Belgrade</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.bellingham/' target='_blank'>Bellingham</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.belo.horizonte/' target='_blank'>Belo Horizonte</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.bengaluru/' target='_blank'>Bengaluru</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.berkeley/' target='_blank'>Berkeley</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.berlin/' target='_blank'>Berlin</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.bhaktapur/' target='_blank'>Bhaktapur</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.bijeljina/' target='_blank'>Bijeljina</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.oxford.al/' target='_blank'>Birmingham, Alabama</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.bismarck.north.dakota/' target='_blank'>Bismarck, ND</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.bogota/' target='_blank'>Bogota</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.boston/' target='_blank'>Boston</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.boulder/' target='_blank'>Boulder</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.brasilia/' target='_blank'>Brasilia</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.bratislava/' target='_blank'>Bratislava</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.brussels/' target='_blank'>Brussels</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.buenos.aires/' target='_blank'>Buenos Aires</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.bucharest/' target='_blank'>Bucharest</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.budapest/' target='_blank'>Budapest</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.cairo/' target='_blank'>Cairo</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.calgary/' target='_blank'>Calgary</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.campinas/' target='_blank'>Campinas</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.cape.town/' target='_blank'>Cape Town</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.caracas/' target='_blank'>Caracas</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.charlotte.nc/' target='_blank'>Charlotte</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.chattanooga/' target='_blank'>Chattanooga</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.chennai/' target='_blank'>Chennai</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.chicago/' target='_blank'>Chicago</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.cincinnati/' target='_blank'>Cincinnati</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.clarksville.TN/' target='_blank'>Clarksville</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.cluj' target='_blank'>Cluj</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.coimbatore' target='_blank'>Coimbatore</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.coventry/' target='_blank'>Coventry</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.curitiba/' target='_blank'>Curitiba</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.dallas/' target='_blank'>Dallas</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.delhi/' target='_blank'>Delhi</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.denver/' target='_blank'>Denver</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.des.moines/' target='_blank'>Des Moines</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.detroit/' target='_blank'>Detroit</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.dhaka/' target='_blank'>Dhaka</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.doha/' target='_blank'>Doha</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.dubai/' target='_blank'>Dubai</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.edmonton/' target='_blank'>Edmonton</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.firenze/' target='_blank'>Firenze</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.northern.arizona/' target='_blank'>Flagstaff</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.florianopolis/' target='_blank'>Florianopolis</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.dallas/' target='_blank'>Fort Worth</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.frankfurt.main/' target='_blank'>Frankfurt</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.freehold/' target='_blank'>Freehold</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.geneva/' target='_blank'>Geneva</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.guntur/' target='_blank'>Guntur</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.Glendora.California/' target='_blank'>Glendora</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.guarapuava/' target='_blank'>Guarapuava</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.hamptonroads/' target='_blank'>Hampton Roads</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.hartford.connecticut/' target='_blank'>Hartford</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.Hermosillo/' target='_blank'>Hermosillo</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.hochiminhcity/' target='_blank'>Ho Chi Minh City</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.hochiminhcity/' target='_blank'>Ho Chi Minh City</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.hk/' target='_blank'>Hong Kong</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.houston/' target='_blank'>Houston</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.hyderabad/' target='_blank'>Hyderabad</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.istanbul/' target='_blank'>Istanbul</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.indianapolis/' target='_blank'>Indianapolis</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.iasi.romania/' target='_blank'>Iasi</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.irkutsk/' target='_blank'>Irkutsk</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.islamabad/' target='_blank'>Islamabad</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.ivano.frankivsk/' target='_blank'>Ivano Frankivsk</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.jakarta/' target='_blank'>Jakarta</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.joao.pessoa/' target='_blank'>Joao Pessoa</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.johannesburg/' target='_blank'>Johannesburg</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.kaduna/' target='_blank'>Kaduna</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.kalamazoo/' target='_blank'>Kalamazoo</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.kansascity/' target='_blank'>Kansas City</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.karachi/' target='_blank'>Karachi</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.kathmandu/' target='_blank'>Kathmandu</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.kemerovo/' target='_blank'>Kemerovo</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.kiev/' target='_blank'>Kiev</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.kolkata/' target='_blank'>Kolkata</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.krasnodar/' target='_blank'>Krasnodar</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.kryvyi.rih/' target='_blank'>Kryvyi Rih</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.lagos/' target='_blank'>Lagos</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.lahore/' target='_blank'>Lahore</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.leesburg/' target='_blank'>Leesburg</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.limassol/' target='_blank'>Limassol</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.london/' target='_blank'>London</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.los.angeles/' target='_blank'>Los Angeles</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.lubbock/' target='_blank'>Lubbock</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.manila/' target='_blank'>Manila</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.Melbourne/' target='_blank'>Melbourne</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.miami/' target='_blank'>Miami</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.minneapolis/' target='_blank'>Minneapolis</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.missoula/' target='_blank'>Missoula</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.montreal/' target='_blank'>Montreal</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.moscow/' target='_blank'>Moscow</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.munich/' target='_blank'>Munich</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.mysore/' target='_blank'>Mysore</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.nairobi/' target='_blank'>Nairobi</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.nashville/' target='_blank'>Nashville</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.new.haven/' target='_blank'>New Haven</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.neworleans/' target='_blank'>New Orleans</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.new.paltz/' target='_blank'>New Paltz</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.new.york.city/' target='_blank'>New York City</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.berkeley/' target='_blank'>Oakland</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.oklahoma.city/' target='_blank'>Oklahoma City</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.omaha/' target='_blank'>Omaha</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.orange.county/' target='_blank'>Orange County</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.orlando.fl/' target='_blank'>Orlando</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.your.apucarana.parana/' target='_blank'>Parana</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.paris/' target='_blank'>Paris</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.philadelphia/' target='_blank'>Philadelphia</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.pittsburgh.pa/' target='_blank'>Pittsburgh</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.poitiers/' target='_blank'>Poitiers</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.tempe.phoenix.scottsdale/' target='_blank'>Phoenix</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.portland/' target='_blank'>Portland</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.northern.arizona/' target='_blank'>Prescott</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.pristina/' target='_blank'>Pristina</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.providence/' target='_blank'>Providence</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.provo/' target='_blank'>Provo</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.quibdo/' target='_blank'>Quibdo</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.raleigh/' target='_blank'>Raleigh</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.recife' target='_blank'>Recife</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.richmond/' target='_blank'>Richmond</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.rio.de.janeiro/' target='_blank'>Rio de Janeiro</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.rotterdam/' target='_blank'>Rotterdam</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.sacramento/' target='_blank'>Sacramento</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.saint.george/' target='_blank'>Saint George</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.saint.louis/' target='_blank'>Saint Louis</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.salt.lake.city/' target='_blank'>Salt Lake City</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.salvador/' target='_blank'>Salvador</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.san.bernardino/' target='_blank'>San Bernardino</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.san.diego/' target='_blank'>San Diego</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.san.francisco' target='_blank'>San Francisco</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.san.jose' target='_blank'>San Jose</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.sao.paulo/' target='_blank'>Sao Paulo</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.tempe.phoenix.scottsdale/' target='_blank'>Scottsdale</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.northern.arizona/' target='_blank'>Sedona</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.seattle/' target='_blank'>Seattle</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.singapore/' target='_blank'>Singapore</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.solo/' target='_blank'>Solo</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.taipei/' target='_blank'>Taipei</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.tampa/' target='_blank'>Tampa</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.tempe.phoenix.scottsdale/' target='_blank'>Tempe</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.tirana/' target='_blank'>Tirana</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.to/' target='_blank'>Toronto</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.tulsa/' target='_blank'>Tulsa</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.northern.arizona/' target='_blank'>Verde Valley</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.vlc/' target='_blank'>Valencia</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.vancouver.bc.canada/' target='_blank'>Vancouver</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.washington.dc/' target='_blank'>Washington, DC</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.winnipeg/' target='_blank'>Winnipeg</a></li>",
|
||||
" <li class='large-li'><a href='https://www.facebook.com/groups/free.code.camp.yaounde' target='_blank'>Yaounde</a></li>",
|
||||
" <li class='large-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>",
|
||||
" <p class='large-p'>",
|
||||
" <ol>",
|
||||
" <li>Sign in to Facebook.</li>",
|
||||
" <li>Click the down arrow in the upper right corner of the screen, then choose \"Create Group\" from the options.",
|
||||
" <li class='large-li'>Sign in to Facebook.</li>",
|
||||
" <li class='large-li'>Click the down arrow in the upper right corner of the screen, then choose \"Create Group\" from the options.",
|
||||
" <img class='img-responsive img-center' src='https://www.evernote.com/shard/s116/sh/d01bb2bc-6260-4987-bedf-b2ce4c31972f/3eecbcff3109036cf90b69589360f407/deep/0/Facebook.png', alt='A screenshot of facebook showing the drop down menu that appears when you click the down arrow, with an arrow pointing to the \"Create Group\" option'>",
|
||||
" <li>Set the group name as \"Free Code Camp\" plus the proper name of your city. Avoid using slang terms such as \"Philly\" for \"Philadelphia\". If your city is not the biggest city that uses its name, also include the state or province. For example, the Free Code Camp group in Paris, France should be called \"Free Code Camp Paris\". The Free Code Camp group in Paris, Texas should be called \"Free Code Camp Paris, Texas\".</li>",
|
||||
" <li>Set your group to public.</li>",
|
||||
" <li>You'll need to add at least one friend from your city to this group in order to create the group.</li>",
|
||||
" <li class='large-li'>Set the group name as \"Free Code Camp\" plus the proper name of your city. Avoid using slang terms such as \"Philly\" for \"Philadelphia\". If your city is not the biggest city that uses its name, also include the state or province. For example, the Free Code Camp group in Paris, France should be called \"Free Code Camp Paris\". The Free Code Camp group in Paris, Texas should be called \"Free Code Camp Paris, Texas\".</li>",
|
||||
" <li class='large-li'>Set your group to public.</li>",
|
||||
" <li class='large-li'>You'll need to add at least one friend from your city to this group in order to create the group.</li>",
|
||||
" <img class='img-responsive img-center' src='https://www.evernote.com/shard/s116/sh/4ed3197c-db1b-4103-a040-b42482ad232a/6c34948ebe12c57f0b7a54d7b2222ab3/deep/0/Facebook.png' alt='A screenshot of the Facebook group creation modal saying that your group name should be Free Code Camp plus your city name, that your group should be public, and that you need to invite at least one Facebook friend.'>",
|
||||
" <li>Choose the graduation cap icon to indicate that this group is related to a school.</li>",
|
||||
" <li class='large-li'>Choose the graduation cap icon to indicate that this group is related to a school.</li>",
|
||||
" <img class='img-responsive img-center' src='https://www.evernote.com/shard/s116/sh/00e461b3-e0a8-4ecd-9cbf-8b0ae9de75d1/59c4e9f25672b1b2ca2d7e6b06d55e0b/deep/0/Facebook.png' alt='a screenshot telling you to choose the graduation icon, which is on the forth row of icons, seven icons from the left.'>",
|
||||
" <li>Click the \"...\" menu, then click \"Edit group settings\" in the dropdown menu.</li>",
|
||||
" <li class='large-li'>Click the \"...\" menu, then click \"Edit group settings\" in the dropdown menu.</li>",
|
||||
" <img class='img-responsive img-center' src='https://www.evernote.com/shard/s116/sh/ae9a22e2-19a5-4309-b46c-f05a6be5644c/0870b25572d37d4d650cca1a0d59e407/deep/0/Free-Code-Camp-Testland.png' alt='a screenshot telling you to click the \"...\" button then choose the \"Edit group settings\" option'>",
|
||||
" <li>Set the group's privacy setting to public.</li>",
|
||||
" <li>Set your group's membership approval to where any member can add or approve members</li>",
|
||||
" <li class='large-li'>Set the group's privacy setting to public.</li>",
|
||||
" <li class='large-li'>Set your group's membership approval to where any member can add or approve members</li>",
|
||||
" <img class='img-responsive img-center' src='https://www.evernote.com/l/AHTs6Ec_hylKyYWVhpZonOHPn8j8I5ydgv4B/image.png' alt='a screenshot showing the Facebook settings panel and where you can click to set the group to public and allow all members to be able to add or approve members>",
|
||||
" <li>Click the \"Customize Address\" button.</li>",
|
||||
" <li class='large-li'>Click the \"Customize Address\" button.</li>",
|
||||
" <img class='img-responsive img-center' src='https://www.evernote.com/shard/s116/sh/1a0781ce-ca41-46d5-94b0-d57b862882c8/4f1b729868ee5cabcd0d7e016bb6194e/deep/0/Free-Code-Camp-Testland.png' alt='a picture telling you to click the \"Customize Address\" button.'>",
|
||||
" <li>Enter \"free.code.camp.your.city.name\" with each word separated by periods.",
|
||||
" <li class='large-li'>Enter \"free.code.camp.your.city.name\" with each word separated by periods.",
|
||||
" <img class='img-responsive img-center' src='https://www.evernote.com/shard/s116/sh/357b1bd9-7c40-4f72-8a9a-d918e632a5e8/c4714ca59360b2517dfffe90c60b1556/deep/0/Free-Code-Camp-Testland.png' alt='a screenshot telling you to enter free.code.camp.your.city.name with each word seperated by periods.'>",
|
||||
" <li>Please feel free to personalize your city's group description, but be sure to include a link to Free Code Camp: \"http://www.freecodecamp.com\".",
|
||||
" <li class='large-li'>Please feel free to personalize your city's group description, but be sure to include a link to Free Code Camp: \"http://www.freecodecamp.com\".",
|
||||
" <img class='img-responsive img-center' src='https://www.evernote.com/shard/s116/sh/e13808ea-f084-46f1-95bc-63db524383d5/0586484d44360e73e9acda956dad7f6a/deep/0/Free-Code-Camp-Testland.png' alt='A screen shot showing you the group description box on the Facebook page.'>",
|
||||
" <li>Click the \"Upload a photo button. To start out, you'll probably just want to use Free Code Camp's banner (download it <a href='https://s3.amazonaws.com/freecodecamp/wide-social-banner.png'>here</a>), or a scenic shot of your city. Later you can update this with a picture from one of your city's Free Code Camp events.</li>",
|
||||
" <li class='large-li'>Click the \"Upload a photo button. To start out, you'll probably just want to use Free Code Camp's banner (download it <a href='https://s3.amazonaws.com/freecodecamp/wide-social-banner.png'>here</a>), or a scenic shot of your city. Later you can update this with a picture from one of your city's Free Code Camp events.</li>",
|
||||
" <img class='img-responsive img-center' src='https://www.evernote.com/shard/s116/sh/fabe226a-5a26-4508-b015-1dac35192a21/37f8119dc57845a31e972217714b038b/deep/0/Free-Code-Camp-Testland.png' alt='A screenshot showing the \"Upload a photo\" button.'>",
|
||||
" <li>Message @quincylarson in Slack with a link to your city's group page and he'll include it here.</li>",
|
||||
" <li>Join our <a href='https://www.facebook.com/groups/freecodecampers/'>Local Leaders Facebook group</a>, where we share ideas about involving campers in your city.</li>",
|
||||
" <li class='large-li'>Message @quincylarson in Slack with a link to your city's group page and he'll include it here.</li>",
|
||||
" <li class='large-li'>Join our <a href='https://www.facebook.com/groups/freecodecampers/'>Local Leaders Facebook group</a>, where we share ideas about involving campers in your city.</li>",
|
||||
" </ol>",
|
||||
" </p>",
|
||||
" <p class='large-p'>If you don't have a Facebook page, we strongly recommend you create one, even if it's just for the purpose of coordinating with campers in your city through this group.</p>",
|
||||
@ -482,7 +500,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c436eddfaeb5bd3e",
|
||||
"_id": "bd7158d9c436eddfaeb5bd3e",
|
||||
"name": "Does Free Code Camp have an alumni network?",
|
||||
"dashedName": "does-free-code-camp-have-an-alumni-network",
|
||||
"description": [
|
||||
@ -492,7 +510,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c442eddfaeb5b2ef",
|
||||
"_id": "bd7158d9c442eddfaeb5b2ef",
|
||||
"name": "Why doesn't Free Code Camp teach technical interviewing skills?",
|
||||
"dashedName": "why-doesnt-free-code-camp-teach-technical-interviewing-skills",
|
||||
"description": [
|
||||
@ -508,7 +526,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c442eddfaeb5bdef",
|
||||
"_id": "bd7158d9c442eddfaeb5bdef",
|
||||
"name": "How do I best use the Global Control Shortcuts for Mac?",
|
||||
"dashedName": "how-do-i-best-use-the-global-control-shortcuts-for-mac",
|
||||
"description": [
|
||||
@ -518,22 +536,22 @@
|
||||
" <p class='large-p'>These global shortcuts work everywhere on a Mac:</p>",
|
||||
" <p class='large-p'>",
|
||||
" <ul>",
|
||||
" <li>Control + F = Forward</li>",
|
||||
" <li>Control + B = Backward</li>",
|
||||
" <li>Control + N = Next Line</li>",
|
||||
" <li>Control + P = Previous Line</li>",
|
||||
" <li>Control + H = Backspace</li>",
|
||||
" <li>Control + D = Delete</li>",
|
||||
" <li>Control + A = Beginning of Line</li>",
|
||||
" <li>Control + E = End of Line</li>",
|
||||
" <li>Control + K = Kill line</li>",
|
||||
" <li class='large-li'>Control + F = Forward</li>",
|
||||
" <li class='large-li'>Control + B = Backward</li>",
|
||||
" <li class='large-li'>Control + N = Next Line</li>",
|
||||
" <li class='large-li'>Control + P = Previous Line</li>",
|
||||
" <li class='large-li'>Control + H = Backspace</li>",
|
||||
" <li class='large-li'>Control + D = Delete</li>",
|
||||
" <li class='large-li'>Control + A = Beginning of Line</li>",
|
||||
" <li class='large-li'>Control + E = End of Line</li>",
|
||||
" <li class='large-li'>Control + K = Kill line</li>",
|
||||
" </ul>",
|
||||
" </p>",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c445eddfaeb5bdef",
|
||||
"_id": "bd7158d9c445eddfaeb5bdef",
|
||||
"name": "How can I get to Inbox Zero with Gmail shortcuts?",
|
||||
"dashedName": "how-can-i-get-to-inbox-zero-with-gmail-shortcuts",
|
||||
"description": [
|
||||
@ -545,24 +563,24 @@
|
||||
" <p class='large-p'>The shortcuts:</p>",
|
||||
" <p class='large-p'>",
|
||||
" <ul>",
|
||||
" <li>j - move down</li>",
|
||||
" <li>k - move up</li>",
|
||||
" <li>o - open</li>",
|
||||
" <li>r - reply</li>",
|
||||
" <li>a - reply all</li>",
|
||||
" <li>f - forward</li>",
|
||||
" <li>c - compose</li>",
|
||||
" <li>x - select</li>",
|
||||
" <li>e - archive</li>",
|
||||
" <li>! - mark spam</li>",
|
||||
" <li>z - undo</li>",
|
||||
" <li class='large-li'>j - move down</li>",
|
||||
" <li class='large-li'>k - move up</li>",
|
||||
" <li class='large-li'>o - open</li>",
|
||||
" <li class='large-li'>r - reply</li>",
|
||||
" <li class='large-li'>a - reply all</li>",
|
||||
" <li class='large-li'>f - forward</li>",
|
||||
" <li class='large-li'>c - compose</li>",
|
||||
" <li class='large-li'>x - select</li>",
|
||||
" <li class='large-li'>e - archive</li>",
|
||||
" <li class='large-li'>! - mark spam</li>",
|
||||
" <li class='large-li'>z - undo</li>",
|
||||
" </ul>",
|
||||
" </p>",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c445eddfaeb5bdff",
|
||||
"_id": "bd7158d9c445eddfaeb5bdff",
|
||||
"name": "How can I deploy a website without writing any code at all?",
|
||||
"dashedName": "how-can-i-deploy-a-website-without-writing-any-code-at-all",
|
||||
"description": [
|
||||
@ -574,10 +592,10 @@
|
||||
" <p class='large-p'>Here are the technologies we used here:</p>",
|
||||
" <p class='large-p'>",
|
||||
" <ul>",
|
||||
" <li><a href='http://www.atom.io/'>atom.io</a> - a free code editor</li>",
|
||||
" <li><a href='http://www.startbootstrap.com/'>startbootstrap.com</a> - a collection of free responsive (Bootstrap) templates</li>",
|
||||
" <li><a href='http://www.powr.io/'>powr.io</a> - a collection of free JavaScript plugins</li>",
|
||||
" <li><a href='http://www.bitballoon.com/'>bitballoon.com</a> - a tool for drag and drop website deployment</li>",
|
||||
" <li class='large-li'><a href='http://www.atom.io/'>atom.io</a> - a free code editor</li>",
|
||||
" <li class='large-li'><a href='http://www.startbootstrap.com/'>startbootstrap.com</a> - a collection of free responsive (Bootstrap) templates</li>",
|
||||
" <li class='large-li'><a href='http://www.powr.io/'>powr.io</a> - a collection of free JavaScript plugins</li>",
|
||||
" <li class='large-li'><a href='http://www.bitballoon.com/'>bitballoon.com</a> - a tool for drag and drop website deployment</li>",
|
||||
" </ul>",
|
||||
" </p>",
|
||||
" <p class='large-p'>You will quickly reach the limits of what you can do without actually coding, but it's nice to be able to rapidly build working prototype websites like this.</p>",
|
||||
@ -585,7 +603,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c446eddfaeb5bdef",
|
||||
"_id": "bd7158d9c446eddfaeb5bdef",
|
||||
"name": "How do Free Code Camp's Nonprofit Projects work?",
|
||||
"dashedName": "how-do-free-code-camps-nonprofit-projects-work",
|
||||
"description": [
|
||||
@ -600,10 +618,10 @@
|
||||
" <p class='large-p'>Our Nonprofit Project team will match you and your pair based on:</p>",
|
||||
" <p class='large-p'>",
|
||||
" <ol>",
|
||||
" <li>Your estimated time commitment (10, 20 or 40 hours per week)</li>",
|
||||
" <li>Your time zone</li>",
|
||||
" <li>The nonprofit projects you've chosen</li>",
|
||||
" <li>Prior coding experience (we'd like both campers to be able to contribute equally)</li>",
|
||||
" <li class='large-li'>Your estimated time commitment (10, 20 or 40 hours per week)</li>",
|
||||
" <li class='large-li'>Your time zone</li>",
|
||||
" <li class='large-li'>The nonprofit projects you've chosen</li>",
|
||||
" <li class='large-li'>Prior coding experience (we'd like both campers to be able to contribute equally)</li>",
|
||||
" </ol>",
|
||||
" </p>",
|
||||
" <p class='large-p'>We won't take age or gender into account. This will provide you with valuable experience in meshing with diverse teams, which is a reality of the contemporary workplace.</p>",
|
||||
@ -612,10 +630,10 @@
|
||||
" <p class='large-p'>Before you can start working on the project, our team of Nonprofit Project Coordinators will go through the following process:</p>",
|
||||
" <p class='large-p'>",
|
||||
" <ol>",
|
||||
" <li>We'll wait until there are two campers who have chosen the same project and look like they're a good match for one another based on the factors mentioned above.</li>",
|
||||
" <li>We'll call the stakeholder to confirm once again that he or she agrees with our  <a href=\"freecodecamp.com/nonprofits\">terms  </a>and has signed our  <a href=\"http://goo.gl/forms/0YKkd9bpcR\">Nonprofit Project Stakeholder Pledge</a>.</li>",
|
||||
" <li>We'll set an initial meeting with representatives from Free Code Camp, the two campers, and the stakeholder.</li>",
|
||||
" <li>If the stakeholder and both campers shows up promptly, and seem enthusiastic and professional, we'll start the project.</li>",
|
||||
" <li class='large-li'>We'll wait until there are two campers who have chosen the same project and look like they're a good match for one another based on the factors mentioned above.</li>",
|
||||
" <li class='large-li'>We'll call the stakeholder to confirm once again that he or she agrees with our  <a href=\"freecodecamp.com/nonprofits\">terms  </a>and has signed our  <a href=\"http://goo.gl/forms/0YKkd9bpcR\">Nonprofit Project Stakeholder Pledge</a>.</li>",
|
||||
" <li class='large-li'>We'll set an initial meeting with representatives from Free Code Camp, the two campers, and the stakeholder.</li>",
|
||||
" <li class='large-li'>If the stakeholder and both campers shows up promptly, and seem enthusiastic and professional, we'll start the project.</li>",
|
||||
" </ol>",
|
||||
" </p>",
|
||||
" <p class='large-p'>This lengthy process serves an important purpose: it reduces the likelihood that any of our campers or stakeholders will waste their precious time.</p>",
|
||||
@ -625,9 +643,9 @@
|
||||
" <p class='large-p'>When you and your pair first speak with your nonprofit stakeholder, you'll:</p>",
|
||||
" <p class='large-p'>",
|
||||
" <ul>",
|
||||
" <li>talk at length to better understand their needs.</li>",
|
||||
" <li>create a new Trello board and use it to prioritize what needs to be built.</li>",
|
||||
" <li>and establish deadlines based on your weekly time commitment, and how long you think each task will take.</li>",
|
||||
" <li class='large-li'>talk at length to better understand their needs.</li>",
|
||||
" <li class='large-li'>create a new Trello board and use it to prioritize what needs to be built.</li>",
|
||||
" <li class='large-li'>and establish deadlines based on your weekly time commitment, and how long you think each task will take.</li>",
|
||||
" </ul>",
|
||||
" </p>",
|
||||
" <p class='large-p'>It's notoriously difficult to estimate how long building software projects will take, so feel free to ask our volunteer team for help.</p>",
|
||||
@ -640,17 +658,17 @@
|
||||
" <p class='large-p'>Here are our recommended ways of collaborating:</p>",
|
||||
" <p class='large-p'>",
|
||||
" <ul>",
|
||||
" <li>• Slack has robust private messaging functionality. It's the main way our team communicates, and we recommend it over email.</li>",
|
||||
" <li>• Trello is great for managing projects. Work with your stakeholder to create Trello cards, and update these cards regularly as you make progress on them.</li>",
|
||||
" <li>• Screen Hero or Team Viewer - These are the ideal way to pair program. Tools like TMUX are good, but difficult to use. We discourage you from using screen sharing tools where only one person has control of the keyboard and mouse - that isn't real pair programming.</li>",
|
||||
" <li>• Write clear and readable code, commit messages, branch names, and pull request messages.</li>",
|
||||
" <li class='large-li'>• Slack has robust private messaging functionality. It's the main way our team communicates, and we recommend it over email.</li>",
|
||||
" <li class='large-li'>• Trello is great for managing projects. Work with your stakeholder to create Trello cards, and update these cards regularly as you make progress on them.</li>",
|
||||
" <li class='large-li'>• Screen Hero or Team Viewer - These are the ideal way to pair program. Tools like TMUX are good, but difficult to use. We discourage you from using screen sharing tools where only one person has control of the keyboard and mouse - that isn't real pair programming.</li>",
|
||||
" <li class='large-li'>• Write clear and readable code, commit messages, branch names, and pull request messages.</li>",
|
||||
" </ul>",
|
||||
" </p>",
|
||||
" <h3>Hosting Apps</h3>",
|
||||
" <p class='large-p'>Unless your stakeholder has an existing modern host (AWS, Digital Ocean), you'll need to transition them over to a new platform. We believe Heroku is the best choice for a vast majority of web projects. It's free, easy to use, and has both browser and command line interfaces. It's owned by Salesforce and used by a ton of companies, so it's accountable and unlikely to go away.</p>",
|
||||
" <p class='large-p'>If you need help convincing your stakeholder that Heroku is the ideal platform, we'll be happy to talk with them.</p>",
|
||||
" <h3>Maintaining Apps</h3>",
|
||||
" <p class='large-p'>Once you complete a nonprofit project, your obligation to its stakeholder is finished. You goal is to leave behind a well documented solution that can be easily maintained by a contract JavaScript developer (or even a less-technical \"super user\").</p>",
|
||||
" <p class='large-p'>Once you complete a nonprofit project, your obligation to its stakeholder is finished. Your goal is to leave behind a well documented solution that can be easily maintained by a contract JavaScript developer (or even a less-technical \"super user\").</p>",
|
||||
" <p class='large-p'>While you will no longer need to help with feature development, we encourage you to consider helping your stakeholder with occasional patches down the road. After all, this project will be an important piece of your portfolio, and you'll want it to remain in good shape for curious future employers.</p>",
|
||||
" <h3>Pledging to finish the project</h3>",
|
||||
" <p class='large-p'>Your nonprofit stakeholder, your pair, and our volunteer team are all counting on you to finish your nonprofit project. If you walk away from an unfinished nonprofit project, you'll become ineligible to ever be assigned another one.</p>",
|
||||
@ -660,7 +678,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c447eddfaeb5bdef",
|
||||
"_id": "bd7158d9c447eddfaeb5bdef",
|
||||
"name": "How do I install Screenhero?",
|
||||
"dashedName": "how-do-i-install-screenhero",
|
||||
"description": [
|
||||
@ -672,7 +690,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c451eddfaeb5bded",
|
||||
"_id": "bd7158d9c451eddfaeb5bded",
|
||||
"name": "What is the style guide for Bonfires?",
|
||||
"dashedName": "what-is-the-style-guide-for-bonfires",
|
||||
"description": [
|
||||
@ -680,11 +698,11 @@
|
||||
" <h3>Writing Bonfire challenges is a great way to exercise your own problem solving and testing abilities. Follow this process closely to maximize the chances of us accepting your bonfire.</h3>",
|
||||
" <p class='large-p'>",
|
||||
" <ol>",
|
||||
" <li>Fork the Free Code Camp repository and <code>open seed_data/bonfires.json</code> to become familiar with the format of our bonfires.</li>",
|
||||
" <li>Regardless of your bonfire's difficulty, put it as the last bonfire in the JSON file. Change one of the numbers in the ID to ensure that your bonfire has a unique ID.</li>",
|
||||
" <li>In the terminal, run <code>node seed_data/seed.js</code>. Run <code>gulp</code>. You should be able to navigate to your new bonfire in the challenge map. Whenever you make a change to bonfire.json, you'll need to reseed in order to see these changes in the browser.</li>",
|
||||
" <li>Solve your own Bonfire. Confirm that your tests work as expected and that your instructions are sufficiently clear.</li>",
|
||||
" <li>Submit a pull request to Free Code Camp's Staging branch and in the pull request body, link to a gist that has your algorithmic solution.</li>",
|
||||
" <li class='large-li'>Fork the Free Code Camp repository and <code>open seed_data/bonfires.json</code> to become familiar with the format of our bonfires.</li>",
|
||||
" <li class='large-li'>Regardless of your bonfire's difficulty, put it as the last bonfire in the JSON file. Change one of the numbers in the ID to ensure that your bonfire has a unique ID.</li>",
|
||||
" <li class='large-li'>In the terminal, run <code>node seed_data/seed.js</code>. Run <code>gulp</code>. You should be able to navigate to your new bonfire in the challenge map. Whenever you make a change to bonfire.json, you'll need to reseed in order to see these changes in the browser.</li>",
|
||||
" <li class='large-li'>Solve your own Bonfire. Confirm that your tests work as expected and that your instructions are sufficiently clear.</li>",
|
||||
" <li class='large-li'>Submit a pull request to Free Code Camp's Staging branch and in the pull request body, link to a gist that has your algorithmic solution.</li>",
|
||||
" </ol>",
|
||||
" </p>",
|
||||
" <h3>Here is a description of each of the Bonfires' fields.</h3>",
|
||||
@ -708,7 +726,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c451eddfaeb5bdee",
|
||||
"_id": "bd7158d9c451eddfaeb5bdee",
|
||||
"name": "What is the Free Code Camp Code of Conduct?",
|
||||
"dashedName": "what-is-the-free-code-camp-code-of-conduct",
|
||||
"description": [
|
||||
@ -719,9 +737,9 @@
|
||||
" <h3>Remember these 3 things and your fellow campers will like you:</h3>",
|
||||
" <p class='large-p'>",
|
||||
" <ol>",
|
||||
" <li>Compliment your fellow campers when they do good work. Congratulate them when they accomplish something (like finishing a nonprofit project or getting a job).</li>",
|
||||
" <li>Critique the work, not the camper doing it.</li>",
|
||||
" <li>Only argue about something if it's important to the greater discussion.</li>",
|
||||
" <li class='large-li'>Compliment your fellow campers when they do good work. Congratulate them when they accomplish something (like finishing a nonprofit project or getting a job).</li>",
|
||||
" <li class='large-li'>Critique the work, not the camper doing it.</li>",
|
||||
" <li class='large-li'>Only argue about something if it's important to the greater discussion.</li>",
|
||||
" </ol>",
|
||||
" </p>",
|
||||
" <p class='large-p'>Free Code Camp should be a harassment-free experience for everyone, regardless of gender, gender identity and expression, age, sexual orientation, disability, physical appearance, body size, race, national origin, or religion (or lack thereof).</p>",
|
||||
@ -733,7 +751,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c451eddfaeb5bdef",
|
||||
"_id": "bd7158d9c451eddfaeb5bdef",
|
||||
"name": "What is the Free Code Camp Privacy Policy?",
|
||||
"dashedName": "what-is-the-free-code-camp-privacy-policy",
|
||||
"description": [
|
||||
@ -775,7 +793,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c436eddfaeb5bd3c",
|
||||
"_id": "bd7158d9c436eddfaeb5bd3c",
|
||||
"name": "How can I reach the Free Code Camp team to interview them for my publication?",
|
||||
"dashedName": "how-can-i-reach-the-free-code-camp-team-to-interview-them-for-my-publication",
|
||||
"description": [
|
||||
@ -783,10 +801,10 @@
|
||||
" <h3>We're happy to do a quick interview for your publication or show. Here's whom you should contact about what, and how to best reach them:</h3>",
|
||||
" <p class='large-p'>",
|
||||
" <ol>",
|
||||
" <li>Want to talk to about Free Code Camp's curriculum or long-term vision? Reach out to Quincy Larson. He's <a href='https://twitter.com/ossia' target='_blank'>@ossia</a> on Twitter and @quincylarson on Slack.</li>",
|
||||
" <li>Want to talk about Free Code Camp's open source codebase, infrastructure, or JavaScript in general? Talk to Nathan Leniz. He's <a href='https://twitter.com/terakilobyte' target='_blank'>@terakilobyte</a> on Twitter and @terakilobyte on Slack.</li>",
|
||||
" <li>Want to explore our efforts to empower nonprofits with code? Michael D. Johnson eats, sleeps and breathes that. He's <a href='https://twitter.com/figitalboy' target='_blank'>@figitalboy</a> on Twitter and @codenonprofit on Slack.</li>",
|
||||
" <li>Want to get a camper's perspective on our community? Talk with Bianca Mihai (@biancamihai on Slack and <a href='https://twitter.com/bubuslubu' target='_blank'>@bubuslubu</a> on Twitter) or Suzanne Atkinson (@adventurebear on Slack and <a href='https://twitter.com/SteelCityCoach' target='_blank'>@steelcitycoach</a> on Twitter).",
|
||||
" <li class='large-li'>Want to talk to about Free Code Camp's curriculum or long-term vision? Reach out to Quincy Larson. He's <a href='https://twitter.com/ossia' target='_blank'>@ossia</a> on Twitter and @quincylarson on Slack.</li>",
|
||||
" <li class='large-li'>Want to talk about Free Code Camp's open source codebase, infrastructure, or JavaScript in general? Talk to Nathan Leniz. He's <a href='https://twitter.com/terakilobyte' target='_blank'>@terakilobyte</a> on Twitter and @terakilobyte on Slack.</li>",
|
||||
" <li class='large-li'>Want to explore our efforts to empower nonprofits with code? Michael D. Johnson eats, sleeps and breathes that. He's <a href='https://twitter.com/figitalboy' target='_blank'>@figitalboy</a> on Twitter and @codenonprofit on Slack.</li>",
|
||||
" <li class='large-li'>Want to get a camper's perspective on our community? Talk with Bianca Mihai (@biancamihai on Slack and <a href='https://twitter.com/bubuslubu' target='_blank'>@bubuslubu</a> on Twitter) or Suzanne Atkinson (@adventurebear on Slack and <a href='https://twitter.com/SteelCityCoach' target='_blank'>@steelcitycoach</a> on Twitter).",
|
||||
" </ol>",
|
||||
" </p>",
|
||||
" <p class='large-p'>We strive to be helpful and transparent in everything we do. We'll do what we can to help you share our community with your audience.</p>",
|
||||
@ -794,7 +812,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c436eddfaeb5dd3b",
|
||||
"_id": "bd7158d9c436eddfaeb5dd3b",
|
||||
"name": "What other resources does Free Code Camp recommend to nonprofits?",
|
||||
"dashedName": "what-other-resources-does-free-code-camp-recommend-to-nonprofits",
|
||||
"description": [
|
||||
@ -836,7 +854,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d9c436eddfadb5bd3e",
|
||||
"_id": "bd7158d9c436eddfadb5bd3e",
|
||||
"name": "How can I contribute to this guide?",
|
||||
"dashedName": "how-can-i-contribute-to-this-guide",
|
||||
"description": [
|
||||
@ -844,11 +862,88 @@
|
||||
" <p class='large-p'>Contributing to our field guide is a great way to establish your history on GitHub, add to your portfolio, and help other campers. If you have a question about JavaScript or programming in general that you'd like us to add to the field guide, here are two ways to get it into the guide:</p>",
|
||||
" <p class='large-p'>",
|
||||
" <ol>",
|
||||
" <li>You can message @alex-dixon in Slack with your question.</li>",
|
||||
" <li>You can also contribute to this field guide directly via GitHub pull request, by cloning Free Code Camp's <a href='https://github.com/FreeCodeCamp/freecodecamp'>main repository</a> and modifying <a href='https://github.com/FreeCodeCamp/freecodecamp/blob/master/seed_data/field-guides.json'>field-guides.json</a>.</li>",
|
||||
" <li class='large-li'>You can message @danraley in Slack with your question.</li>",
|
||||
" <li class='large-li'>You can also contribute to this field guide directly via GitHub pull request, by cloning Free Code Camp's <a href='https://github.com/FreeCodeCamp/freecodecamp'>main repository</a> and modifying <a href='https://github.com/FreeCodeCamp/freecodecamp/blob/master/seed_data/field-guides.json'>field-guides.json</a>.</li>",
|
||||
" </ol>",
|
||||
" </p>",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"_id": "bd7158d9c436eddfadb5bd32",
|
||||
"name": "How can I help the Free Code Camp translation effort?",
|
||||
"dashedName": "how-can-i-help-the-free-code-camp-translation-effort",
|
||||
"description": [
|
||||
"<div class=\"col-xs-12 col-sm-10 col-sm-offset-1\">",
|
||||
" <p class='h2'>Our translation effort is driven by bilingual campers like you.</h2>",
|
||||
" <p class='large-p'>If you're able to help us, you can join our <a href='https://trello.com/b/m7zhwXka/fcc-translation' target='_blank'>Trello board</a> by sending @quincylarson your email address in Slack.</p>",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"_id": "bd7158d9c436eddfadb5bd31",
|
||||
"name": "What if I speak a language that Free Code Camp does not yet support?",
|
||||
"dashedName": "what-if-i-speak-a-language-that-free-code-camp-does-not-yet-support",
|
||||
"description": [
|
||||
"<div class=\"col-xs-12 col-sm-10 col-sm-offset-1\">",
|
||||
" <p class='h2'>Translation is an all-or-nothing proposal.</h2>",
|
||||
" <p class='large-p'>We won't be able to add new languages to Free Code Camp until all of our challenges are translated into that langauge.</p>",
|
||||
" <p class='large-p'>In addition to translating these initially, we'll also need to maintain the translation as the challenges are gradually updated.</p>",
|
||||
" <p class='large-p'>If you're able to help us, you can join our <a href='https://trello.com/b/m7zhwXka/fcc-translation' target='_blank'>Trello board</a> by sending @quincylarson your email address in Slack.</p>",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"_id": "bd7158d9c436eddfadb5bd30",
|
||||
"name": "Can I do Free Code Camp completely in my native language?",
|
||||
"dashedName": "can-i-do-free-code-camp-completely-in-my-native-language",
|
||||
"description": [
|
||||
"<div class=\"col-xs-12 col-sm-10 col-sm-offset-1\">",
|
||||
" <p class='large-p'>The last 800 hours of free code camp involve building projects for nonprofits. These nonprofit projects will involve lots of meetings, correspondence, and pair programming, all of which will be conducted in English.</p>",
|
||||
" <p class='large-p'>You will need to be good enough with English to be able to participate in these meetings.</p>",
|
||||
" <p class='large-p'>We are translating our challenges into English is so that you can focus on learning to code, rather than focusing on learning English.</p>",
|
||||
" <p class='large-p'>Many non-native English speakers have succeeded in our nonprofit project program. With some effort, you can, too.</p>",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"_id": "bd7158d9c436eddfadb5bd3c",
|
||||
"name": "What is the new Free Code Camp Mobile Experience?",
|
||||
"dashedName": "what-is-the-new-free-code-camp-mobile-experience",
|
||||
"description": [
|
||||
"<div class=\"col-xs-12 col-sm-10 col-sm-offset-1\">",
|
||||
" <h2>We're building an on-the-go version of Free Code Camp.</h2>",
|
||||
" <img src='http://www.howardforums.com/attachment.php?attachmentid=97254&d=1378730537&stc=1' class='img-responsive img-center'>",
|
||||
" <p class='large-p'>It will be video-driven, with multiple-choice questions.</p>",
|
||||
" <img class='img-center img-responsive' src='https://www.edx.org/sites/default/files/upload/philip-guo-edx-first-blog-figure.png'>",
|
||||
" <p class='large-p'>These videos will be short - generally less than 6 minutes long.</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'>We are considering focusing the mobile experience on code interview questions. Answering these common questions is a very different skill from coding itself.",
|
||||
" <p class='large-p'>We're still in the process of designing this. We'd love to hear your input.</p>",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"_id": "bd7158d9c436eddfadb5bd3b",
|
||||
"name": "What is the Free Code Camp Front End Development Certificate?",
|
||||
"dashedName": "what-is-the-free-code-camp-front-end-development-certificate",
|
||||
"description": [
|
||||
"<div class=\"col-xs-12 col-sm-10 col-sm-offset-1\">",
|
||||
" <h2>We're creating a free Front End Development Certificate.</h2>",
|
||||
" <p class='large-p'>Here are the challenges that will make up our Basic Front End Development Certificate Program:</p>",
|
||||
" <ol>",
|
||||
" <li class='large-li'>HTML5 and CSS</li>",
|
||||
" <li class='large-li'>Responsive Design with Bootstrap</li>",
|
||||
" <li class='large-li'>jQuery, Ajax and JSON APIs (coming soon - will replace Codecademy jQuery challenges)</li>",
|
||||
" <li class='large-li'>Zipline: Use the Twitch.tv JSON API</li>",
|
||||
" <li class='large-li'>Zipline: Build a Random Quote Machine</li>",
|
||||
" <li class='large-li'>Zipline: Show the Local Weather</li>",
|
||||
" <li class='large-li'>Zipline: Stylize Stories on Camper News</li>",
|
||||
" <li class='large-li'>Zipline: Wikipedia Viewer</li>",
|
||||
" </ol>",
|
||||
" <p class='large-p'>This won't be a new curriculum - it will just the first 200 hours of our full stack JavaScript curriculum.</p>",
|
||||
" <p class='large-p'>All campers who have already completed these challenges are retroactively be eligible for the certificate!</p>",
|
||||
"</div>"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
25
seed/get-emails.js
Normal file
25
seed/get-emails.js
Normal file
@ -0,0 +1,25 @@
|
||||
/* eslint-disable no-process-exit */
|
||||
require('dotenv').load();
|
||||
var secrets = require('../config/secrets'),
|
||||
mongodb = require('mongodb'),
|
||||
MongoClient = mongodb.MongoClient;
|
||||
|
||||
MongoClient.connect(secrets.db, function(err, database) {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
database.collection('users').aggregate([
|
||||
{$match: { 'email': { $exists: true } } },
|
||||
{$match: { 'email': { $ne: '' } } },
|
||||
{$match: { 'email': { $ne: null } } },
|
||||
{$match: { 'sendMonthlyEmail': true } },
|
||||
{$match: { 'email': { $not: /(test|fake)/i } } },
|
||||
{$group: { '_id': 1, 'emails': {$addToSet: '$email' } } }
|
||||
], function(err, results) {
|
||||
if (err) { throw err; }
|
||||
|
||||
console.log('\"email\"\n\"' + results[0].emails.join('\"\n\"') + '\"');
|
||||
process.exit(0);
|
||||
});
|
||||
});
|
106
server/boot/a-extendUser.js
Normal file
106
server/boot/a-extendUser.js
Normal file
@ -0,0 +1,106 @@
|
||||
var debug = require('debug')('freecc:extendUser');
|
||||
|
||||
module.exports = function(app) {
|
||||
var User = app.models.User;
|
||||
debug('setting up user hooks');
|
||||
// send verification email to new camper
|
||||
User.afterRemote('create', function(ctx, user, next) {
|
||||
debug('user created, sending email');
|
||||
if (!user.email) { return next(); }
|
||||
|
||||
var mailOptions = {
|
||||
type: 'email',
|
||||
to: user.email,
|
||||
from: 'Team@freecodecamp.com',
|
||||
subject: 'Welcome to Free Code Camp!',
|
||||
redirect: '/',
|
||||
text: [
|
||||
'Greetings from San Francisco!\n\n',
|
||||
'Thank you for joining our community.\n',
|
||||
'Feel free to email us at this address if you have ',
|
||||
'any questions about Free Code Camp.\n',
|
||||
'And if you have a moment, check out our blog: ',
|
||||
'blog.freecodecamp.com.\n',
|
||||
'Good luck with the challenges!\n\n',
|
||||
'- the Free Code Camp Volunteer Team'
|
||||
].join('')
|
||||
};
|
||||
user.verify(mailOptions, function(err) {
|
||||
if (err) { return next(err); }
|
||||
debug('verification email sent');
|
||||
ctx.req.flash({
|
||||
msg: 'Please check your email and click on the verification link '
|
||||
+ 'before logging in.'
|
||||
});
|
||||
ctx.res.redirect('/');
|
||||
});
|
||||
});
|
||||
|
||||
User.afterRemote('login', function(ctx, accessToken) {
|
||||
var res = ctx.res;
|
||||
var req = ctx.req;
|
||||
|
||||
var config = {
|
||||
signed: !!req.signedCookies,
|
||||
maxAge: 1000 * accessToken.ttl
|
||||
};
|
||||
if (accessToken && accessToken.id) {
|
||||
res.cookie('access_token', accessToken.id, config);
|
||||
res.cookie('userId', accessToken.userId, config);
|
||||
}
|
||||
res.redirect('/');
|
||||
});
|
||||
|
||||
User.afterRemote('logout', function(ctx, result, next) {
|
||||
var res = ctx.result;
|
||||
res.clearCookie('access_token');
|
||||
res.clearCookie('userId');
|
||||
next();
|
||||
});
|
||||
|
||||
User.doesExist = function doesExist(username, email, cb) {
|
||||
debug('checking existence');
|
||||
var where = {};
|
||||
if (username) {
|
||||
where.username = username;
|
||||
} else {
|
||||
where.email = email;
|
||||
}
|
||||
User.count(
|
||||
{ where: where },
|
||||
function (err, count) {
|
||||
if (err) { return cb(err); }
|
||||
if (count > 0) {
|
||||
return cb(null, true);
|
||||
}
|
||||
return cb(null, false);
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
User.remoteMethod(
|
||||
'doesExist',
|
||||
{
|
||||
description: 'checks whether a user exists using email or username',
|
||||
accepts: [
|
||||
{
|
||||
arg: 'username',
|
||||
type: 'string'
|
||||
},
|
||||
{
|
||||
arg: 'email',
|
||||
type: 'string'
|
||||
}
|
||||
],
|
||||
returns: [
|
||||
{
|
||||
arg: 'exists',
|
||||
type: 'boolean'
|
||||
}
|
||||
],
|
||||
http: {
|
||||
path: '/exists'
|
||||
}
|
||||
}
|
||||
);
|
||||
};
|
@ -1,4 +1,7 @@
|
||||
module.exports = function mountLoopBackExplorer(app) {
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
return;
|
||||
}
|
||||
var explorer;
|
||||
try {
|
||||
explorer = require('loopback-explorer');
|
||||
|
@ -50,9 +50,9 @@ module.exports = function(app) {
|
||||
var fieldGuide = R.head(fieldGuideFromMongo);
|
||||
fieldGuide.name.toLowerCase().replace(/\s/g, '-').replace(/\?/g, '');
|
||||
|
||||
//if (fieldGuide.dashedName !== dashedNameFromQuery) {
|
||||
// return res.redirect('../field-guide/' + fieldGuide.dashedName);
|
||||
//}
|
||||
// if (fieldGuide.dashedName !== dashedNameFromQuery) {
|
||||
// return res.redirect('../field-guide/' + fieldGuide.dashedName);
|
||||
// }
|
||||
res.render('field-guide/show', {
|
||||
title: fieldGuide.name,
|
||||
fieldGuideId: fieldGuide.id,
|
||||
@ -91,17 +91,15 @@ module.exports = function(app) {
|
||||
if (req.user.completedFieldGuides.length > 0) {
|
||||
req.flash('success', {
|
||||
msg: [
|
||||
"You've read all our current Field Guide entries. You can ",
|
||||
'contribute to our Field Guide ',
|
||||
"<a href='https://github.com/FreeCodeCamp/freecodecamp/blob/",
|
||||
"staging/seed/field-guides.json'>here</a>."
|
||||
"You've read all our current Field Guide entries. If you have ",
|
||||
'ideas for other Field Guide articles, please let us know on ',
|
||||
"<a href='https://github.com/freecodecamp/freecodecamp/issues/new?&body=Please describe your idea for a Field Guide article and include links if possible.'>GitHub</a>."
|
||||
].join('')
|
||||
});
|
||||
}
|
||||
return res.redirect('../field-guide/how-do-i-use-this-guide');
|
||||
}
|
||||
var nameString = fieldGuide.name.toLowerCase().replace(/\s/g, '-');
|
||||
return res.redirect('../field-guide/' + nameString);
|
||||
return res.redirect('../field-guide/' + fieldGuide.dashedName);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
module.exports = function(app) {
|
||||
var router = app.loopback.Router();
|
||||
var Nonprofit = app.models.Nonprofit;
|
||||
|
@ -1,71 +0,0 @@
|
||||
/*
|
||||
var passport = require('passport'),
|
||||
passportConf = require('../../config/passport');
|
||||
|
||||
module.exports = function(app) {
|
||||
var router = app.loopback.Router();
|
||||
var passportOptions = {
|
||||
successRedirect: '/',
|
||||
failureRedirect: '/login'
|
||||
};
|
||||
|
||||
router.all('/account', passportConf.isAuthenticated);
|
||||
|
||||
router.get('/auth/twitter', passport.authenticate('twitter'));
|
||||
|
||||
router.get(
|
||||
'/auth/twitter/callback',
|
||||
passport.authenticate('twitter', {
|
||||
successRedirect: '/',
|
||||
failureRedirect: '/login'
|
||||
})
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/auth/linkedin',
|
||||
passport.authenticate('linkedin', {
|
||||
state: 'SOME STATE'
|
||||
})
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/auth/linkedin/callback',
|
||||
passport.authenticate('linkedin', passportOptions)
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/auth/facebook',
|
||||
passport.authenticate('facebook', {scope: ['email', 'user_location']})
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/auth/facebook/callback',
|
||||
passport.authenticate('facebook', passportOptions), function (req, res) {
|
||||
res.redirect(req.session.returnTo || '/');
|
||||
}
|
||||
);
|
||||
|
||||
router.get('/auth/github', passport.authenticate('github'));
|
||||
|
||||
router.get(
|
||||
'/auth/github/callback',
|
||||
passport.authenticate('github', passportOptions), function (req, res) {
|
||||
res.redirect(req.session.returnTo || '/');
|
||||
}
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/auth/google',
|
||||
passport.authenticate('google', {scope: 'profile email'})
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/auth/google/callback',
|
||||
passport.authenticate('google', passportOptions), function (req, res) {
|
||||
res.redirect(req.session.returnTo || '/');
|
||||
}
|
||||
);
|
||||
|
||||
app.use(router);
|
||||
};
|
||||
*/
|
@ -4,7 +4,7 @@ module.exports = function(app) {
|
||||
router.get('/nonprofit-project-instructions', function(req, res) {
|
||||
res.redirect(
|
||||
301,
|
||||
'/field-guide/how-do-free-code-camp\'s-nonprofit-projects-work'
|
||||
'/field-guide/how-do-free-code-camps-nonprofit-projects-work'
|
||||
);
|
||||
});
|
||||
|
||||
@ -12,34 +12,6 @@ module.exports = function(app) {
|
||||
res.redirect(301, '/pmi-acp-agile-project-managers');
|
||||
});
|
||||
|
||||
router.get('/live-pair-programming', function(req, res) {
|
||||
res.redirect(301, '/field-guide/live-stream-pair-programming-on-twitch.tv');
|
||||
});
|
||||
|
||||
router.get('/install-screenhero', function(req, res) {
|
||||
res.redirect(301, '/field-guide/install-screenhero');
|
||||
});
|
||||
|
||||
router.get('/guide-to-our-nonprofit-projects', function(req, res) {
|
||||
res.redirect(301, '/field-guide/a-guide-to-our-nonprofit-projects');
|
||||
});
|
||||
|
||||
router.get('/chromebook', function(req, res) {
|
||||
res.redirect(301, '/field-guide/chromebook');
|
||||
});
|
||||
|
||||
router.get('/deploy-a-website', function(req, res) {
|
||||
res.redirect(301, '/field-guide/deploy-a-website');
|
||||
});
|
||||
|
||||
router.get('/gmail-shortcuts', function(req, res) {
|
||||
res.redirect(301, '/field-guide/gmail-shortcuts');
|
||||
});
|
||||
|
||||
router.get('/nodeschool-challenges', function(req, res) {
|
||||
res.redirect(301, '/field-guide/nodeschool-challenges');
|
||||
});
|
||||
|
||||
router.get('/privacy', function(req, res) {
|
||||
res.redirect(
|
||||
301, '/field-guide/what-is-the-free-code-camp-privacy-policy?'
|
||||
|
@ -2,7 +2,7 @@ var nodemailer = require('nodemailer'),
|
||||
sanitizeHtml = require('sanitize-html'),
|
||||
moment = require('moment'),
|
||||
mongodb = require('mongodb'),
|
||||
debug = require('debug')('freecc:cntr:story'),
|
||||
// debug = require('debug')('freecc:cntr:story'),
|
||||
utils = require('../utils'),
|
||||
MongoClient = mongodb.MongoClient,
|
||||
secrets = require('../../config/secrets');
|
||||
@ -43,19 +43,10 @@ module.exports = function(app) {
|
||||
}
|
||||
|
||||
function hotJSON(req, res, next) {
|
||||
//var story = Story.find({}).sort({'timePosted': -1}).limit(1000);
|
||||
//story.exec(function(err, stories) {
|
||||
// if (err) {
|
||||
// return next(err);
|
||||
// }
|
||||
//Story.find([{$match: {}},
|
||||
// {$sort: {'timePosted': -1}},
|
||||
// {$limit: 1000}], function(err, stories) {
|
||||
Story.find({order: 'timePosted DESC', limit: 1000}, function(err, stories) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
debug(stories);
|
||||
var foundationDate = 1413298800000;
|
||||
|
||||
var sliceVal = stories.length >= 100 ? 100 : stories.length;
|
||||
@ -132,7 +123,6 @@ module.exports = function(app) {
|
||||
|
||||
|
||||
function returnIndividualStory(req, res, next) {
|
||||
debug('hit return individual route');
|
||||
var dashedName = req.params.storyName;
|
||||
|
||||
var storyName = dashedName.replace(/\-/g, ' ').trim();
|
||||
@ -198,7 +188,7 @@ module.exports = function(app) {
|
||||
}
|
||||
database.collection('stories').find({
|
||||
'$text': {
|
||||
'$search': req.body.data.searchValue
|
||||
'$search': req.body.data ? req.body.data.searchValue : ''
|
||||
}
|
||||
}, {
|
||||
headline: 1,
|
||||
|
@ -35,12 +35,8 @@ module.exports = function(app) {
|
||||
router.post('/reset/:token', postReset);
|
||||
router.get('/email-signup', getEmailSignup);
|
||||
router.get('/email-signin', getEmailSignin);
|
||||
router.post('/email-signup', postEmailSignup);
|
||||
// router.post('/email-signin', postSignin);
|
||||
// router.post('/email-signup', postEmailSignup);
|
||||
router.get('/account/api', getAccountAngular);
|
||||
router.get('/api/checkUniqueUsername/:username', checkUniqueUsername);
|
||||
router.get('/api/checkExistingUsername/:username', checkExistingUsername);
|
||||
router.get('/api/checkUniqueEmail/:email', checkUniqueEmail);
|
||||
router.post('/account/profile', postUpdateProfile);
|
||||
router.post('/account/password', postUpdatePassword);
|
||||
router.post('/account/delete', postDeleteAccount);
|
||||
@ -65,49 +61,6 @@ module.exports = function(app) {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* POST /signin
|
||||
* Sign in using email and password.
|
||||
*/
|
||||
|
||||
/*
|
||||
* TODO(berks): this should be done using loopback
|
||||
function postSignin (req, res, next) {
|
||||
req.assert('email', 'Email is not valid').isEmail();
|
||||
req.assert('password', 'Password cannot be blank').notEmpty();
|
||||
|
||||
var errors = req.validationErrors();
|
||||
|
||||
if (errors) {
|
||||
req.flash('errors', errors);
|
||||
return res.redirect('/signin');
|
||||
}
|
||||
|
||||
passport.authenticate('local', function(err, user, info) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
if (!user) {
|
||||
req.flash('errors', { msg: info.message });
|
||||
return res.redirect('/signin');
|
||||
}
|
||||
req.logIn(user, function(err) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
req.flash('success', { msg: 'Success! You are logged in.' });
|
||||
if (/hotStories/.test(req.session.returnTo)) {
|
||||
return res.redirect('../news');
|
||||
}
|
||||
if (/field-guide/.test(req.session.returnTo)) {
|
||||
return res.redirect('../field-guide');
|
||||
}
|
||||
return res.redirect(req.session.returnTo || '/');
|
||||
});
|
||||
})(req, res, next);
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* GET /signout
|
||||
* Log out.
|
||||
@ -146,107 +99,6 @@ module.exports = function(app) {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* POST /email-signup
|
||||
* Create a new local account.
|
||||
*/
|
||||
|
||||
function postEmailSignup (req, res, next) {
|
||||
req.assert('email', 'valid email required').isEmail();
|
||||
var errors = req.validationErrors();
|
||||
|
||||
if (errors) {
|
||||
req.flash('errors', errors);
|
||||
return res.redirect('/email-signup');
|
||||
}
|
||||
|
||||
var possibleUserData = req.body;
|
||||
|
||||
if (possibleUserData.password.length < 8) {
|
||||
req.flash('errors', {
|
||||
msg: 'Your password is too short'
|
||||
});
|
||||
return res.redirect('email-signup');
|
||||
}
|
||||
|
||||
if (possibleUserData.username.length < 5 || possibleUserData.length > 20) {
|
||||
req.flash('errors', {
|
||||
msg: 'Your username must be between 5 and 20 characters'
|
||||
});
|
||||
return res.redirect('email-signup');
|
||||
}
|
||||
|
||||
|
||||
var user = new User({
|
||||
email: req.body.email.trim(),
|
||||
password: req.body.password,
|
||||
profile: {
|
||||
username: req.body.username.trim(),
|
||||
picture:
|
||||
'https://s3.amazonaws.com/freecodecamp/camper-image-placeholder.png'
|
||||
}
|
||||
});
|
||||
|
||||
User.findOne({ email: req.body.email }, function(err, existingEmail) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
|
||||
if (existingEmail) {
|
||||
req.flash('errors', {
|
||||
msg: 'Account with that email address already exists.'
|
||||
});
|
||||
return res.redirect('/email-signup');
|
||||
}
|
||||
User.findOne(
|
||||
{ 'profile.username': req.body.username },
|
||||
function(err, existingUsername) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
if (existingUsername) {
|
||||
req.flash('errors', {
|
||||
msg: 'Account with that username already exists.'
|
||||
});
|
||||
return res.redirect('/email-signup');
|
||||
}
|
||||
|
||||
user.save(function(err) {
|
||||
if (err) { return next(err); }
|
||||
req.logIn(user, function(err) {
|
||||
if (err) { return next(err); }
|
||||
res.redirect('/email-signup');
|
||||
});
|
||||
});
|
||||
var transporter = nodemailer.createTransport({
|
||||
service: 'Mandrill',
|
||||
auth: {
|
||||
user: secrets.mandrill.user,
|
||||
pass: secrets.mandrill.password
|
||||
}
|
||||
});
|
||||
var mailOptions = {
|
||||
to: user.email,
|
||||
from: 'Team@freecodecamp.com',
|
||||
subject: 'Welcome to Free Code Camp!',
|
||||
text: [
|
||||
'Greetings from San Francisco!\n\n',
|
||||
'Thank you for joining our community.\n',
|
||||
'Feel free to email us at this address if you have ',
|
||||
'any questions about Free Code Camp.\n',
|
||||
'And if you have a moment, check out our blog: ',
|
||||
'blog.freecodecamp.com.\n',
|
||||
'Good luck with the challenges!\n\n',
|
||||
'- the Free Code Camp Volunteer Team'
|
||||
].join('')
|
||||
};
|
||||
transporter.sendMail(mailOptions, function(err) {
|
||||
if (err) { return err; }
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /account
|
||||
* Profile page.
|
||||
@ -268,59 +120,6 @@ module.exports = function(app) {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Unique username check API Call
|
||||
*/
|
||||
|
||||
function checkUniqueUsername (req, res, next) {
|
||||
User.count(
|
||||
{ 'profile.username': req.params.username.toLowerCase() },
|
||||
function (err, data) {
|
||||
if (err) { return next(err); }
|
||||
if (data === 1) {
|
||||
return res.send(true);
|
||||
} else {
|
||||
return res.send(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Existing username check
|
||||
*/
|
||||
|
||||
function checkExistingUsername (req, res, next) {
|
||||
User.count(
|
||||
{ 'profile.username': req.params.username.toLowerCase() },
|
||||
function (err, data) {
|
||||
if (err) { return next(err); }
|
||||
if (data === 1) {
|
||||
return res.send(true);
|
||||
} else {
|
||||
return res.send(false);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unique email check API Call
|
||||
*/
|
||||
|
||||
function checkUniqueEmail (req, res, next) {
|
||||
User.count(
|
||||
{ email: decodeURIComponent(req.params.email).toLowerCase() },
|
||||
function (err, data) {
|
||||
if (err) { return next(err); }
|
||||
if (data === 1) {
|
||||
return res.send(true);
|
||||
} else {
|
||||
return res.send(false);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* GET /campers/:username
|
||||
|
@ -2,5 +2,8 @@
|
||||
"db": {
|
||||
"name": "db",
|
||||
"connector": "mongodb"
|
||||
},
|
||||
"mail": {
|
||||
"connector": "mail"
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,19 @@
|
||||
var secrets = require('../config/secrets');
|
||||
|
||||
module.exports = {
|
||||
db: {
|
||||
connector: 'mongodb',
|
||||
url: process.env.MONGOHQ_URL
|
||||
},
|
||||
mail: {
|
||||
connector: 'mail',
|
||||
transports: [{
|
||||
type: 'smtp',
|
||||
service: 'Mandrill',
|
||||
auth: {
|
||||
user: secrets.mandrill.user,
|
||||
pass: secrets.mandrill.password
|
||||
}
|
||||
}]
|
||||
}
|
||||
};
|
||||
|
@ -8,7 +8,8 @@
|
||||
]
|
||||
},
|
||||
"User": {
|
||||
"dataSource": "db"
|
||||
"dataSource": "db",
|
||||
"public": false
|
||||
},
|
||||
"AccessToken": {
|
||||
"dataSource": "db",
|
||||
@ -26,6 +27,10 @@
|
||||
"dataSource": "db",
|
||||
"public": false
|
||||
},
|
||||
"Email": {
|
||||
"dataSource": "mail",
|
||||
"public": false
|
||||
},
|
||||
"bonfire": {
|
||||
"dataSource": "db",
|
||||
"public": true
|
||||
|
@ -8,7 +8,8 @@ module.exports = {
|
||||
passwordField: 'password',
|
||||
authPath: '/auth/local',
|
||||
successRedirect: successRedirect,
|
||||
failureRedirect: failureRedirect,
|
||||
failureRedirect: '/email-signin',
|
||||
session: true,
|
||||
failureFlash: true
|
||||
},
|
||||
'facebook-login': {
|
||||
|
@ -27,7 +27,6 @@ var R = require('ramda'),
|
||||
expressValidator = require('express-validator'),
|
||||
forceDomain = require('forcedomain'),
|
||||
lessMiddleware = require('less-middleware'),
|
||||
hpp = require('hpp'),
|
||||
|
||||
passportProviders = require('./passport-providers'),
|
||||
/**
|
||||
@ -60,7 +59,6 @@ app.use(lessMiddleware(path.join(__dirname, '/public')));
|
||||
app.use(logger('dev'));
|
||||
app.use(bodyParser.json());
|
||||
app.use(bodyParser.urlencoded({ extended: true }));
|
||||
app.use(hpp());
|
||||
app.use(expressValidator({
|
||||
customValidators: {
|
||||
matchRegex: function (param, regex) {
|
||||
@ -216,9 +214,12 @@ var passportOptions = {
|
||||
var password = generateKey('password');
|
||||
var userObj = {
|
||||
username: username,
|
||||
password: password,
|
||||
email: email
|
||||
password: password
|
||||
};
|
||||
|
||||
if (email) {
|
||||
userObj.email = email;
|
||||
}
|
||||
return userObj;
|
||||
}
|
||||
};
|
||||
|
@ -2,7 +2,7 @@ extends ../layout
|
||||
block content
|
||||
.jumbotron.text-center(ng-controller="emailSignInController")
|
||||
h2 Sign in with an email address here:
|
||||
form(method='POST', action='/email-signin')
|
||||
form(method='POST', action='/auth/local')
|
||||
input(type='hidden', name='_csrf', value=_csrf)
|
||||
.col-sm-6.col-sm-offset-3
|
||||
.form-group
|
||||
@ -24,4 +24,4 @@ block content
|
||||
br
|
||||
br
|
||||
br
|
||||
br
|
||||
br
|
||||
|
@ -2,7 +2,7 @@ extends ../layout
|
||||
block content
|
||||
.jumbotron.text-center
|
||||
h2 Sign up with an email address here:
|
||||
form.form-horizontal(method='POST', action='/email-signup', name="signupForm", novalidate="novalidate")
|
||||
form.form-horizontal(method='POST', action='/api/users', name="signupForm", novalidate="novalidate")
|
||||
input(type='hidden', name='_csrf', value=_csrf)
|
||||
.form-group
|
||||
.col-sm-6.col-sm-offset-3
|
||||
|
@ -7,8 +7,9 @@ block content
|
||||
.panel-heading.text-center
|
||||
h1 Challenge Map
|
||||
.panel-body
|
||||
if (Math.random() > 0.99)
|
||||
if (Math.random() > 0.999)
|
||||
img.img-responsive.img-center.border-radius-5(src='https://s3.amazonaws.com/freecodecamp/wide-social-banner-dino.png')
|
||||
audio(autoplay src='https://s3.amazonaws.com/freecodecamp/t-rex-roar.mp3')
|
||||
else
|
||||
img.img-responsive.img-center.border-radius-5(src='https://s3.amazonaws.com/freecodecamp/wide-social-banner.png')
|
||||
.col-xs-12.col-md-10.col-md-offset-1
|
||||
@ -97,33 +98,22 @@ block content
|
||||
li.large-p.negative-10
|
||||
a(href="/challenges/#{challenge.name}")= challenge.name
|
||||
|
||||
#announcementModal.modal(tabindex='-1')
|
||||
.modal-dialog.animated.fadeInUp.fast-animation
|
||||
.modal-content
|
||||
.modal-header.challenge-list-header We're adding new languages!
|
||||
a.close.closing-x(href='#', data-dismiss='modal', aria-hidden='true') ×
|
||||
.modal-body
|
||||
.spacer
|
||||
h4.text-left 我們正在研究將Free Code Camp翻成中文!  
|
||||
a(href='https://freecodecamp.slack.com/messages/chinese') 請按這裡來參觀我們的中文聊天室
|
||||
| .
|
||||
h4.text-left Estamos trabajando a traducir Free Code Camp en español!  
|
||||
a(href='https://freecodecamp.slack.com/messages/espanol') Haz clic aquí para ir a nuestra sala de chat español
|
||||
| .
|
||||
h4.text-left Nós estamos trabalhando para traduzir o Free Code Camp para o Português!  
|
||||
a(href='https://freecodecamp.slack.com/messages/portugues') Clique aqui para visitar nossa sala de bate-papo em Português
|
||||
| .
|
||||
h4.text-left Nous travaillons pour traduire Free Code Camp en Français!  
|
||||
a(href='https://freecodecamp.slack.com/messages/francais') Cliquez ici pour visiter notre salle de chat Français
|
||||
| .
|
||||
h4.text-left Мы работаем над переводом Free Code Camp на русский язык!  
|
||||
a(href='https://freecodecamp.slack.com/messages/russian') Нажмите здесь, чтобы посетить русский чат
|
||||
| .
|
||||
a.btn.btn-lg.btn-primary.btn-block(href='#', data-dismiss='modal', aria-hidden='true') Thanks for the heads-up!
|
||||
script.
|
||||
$(document).ready(function () {
|
||||
if (!localStorage || !localStorage.multiLingual) {
|
||||
$('#announcementModal').modal('show');
|
||||
localStorage.multiLingual = "true";
|
||||
}
|
||||
});
|
||||
//#announcementModal.modal(tabindex='-1')
|
||||
// .modal-dialog.animated.fadeInUp.fast-animation
|
||||
// .modal-content
|
||||
// .modal-header.challenge-list-header Join our Saturday Summit!
|
||||
// a.close.closing-x(href='#', data-dismiss='modal', aria-hidden='true') ×
|
||||
// .modal-body
|
||||
// h3.text-left Saturday at Noon EDT: We'll live-stream our Saturday Summit on Twitch.tv.
|
||||
// h3.text-left We'll announce our new Front End Development Certificate Program (it's free, of course) and our new "Free Code Camp On The Go" app.  
|
||||
// a(href='http://www.freecodecamp.com/twitch', target='_blank') Add us to your calendar here
|
||||
// | .
|
||||
// a.btn.btn-lg.btn-info.btn-block(name='_csrf', value=_csrf, aria-hidden='true', href='http://twitch.tv/freecodecamp', target='_blank') Follow us on Twitch.tv
|
||||
// a.btn.btn-lg.btn-primary.btn-block(href='#', data-dismiss='modal', aria-hidden='true') Thanks for the heads-up!
|
||||
//script.
|
||||
// $(document).ready(function () {
|
||||
// if (!localStorage || !localStorage.day234) {
|
||||
// $('#announcementModal').modal('show');
|
||||
// localStorage.day234 = "true";
|
||||
// }
|
||||
// });
|
||||
|
@ -125,7 +125,7 @@ block content
|
||||
form.code
|
||||
.form-group.codeMirrorView
|
||||
textarea#codeEditor(autofocus=true, style='display: none;')
|
||||
script(src='/js/lib/coursewares/coursewaresJSFramework_0.0.4.js')
|
||||
script(src='/js/lib/coursewares/coursewaresJSFramework_0.0.5.js')
|
||||
|
||||
#complete-courseware-dialog.modal(tabindex='-1')
|
||||
.modal-dialog.animated.zoomIn.fast-animation
|
||||
|
@ -18,59 +18,61 @@ block content
|
||||
script(src='/js/lib/codemirror/mode/xml/xml.js')
|
||||
script(src='/js/lib/codemirror/mode/css/css.js')
|
||||
script(src='/js/lib/codemirror/mode/htmlmixed/htmlmixed.js')
|
||||
script(src='/js/lib/codemirror/addon/emmet/emmet.js')
|
||||
.row.courseware-height
|
||||
.col-xs-12.col-sm-12.col-md-3.col-lg-3
|
||||
.well
|
||||
.row
|
||||
.col-xs-12
|
||||
h2.text-center= name
|
||||
.bonfire-instructions
|
||||
p.wrappable!= brief
|
||||
#brief-instructions
|
||||
#more-info.btn.btn-primary.btn-block.btn-primary-ghost
|
||||
span.ion-arrow-down-b
|
||||
| More information
|
||||
#long-instructions.row.hide
|
||||
.col-xs-12
|
||||
for sentence in details
|
||||
p.wrappable!= sentence
|
||||
#less-info.btn.btn-primary.btn-block.btn-primary-ghost
|
||||
span.ion-arrow-up-b
|
||||
| Less information
|
||||
br
|
||||
if (user)
|
||||
a.btn.btn-primary.btn-big.btn-block#next-courseware-button
|
||||
| Go to my next challenge
|
||||
.vertical-scroll
|
||||
.col-xs-12.col-sm-12.col-md-3.col-lg-3
|
||||
.well
|
||||
.row
|
||||
.col-xs-12
|
||||
h2.text-center= name
|
||||
.bonfire-instructions
|
||||
p.wrappable!= brief
|
||||
#brief-instructions
|
||||
#more-info.btn.btn-primary.btn-block.btn-primary-ghost
|
||||
span.ion-arrow-down-b
|
||||
| More information
|
||||
#long-instructions.row.hide
|
||||
.col-xs-12
|
||||
for sentence in details
|
||||
p.wrappable!= sentence
|
||||
#less-info.btn.btn-primary.btn-block.btn-primary-ghost
|
||||
span.ion-arrow-up-b
|
||||
| Less information
|
||||
br
|
||||
| (ctrl + enter)
|
||||
if (user.sentSlackInvite)
|
||||
.button-spacer
|
||||
.btn-group.input-group.btn-group-justified
|
||||
label.btn.btn-success#trigger-help-modal
|
||||
i.fa.fa-medkit
|
||||
| Help
|
||||
label.btn.btn-success#trigger-issue-modal
|
||||
i.fa.fa-bug
|
||||
| Bug
|
||||
.button-spacer
|
||||
script.
|
||||
var userLoggedIn = true;
|
||||
else
|
||||
a.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
|
||||
if (user)
|
||||
a.btn.btn-primary.btn-big.btn-block#next-courseware-button
|
||||
| Go to my next challenge
|
||||
br
|
||||
| (ctrl + enter)
|
||||
if (user.sentSlackInvite)
|
||||
.button-spacer
|
||||
.btn-group.input-group.btn-group-justified
|
||||
label.btn.btn-success#trigger-help-modal
|
||||
i.fa.fa-medkit
|
||||
| Help
|
||||
label.btn.btn-success#trigger-issue-modal
|
||||
i.fa.fa-bug
|
||||
| Bug
|
||||
.button-spacer
|
||||
script.
|
||||
var userLoggedIn = false;
|
||||
.button-spacer
|
||||
ul#testSuite.list-group
|
||||
br
|
||||
script(type="text/javascript").
|
||||
$('#next-courseware-button').attr('disabled', 'disabled');
|
||||
var tests = !{JSON.stringify(tests)};
|
||||
var challengeSeed = !{JSON.stringify(challengeSeed)};
|
||||
var challenge_Id = !{JSON.stringify(challengeId)};
|
||||
var challenge_Name = !{JSON.stringify(name)};
|
||||
var prodOrDev = !{JSON.stringify(environment)};
|
||||
var challengeType = !{JSON.stringify(challengeType)};
|
||||
var started = Math.floor(Date.now());
|
||||
var userLoggedIn = true;
|
||||
else
|
||||
a.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress
|
||||
script.
|
||||
var userLoggedIn = false;
|
||||
.button-spacer
|
||||
ul#testSuite.list-group
|
||||
br
|
||||
script(type="text/javascript").
|
||||
$('#next-courseware-button').attr('disabled', 'disabled');
|
||||
var tests = !{JSON.stringify(tests)};
|
||||
var challengeSeed = !{JSON.stringify(challengeSeed)};
|
||||
var challenge_Id = !{JSON.stringify(challengeId)};
|
||||
var challenge_Name = !{JSON.stringify(name)};
|
||||
var prodOrDev = !{JSON.stringify(environment)};
|
||||
var challengeType = !{JSON.stringify(challengeType)};
|
||||
var started = Math.floor(Date.now());
|
||||
.col-xs-12.col-sm-12.col-md-5.col-lg-6
|
||||
#mainEditorPanel
|
||||
form.code
|
||||
@ -80,6 +82,7 @@ block content
|
||||
.hidden-xs.hidden-sm
|
||||
img.iphone-position.iframe-scroll(src="https://s3.amazonaws.com/freecodecamp/iphone6-frame.png")
|
||||
iframe.iphone.iframe-scroll#preview
|
||||
.spacer
|
||||
#complete-courseware-dialog.modal(tabindex='-1')
|
||||
.modal-dialog.animated.zoomIn.fast-animation
|
||||
.modal-content
|
||||
@ -92,4 +95,4 @@ block content
|
||||
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")
|
||||
script(src="/js/lib/coursewares/coursewaresHCJQFramework_0.1.9.js")
|
||||
|
@ -67,7 +67,7 @@ block content
|
||||
form.code
|
||||
.form-group.codeMirrorView
|
||||
textarea#codeEditor(autofocus=true, style='display: none;')
|
||||
script(src='/js/lib/coursewares/coursewaresJSFramework_0.0.4.js')
|
||||
script(src='/js/lib/coursewares/coursewaresJSFramework_0.0.5.js')
|
||||
#complete-courseware-dialog.modal(tabindex='-1')
|
||||
.modal-dialog.animated.zoomIn.fast-animation
|
||||
.modal-content
|
||||
|
@ -1,13 +1,8 @@
|
||||
nav.navbar.navbar-default.navbar-fixed-top.nav-height
|
||||
.navbar-header
|
||||
button.hamburger.navbar-toggle(type='button', data-toggle='collapse', data-target='.navbar-collapse')
|
||||
.col-xs-6
|
||||
.col-xs-12
|
||||
span.hamburger-text Menu
|
||||
.col-xs-6
|
||||
span.sr-only Toggle navigation
|
||||
span.icon-bar
|
||||
span.icon-bar
|
||||
span.icon-bar
|
||||
a.navbar-brand(href='/')
|
||||
img.img-responsive.nav-logo(src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg.gz', alt='learn to code javascript at Free Code Camp logo')
|
||||
.collapse.navbar-collapse
|
||||
@ -28,7 +23,7 @@ nav.navbar.navbar-default.navbar-fixed-top.nav-height
|
||||
a(href='/stories') News
|
||||
li
|
||||
a(href='/field-guide') Guide
|
||||
li.hidden-xs.hidden-sm
|
||||
li
|
||||
a(href='/jobs') Jobs
|
||||
if !user
|
||||
li      
|
||||
@ -37,7 +32,6 @@ nav.navbar.navbar-default.navbar-fixed-top.nav-height
|
||||
else
|
||||
li
|
||||
if (user.username)
|
||||
|
||||
a(href='/' + user.username) [ #{user.progressTimestamps.length} ]
|
||||
|
||||
else
|
||||
|
@ -54,4 +54,4 @@ block content
|
||||
.big-break
|
||||
a.btn.btn-cta.signup-btn.btn-block(href="/nonprofits-form") My nonprofit needs coding help
|
||||
.button-spacer
|
||||
a.btn.btn-cta.btn-success.btn-block(href="/nonprofits/directory") Browse our directory of nonprofit we've helped
|
||||
a.btn.btn-cta.btn-success.btn-block(href="/nonprofits/directory") Browse our directory of nonprofits we've helped
|
||||
|
@ -15,10 +15,10 @@
|
||||
.spacer
|
||||
.row
|
||||
.col-xs-12.col-sm-8.col-sm-offset-2.well
|
||||
h4.text-center Submit your favorite  
|
||||
a(href='http://imgs.xkcd.com/comics/wisdom_of_the_ancients.png') profound comic about coding
|
||||
|   to Camper News.
|
||||
p.text-center Start the headline with: "Deep Code Comic:" then add a clever description that doesn't ruin the punchline. We'll publish the top 25 comics (and the campers who submitted them) in Wednesday's blog post. You'll also get 1 point for every upvote.
|
||||
h4.text-center Which Coders are Worth Following on Twitter?
|
||||
img.img-responsive(src='https://www.evernote.com/l/AHQLuyBNcVpKj5TRhNzWssVuCvbRIEylm3oB/image.png')
|
||||
p Share a link to the Twitter profile of your choice, and tell us in 140 characters or less why this person is a "Coder Worth Following".
|
||||
p Use the headline: "Coder Worth Following: (their Twitter handle)". We'll publish a list of the 25 most-upvoted submissions (and the campers who submitted them) in Wednesday's blog post. Also - as always - you'll get 1 point every time someone upvotes your post.
|
||||
.spacer
|
||||
|
||||
#search-results
|
||||
|
Reference in New Issue
Block a user