Question:
A (very) small problem that I noticed is that new members are not that familiar with Gitter's markdown syntax. Thus, their unformatted code flood the chat channels (some even just straight up paste their challenge URL). I think a quick markdown challenge that tackles the basics allows everyone to have a smoother experience when someone asks for help.This could extend to a slightly more in-depth discussion about Read-Search-Ask and Chat Etiquette. I think a reasonable challenge is to ask the new member to type their Hello World like this in Gitter chat: My name is member. I'm from SomeCity, Country. I found freeCodeCamp through this and that, and I'd be happy to learn how to code with you all! NOTE: This is my first Github issue, and I'm not that familiar with how things work around here. Please do tell if I missed something!
thanks for the issue. I think this is a worthwhile small lesson to teach. I can empathize with you when I peruse the help rooms and find unformatted code. I'll leave this open for discussion. cc/
Yes, please.
Where on the map should this challenge go? Placing in the "Getting started" section jumps out as obvious. On the other hand it might make better sense after some of the challanges have been completed and campers have started working with code. Maybe right after the first CSS challange?
I'm in favor of adding a challenge that covers code formatting using markdown. As for ordering, I see the cons of making the Getting Started section even longer, but I'd vote for putting the challenge there. Maybe between and ? If we cover any other markdown syntax (a heading with the hash/pound sign, links, etc), we should put it somewhere in/after the HTML section. People completely new to HTML may not understand the connection. (FYI, the existing HTML/CSS section is being split into their own respective sections as part of the curriculum expansion - the new order is if anyone is interested). If we want to make the challenge interactive, I don't think there's an existing challenge style in the code base where the camper can input markdown in the code editor and the output is the result of that. Not sure how hard it is to create that. Alternatively, we could use a slide style (what the other challenges use in the Getting Started section). Maybe show a side-by-side image of formatted vs non-formatted code and have a blurb of text explaining backticks. I could write that blurb pretty quickly if we go forward with this. Just some thoughts, happy to hear what others think.
If it's placed before actual coding challanges start, a generic could be used to get the main point across. Later actual code from an existing challenge could be used should to make it more of real world example.
Agreed, - good point
I think just right before the first HTML challenge would be perfect as to illustrate the different methods of marking up text. For some reason I can't find what part of the map where the Gitter chat is introduced, maybe just right before then is also a good choice. So just like a screenshot, then? I think letting the new user type it out and see the results would be great. But markdown isn't really that complicated, so I think just a screenshot could work just as well.
It could be simple challenge that you only have to view. This could be fast and easy to implement. Perhaps a gif could be later. I like the way the Atom Flight Manual incorporates gifs. http://flight- Here's a link to Gitter's markdown basics page. We should add this as a resource.
My vote would be somewhere close to where the gitter chat is introduced.. as suggested.. I've regularly been in the helpRoom since probably Julyish with a few other 'regulars' and we're often coaching people on the backticks and other markdown
Gitter is introduced on as step 7 of 8 on . The next challenge after that is Say Hello to HTML Elements. We can do a quick gif, if it's possible, otherwise we can do a screenshot as a new step 8 and push the current step 8 to number 9. I recommend we add links to resources underneath. I'm thinking a link to the freecodecamp help room and the gitter markdown basics page.
I would add these two resources as well: posting code 2 min vid: (maybe make it part of the vid offerings, or redo to fCC ) FCC wiki on posting code. I know we've moved most of the wiki to the forum but this is one that might make sense to keep out... since I'm not sure what step joining the forum is.. but when we talk about the forum to people in fCChelpRoom they don't always know what we are talking about. raw link:
This was an excellent suggestion, I know I told a few people just tonight about how to paste code. AND, I remember the glorious feeling of figuring it out for the first time myself problem with this though, is that unless we make it interactive, I think people may just glaze over it, not read it, and not have the point sink in. Actually forcing them to write some basic markdown to pass a challenge would drive the point home I think.
I found and amazing interactive tutorial by Jeff Atwood and others. This is the team behind the markdown spec at the parent website I think we should just link it to this.
I've done that tutorial as well and I loved it too. I would still have people circle back as mentioned and try it out in the gitter room. Posting code with the three ticks as well as

var isCompletedDate =  Math.round(+new Date() / 1000); var bonfireHash = req.body.bonfireInfo.bonfireHash; var isSolution = req.body.bonfireInfo.solution; <del> // TODO debug(isCompletedWith, 'Is completed with'); </del> if (isCompletedWith) { var paired = User.find({"profile.username": isCompletedWith}).limit(1);

throw err; } if (user && paired) { <del> res.redirect('/bonfires'); </del> <ins> res.send(true); </ins> } }) }); } }) } else { req.user.completedBonfires.push({ _id: bonfireHash, completedWith: null,

}) var index = req.user.uncompletedBonfires.indexOf(bonfireHash); if (index > -1) { req.user.uncompletedBonfires.splice(index,1) } req.user.save(function(err, user) { if (err) { throw err; } if (user) { <del> res.redirect('/bonfires'); </del> <ins> debug('Saving user'); res.send(true) </ins> } }); } }); // Unique Check API route

return res.redirect('bonfires/meet-bonfire'); } var currentTime = parseInt(+new Date() / 1000); <del> if (currentTime - req.user.lastContentSync > 86400) { </del> <ins> if (currentTime - req.user.lastContentSync > 10) { </ins> req.user.lastContentSync = currentTime; var completed = req.user.completedBonfires.map(function (elem) { return elem._id;

} } }); <del> } if (allTestsPassed) { allTestsPassed = false; showCompletion(); </del> <ins> if (allTestsPassed) { allTestsPassed = false; showCompletion(); } </ins> } };

$('#complete-bonfire-dialog').modal('show'); // Only post to server if there is an authenticated user if ($('.signup-btn-nav').length < 1) { <del> $.ajax({ type: 'POST', data: { </del> <ins> $.post( '/completed-bonfire', { </ins> bonfireInfo: { completedWith : didCompleteWith, solution: bonfireSolution, bonfireHash: thisBonfireHash } }, <del> url: '/completed-bonfire/' }); </del> <ins> function(res) { if (res) { window.location.href = 'http://localhost:3001/bonfires' } }) </ins> } } <ins> $('.next-bonfire-button').on('click', function() { var bonfireSolution = myCodeMirror.getValue(); var thisBonfireHash = passedBonfireHash || null; var didCompleteWith = $('#completed-with').val() || null; completedBonfire(didCompleteWith, bonfireSolution, thisBonfireHash); }); </ins> $('.all-challenges').on('click', function() { $('#all-challenges-dialog').modal('show'); });

}); <del> $('.next-bonfire-button').on('click', function() { var bonfireSolution = myCodeMirror.getValue(); var thisBonfireHash = passedBonfireHash || null; var didCompleteWith = $('#completed-with').val() || null; completedBonfire(didCompleteWith, bonfireSolution, thisBonfireHash); window.setTimeout(function() { // TODO window.location = '/bonfires'; }, 100); }); </del> // Bonfire instructions functions $('#more-info').on('click', function() {


Question:
We need to update the links in the challenges from to Changes are to be made here: and here:
I can take it! :)
please go ahead! Good luck. Here are the .
Donezo :). Thanks!

"  ", "  ", "</style>",  "CatPhotoApp"   "CatPhotoApp"  ], "tests": [ "assert($('a').css('color') == 'rgb(0, 0, 0)', 'message: The color of the anchor tag text should be black.')"

"  ", "  ", "</style>",  "CatPhotoApp"   "CatPhotoApp"  ], "tests": [ "assert($('a').css('color') == 'rgb(0, 0, 0)', 'message: The anchor tag color should remain black, only add CSS rules for the :hover state.');",


Question:
There should be a test case for a target ending that appears anywhere else other than the end of the string. The purpose of the function is to determine whether the 'target' string appears at the end of the given string (str). The issue is that the code below will pass when it shouldn't. It looks for the first appearance of the target in the string (str), creates a substring from that to the end, and returns if it's equal to the target string. There are no test cases for the case when the target appears anywhere else than the end. <img width="286" alt="screen shot 2017-03-15 at 4 12 49 pm" src=""<img width="1376" alt="screen shot 2017-03-15 at 4 08 45 pm" src=""
You're right, nice find! I'll give it a go and make a PR.
Awesome! Thanks a lot! :)
Np, let's just hope it gets accepted! :)

], "tests": [ "assert(confirmEnding("Bastian", "n") === true, 'message: confirmEnding("Bastian", "n") should return true.');",  "assert(confirmEnding("Congratulation", "on") === true, 'message: confirmEnding("Congratulation", "on") should return true.');",  "assert(confirmEnding("Connor", "n") === false, 'message: confirmEnding("Connor", "n") should return false.');", "assert(confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification") === false, 'message: confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification") should return false.');", "assert(confirmEnding("He has to give me a new name", "name") === true, 'message: confirmEnding("He has to give me a new name", "name") should return true.');",


Question:
<!-- freeCodeCamp Issue Template --<!-- Please provide as much detail as possible for us to fix your issue --<!-- Remove any heading sections you did not fill out --<!-- NOTE: If your issue is CodePen Project / Test Suite related, please open it using the below URL instead --<!-- --<!-- Describe below when the issue happens and how to reproduce it --I love Night Mode when doing the challenges. However, I noticed that the contrast seemed a bit low. Running the WCAG Contrast Checker extension confirmed my belief. See screenshot below. Lightening up the foreground color would be beneficial to everyone. Thanks! <!-- Describe your workspace in which you are having issues--Browser Name, Version: Mozilla 52.0 Operating System: Windows 7 Mobile, Desktop, or Tablet: Desktop <!-- Add a screenshot of your issue --!
I'm happy to tackle this, if it's open! I just need to finish setting up my dev environment according to the contribution guidelines.
I have set up local FCC. I will be able to give it a shot by tonight unless hasn't done it already.
Hi, i have committed a . It passed WCAG luminosity as shown in the below screenshot. <img width="838" alt="screen shot 2017-03-21 at 10 41 47 pm" src=""
You beat me to it! This is an improvement, though. Thanks for making the site better.

//## Night mode styles @night-body-bg:         @gray-dark; <del> @night-text-color:            #999; </del> <ins> @night-text-color:            #ccc; </ins> //== Typography //

} } a, .input-group-addon, .challenge-instructions a, .challenge-instructions #MDN-links a { <del> color: #CCC; </del> <ins> color: #f8f8f8; </ins> } .fa-github-square { color: @brand-primary;


