diff --git a/challenges/basic-bonfires.json b/challenges/basic-bonfires.json index 931c157ce1..afebb968ea 100644 --- a/challenges/basic-bonfires.json +++ b/challenges/basic-bonfires.json @@ -1,6 +1,6 @@ { "name": "Basic Algorithm Scripting", - "order": 7, + "order": 8, "challenges": [ { "id": "ad7123c8c441eddfaeb5bdef", @@ -378,7 +378,7 @@ "truncate(\"A-tisket a-tasket A green and yellow basket\", 11, \"\");" ], "tests": [ - "assert(truncate(\"A-tisket a-tasket A green and yellow basket\", 11) === \"A-tisket...\", 'message: truncate(\"A-tisket a-tasket A green and yellow basket\", 1) should return \"A-tisket...\".');", + "assert(truncate(\"A-tisket a-tasket A green and yellow basket\", 11) === \"A-tisket...\", 'message: truncate(\"A-tisket a-tasket A green and yellow basket\", 11) should return \"A-tisket...\".');", "assert(truncate(\"Peter Piper picked a peck of pickled peppers\", 14) === \"Peter Piper...\", 'message: truncate(\"Peter Piper picked a peck of pickled peppers\", 14) should return \"Peter Piper...\".');", "assert(truncate(\"A-tisket a-tasket A green and yellow basket\", \"A-tisket a-tasket A green and yellow basket\".length) === \"A-tisket a-tasket A green and yellow basket\", 'message: truncate(\"A-tisket a-tasket A green and yellow basket\", \"A-tisket a-tasket A green and yellow basket\".length) should return \"A-tisket a-tasket A green and yellow basket\".');", "assert(truncate('A-tisket a-tasket A green and yellow basket', 'A-tisket a-tasket A green and yellow basket'.length + 2) === 'A-tisket a-tasket A green and yellow basket', 'message: truncate(\"A-tisket a-tasket A green and yellow basket\", \"A-tisket a-tasket A green and yellow basket\".length + 2) should return \"A-tisket a-tasket A green and yellow basket\".');" diff --git a/challenges/basic-javascript.json b/challenges/basic-javascript.json index c10af0def1..68eab0176c 100644 --- a/challenges/basic-javascript.json +++ b/challenges/basic-javascript.json @@ -1,6 +1,6 @@ { "name": "Basic JavaScript", - "order": 5, + "order": 6, "challenges": [ { "id":"bd7123c9c441eddfaeb4bdef", @@ -1039,7 +1039,7 @@ ], "tests":[ "assert(test === 2, 'message: Your RegEx should have found two numbers in the testString.');", - "assert(editor.getValue().match(/\\/\\\\d\\+\\//gi), 'message: You should be using the following expression /\\\\d+/gi to find the numbers in the testString.');" + "assert(editor.getValue().match(/\\/\\\\d\\+\\//g), 'message: You should be using the following expression /\\d+/g to find the numbers in the testString.');" ], "challengeSeed":[ "var test = (function() {", @@ -1047,7 +1047,7 @@ "", " // Only change code below this line.", "", - " var expression = /.+/gi;", + " var expression = /.+/g;", "", " // Only change code above this line.", " // We use this function to show you the value of your variable in your output box.", @@ -1069,7 +1069,7 @@ ], "tests":[ "assert(test === 7, 'message: Your RegEx should have found seven spaces in the testString.');", - "assert(editor.getValue().match(/\\/\\\\s\\+\\//gi), 'message: You should be using the following expression /\\\\s+/gi to find the spaces in the testString.');" + "assert(editor.getValue().match(/\\/\\\\s\\+\\//g), 'message: You should be using the following expression /\\s+/g to find the spaces in the testString.');" ], "challengeSeed":[ "var test = (function(){", @@ -1077,7 +1077,7 @@ "", " // Only change code below this line.", "", - " var expression = /.+/gi;", + " var expression = /.+/g;", "", " // Only change code above this line.", " // We use this function to show you the value of your variable in your output box.", @@ -1092,12 +1092,12 @@ "title": "Invert Regular Expression Matches with JavaScript", "difficulty":"9.987", "description":[ - "Use /\\S/gi to match everything that isn't a space in the string.", + "Use /\\S/g to match everything that isn't a space in the string.", "You can invert any match by using the uppercase version of the selector \\s versus \\S for example." ], "tests":[ "assert(test === 49, 'message: Your RegEx should have found forty nine non-space characters in the testString.');", - "assert(editor.getValue().match(/\\/\\\\S\\/gi/gi), 'message: You should be using the following expression /\\\\S/gi to find non-space characters in the testString.');" + "assert(editor.getValue().match(/\\/\\\\S\\/g/g), 'message: You should be using the following expression /\\S/g to find non-space characters in the testString.');" ], "challengeSeed":[ "var test = (function(){", @@ -1105,7 +1105,7 @@ "", " // Only change code below this line.", "", - " var expression = /./gi;", + " var expression = /./g;", "", " // Only change code above this line.", " // We use this function to show you the value of your variable in your output box.", diff --git a/challenges/basic-ziplines.json b/challenges/basic-ziplines.json index cf2ac272f6..59f2c75237 100644 --- a/challenges/basic-ziplines.json +++ b/challenges/basic-ziplines.json @@ -1,6 +1,6 @@ { "name": "Basic Front End Development Projects", - "order": 8, + "order": 9, "challenges": [ { "id": "bd7158d8c442eddfbeb5bd1f", diff --git a/challenges/bootstrap.json b/challenges/bootstrap.json index d405871390..3982fe18d5 100644 --- a/challenges/bootstrap.json +++ b/challenges/bootstrap.json @@ -9,7 +9,7 @@ "Now let's go back to our Cat Photo App. This time, we'll style it using the popular Bootstrap responsive CSS framework.", "Bootstrap will figure out how wide your screen is and respond by resizing your HTML elements - hence the name Responsive Design.", "With responsive design, there is no need to design a mobile version of your website. It will look good on devices with screens of any width.", - "You can add Bootstrap to any app just by including it with <link rel=\"stylesheet\" href=\"//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css\"/> at the top of your HTML. But we've gone ahead and automatically added it to your Cat Photo App for you.", + "You can add Bootstrap to any app just by including it with <link rel=\"stylesheet\" href=\"//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css\"/> at the top of your HTML. But we've added it for you to this page behind the scenes.", "To get started, we should nest all of our HTML in a div element with the class container-fluid." ], "tests": [ diff --git a/challenges/gear-up-for-success.json b/challenges/gear-up-for-success.json new file mode 100644 index 0000000000..a9986a4b45 --- /dev/null +++ b/challenges/gear-up-for-success.json @@ -0,0 +1,110 @@ +{ + "name": "Gear up for Success", + "order": 4, + "challenges": [ + { + "id": "560add65cb82ac38a17513c2", + "title": "Browse Camper News", + "challengeSeed": [], + "description": [ + [ + "http://i.imgur.com/nmSiMy1.gif", + "A gif showing how you can access our Camper News page and click the \"upvote\" button to upvote a story.", + "Click the \"News\" button in your upper right hand corner. You can browse links on Camper News and upvote ones that you enjoy.", + "" + ] + ], + "type": "Waypoint", + "challengeType": 7, + "tests": [], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "560add65cb82ac38a17513c1", + "title": "Reference our Wiki", + "challengeSeed": [], + "description": [ + [ + "http://i.imgur.com/DoOqkNW.gif", + "A gif showing how you can click the \"Wiki\" button in your upper-right corner to access the wiki.", + "Try this: Click the \"Wiki\" button in your upper right hand corner. Our community has contributed lots of useful information to this searchable wiki.", + "" + ] + ], + "type": "Waypoint", + "challengeType": 7, + "tests": [], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "570add8ccb82ac38a17513c3", + "title": "Join our LinkedIn Alumni Network", + "challengeSeed": [], + "description": [ + [ + "http://i.imgur.com/P7qfJXt.gif", + "A gif showing how you can click the link below and fill in the necessary fields to add your Free Code Camp studies to your LinkedIn profile.", + "You can add Free Code Camp to your LinkedIn education background. Set your graduation date as next year. For \"Degree\", type \"Full Stack Web Development\". For \"Field of study\", type \"Computer Software Engineering\". Then click \"Save Changes\".", + "https://www.linkedin.com/profile/edit-education?school=Free+Code+Camp" + ] + ], + "type": "Waypoint", + "challengeType": 7, + "tests": [], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "560add8ccb81ac38a17513c4", + "title": "Commit to a Goal and a Nonprofit", + "challengeSeed": [], + "description": [ + [ + "http://i.imgur.com/P7qfJXt.gif", + "A gif showing how you can commit to a goal for your Free Code Camp studies and pledge a monthly donation to a nonprofit to give you external motivation to reach that goal.", + "You can set a goal and pledge to donate to a nonprofit each month until you achieve that goal. give you external motivation in your quest to learn to code, as well as the opportunity to help nonprofits right away. Choose your goal, choose a monthly donation. When you click \"commit\", the nonprofit's donate page will open in a new tab. You can change your committment or stop it at any time.", + "http://freecodecamp.com/commit" + ] + ], + "type": "Waypoint", + "challengeType": 7, + "tests": [], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + } + ] +} diff --git a/challenges/getting-started.json b/challenges/getting-started.json index 1a97e5c10c..1e750177d4 100644 --- a/challenges/getting-started.json +++ b/challenges/getting-started.json @@ -134,51 +134,19 @@ }, { "id": "560add56cb82ac38a17513c0", - "title": "Configure your Public Profile", + "title": "Configure your Code Portfolio", "challengeSeed": [], "description": [ [ "http://i.imgur.com/FkEzbto.gif", - "A gif showing how you can click your profile image in your upper right hand corner to access the account page and connect GitHub.", - "Check out your portfolio page. Click your picture your upper right hand corner. To activate your portfolio page, you'll need to link your GitHub account with Free Code Camp.", + "A gif showing how you can click your profile image in your upper right hand corner to your code portfolio and connect GitHub.", + "Check out your code portfolio. Click your picture your upper right hand corner. To activate your code portfolio, you'll need to link your GitHub account with Free Code Camp.", "" ], [ "http://i.imgur.com/WKzEr1q.gif", - "A gif showing how you can access your profile page and hover over different days to see how many brownie points you got on those days.", - "Your portfolio page shows your progress and how many Brownie Points you have. You can get Brownie Points by completing challenges and by helping other campers in our chat rooms. If you get Brownie Points on several days in a row, you'll get a streak.", - "" - ] - ], - "type": "Waypoint", - "challengeType": 7, - "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], - "nameEs": "", - "descriptionEs": [], - "namePt": "", - "descriptionPt": [] - }, - { - "id": "560add65cb82ac38a17513c1", - "title": "Try our Wiki and Camper News", - "challengeSeed": [], - "description": [ - [ - "http://i.imgur.com/DoOqkNW.gif", - "A gif showing how you can click the \"Wiki\" button in your upper-right corner to access the wiki.", - "Try this: Click the \"Wiki\" button in your upper right hand corner. Our community has contributed lots of useful information to this searchable wiki.", - "" - ], - [ - "http://i.imgur.com/nmSiMy1.gif", - "A gif showing how you can access our Camper News page and click the \"upvote\" button to upvote a story.", - "Click the \"News\" button in your upper right hand corner. You can browse links on Camper News and upvote ones that you enjoy.", + "A gif showing how you can access your code portfolio and hover over different days to see how many brownie points you got on those days.", + "Your code portfolio shows your progress and how many Brownie Points you have. You can get Brownie Points by completing challenges and by helping other campers in our chat rooms. If you get Brownie Points on several days in a row, you'll get a streak.", "" ] ], @@ -260,38 +228,6 @@ "namePt": "", "descriptionPt": [] }, - { - "id": "560add8ccb82ac38a17513c3", - "title": "Join our Alumni Network and Commit to Your Goal", - "challengeSeed": [], - "description": [ - [ - "http://i.imgur.com/P7qfJXt.gif", - "A gif showing how you can click the link below and fill in the necessary fields to add your Free Code Camp studies to your LinkedIn profile.", - "You can add Free Code Camp to your LinkedIn education background. Set your graduation date as next year. For \"Degree\", type \"Full Stack Web Development\". For \"Field of study\", type \"Computer Software Engineering\". Then click \"Save Changes\".", - "https://www.linkedin.com/profile/edit-education?school=Free+Code+Camp" - ], - [ - "", - "", - "Free Code Camp will always be free. If you want to feel more motivated to earn our certificates faster, we encourage you to instead pledge to donate to a nonprofit each day.", - "" - ] - ], - "type": "Waypoint", - "challengeType": 7, - "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], - "nameEs": "", - "descriptionEs": [], - "namePt": "", - "descriptionPt": [] - }, { "id": "560add8ccb82ac38a17513c4", "title": "Learn What to Do If You Get Stuck", diff --git a/challenges/jquery.json b/challenges/jquery.json index 8d3de88c68..6aa103d38c 100644 --- a/challenges/jquery.json +++ b/challenges/jquery.json @@ -1,6 +1,6 @@ { "name": "jQuery", - "order": 4, + "order": 5, "challenges": [ { "id": "bad87fee1348bd9acdd08826", diff --git a/challenges/json-apis-and-ajax.json b/challenges/json-apis-and-ajax.json deleted file mode 100644 index f8e11696b7..0000000000 --- a/challenges/json-apis-and-ajax.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "JSON APIs and Ajax", - "order": 10, - "challenges": [ - { - "id": "bad88fee1348bd9ae8c08416", - "title": "Stand in challenge", - "dashedName": "waypoint-stand-in-challenge", - "difficulty": 3.24, - "description": [ - "" - ], - "tests": [ - - ], - "challengeSeed": [ - "" - ], - "challengeType": 0, - "type": "waypoint" - } - ] -} diff --git a/challenges/object-oriented-and-functional-programming.json b/challenges/object-oriented-and-functional-programming.json index 2d8c22f32d..f00086db9c 100644 --- a/challenges/object-oriented-and-functional-programming.json +++ b/challenges/object-oriented-and-functional-programming.json @@ -1,6 +1,6 @@ { "name": "Object Oriented and Functional Programming", - "order": 6, + "order": 7, "note": [ "Methods", "Closures", @@ -185,7 +185,7 @@ ], "tests":[ "assert.deepEqual(array, [4,5,6,7,8], 'message: You should add three to each value in the array.');", - "assert(editor.getValue().match(/\\.map\\(/gi), 'message: You should be making use of the map method.');", + "assert(editor.getValue().match(/\\.map\\s*\\(/gi), 'message: You should be making use of the map method.');", "assert(editor.getValue().match(/\\[1\\,2\\,3\\,4\\,5\\]/gi), 'message: You should only modify the array with .map.');" ], "challengeSeed":[ @@ -212,8 +212,8 @@ "});" ], "tests":[ - "assert(singleVal == 30, 'message: singleVal should have been set to the result of you reduce operation.');", - "assert(editor.getValue().match(/\\.reduce\\(/gi), 'message: You should have made use of the reduce method.');" + "assert(singleVal == 30, 'message: singleVal should have been set to the result of your reduce operation.');", + "assert(editor.getValue().match(/\\.reduce\\s*\\(/gi), 'message: You should have made use of the reduce method.');" ], "challengeSeed":[ "var array = [4,5,6,7,8];", @@ -241,7 +241,7 @@ ], "tests":[ "assert.deepEqual(array, [1,2,3,4], 'message: You should have removed all the values from the array that are greater than 4.');", - "assert(editor.getValue().match(/array\\.filter\\(/gi), 'message: You should be using the filter method to remove the values from the array.');", + "assert(editor.getValue().match(/array\\.filter\\s*\\(/gi), 'message: You should be using the filter method to remove the values from the array.');", "assert(editor.getValue().match(/\\[1\\,2\\,3\\,4\\,5\\,6\\,7\\,8\\,9\\,10\\]/gi), 'message: You should only be using .filter to modify the contents of the array.');" ], "challengeSeed":[ @@ -269,7 +269,7 @@ "tests":[ "assert.deepEqual(array, ['alpha', 'beta', 'charlie'], 'message: You should have sorted the array alphabetically.');", "assert(editor.getValue().match(/\\[\\'beta\\'\\,\\s\\'alpha\\'\\,\\s'charlie\\'\\];/gi), 'message: You should be sorting the array using sort.');", - "assert(editor.getValue().match(/\\.sort\\(\\)/gi), 'message: You should have made use of the sort method.');" + "assert(editor.getValue().match(/\\.sort\\s*\\(\\)/gi), 'message: You should have made use of the sort method.');" ], "challengeSeed":[ "var array = ['beta', 'alpha', 'charlie'];", @@ -291,7 +291,7 @@ ], "tests": [ "assert.deepEqual(array, [7,6,5,4,3,2,1], 'message: You should reverse the array.');", - "assert(editor.getValue().match(/\\.reverse\\(\\)/gi), 'message: You should use the reverse method.');", + "assert(editor.getValue().match(/\\.reverse\\s*\\(\\)/gi), 'message: You should use the reverse method.');", "assert(editor.getValue().match(/\\[1\\,2\\,3\\,4\\,5\\,6\\,7/gi), 'message: You should return [7,6,5,4,3,2,1].');" ], "challengeSeed": [ @@ -315,7 +315,7 @@ ], "tests": [ "assert.deepEqual(array, [1,2,3,4,5,6], 'You should concat the two arrays together.');", - "assert(editor.getValue().match(/\\.concat\\(/gi), 'message: You should be use the concat method to merge the two arrays.');", + "assert(editor.getValue().match(/\\.concat\\s*\\(/gi), 'message: You should be use the concat method to merge the two arrays.');", "assert(editor.getValue().match(/\\[1\\,2\\,3\\]/gi) && editor.getValue().match(/\\[4\\,5\\,6\\]/gi), 'message: You should only modify the two arrays without changing the origional ones.');" ], "challengeSeed": [ diff --git a/index.js b/index.js index 334a11d3dc..bd05f2de96 100644 --- a/index.js +++ b/index.js @@ -43,6 +43,7 @@ Challenge.destroyAll(function(err, info) { var challengeSpec = require('./challenges/' + file); var order = challengeSpec.order; var block = challengeSpec.name; + var isBeta = !!challengeSpec.isBeta; // challenge file has no challenges... if (challengeSpec.challenges.length === 0) { @@ -66,6 +67,7 @@ Challenge.destroyAll(function(err, info) { challenge.order = order; challenge.suborder = index + 1; challenge.block = block; + challenge.isBeta = challenge.isBeta || isBeta; return challenge; });