Question: Challenge %20%7B%0A%20%20var%20answer%20%3D%20%22%22%3B%0A%20%20%2F%2F%20Only%20change%20code%20below%20this%20line%0A%20%20%0A%20%20switch%20(val)%20%7B%0A%20%20%20%20%20%20%0A%20%20%7D%0A%20%20%0A%20%20%0A%20%20%2F%2F%20Only%20change%20code%20above%20this%20line%20%20%0A%20%20return%20answer%3B%20%20%0A%7D%0A%0A%2F%2F%20Change%20this%20value%20to%20test%0AsequentialSizes(1)%3B%0A%0A) has an issue. User Agent is: <codeMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36</code. Please describe how to reproduce this issue, and include links to screenshots if possible. My code: Excercise previous switch case was introduced like this: However in this excercise it is shown like this: code styling should be consistent.

"description": [ "If you have many options to choose from, use a switch statement. A switch statement tests a value and can have many case statements which define various possible values. Statements are executed from the first matched case value until a break is encountered.", "Here is a <dfn>pseudocode</dfn> example:",  "
switch (num) {
  case value1:
    statement1;
    break;
  case value2:
    statement2;
    break;
...
  case valueN:
    statementN;
    break;
}
",   "
switch(num) {
  case value1:
    statement1;
    break;
  case value2:
    statement2;
    break;
...
  case valueN:
    statementN;
    break;
}
",  "case values are tested with strict equality (===). The break tells JavaScript to stop executing statements. If the break is omitted, the next statement will be executed.", "
", "Write a switch statement which tests val and sets answer for the following conditions:
1 - "alpha"
2 - "beta"
3 - "gamma"
4 - "delta""

"" ], "solutions": [  "function caseInSwitch(val) {n  var answer = "";nn  switch (val) {n    case 1:n      answer = "alpha";n      break;n    case 2:n      answer = "beta";n      break;n    case 3:n      answer = "gamma";n      break;n    case 4:n      answer = "delta";n  }n  return answer;  n}"   "function caseInSwitch(val) {n  var answer = "";nn  switch(val) {n    case 1:n      answer = "alpha";n      break;n    case 2:n      answer = "beta";n      break;n    case 3:n      answer = "gamma";n      break;n    case 4:n      answer = "delta";n  }n  return answer;  n}"  ], "tests": [ "assert(caseInSwitch(1) === "alpha", 'message: caseInSwitch(1) should have a value of "alpha"');",

"description": [ "Si tienes varias opciones para elegir, usa una sentencia switch. Una sentencia switch prueba un valor y puede tener varias sentencias case las cuales definen varios posibles valores. Las sentencias son ejecutadas desde el primer valor case igualado hasta que se encuentr un break.", "Aquí hay un <dfn>pseudocódigo</dfn> de ejemplo:",  "
switch (num) {
  case valor1:
    sentencia1;
    break;
  case valor2:
    sentencia2;
    break;
...
  case valorN:
    sentenciaN;
    break;
}
",   "
switch(num) {
  case valor1:
    sentencia1;
    break;
  case valor2:
    sentencia2;
    break;
...
  case valorN:
    sentenciaN;
    break;
}
",  "Los valores case son probados con estricta igualdad (===). El break le dice a JavaScript que pare la ejecución del bloque de sentencias en el que está. Si se omite break, se ejecutará la siguiente sentencia.", "
Instrucciones
", "Escribe una sentencia switch que pruebe val y establezca answer para las siguientes condiciones:
1 - "alpha"
2 - "beta"
3 - "gamma"
4 - "delta""

"description": [ "En una sentencia switch puede que no seas capaz de especificar todos los posibles valores en las sentencias case. En su lugar, puedes agregar la sentencia default la cual será ejecutada si no es encontrada ninguna coincidencia con alguna sentencia case. Piensa en esto como la última sentencia else en una cadena if/else.", "Una sentencia default debería ser el último caso.",  "
switch (num) {
  case valor1:
    sentencia1;
    break;
  case valor2:
    sentencia2;
    break;
...
  default:
    sentenciaDefault;
}
",   "
switch(num) {
  case valor1:
    sentencia1;
    break;
  case valor2:
    sentencia2;
    break;
...
  default:
    sentenciaDefault;
}
",  "
Instrucciones
", "Escribe una sentencia switch para establecer answer para las siguientes condiciones:
"a" - "apple"
"b" - "bird"
"c" - "cat"
default - "stuff"" ]

"" ], "solutions": [  "function sequentialSizes(val) {n  var answer = "";n  n  switch (val) {n    case 1:n    case 2:n    case 3:n      answer = "Low";n      break;n    case 4:n    case 5:n    case 6:n      answer = "Mid";n      break;n    case 7:n    case 8:n    case 9:n      answer = "High";n  }n  n  return answer;  n}"   "function sequentialSizes(val) {n  var answer = "";n  n  switch(val) {n    case 1:n    case 2:n    case 3:n      answer = "Low";n      break;n    case 4:n    case 5:n    case 6:n      answer = "Mid";n      break;n    case 7:n    case 8:n    case 9:n      answer = "High";n  }n  n  return answer;  n}"  ], "tests": [ "assert(sequentialSizes(1) === "Low", 'message: sequentialSizes(1) should return "Low"');",

"If you have many options to choose from, a switch statement can be easier to write than many chained if/else if statements. The following:", "
if (val === 1) {
  answer = "a";
} else if (val === 2) {
  answer = "b";
} else {
  answer = "c";
}
", "can be replaced with:",  "
switch (val) {
  case 1:
    answer = "a";
    break;
  case 2:
    answer = "b";
    break;
  default:
    answer = "c";
}
",   "
switch(val) {
  case 1:
    answer = "a";
    break;
  case 2:
    answer = "b";
    break;
  default:
    answer = "c";
}
",  "
", "Change the chained if/else if statements into a switch statement." ],

"" ], "solutions": [  "function chainToSwitch(val) {n  var answer = "";nn  switch (val) {n    case "bob":n      answer = "Marley";n      break;n    case 42:n      answer = "The Answer";n      break;n    case 1:n      answer = "There is no #1";n      break;n    case 99:n      answer = "Missed me by this much!";n      break;n    case 7:n      answer = "Ate Nine";n  }n  return answer;  n}"   "function chainToSwitch(val) {n  var answer = "";nn  switch(val) {n    case "bob":n      answer = "Marley";n      break;n    case 42:n      answer = "The Answer";n      break;n    case 1:n      answer = "There is no #1";n      break;n    case 99:n      answer = "Missed me by this much!";n      break;n    case 7:n      answer = "Ate Nine";n  }n  return answer;  n}"  ], "tests": [ "assert(!/else/g.test(code), 'message: You should not use any else statements anywhere in the editor');",

"Si tienes varias opciones para elegir, una sentencia switch puede ser más fácil de escribir que varias sentencias if/if else anidadas. Lo siguiente:", "
if (val === 1) {
  respuesta = "a";
} else if (val === 2) {
  respuesta = "b";
} else {
  respuesta = "c";
}
", "puede ser reemplazado con:",  "
switch (val) {
  case 1:
    respuesta = "a";
    break;
  case 2:
    respuesta = "b";
    break;
  default:
    respuesta = "c";
}
",   "
switch(val) {
  case 1:
    respuesta = "a";
    break;
  case 2:
    respuesta = "b";
    break;
  default:
    respuesta = "c";
}
",  "
Instrucciones
", "Cambia las sentencias if/if else anidadas dentro de una sentencia switch." ]


Question:
Challenge has an issue. User Agent is: <codeMozilla/5.0 (Macintosh; Intel Mac OS X ) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30</code. Please describe how to reproduce this issue, and include links to screenshots if possible. My code:
Thanks for reporting this. But you need to remove space after width. then you could pass it. GitHub Issues are for reporting bugs on the website only. Please use the for getting challenge related help. Happy Coding.
oh, i found your typo problem. check spelling again. that is why it won't pass. thanks

"difficulty": "1.06", "description": [ "Return an array consisting of the largest numbers in the provided array. The array will contain 4 sub-arrays.", <del> "Remember, you an iterate through an array with a simple for loop, and access each member with array syntax arr[i] .", </del> <ins> "Remember, you can iterate through an array with a simple for loop, and access each member with array syntax arr[i] .", </ins> "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." ], "challengeEntryPoint": "largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);",

"name": "Sum All Odd Fibonacci Numbers", "difficulty": "2.09", "description": [ <del> "Return the sum of all odd fibonacci numbers up to and including the passed number if it is a fibonacci number.", </del> <ins> "Return the sum of all odd Fibonacci numbers up to and including the passed number if it is a Fibonacci number.", </ins> "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.", <del> "As an example, passing 4 to the function should return 5 because all the odd fibonacci numbers under 4 are 1, 1, and 3." </del> <ins> "As an example, passing 4 to the function should return 5 because all the odd Fibonacci numbers under 4 are 1, 1, and 3." </ins> ], "challengeEntryPoint": "sumFibs(4);", "challengeSeed": "function sumFibs(num) {n  return num;rn}",

"difficulty": "2.10", "description": [ "Sum all the prime numbers up to and including the provided number.", <del> "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.", </del> <ins> "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.", </ins> "The provided number may not be a prime." ], "challengeEntryPoint": "sumPrimes(10);",

"Fill in the object constructor with the methods specified in the tests.", "Those methods are getFirstName(), getLastName(), getFullName(), setFirstName(), setLastName(), and setFullName().", "These methods must be the only available means for interacting with the object.", <del> "There will be some linting errors on the tests, you may safely ignore them. You should see undefined in the console output." </del> <ins> "There will be some linting errors on the tests. You may safely ignore them. You should see undefined in the console output." </ins> ], "challengeEntryPoint": "var bob = new Person('Bob Ross');", "challengeSeed": "var Person = function(firstAndLast) {n    return firstAndLast;rn};",

"Return true if the passed string is a valid US phone number", "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", <del> "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 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." </del> <ins> "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." </ins> ], "tests": [ "expect(telephoneCheck("555-555-5555")).to.be.a("boolean");",


Question:
Challenge )%3B%0A%0A%2F%2F%20Only%20change%20code%20below%20this%20line%0Afunction%20updateRecords(id%2C%20prop%2C%20value)%20%7B%0A%20%20%0A%20%20%0A%20%20return%20collection%5Bid%5D%3B%0A%7D%0A%0A%2F%2F%20Alter%20values%20below%20to%20test%20your%20code%0AupdateRecords(5439%2C%20%22artist%22%2C%20%22ABBA%22)%3B%0A%0A) has an issue. User Agent is: <codeMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/ Firefox/53.0</code. Please describe how to reproduce this issue, and include links to screenshots if possible. I was just trying to print the id's elements from collection and it returns the whole object when the value expected should be { album: 'ABBA Gold' }. What I could be doing wrong? My code:
I got it. The object update when enters collection[id][prop] = value;. Thanks

"difficulty": "1.06", "description": [ "Return an array consisting of the largest numbers in the provided array. The array will contain 4 sub-arrays.", <del> "Remember, you an iterate through an array with a simple for loop, and access each member with array syntax arr[i] .", </del> <ins> "Remember, you can iterate through an array with a simple for loop, and access each member with array syntax arr[i] .", </ins> "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." ], "challengeEntryPoint": "largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);",

"name": "Sum All Odd Fibonacci Numbers", "difficulty": "2.09", "description": [ <del> "Return the sum of all odd fibonacci numbers up to and including the passed number if it is a fibonacci number.", </del> <ins> "Return the sum of all odd Fibonacci numbers up to and including the passed number if it is a Fibonacci number.", </ins> "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.", <del> "As an example, passing 4 to the function should return 5 because all the odd fibonacci numbers under 4 are 1, 1, and 3." </del> <ins> "As an example, passing 4 to the function should return 5 because all the odd Fibonacci numbers under 4 are 1, 1, and 3." </ins> ], "challengeEntryPoint": "sumFibs(4);", "challengeSeed": "function sumFibs(num) {n  return num;rn}",

"difficulty": "2.10", "description": [ "Sum all the prime numbers up to and including the provided number.", <del> "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.", </del> <ins> "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.", </ins> "The provided number may not be a prime." ], "challengeEntryPoint": "sumPrimes(10);",

"Fill in the object constructor with the methods specified in the tests.", "Those methods are getFirstName(), getLastName(), getFullName(), setFirstName(), setLastName(), and setFullName().", "These methods must be the only available means for interacting with the object.", <del> "There will be some linting errors on the tests, you may safely ignore them. You should see undefined in the console output." </del> <ins> "There will be some linting errors on the tests. You may safely ignore them. You should see undefined in the console output." </ins> ], "challengeEntryPoint": "var bob = new Person('Bob Ross');", "challengeSeed": "var Person = function(firstAndLast) {n    return firstAndLast;rn};",

"Return true if the passed string is a valid US phone number", "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", <del> "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 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." </del> <ins> "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." </ins> ], "tests": [ "expect(telephoneCheck("555-555-5555")).to.be.a("boolean");",


Question:
Challenge has an issue. User Agent is: <codeMozilla/5.0 (Macintosh; Intel Mac OS X ) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30</code. Please describe how to reproduce this issue, and include links to screenshots if possible. My code:
I'm running into the same issue. tried in Chrome and Edge.
same issue here. won't let me pass past this task
Hi :) My guess is that the app is being finicky with class names. You've named your background class "silver_background" and it wants "silver-background".
Can anyone assist with this challenge, I can't move to the next challenge!
i'm having issues with this same challenge,help please

"difficulty": "1.06", "description": [ "Return an array consisting of the largest numbers in the provided array. The array will contain 4 sub-arrays.", <del> "Remember, you an iterate through an array with a simple for loop, and access each member with array syntax arr[i] .", </del> <ins> "Remember, you can iterate through an array with a simple for loop, and access each member with array syntax arr[i] .", </ins> "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." ], "challengeEntryPoint": "largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);",

"name": "Sum All Odd Fibonacci Numbers", "difficulty": "2.09", "description": [ <del> "Return the sum of all odd fibonacci numbers up to and including the passed number if it is a fibonacci number.", </del> <ins> "Return the sum of all odd Fibonacci numbers up to and including the passed number if it is a Fibonacci number.", </ins> "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.", <del> "As an example, passing 4 to the function should return 5 because all the odd fibonacci numbers under 4 are 1, 1, and 3." </del> <ins> "As an example, passing 4 to the function should return 5 because all the odd Fibonacci numbers under 4 are 1, 1, and 3." </ins> ], "challengeEntryPoint": "sumFibs(4);", "challengeSeed": "function sumFibs(num) {n  return num;rn}",

"difficulty": "2.10", "description": [ "Sum all the prime numbers up to and including the provided number.", <del> "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.", </del> <ins> "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.", </ins> "The provided number may not be a prime." ], "challengeEntryPoint": "sumPrimes(10);",

"Fill in the object constructor with the methods specified in the tests.", "Those methods are getFirstName(), getLastName(), getFullName(), setFirstName(), setLastName(), and setFullName().", "These methods must be the only available means for interacting with the object.", <del> "There will be some linting errors on the tests, you may safely ignore them. You should see undefined in the console output." </del> <ins> "There will be some linting errors on the tests. You may safely ignore them. You should see undefined in the console output." </ins> ], "challengeEntryPoint": "var bob = new Person('Bob Ross');", "challengeSeed": "var Person = function(firstAndLast) {n    return firstAndLast;rn};",

"Return true if the passed string is a valid US phone number", "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", <del> "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 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." </del> <ins> "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." </ins> ], "tests": [ "expect(telephoneCheck("555-555-5555")).to.be.a("boolean");",


Question:
Challenge has an issue. If I simply return the array by slicing it, like this - it returns a minified react error . ! The function returns the same value, as expected when I copy paste into the console.
It was fixed after restarting browser, but should still be fixed.
Check out to get your local development environment set up. The issue is in the following line: The last element in the message is never closed. It should be closed with at the end of the message, right after the closing square bracket () If you need help, please visit our . We're always happy to answer any questions! Happy coding!
I'll give it a go, Timo!

"console.log(forecast(['cold', 'rainy', 'warm', 'sunny', 'cool', 'thunderstorms']));" ], "tests": [  "assert.deepEqual(forecast(['cold', 'rainy', 'warm', 'sunny', 'cool', 'thunderstorms']), ['warm', 'sunny'], 'message: forecast should return ["warm", "sunny"]');",   "assert.deepEqual(forecast(['cold', 'rainy', 'warm', 'sunny', 'cool', 'thunderstorms']), ['warm', 'sunny'], 'message: forecast should return ["warm", "sunny"]');",  "assert(/.slice(/.test(code), 'message: The forecast function should utilize the slice() method');" ], "type": "waypoint",


Question:
Coding Interview Data Structure Questions: Adjacency List There is a typo in the description of this challenge. I actually created a YouTube video about Graphs and I used information from this challenge description in the video. Then I made a popular Medium article about Data Structures that linked to all my videos. That is when I realized the issue. People are great at pointing out your mistakes in comments on the internet. :) Here is the part with the typo. The description shows how to represent the following as JavaScript code: The code representation is incorrect. Here it is: The 4th line should actually be . And then later there is the code: The 4th line should actually be .
I would like to fix this issue myself.

"
Node1: Node2, Node3
Node2: Node1
Node3: Node1
", "Above is an undirected graph because Node1 is connected to Node2 and Node3, and that information is consistent with the connections Node2 and Node3 show. An adjacency list for a directed graph would mean each row of the list shows direction. If the above was directed, then Node2: Node1 would mean there the directed edge is pointing from Node2 towards Node1.", "We can represent the undirected graph above as an adjacency list by putting it within a JavaScript object.",  "
var undirectedG = {
  Node1: ["Node2", "Node3"],
  Node2: ["Node1"],
  Node3: ["Node3"]
};
",   "
var undirectedG = {
  Node1: ["Node2", "Node3"],
  Node2: ["Node1"],
  Node3: ["Node1"]
};
",  "This can also be more simply represented as an array where the nodes just have numbers rather than string labels.",  "
var undirectedGArr = [
  [1, 2], # Node1
  [0],    # Node2
  [2]     # Node3
];
",   "
var undirectedGArr = [
  [1, 2], # Node1
  [0],    # Node2
  [0]     # Node3
];
",  "
", "Create a social network as an undirected graph with 4 nodes/people named James, Jill, Jenny, and Jeff. There are edges/relationships between James and Jeff, Jill and Jenny, and Jeff and Jenny." ],


Question:
<!-- freeCodeCamp Issue Template --<!-- Please provide as much detail as possible for us to fix your issue --<!-- Remove any heading sections you did not fill out --<!-- NOTE: If your issue is CodePen Project / Test Suite related, please open it using the below URL instead --<!-- --<!-- Insert link to challenge below -- <!-- Describe below when the issue happens and how to reproduce it --going to step 2/2, the last 3 paragraphs of step 1/2 are still displayed I click "Go to my previous step", the same 3 paragraphs are displayed twice, with different font <!-- Describe your workspace in which you are having issues--Browser Name, Version: Chrome 60.0.3112.90 Operating System: Windows NT 10.0; Win64; x64 Mobile, Desktop, or Tablet: Desktop <!-- If relevant, paste all of your challenge code in here --<!-- Add a screenshot of your issue --
Can I give it a try?
Confirmed. Go ye forth

smOffset={ 1 } xs={ 12 } > <del> <p </del> <ins> <div </ins> className={ `${ns}-description` } dangerouslySetInnerHTML={{ __html: info }} />


Question:
<!-- freeCodeCamp Issue Template --<!-- Please provide as much detail as possible for us to fix your issue --<!-- Remove any heading sections you did not fill out --<!-- NOTE: If your issue is CodePen Project / Test Suite related, please open it using the below URL instead --<!-- --<!-- Insert link to challenge below -- <!-- Describe below when the issue happens and how to reproduce it --After writing "use strict" at the top of the editor, the warning icon appears to the left. When the cursor hovers over it, the text bubble that describes the issue is covered by the navbar making it unreadable. <!-- Describe your workspace in which you are having issues--Browser Name, Version: Google Chrome Version 61.0.3163.100 (Official Build) (64-bit) Operating System: mac OS Sierra version 10.12.6 Mobile, Desktop, or Tablet: Laptop <!-- If relevant, paste all of your challenge code in here --<!-- Add a screenshot of your issue --! <img width="1440" alt="screen shot 2017-10-21 at 12 52 09 am" src="https://user-"
Confirmed this on Firefox 56.0 and Chrome 61.0 !
Fixed. Thanks for this issue; I needed a good hacktoberfest PR
No problem!

height: 100%; width: 100%; } <ins> .CodeMirror-lint-tooltip { z-index: 9999; } </ins>  No newline at end of file


Question:
<!-- freeCodeCamp Issue Template --<!-- Please provide as much detail as possible for us to fix your issue --<!-- Remove any heading sections you did not fill out --<!-- NOTE: If your issue is CodePen Project / Test Suite related, please open it using the below URL instead --<!-- -- The challenge description includes sample code with a comment that states: , This comment is misleading, because the above regular expression will match any word that includes s but does not start with s, e.g. 'horse'. Either the comment should be changed, or the carat should be introduced for this challenge. A more accurate version:
These are all good points. I also noticed that the challenge can be solved without using the character at all. If we want to keep with the Star Wars title element of the challenge, I could rework it to require both the and . characters, since the latter was introduced in an earlier lesson. But I'm thinking it might be better to try and introduce the concept of the * character by itself. However, I'll still try to stick the the Star Wars theme.

"description": [ "The last challenge used the plus + sign to look for characters that occur one or more times. There's also an option that matches characters that occur zero or more times.", "The character to do this is the asterisk or star: *.",  "
let sWord1 = "seed";
let sWord2 = "saw";
let kWord = "kite";
let sRegex = /s.*/; // Searches for words starting with s
sRegex.test(sWord1); // Returns true
sRegex.test(sWord2); // Returns true
sRegex.test(kWord); // Returns false

",   "
let soccerWord = "gooooooooal!";
let gPhrase = "gut feeling";
let oPhrase = "over the moon";
let goRegex = /go*/;
soccerWord.match(goRegex); // Returns ["goooooooo"]
gPhrase.match(goRegex); // Returns ["g"]
oPhrase.match(goRegex); // Returns null
",  "
",  "Create a regex starWarsRegex that uses the * character to match all the movie titles that start with "Star Wars". Your regex does not need flags."   "Create a regex chewieRegex that uses the * character to match all the upper and lower"a" characters in chewieQuote. Your regex does not need flags, and it should not match any of the other quotes."  ], "challengeSeed": [  "let starWars = "Star Wars";", "let starWarsRegex = /change/; // Change this line", "let result = starWars.match(starWarsRegex);"   "let chewieQuote = "Aaaaaaaaaaaaaaaarrrgh!";", "let chewieRegex = /change/; // Change this line", "let result = chewieQuote.match(chewieRegex);"  ], "tests": [  "assert(starWarsRegex.test("Star Wars: The Phantom Menace"), 'message: Your regex should match "Star Wars: The Phantom Menace".');", "assert(starWarsRegex.test("Star Wars: Attack of the Clones"), 'message: Your regex should match "Star Wars: Attack of the Clones".');", "assert(starWarsRegex.test("Star Wars: Revenge of the Sith"), 'message: Your regex should match "Star Wars: Revenge of the Sith".');", "assert(starWarsRegex.test("Star Wars: A New Hope"), 'message: Your regex should match "Star Wars: A New Hope".');", "assert(starWarsRegex.test("Star Wars: The Empire Strikes Back"), 'message: Your regex should match "Star Wars: The Empire Strikes Back".');", "assert(starWarsRegex.test("Star Wars: Return of the Jedi"), 'message: Your regex should match "Star Wars: Return of the Jedi".');", "assert(starWarsRegex.test("Star Wars: The Force Awakens"), 'message: Your regex should match "Star Wars: The Force Awakens".');", "assert(!starWarsRegex.test("The Clone Wars"), 'message: Your regex should not match "The Clone Wars"');"   "assert(/*/.test(chewieRegex.source), 'message: Your regex chewieRegex should use the * character to match zero or more a characters.');", "assert(result[0].length === 16, 'message: Your regex chewieRegex should match 16 characters.');", "assert(result[0] === 'Aaaaaaaaaaaaaaaa', 'message: Your regex should match "Aaaaaaaaaaaaaaaa".');", "assert(!"He made a fair move. Screaming about it can't help you.".match(chewieRegex), 'message: Your regex should not match any characters in "He made a fair move. Screaming about it can&#39t help you."');", "assert(!"Let him have it. It's not wise to upset a Wookiee.".match(chewieRegex), 'message: Your regex should not match any characters in "Let him have it. It&#39s not wise to upset a Wookiee."');"  ], "solutions": [], "hints": [],


Question:
We need to push these notifications down so there's a reasonable space between them and the navbar (perhaps 20px?). !
It's been years since I've done a PR :) I managed to have the website downloaded locally and all that. It seemed that the overlapping was caused by a class negative-30 that gave a margin-top: -30px. Removed it for flash partial view. It is also used in 2 other places but not sure right now if needed or not.
Thanks for your PR. CamperBot automatically closed it. Could you follow its instructions and try again? We'd value your help with this.
Sure thing. I actually made a separate branch (as in the instructions) but what I did was merge that branch into main one and did the PR from the main one. Now, I realise that I should have made the PR from that branch so that CamperBot will work.

.container <del> .row.flashMessage.negative-30 </del> <ins> .row.flashMessage </ins> .col-xs-12.col-sm-8.col-sm-offset-2.col-md-6.col-md-offset-3 if (messages.errors || messages.error) .alert.alert-danger.fade.in


Question:
<!-- freeCodeCamp Issue Template --<!-- Please provide as much detail as possible for us to fix your issue --<!-- Remove any heading sections you did not fill out --<!-- NOTE: If your issue is CodePen Project / Test Suite related, please open it using the below URL instead --<!-- --My Profile -Update My Settings -Reset Progress/Brownie Points <!-- Describe below when the issue happens and how to reproduce it --The confirmation popup window, the text is not readable. Either the background is too dark because its in dark mode or the buttons should be filled in and the text be in white <!-- Describe your workspace in which you are having issues--Browser Name, Version: Operating System: FireFox 57.0 (64-bit) and Chrome Version 63.0.3239.84 (Official Build) (64-bit) Mobile, Desktop, or Tablet: Laptop Windows 10 Professional 64-bit <!-- If relevant, paste all of your challenge code in here --<!-- Add a screenshot of your issue --!
Fixing this with . I'll be waiting for your review.

.modal-dialog { .modal-content { background-color: @gray; <ins> .btn-success, .btn-danger { background: #FFFFFF; } </ins> } .modal-header, .modal-footer {


Question:
The hover animation of map button overlaps the ending of the search bar.  Browser Name, Version: Chrome (latest release) & Firefox (57.0.2). Operating System: Windows 10 Pro 32 bit. Mobile, Desktop, or Tablet: Desktop.
I would like to take on this issue if it still exists
I've already submitted a PR for it.

flex-grow: 1; display: flex; align-items: center; <ins> margin-right: 10px; </ins> } }

display: block } <del> } </del>  No newline at end of file <ins> } </ins>


Question:
<!-- freeCodeCamp Issue Template --<!-- Please provide as much detail as possible for us to fix your issue --<!-- Remove any heading sections you did not fill out --<!-- NOTE: If your issue is CodePen Project / Test Suite related, please open it using the below URL instead --<!-- --Basic JavaScript: Divide one Decimal by Another with JavaScript Previous Issues: The issue is still happening even with suggested refresh and/or reset. Cannot pass this challenge states "The quotient variable should only be assigned once" I had other campers verify in case of a local issue, but they are reporting the same error on this challenge. <!-- Describe your workspace in which you are having issues--Browser Name, Version: Operating System: FireFox 57.0 (64-bit) and Chrome Version 63.0.3239.84 (Official Build) (64-bit) Mobile, Desktop, or Tablet: Laptop Windows 10 Professional 64-bit <!-- If relevant, paste all of your challenge code in here --<!-- Add a screenshot of your issue --!
Thanks for reporting this Previously, the code from the seed was included in the variable used in the tests. This was a new change in the beta that previously broke this test. This has been reverted, the is no longer included in the . Because of that, the test can also be reverted to what it was before. I opened a PR to fix this () and I'm opening an issue for the other instance that was found. There might be more of these, hopefully we can uncover them before the beta release.

}, { "id": "bd7993c9ca9feddfaeb7bdef", <del> "title": "Divide one Decimal by Another with JavaScript", </del> <ins> "title": "Divide One Decimal by Another with JavaScript", </ins> "description": [ "Now let's divide one decimal by another.", "<hr>",

"tests": [ "assert(quotient === 2.2, 'message: The variable quotient should equal 2.2');", "assert(/4.40*s*/s*2.*0*/.test(code), 'message: You should use the / operator to divide 4.4 by 2');",  "assert(code.match(/quotient/g).length === 3, 'message: The quotient variable should only be assigned once');"   "assert(code.match(/quotient/g).length === 1, 'message: The quotient variable should only be assigned once');"  ], "type": "waypoint", "challengeType": 1,


Question:
<!-- freeCodeCamp Issue Template --<!-- Please provide as much detail as possible for us to fix your issue --<!-- Remove any heading sections you did not fill out --<!-- NOTE: If your issue is CodePen Project / Test Suite related, please open it using the below URL instead --<!-- --<!-- Insert link to challenge below -- <!-- Describe below when the issue happens and how to reproduce it --The code is failing to pass the challenge. I have tried reset and a browser refresh, still fails. the code passes FCC production equivalent of the challenge. <!-- Describe your workspace in which you are having issues--Browser Name, Version: Operating System: FireFox 57.0 (64-bit) and Chrome Version 63.0.3239.84 (Official Build) (64-bit) Mobile, Desktop, or Tablet: Laptop Windows 10 Professional 64-bit <!-- If relevant, paste all of your challenge code in here --<!-- Add a screenshot of your issue --!
Good catch Related:
This one seems like a quick fix—I can pick it up if no one's assigned! EDIT: JK just saw looks like this issue is being handled there as well

], "solutions": [], "tests": [  "assert(code.match(/"/g).length === 6 && code.match(/[^]"/g).length === 10, 'message: You should use two double quotes (") and four escaped double quotes (\").');",   "assert(code.match(/"/g).length === 4 && code.match(/[^]"/g).length === 2, 'message: You should use two double quotes (") and four escaped double quotes (\").');",  "assert(myStr === "I am a "double quoted" string inside "double quotes".", 'message: Variable myStr should contain the string: I am a "double quoted" string inside "double quotes".');" ], "type": "waypoint",

"tail": [ "(function() { return "myStr = " + myStr; })();" ],  "solutions": [ "/* head */ 'use strict'; /* solution */ var myStr = 'Link'; /* tail */ (function() { return "myStr = " + myStr; })();" ],   "solutions": [],  "tests": [ "assert(!//g.test(code) && myStr.match('s*s*Links*s*'), 'message: Remove all the backslashes ()');",  "assert(code.match(/"/g).length === 6 && code.match(/'/g).length === 4, 'message: You should have two single quotes ' and four double quotes "');"   "assert(code.match(/"/g).length === 4 && code.match(/'/g).length === 2, 'message: You should have two single quotes ' and four double quotes "');"  ], "type": "waypoint", "challengeType": 1,


Question:
<!-- freeCodeCamp Issue Template --<!-- Please provide as much detail as possible for us to fix your issue --<!-- Remove any heading sections you did not fill out --<!-- NOTE: If your issue is CodePen Project / Test Suite related, please open it using the below URL instead --<!-- --<!-- Insert link to challenge below --Basic JavaScript: Iterate with JavaScript Do...While Loops <!-- Describe below when the issue happens and how to reproduce it --Typo in the pre-last paragraph of the description of the challenge - 'Essenially' written instead of 'Essential'.
I'd like to take this if it's possible, i found the typo and it seems that only a change in the seed file is required
sure please go ahead. if you need assistance then hit us in the , and follow our for setup.

"Now, take a look at a do...while loop.", "
var ourArray = [];
var i = 5;
do {
  ourArray.push(i);
  i++;
} while (i < 5);
", "In this case, we initialize the value of i as 5, just like we did with the while loop. When we get to the next line, there is no check for the value of i, so we go to the code inside the curly braces and execute it. We will add one element to the array and increment i before we get to the condition check. Then, when we get to checking if i < 5 see that i is now 6, which fails the conditional check. So we exit the loop and are done. At the end of the above example, the value of ourArray is [5].",  "Essenially, a do...while loop ensures that the code inside the loop will run at least once.",   "Essentially, a do...while loop ensures that the code inside the loop will run at least once.",  "Let's try getting a do...while loop to work by pushing values to an array.", "
", "Change the while loop in the code to a do...while loop so that the loop will push the number 10 to myArray, and i will be equal to 11 when your code finishes running."


Question: <!-- freeCodeCamp Issue Template --<!-- Please provide as much detail as possible for us to fix your issue --<!-- Remove any heading sections you did not fill out --<!-- NOTE: If your issue is CodePen Project / Test Suite related, please open it using the below URL instead --<!-- --<!-- Insert link to challenge below -- <!-- Describe below when the issue happens and how to reproduce it --The test passes if the opening tag is used and the closing is missing. Also, the test states the no tag may be used in the code but it doesn't check if the closing tag is still left in. <!-- Describe your workspace in which you are having issues--Browser Name, Version: Chrome, Version 63.0.3239.108 (Official Build) (64-bit) Operating System: Windows 10 Pro Mobile, Desktop, or Tablet: Desktop <!-- If relevant, paste all of your challenge code in here --<!-- Add a screenshot of your issue --!

"" ], "tests": [  "assert($('footer').length == 1, 'message: Your code should have one footer tag.');",   "assert(code.match(/s*© 2016 Camper Cats*/g), 'message: Your code should have an opening and closing footer tag.');",  "assert($('div').length == 0, 'message: Your code should not have any div tags.');" ], "solutions": [],


Question:
The current Twitch Tv API v5 is deprecated and will be completely replaced by the end of 2018. Just an FYI so the challenge may be updated to the new API or new challenge proposed.
thanks for bringing to this our attention! The doesn't suggest using the API directly, but instead to use a workaround we've implemented so you don't need an API key. However, this workaround may and probably does use the API V5 (someone would need to verify this). Sidenote: just for Twitch announcing the API deprecation and removal cc/
maybe a contact us page that integrates the google map API ? allows the user not only view the location but also get directions??
Just started working on the Twitch API challenge and it uses the V5 API. Also the fcc wrapper documentation says: is for V5, the new one uses . Also while at it, the wrapper should probably update the link to the documentation. It still links to , the current documentation for the V5 API is at The challenge itself already links to new location.
just to clarify, you are suggesting a new API challenge with the Google Map API? If so, that could be an interesting challenge, as it is something that many developers might want to make for themself on their own personal page. I like the idea. However, we might be able to just update the Gomix instance with the new Twitch API (I'm not sure how much effort this would take). thanks for the additional details on the Kraken vs Helix API names. Indeed, we should at least change the wrapper link.
can you open a PR with these changes?
The wrapper project is on my glitch account, and at the moment it is using my api key. I'll make camperbot's account a collaborator of the project in glitch, so freecodecamp will own the project. Is changing to the only change required ? If so I will edit my project in the next days.
The root URL of the API changing isn't the only difference. I'm still new, so someone more experienced should probably have a look at the . But I think for the and routes there should be nearly no changes necessary. The route on the other hand is completely gone in the new API. But you can get the interesting data from the route anyways. Additionally the route now returns a instead of the name of the game, so if people should be able to display the game name in their projects we should probably implement the route to allow them to get the name from the id.
At the moment my proxy passes everything that in the url comes after to . It will not work as is with the new api. I'll update it so that if you hit the url or it use the old api, if we hit it uses the new api. What do you think ?
Sorry for the delayed answer. Yes, I'm suggesting something new :)
That appears to be a reasonable update. I haven't really looked into the new API much so we'd have to test it out. But for now, that seems like a sensible update. awesome, just checking :) If we end up not replacing it with your Google Maps API contact page, that might be a nice addition to the projects to work on.
That sounds good to me. Please let us know once you've made the change and verified that it still works!
Did you ever get a chance to update this?
No sorry. It's not so easy to make it work for both the old and new projects. Il dom 3 giu 2018, 16:37 Quincy Larson scritto:
/ / I think this issue should take high priority now since we have just a month before the API is deprecated and holiday season is starting so everyone would not be free at all times
It looks like this will be deprecated in just a couple weeks. Could you help update our Glitch project?
I'm having a look at it. I'll try to migrate to the new api before next year. In the meantime the service has a cache db and a static list of users (the ones in the example exercise). It can keep working in 'emergency' mode indefinitely serving a limited number of twitch users data. Also it seems that somebody is using it outside the scope of freeCodeCamp. I have blacklisted the domain, but we need to be careful. I'll let you know.
I have a working api locally on my computer. / do you want me to deploy it now ? or should I wait until the end of December ? The new API will be not backward compatible, but I am serving a static data snapshot at the old enpoint , for the 8 users listed in the exercise description. The new API endpoint will be . Also, the api now is in my glitch account. I think We should transfer the ownership to freeCodeCamp (camperbot ?). Let me know.
the new api can be tested here https://em-ant-twitch- . my old twitch project still works with the served static data. I will deploy the code to wind-bow before new year. We also need to update the challenge description and update the forum post I will submit a PR with the text changes. Can anybody update the forum article ?
Yes - we should transfer ownership to CamperBot for simplicity. And I can update the forum post. What specific changes should I make?
the forum post is about CORS issues and and using jsonp callback, but the new api doesn't support anymore jsonp, and our proxy on glitch accepts cross-origin requests. We could smiply remove the link to the forum post from the challenge description, or update it with an example of the new api (with jquery, as in the old example)
which would you recommend? If you want me to update the post, I can do so - just tell me what update you'd like to make to it.
I updated the PR removing the link to the forum post. I think that post is not relevant anymore for the new api.
Awesome! Thanks for fixing this and for updating the challenge! It always feels good to close one of these issues that's nearly a year old! I've updated the old Forum post we were linking to with your updated instructions. I agree, we shouldn't link to that post anymore. But now if people end up on that post they'll have your new instructions. As always, thanks for your help, and thanks to everyone on this thread who helped us arrive at this solution!
the new version on the api is deployed on wind- it's always a pleasure to help.

User Story: I can see whether freeCodeCamp is currently streaming on Twitch.tv. User Story: I can click the status output and be sent directly to the freeCodeCamp's Twitch.tv channel. User Story: if a Twitch user is currently streaming, I can see additional details about what they are streaming.  Hint: See an example call to Twitch.tv's JSONP API at http://forum.freecodecamp.org/t/use-the-twitchtv-json-api/19541. Hint: The relevant documentation about this API call is here: https://dev.twitch.tv/docs/v5/reference/streams/#get-stream-by-user.   Hint: The relevant documentation about Twitch.tv's JSON API is here: https://dev.twitch.tv/docs/api/reference/#get-streams.  Hint: Here's an array of the Twitch.tv usernames of people who regularly stream: ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"]  UPDATE: Due to a change in conditions on API usage explained here Twitch.tv now requires an API key, but we've built a workaround. Use https://wind-bow.glitch.me/twitch-api instead of twitch's API base URL (i.e. https://api.twitch.tv/kraken ) and you'll still be able to get account information, without needing to sign up for an API key.   UPDATE: Due to a change in conditions on API usage, Twitch.tv requires an API key, but we've built a workaround. Use https://wind-bow.glitch.me/helix instead of twitch's API base URL (i.e. https://api.twitch.tv/helix ) and you'll still be able to get account information, without needing to sign up for an API key.  Remember to use Read-Search-Ask if you get stuck. When you are finished, click the "I've completed this challenge" button and include a link to your CodePen. You can get feedback on your project by sharing it with your friends on Facebook.


Question:
<!-- freeCodeCamp Issue Template --<!-- Please provide as much detail as possible for us to fix your issue --<!-- Remove any heading sections you did not fill out --<!-- NOTE: If your issue is CodePen Project / Test Suite related, please open it using the below URL instead --<!-- --<!-- Insert link to challenge below -- <!-- Describe below when the issue happens and how to reproduce it --The test does not pass. The glitch logs: Fix: in line 197 move the statement in after <!-- Describe your workspace in which you are having issues--Browser Name, Version: Chrome, 62.0.3202.94 Operating System: Win 10 Mobile, Desktop, or Tablet: Desktop <!-- If relevant, paste all of your challenge code in here --<!-- Add a screenshot of your issue --
Could I take this issue?
sure.
I'm sorry if this is an obvious question, but is there a way to start up and test a local version of freecodecamp?
yes, thats a perfectly valid question, its documented in our If you are just getting started we hangout in , you can ask questions there too.
- Is this still open? If so, I can resolve it.
how do we update the boiler plate? Who owns the boilerplate projects on gomix?
I believe should have the access to these, or
I have access to these, but has the deepest understanding of them. I'll message him and see if he can fix this.
if you have access to these, we should be able to get a cloned version fixed and redeployed just like we do for the codepen projects.
Hi guus. The projects are owned by camperbot github account, so you should be able to access them. Anyway I'll have a look this evening.
Thanks for the update !
Awesome! Thanks for looking at these. Please keep us posted :)
Hi , can I see your code or your glitch project link ? I just tested it in beta.freecodecamp with the original project that I used to develop these challenges, and it worked. If you want I can share the link here or in gitter to compare the solutions. I guess the problem is about catching an error in a bad solution. If yes please tell me how to reproduce the error EDIT: Ok nevermind. You were right a condition was misplaced. That condition is actually missing in my original project, that's why it worked. Now it should be fixed. Can you try again?
Hi Sorry I was in a hospital for a few day and could not reply. The link to my code !/fixed- . I still see in the same problem with the lines displacement (in two places): 1) 2)
I'm sorry, I hope you are ok now. Ok, I fixed the boilerplate on glitch (!/trite-) but in beta.freecodecamp the new projects are created importing from freecodecamp's github. I'll submit a pull request with the fixes. Anyway if all the backend projects use this startegy, anybody can fix bugs and errors, just opening PRs to the relative repo. There's no need to access camperbot's glitch account.
(or other reviewers) the PR is
Thanks I'll try and QA this ASAP

{ <del> "node": true </del> <ins> /* * ENVIRONMENTS * ================= */ // Define globals exposed by Node.js. "node": true, /* * ENFORCING OPTIONS * ================= */ // Force all variable names to use either camelCase style or UPPER_CASE // with underscores. "camelcase": true, // Prohibit use of == and != in favor of === and !==. "eqeqeq": true, // Suppress warnings about == null comparisons. "eqnull": true, // Enforce tab width of 2 spaces. "indent": 2, // Prohibit use of a variable before it is defined. "latedef": true, // Require capitalized names for constructor functions. "newcap": true, // Enforce use of single quotation marks for strings. "quotmark": "single", // Prohibit trailing whitespace. "trailing": true, // Prohibit use of explicitly undeclared variables. "undef": true, // Warn when variables are defined but never used. "unused": true, // Enforce line length to 80 characters "maxlen": 80 </ins> }

<ins> { /* * ENVIRONMENTS * ================= */ // Define globals exposed by modern browsers. "browser": true, // Define globals exposed by jQuery. "jquery": true, /* * ENFORCING OPTIONS * ================= */ // Force all variable names to use either camelCase style or UPPER_CASE // with underscores. "camelcase": true, // Prohibit use of == and != in favor of === and !==. "eqeqeq": true, // Suppress warnings about == null comparisons. "eqnull": true, // Enforce tab width of 2 spaces. "indent": 2, // Prohibit use of a variable before it is defined. "latedef": true, // Require capitalized names for constructor functions. "newcap": true, // Enforce use of single quotation marks for strings. "quotmark": "single", // Prohibit trailing whitespace. "trailing": true, // Prohibit use of explicitly undeclared variables. "undef": true, // Warn when variables are defined but never used. "unused": true, // Enforce line length to 80 characters "maxlen": 80, // Enforce placing 'use strict' at the top function scope "strict": true' } </ins>


Question: We have an invalid MongoDB ObjectId set for the "Introduction to jQuery" challenge. ! looking at the git blame: This came from Fix: We should update this to a valid ObjectId, See on how to do so. This line needs to be updated with a valid ObjectId.

], "challenges": [ { <del> "id": "5e7d674br67419c4cd512b9b", </del> <ins> "id": "5a61d23e84acdd9e42575aa3", </ins> "title": "Introduction to jQuery", "description": [ [

} } ] <del> } </del> <ins> } </ins>  No newline at end of file


Question:
<!-- freeCodeCamp Issue Template --<!-- Please provide as much detail as possible for us to fix your issue --<!-- Remove any heading sections you did not fill out --<!-- NOTE: If your issue is CodePen Project / Test Suite related, please open it using the below URL instead --<!-- --<!-- Insert link to challenge below -- <!-- Describe below when the issue happens and how to reproduce it --Correct solution doesn't pass. Maybe I am missing something but code does exactly what is asked in challenge description but last test doesn't pass. "When text is entered into the input element and the button is clicked, the MagicEightBall component should return a p element that contains a random element from the possibleAnswers array." - this test appears failed. <!-- Describe your workspace in which you are having issues--Browser Name, Version: Chrome, Version 64.0.3282.140 (Official Build) (64-bit) Operating System: Windows 10 Mobile, Desktop, or Tablet: Desktop <!-- If relevant, paste all of your challenge code in here --<!-- Add a screenshot of your issue --!
You have the correct solution. This should be an error with the challenge tests. I've reproduced this both in production and locally, on staging. I will start working on a fix—the PR should be opened tomorrow morning (Feb 4, EST).
I found the bug. Can I submit a PR?
customarily, you would give the original responder a day or two to propose his/her solution. I had made my intentions clear in my previous comment. Nevertheless, I've tested his solution locally and it works well.
Hey ! Thanks guys, for pitching in and reporting and fixing this. Sorry about the delay, we will review and merge soon. Happy coding!
seems fix solution doesn't pass for the challenge.
The fix has not been deployed yet, it may take us a while to get into the beta server.
Still a bug on main site. Its keeping me from passing this exercise.
I thought I was going crazy. I cannot pass this challenge even with the correct answer either.
It might be helpful for you guys so I'm reporting that the bug is still there when using safari (logged in and out). When I tried to test with Chrome it just passed. Same with this challenge: Browser User Agent String: Mozilla/5.0 (Macintosh; Intel Mac OS X ) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.1 Safari/605.1.15
You used the solution shows above? If so, can you confirm this? I just tested this on production and seems to work fine (at least in Chrome, Edge, and Firefox).
safari is not passing with the code in the OP, firefox does pass. It only fails the last test
Any guess why?
I'm not sure what's happening here, I tried taking a closer look at the last test (the one that always fails). And when logging the info used in the assert, it looks like it should pass.... ! ! The two conditions in the assert are true, and it still fails. The test is complex and difficult to pinpoint what the problem is, or why it only seems to be failing in safari. By lowering the timeout at the beginning of the test from 250ms to 50ms it will pass some of the time, but still fail sometimes as well. I don't know, that's where I'm at.

"assert.strictEqual(Enzyme.mount(React.createElement(MagicEightBall)).children().childAt(2).name(), 'button', 'message: MagicEightBall's third child should be a button element.');", "assert(Enzyme.mount(React.createElement(MagicEightBall)).state('randomIndex') === '' && Enzyme.mount(React.createElement(MagicEightBall)).state('userInput') === '', 'message: MagicEightBall's state should be initialized with a property of userInput and a property of randomIndex both set to a value of an empty string.');", "assert(Enzyme.mount(React.createElement(MagicEightBall)).find('p').length === 1 && Enzyme.mount(React.createElement(MagicEightBall)).find('p').text() === '', 'message: When MagicEightBall is first mounted to the DOM, it should return an empty p element.');",  "async () => { const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250)); const comp = Enzyme.mount(React.createElement(MagicEightBall)); const simulate = () => { comp.find('input').simulate('change', { target: { value: 'test?' }}); comp.find('button').simulate('click'); }; const result = () => comp.find('p').text(); const _1 = () => { simulate(); return waitForIt(() => result()) }; const _2 = () => { simulate(); return waitForIt(() => result()) }; const _3 = () => { simulate(); return waitForIt(() => result()) }; const _4 = () => { simulate(); return waitForIt(() => result()) }; const _5 = () => { simulate(); return waitForIt(() => result()) }; const _6 = () => { simulate(); return waitForIt(() => result()) }; const _7 = () => { simulate(); return waitForIt(() => result()) }; const _8 = () => { simulate(); return waitForIt(() => result()) }; const _9 = () => { simulate(); return waitForIt(() => result()) }; const _10 = () => { simulate(); return waitForIt(() => result()) }; const _1_val = await _1(); const _2_val = await _2(); const _3_val = await _3(); const _4_val = await _4(); const _5_val = await _5(); const _6_val = await _6(); const _7_val = await _7(); const _8_val = await _8(); const _9_val = await _9(); const _10_val = await _10(); const actualAnswers = [_1_val, _2_val, _3_val, _4_val, _5_val, _6_val, _7_val, _8_val, _9_val, _10_val]; const hasIndex = actualAnswers.filter((answer, i) => possibleAnswers.indexOf(answer) !== -1); const notAllEqual = new Set(actualAnswers); assert(notAllEqual.size > 1 && hasIndex.length === 10, 'message: When text is entered into the input element and the button is clicked, the MagicEightBall component should return a p element that contains a random element from the possibleAnswers array.'); "   "async () => { const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250)); const comp = Enzyme.mount(React.createElement(MagicEightBall)); const simulate = () => { comp.find('input').simulate('change', { target: { value: 'test?' }}); comp.find('button').simulate('click'); }; const result = () => comp.find('p').text(); const _1 = () => { simulate(); return waitForIt(() => result()) }; const _2 = () => { simulate(); return waitForIt(() => result()) }; const _3 = () => { simulate(); return waitForIt(() => result()) }; const _4 = () => { simulate(); return waitForIt(() => result()) }; const _5 = () => { simulate(); return waitForIt(() => result()) }; const _6 = () => { simulate(); return waitForIt(() => result()) }; const _7 = () => { simulate(); return waitForIt(() => result()) }; const _8 = () => { simulate(); return waitForIt(() => result()) }; const _9 = () => { simulate(); return waitForIt(() => result()) }; const _10 = () => { simulate(); return waitForIt(() => result()) }; const _1_val = await _1(); const _2_val = await _2(); const _3_val = await _3(); const _4_val = await _4(); const _5_val = await _5(); const _6_val = await _6(); const _7_val = await _7(); const _8_val = await _8(); const _9_val = await _9(); const _10_val = await _10(); const actualAnswers = [_1_val, _2_val, _3_val, _4_val, _5_val, _6_val, _7_val, _8_val, _9_val, _10_val]; const hasIndex = actualAnswers.filter((answer, i) => possibleAnswers.indexOf(answer) !== -1); const notAllEqual = new Set(actualAnswers); assert(notAllEqual.size > 1 && hasIndex.length === 10, 'message: When text is entered into the input element and the button is clicked, the MagicEightBall component should return a p element that contains a random element from the possibleAnswers array.');}"  ], "solutions": [ "nconst inputStyle = {n  width: 235,n  margin: 5n}nnclass MagicEightBall extends React.Component {n  constructor(props) {n    super(props);n    this.state = {n      userInput: '',n      randomIndex: ''n    }n    this.ask = this.ask.bind(this);n    this.handleChange = this.handleChange.bind(this);n  }n  ask() {n    if (this.state.userInput) {n      this.setState({n        randomIndex: Math.floor(Math.random() * 20),n        userInput: ''n      });n    }n  }n  handleChange(event) {n    this.setState({n      userInput: event.target.valuen    });n  }n  render() {n    const possibleAnswers = [n      "It is certain", "It is decidedly so", "Without a doubt",n      "Yes, definitely", "You may rely on it", "As I see it, yes",n      "Outlook good", "Yes", "Signs point to yes", "Reply hazy try again",n      "Ask again later", "Better not tell you now", "Cannot predict now",n      "Concentrate and ask again", "Don't count on it", "My reply is no",n      "My sources say no", "Outlook not so good","Very doubtful", "Most likely"n    ];n    const answer = possibleAnswers[this.state.randomIndex];n    return (n
n        <inputn          type="text"n          value={this.state.userInput}n          onChange={this.handleChange}n          style={inputStyle} />
n        <button onClick={this.ask}>Ask the Magic Eight Ball!</button>
n
Answer:
n
n          {answer}n
n
n    );n  }n};"


Question:
<!-- freeCodeCamp Issue Template --<!-- Please provide as much detail as possible for us to fix your issue --<!-- Remove any heading sections you did not fill out --<!-- NOTE: If your issue is CodePen Project / Test Suite related, please open it using the below URL instead --<!-- --<!-- Insert link to challenge below -- <!-- Describe below when the issue happens and how to reproduce it --Correct solution doesn't pass. Behavior of "Preview" page matches challenge description but these tests don't pass: When a number of less than 18 is entered into the input element and the button is clicked, the button's inner text should read You Shall Not Pass. }; When a number greater than or equal to 18 is entered into the input element and the button is clicked, the button's inner text should read You May Enter. }; Once a number has been submitted, and the value of the input is once again changed, the button should return to reading Submit. }; <!-- Describe your workspace in which you are having issues--Browser Name, Version: Chrome, Version 64.0.3282.140 (Official Build) (64-bit) Operating System: Windows 10 Mobile, Desktop, or Tablet: Desktop <!-- If relevant, paste all of your challenge code in here --<!-- Add a screenshot of your issue --<img width="422" alt="react-use-a-ternary-expression-for-conditional-rendering" src="https://user-"
The bug seems to come from the first boolean, . An alternative to checking a string's emptiness——works fine. I'm guessing that at some point during the tests, is not actually a string. For instance, if at some point becomes a (which does not have the attribute) then we're in trouble.
Found the bug: as predicted, there was a and mix-up. In the tests, the values sent into the input element are numbers, making undefined and failing the tests. These tests should not be sending numbers into input elements. As written in the MDN web docs for , the attribute of the Input Element in HTML is always of type String. Yet, the in the challenge has , so shouldn't the user still account for this? The MDN web docs say otherwise: Notice that the type attribute only alters the "type of control to display". When type is set to "number", only numbers are allowed to be entered, yet the value is still stored as a . Therefore, the value attribute of the input element still returns a data type.
I've opened a pull request to fix these tests. Luckily, this "input-number-value problem" only afflicted this particular challenge.
thanks for explaining and for fixing :+1:
anytime :smiley:
Hi guys, thanks for taking the time to report and fix, we will get this reviewed soon. Happy contributing!
Hi, why this solution is not working. It's working fine if I enter a value greater than 18 but fails when I enter a value lesser than 18.
it won't work for values lesser than 18 as it this is an invalid expression (buttonThree && buttonOne) Instead, try the below solution : { ( == '' ? buttonOne: ( < 18 ? buttonThree : buttonTwo) }

"assert(Enzyme.mount(React.createElement(CheckUserAge)).find('div').find('input').length === 1 && Enzyme.mount(React.createElement(CheckUserAge)).find('div').find('button').length === 1, 'message: The CheckUserAge component should render with a single input element and a single button element.');", "assert(Enzyme.mount(React.createElement(CheckUserAge)).state().input === '' && Enzyme.mount(React.createElement(CheckUserAge)).state().userAge === '', 'message: The CheckUserAge component's state should be initialized with a property of userAge and a property of input, both set to a value of an empty string.');", "assert(Enzyme.mount(React.createElement(CheckUserAge)).find('button').text() === 'Submit', 'message: When the CheckUserAge component is first rendered to the DOM, the button's inner text should be Submit.');",  "async () => { const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250)); const mockedComponent = Enzyme.mount(React.createElement(CheckUserAge)); const initialButton = mockedComponent.find('button').text(); const enter3AndClickButton = () => { mockedComponent.find('input').simulate('change', {target: { value: 3 }}); mockedComponent.find('button').simulate('click'); return waitForIt(() => { mockedComponent.update(); return mockedComponent.find('button').text(); }); }; const enter17AndClickButton = () => { mockedComponent.find('input').simulate('change', {target: { value: 17 }}); mockedComponent.find('button').simulate('click'); return waitForIt(() => { mockedComponent.update(); return mockedComponent.find('button').text(); }); }; const userAge3 = await enter3AndClickButton(); const userAge17 = await enter17AndClickButton(); assert(initialButton === 'Submit' && userAge3 === 'You Shall Not Pass' && userAge17 === 'You Shall Not Pass', 'message: When a number of less than 18 is entered into the input element and the button is clicked, the button's inner text should read You Shall Not Pass.'); }; ", "async () => { const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250)); const mockedComponent = Enzyme.mount(React.createElement(CheckUserAge)); const initialButton = mockedComponent.find('button').text(); const enter18AndClickButton = () => { mockedComponent.find('input').simulate('change', {target: { value: 18 }}); mockedComponent.find('button').simulate('click'); return waitForIt(() => { mockedComponent.update(); return mockedComponent.find('button').text(); }); }; const enter35AndClickButton = () => { mockedComponent.find('input').simulate('change', {target: { value: 35 }}); mockedComponent.find('button').simulate('click'); return waitForIt(() => { mockedComponent.update(); return mockedComponent.find('button').text(); }); }; const userAge18 = await enter18AndClickButton(); const userAge35 = await enter35AndClickButton(); assert(initialButton === 'Submit' && userAge18 === 'You May Enter' && userAge35 === 'You May Enter', 'message: When a number greater than or equal to 18 is entered into the input element and the button is clicked, the button's inner text should read You May Enter.'); }; ", "async () => { const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250)); const mockedComponent = Enzyme.mount(React.createElement(CheckUserAge)); const enter18AndClickButton = () => { mockedComponent.find('input').simulate('change', {target: { value: 18 }}); mockedComponent.find('button').simulate('click'); return waitForIt(() => { mockedComponent.update(); return mockedComponent.find('button').text(); }); }; const changeInputDontClickButton = () => { mockedComponent.find('input').simulate('change', {target: { value: 5 }}); return waitForIt(() => { mockedComponent.update(); return mockedComponent.find('button').text(); }); }; const enter10AndClickButton = () => { mockedComponent.find('input').simulate('change', {target: { value: 10 }}); mockedComponent.find('button').simulate('click'); return waitForIt(() => { mockedComponent.update(); return mockedComponent.find('button').text(); }); }; const userAge18 = await enter18AndClickButton(); const changeInput1 = await changeInputDontClickButton(); const userAge10 = await enter10AndClickButton(); const changeInput2 = await changeInputDontClickButton(); assert(userAge18 === 'You May Enter' && changeInput1 === 'Submit' && userAge10 === 'You Shall Not Pass' && changeInput2 === 'Submit', 'message: Once a number has been submitted, and the value of the input is once again changed, the button should return to reading Submit.'); }; ",   "async () => { const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250)); const mockedComponent = Enzyme.mount(React.createElement(CheckUserAge)); const initialButton = mockedComponent.find('button').text(); const enter3AndClickButton = () => { mockedComponent.find('input').simulate('change', {target: { value: '3' }}); mockedComponent.find('button').simulate('click'); return waitForIt(() => { mockedComponent.update(); return mockedComponent.find('button').text(); }); }; const enter17AndClickButton = () => { mockedComponent.find('input').simulate('change', {target: { value: '17' }}); mockedComponent.find('button').simulate('click'); return waitForIt(() => { mockedComponent.update(); return mockedComponent.find('button').text(); }); }; const userAge3 = await enter3AndClickButton(); const userAge17 = await enter17AndClickButton(); assert(initialButton === 'Submit' && userAge3 === 'You Shall Not Pass' && userAge17 === 'You Shall Not Pass', 'message: When a number of less than 18 is entered into the input element and the button is clicked, the button's inner text should read You Shall Not Pass.'); }; ", "async () => { const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250)); const mockedComponent = Enzyme.mount(React.createElement(CheckUserAge)); const initialButton = mockedComponent.find('button').text(); const enter18AndClickButton = () => { mockedComponent.find('input').simulate('change', {target: { value: '18' }}); mockedComponent.find('button').simulate('click'); return waitForIt(() => { mockedComponent.update(); return mockedComponent.find('button').text(); }); }; const enter35AndClickButton = () => { mockedComponent.find('input').simulate('change', {target: { value: '35' }}); mockedComponent.find('button').simulate('click'); return waitForIt(() => { mockedComponent.update(); return mockedComponent.find('button').text(); }); }; const userAge18 = await enter18AndClickButton(); const userAge35 = await enter35AndClickButton(); assert(initialButton === 'Submit' && userAge18 === 'You May Enter' && userAge35 === 'You May Enter', 'message: When a number greater than or equal to 18 is entered into the input element and the button is clicked, the button's inner text should read You May Enter.'); }; ", "async () => { const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250)); const mockedComponent = Enzyme.mount(React.createElement(CheckUserAge)); const enter18AndClickButton = () => { mockedComponent.find('input').simulate('change', {target: { value: '18' }}); mockedComponent.find('button').simulate('click'); return waitForIt(() => { mockedComponent.update(); return mockedComponent.find('button').text(); }); }; const changeInputDontClickButton = () => { mockedComponent.find('input').simulate('change', {target: { value: '5' }}); return waitForIt(() => { mockedComponent.update(); return mockedComponent.find('button').text(); }); }; const enter10AndClickButton = () => { mockedComponent.find('input').simulate('change', {target: { value: '10' }}); mockedComponent.find('button').simulate('click'); return waitForIt(() => { mockedComponent.update(); return mockedComponent.find('button').text(); }); }; const userAge18 = await enter18AndClickButton(); const changeInput1 = await changeInputDontClickButton(); const userAge10 = await enter10AndClickButton(); const changeInput2 = await changeInputDontClickButton(); assert(userAge18 === 'You May Enter' && changeInput1 === 'Submit' && userAge10 === 'You Shall Not Pass' && changeInput2 === 'Submit', 'message: Once a number has been submitted, and the value of the input is once again changed, the button should return to reading Submit.'); }; ",  "assert(new RegExp(/(s|;)if(s|()/).test(Enzyme.mount(React.createElement(CheckUserAge)).instance().render.toString()) === false, 'message: Your code should not contain any if/else statements.');" ], "solutions": [


Question:
<!-- freeCodeCamp Issue Template --<!-- Please provide as much detail as possible for us to fix your issue --<!-- Remove any heading sections you did not fill out --<!-- NOTE: If your issue is CodePen Project / Test Suite related, please open it using the below URL instead --<!-- --http://localhost:3000/en/challenges/quality-assurance-and-testing-with-chai/test-if-one-value-is-below-or-at-least-as-large-as-another This test always fails. Looks like the problem is that only first element in the assertions array is checked inside freeCodeCamp/seed/challenges/06-information-security-and-quality-assurance/quality-assurance-and-testing-with- ! Here are the results from the get-tests gltich api : ! There are four items in the data.assertions array , but the test is checking the first element ( data.assetions[0] ) 4 times. <!-- If relevant, paste all of your challenge code in here --<!-- Add a screenshot of your issue --! I plan on submitting a PR for this shortly, if that is OK. Thank you.
Hi yes please we would love a PR.

}, { "text": "Choose the right assertion - isBelow vs. isAtLeast", <del> "testString": "getUserInput => $.get(getUserInput('url') + '/_api/get-tests?type=unit&n=8').then(data => {  assert.equal(data.assertions[0].method, 'isAtLeast', '2 * Math.random() is at least 0'); }, xhr => { throw new Error(xhr.responseText); })" </del> <ins> "testString": "getUserInput => $.get(getUserInput('url') + '/_api/get-tests?type=unit&n=8').then(data => {  assert.equal(data.assertions[1].method, 'isAtLeast', '2 * Math.random() is at least 0'); }, xhr => { throw new Error(xhr.responseText); })" </ins> }, { "text": "Choose the right assertion - isBelow vs. isAtLeast", <del> "testString": "getUserInput => $.get(getUserInput('url') + '/_api/get-tests?type=unit&n=8').then(data => {  assert.equal(data.assertions[0].method, 'isBelow', '1 is smaller than 2'); }, xhr => { throw new Error(xhr.responseText); })" </del> <ins> "testString": "getUserInput => $.get(getUserInput('url') + '/_api/get-tests?type=unit&n=8').then(data => {  assert.equal(data.assertions[2].method, 'isBelow', '1 is smaller than 2'); }, xhr => { throw new Error(xhr.responseText); })" </ins> }, { "text": "Choose the right assertion - isBelow vs. isAtLeast", <del> "testString": "getUserInput => $.get(getUserInput('url') + '/_api/get-tests?type=unit&n=8').then(data => {  assert.equal(data.assertions[0].method, 'isBelow', '2/3 (0.6666) is smaller than 1'); }, xhr => { throw new Error(xhr.responseText); })" </del> <ins> "testString": "getUserInput => $.get(getUserInput('url') + '/_api/get-tests?type=unit&n=8').then(data => {  assert.equal(data.assertions[3].method, 'isBelow', '2/3 (0.6666) is smaller than 1'); }, xhr => { throw new Error(xhr.responseText); })" </ins> } ], "solutions": [],


Question:
Basic CSS: Use Attribute Selectors to Style Elements <!-- Describe below when the issue happens and how to reproduce it --In the third paragraph: Unless style is an adjective, it needs to have an s to follow subject-verb agreement. I.E. This selector matches and styles elements with a specific attribute value. You might also consider rewriting this sentence entirely to make it a bit easier to comprehend. E.G. This selector allows you to {style} the indicated [elements].
I think styles is a better fix. I'll submit a PR

"description": [ "You have been giving id or class attributes to elements that you wish to specifically style. These are known as ID and class selectors. There are other CSS Selectors you can use to select custom groups of elements to style.", "Let's bring out CatPhotoApp again to practice using CSS Selectors.",  "For this challenge, you will use the [attr=value] attribute selector to style the checkboxes in CatPhotoApp. This selector matches and style elements with a specific attribute value. For example, the below code changes the margins of all elements with the attribute type and a corresponding value of radio:",   "For this challenge, you will use the [attr=value] attribute selector to style the checkboxes in CatPhotoApp. This selector matches and styles elements with a specific attribute value. For example, the below code changes the margins of all elements with the attribute type and a corresponding value of radio:",  "
[type='radio'] {
  margin: 20px 0px 20px 0px;
}
", "
", "Using the type attribute selector, try to give the checkboxes in CatPhotoApp a top margin of 10px and a bottom margin of 15px."


Question:
<!-- freeCodeCamp Issue Template --<!-- Please provide as much detail as possible for us to fix your issue --<!-- Remove any heading sections you did not fill out --<!-- NOTE: If your issue is CodePen Project / Test Suite related, please open it using the below URL instead --<!-- --<!-- Insert link to challenge below -- <!-- Describe below when the issue happens and how to reproduce it --In the text "There are a number of predefined keywords available for popular options. For example, the default value is linear, which applies a constant animation speed throughout.", linear seems to be wrong. The default value seems to be ease (). Also changing the value to linear as per exercise does change the animation timing. <!-- Describe your workspace in which you are having issues--Google Chrome Version 64.0.3282.140 (Official Build) (64-bit), Windows 10 I can pick it up and submit a pull request, as it seems pretty easy in terms of first bug i.e just a typo.
thanks for reporting. Yes please go ahead.

"title": "Change Animation Timing with Keywords", "description": [ "In CSS animations, the animation-timing-function property controls how quickly an animated element changes over the duration of the animation. If the animation is a car moving from point A to point B in a given time (your animation-duration), the animation-timing-function says how the car accelerates and decelerates over the course of the drive.",  "There are a number of predefined keywords available for popular options. For example, the default value is linear, which applies a constant animation speed throughout. Other options include ease-out, which is quick in the beginning then slows down, or ease-in, which is slow in the beginning, then speeds up at the end.",   "There are a number of predefined keywords available for popular options. For example, the default value is ease, which starts slow, speeds up in the middle, and then slows down again in the end. Other options include ease-out, which is quick in the beginning then slows down, ease-in, which is slow in the beginning, then speeds up at the end, or linear, which applies a constant animation speed throughout.",  "
", "For the elements with id of ball1 and ball2, add an animation-timing-function property to each, and set #ball1 to linear, and #ball2 to ease-out. Notice the difference between how the elements move during the animation but end together, since they share the same animation-duration of 2 seconds." ],


Question: <!-- freeCodeCamp Issue Template --<!-- Please provide as much detail as possible for us to fix your issue --<!-- Remove any heading sections you did not fill out --<!-- NOTE: If your issue is CodePen Project / Test Suite related, please open it using the below URL instead --<!-- --<!-- Insert link to challenge below -- <!-- Describe below when the issue happens and how to reproduce it --Just an error in the lesson. I don't want to sound arrogant - I had to read up on flexboxes when I used the non-beta version. The following block of text comprises the challenge instructions: Add the CSS property flex to both #box-1 and #box-2. Give #box-1 the values so its flex-grow is 2, its flex-shrink is 2, and its flex-basis is 150px. Give #box-2 the values so its flex-grow is 1, its flex-shrink is 1, and its flex-basis is 150px. Followed by this explanation of behavior: These values will cause #box-1 to be twice the size of #box-2 when the container is greater than 300px and half the size of #box-2 when the container is less than 300px. 300px is the combined size of the flex-basis values of the two boxes. I believe that what will actually happen is that the extra pixels will be distributed in a 2:1 ratio when the container is greater than 300px, and that when the container is smaller than 300px, the pixel deficit (number of pixels by which the container had to be reduced from the basis) will be distributed in a 2:1 ratio when the container is less than 300px. Tricky to explain succinctly. I offer the following replacement text: These values will cause #box-1 to grow to fill the extra space at twice the rate of #box-2 when the container is greater than 300px and shrink at twice the rate of #box-2 when the container is less than 300px. 300px is the combined size of the flex-basis values of the two boxes. <!-- Describe your workspace in which you are having issues--Browser Name, Version: Firefox 58.0.2 Operating System: Windows 8.1 64-bit Mobile, Desktop, or Tablet: Desktop <!-- If relevant, paste all of your challenge code in here --<!-- Add a screenshot of your issue --

"The default property settings are flex: 0 1 auto;.", "
", "Add the CSS property flex to both #box-1 and #box-2. Give #box-1 the values so its flex-grow is 2, its flex-shrink is 2, and its flex-basis is 150px. Give #box-2 the values so its flex-grow is 1, its flex-shrink is 1, and its flex-basis is 150px.",  "These values will cause #box-1 to be twice the size of #box-2 when the container is greater than 300px and half the size of #box-2 when the container is less than 300px. 300px is the combined size of the flex-basis values of the two boxes."   "These values will cause #box-1 to grow to fill the extra space at twice the rate of #box-2 when the container is greater than 300px and shrink at twice the rate of #box-2 when the container is less than 300px. 300px is the combined size of the flex-basis values of the two boxes."  ], "challengeSeed": [ "


Question: [Beta] CSS Grid: Align an Item Horizontally using justify-self The challenge description has a typo, it says instead of . !

"id": "5a90374338fddaf9a66b5d3a", "title": "Align an Item Horizontally using justify-self", "description": [  "In CSS Grid, the content of each item is located in a box which is referred to as a <dfn>cell</dfn>. You can align the content's position within its cell horizontally using the justify-self property on a grid item. By default, this property has a value of stetch, which will make the content fill the whole width of the cell. This CSS Grid property accepts other values as well:",   "In CSS Grid, the content of each item is located in a box which is referred to as a <dfn>cell</dfn>. You can align the content's position within its cell horizontally using the justify-self property on a grid item. By default, this property has a value of stretch, which will make the content fill the whole width of the cell. This CSS Grid property accepts other values as well:",  "start: aligns the content at the left of the cell,", "center: aligns the content in the center of the cell,", "end: aligns the content at the right of the cell.",


Question: The lesson misses an expected 'new tab' after the 5 social media sites. i.e.: The lesson should say the expected output is: instead of: Importantly the code runs as written, and produces the correct expected output. Browser Name, Version: Firefox 59.0.1 Operating System: Win 8.1, 64-bit Mobile, Desktop, or Tablet: Desktop The lesson says to run the code, not edit it, but the relevant piece of provided code is reproduced here: ! !

"A Window object is made up of tabs, and you usually have more than one Window open. The titles of each open site in each Window object is held in an array. After working in the browser (opening new tabs, merging windows, and closing tabs), you want to print the tabs that are still open. Closed tabs are removed from the array and new tabs (for simplicity) get added to the end of it.", "The code editor shows an implementation of this functionality with functions for tabOpen(), tabClose(), and join(). The array tabs is part of the Window object that stores the name of the open pages.", "
Instructions
",  "Run the code in the editor. It's using a method that has side effects in the program, causing incorrect output. The final list of open tabs should be ['FB', 'Gitter', 'Reddit', 'Twitter', 'Medium', 'Netflix', 'YouTube', 'Vine', 'GMail', 'Work mail', 'Docs', 'freeCodeCamp', 'new tab'] but the output will be slightly different.",   "Run the code in the editor. It's using a method that has side effects in the program, causing incorrect output. The final list of open tabs should be ['FB', 'Gitter', 'Reddit', 'Twitter', 'Medium', 'new tab', 'Netflix', 'YouTube', 'Vine', 'GMail', 'Work mail', 'Docs', 'freeCodeCamp', 'new tab'] but the output will be slightly different.",  "Work through the code and see if you can figure out the problem, then advance to the next challenge to learn more." ], "challengeSeed": [