Question: You should call the `.slice()` method on the `value` argument. ```js <del> assert.match(code, /consts+updates*=s*(?s*events*)?s*=>s*{s*consts+elements*=s*event.target;?s*consts+values*=s*element.value.replace(s*/s/gs*,s*('|"|`)1s*);?s*ifs*(s*(!value.includes(s*element.ids*)s*&&s*(?:values*[s*0s*]s*===s*('|"|`)=3|value.charAt(0)s*===s*('|"|`)=4|value.startsWith(('|"|`)=5))|(?:values*[s*0s*]s*===s*('|"|`)=6|value.charAt(0)s*===s*('|"|`)=7|value.startsWith(('|"|`)=8))s*||s*!value.includes(s*element.ids*))s*)s*{s*element.values*=s*evalFormula(s*value.slice(/); </del> <ins> assert.match(code, /consts+updates*=s*(?s*events*)?s*=>s*{s*consts+elements*=s*event.target;?s*consts+values*=s*element.value.replace(s*/s/gs*,s*('|"|`)1s*);?s*ifs*(s*(!value.includes(s*element.ids*)s*&&s*(?:values*[s*0s*]s*===s*('|"|`)=3|value.charAt(0)s*===s*('|"|`)=4|value.startsWith(('|"|`)=5))|(?:values*[s*0s*]s*===s*('|"|`)=6|value.charAt(0)s*===s*('|"|`)=7|value.startsWith(('|"|`)=8))s*||s*!value.includes(s*element.ids*))s*)s*{s*element.values*=s*evalFormula(s*value.(?:slice|substring)(/); </ins> ``` You should pass the number `1` as the argument to your `.slice()` call. ```js <del> assert.match(code, /consts+updates*=s*(?s*events*)?s*=>s*{s*consts+elements*=s*event.target;?s*consts+values*=s*element.value.replace(s*/s/gs*,s*('|"|`)1s*);?s*ifs*(s*(!value.includes(s*element.ids*)s*&&s*(?:values*[s*0s*]s*===s*('|"|`)=3|value.charAt(0)s*===s*('|"|`)=4|value.startsWith(('|"|`)=5))|(?:values*[s*0s*]s*===s*('|"|`)=6|value.charAt(0)s*===s*('|"|`)=7|value.startsWith(('|"|`)=8))s*||s*!value.includes(s*element.ids*))s*)s*{s*element.values*=s*evalFormula(s*value.slice(s*1s*)s*);?/); </del> <ins> assert.match(code, /consts+updates*=s*(?s*events*)?s*=>s*{s*consts+elements*=s*event.target;?s*consts+values*=s*element.value.replace(s*/s/gs*,s*('|"|`)1s*);?s*ifs*(s*(!value.includes(s*element.ids*)s*&&s*(?:values*[s*0s*]s*===s*('|"|`)=3|value.charAt(0)s*===s*('|"|`)=4|value.startsWith(('|"|`)=5))|(?:values*[s*0s*]s*===s*('|"|`)=6|value.charAt(0)s*===s*('|"|`)=7|value.startsWith(('|"|`)=8))s*||s*!value.includes(s*element.ids*))s*)s*{s*element.values*=s*evalFormula(s*value.(?:slice|substring)(s*1s*)s*);?/); </ins> ``` # --seed--

The expected solution for step 91 is the following However, the directions don't mention using the method Since the directions mention then a camper could write this and then be surprised to learn that the method is expected. we should update instructions here to let campers know that there is an expected solution. Or update the tests to allow for multiple valid solutions. Open to hearing thoughts see explanation above see explanation above No response Device: [e.g. iPhone 6, Laptop] OS: [e.g. iOS 14, Windows 10, Ubuntu 20.04] Browser: [e.g. Chrome, Safari] Version: [e.g. 22] No response
It would be interesting to see how campers can achieve the same result with both methods since they do the same job fairly, so I'm up for modifying the test to accept multiple valid solutions. As per the solutions it can accept, I looked up a few methods, and stuff like is now said to be 'legacy'... ? So if we do validate the option of modifying the tests, only and would be accepted?
We could use the event. That way it is only the value set on the element we care about. But I can't figure out how to do the assert inside a window load event (we have to wait for the DOM). I see the assert in the browser console but the test just passes anyway. I tried a few different things (try/catch, throwing, , promise delays and try/catch) but I can't get the test to fail properly. There is apparently something about how the tests run I don't understand.
Rather than that approach, we could mock the event. Or some such.
I think we should go with something like this
I am going to go ahead and open this up for contribution. So it looks like instead of updating the directions to expect one solution, we will just update the tests to accept multiple valid solutions. It looks like the conversation in this thread has focused on different approaches to update the tests but I think that we can leave that actual implementation up to the contributor.


Question: assert.match(getStandardDeviation.toString(), /standardDeviations*=s*Math.pow(/); ``` <del> Your `standardDeviation` variable should use the `variance` variable. ```js assert.match(getStandardDeviation.toString(), /standardDeviations*=s*Math.pow(s*variances*,/); ``` Your `standardDeviation` variable should use the `1/2` exponent. </del> <ins> Your `Math.pow()` function should have a base of `variance` and an exponent of `1/2`. </ins> ```js assert.match(getStandardDeviation.toString(), /standardDeviations*=s*Math.pow(s*variances*,s*1s*/s*2s*)/);

I struggled with the error message, see screenshot below. The error message asks challengers to use the variable, which I clearly did. So, it was not only unclear why the code didn't pass the test, but also misleading because the error message does not point to the real problem here: a second argument for (arg1, arg2) is missing. Since the instruction also doesn't provide a clear description of the syntax of (), I suggest that the syntax information of () be to the instruction. Albeit a minor issue, because anyone can look it up, I believe it would still make the instruction clearer. The error message should alert the challenger about a necessary second argument to pass in () if the variable is already passed in as the first argument. ! Device: Laptop OS: Windows 11 Browser: FireFox Version: 125.0.1 (64-bit) No response
For the new updated description, we could use this js (base, exponent) js const base = 4; const exponent = 0.5; // returns 2 (base, exponent); as for the hint text, it looks like the tests are broken up into two for In this case, I think it would be better to just have one test like this js (getStandardDeviation.toString(), /standardDeviations=sMath.pow(svariances,s1s/s2s)/);
Why step-51 in codebase is different also there is 58 steps showing when im running freecodecamp locally.But here there is only 55 steps.
The project is in beta which means the steps will be changing. So a recent update was made to the stats calculator project which means the step numbers were updated.


Question: script(type='text/javascript', src='/js/lib/jailed/jailed.js') .row(ng-controller="pairedWithController") <del> .col-xs-12.col-sm-12.col-md-4.col-lg-3 </del> <ins> .col-md-4.col-lg-3 </ins> .scroll-locker(id = "scroll-locker") .innerMarginFix(style=' width: 99%') #testCreatePanel.well

A camper relayed this to me: There is some problem with the first challenge ending button on android with firefox browser. And in this moment I tried in chrome too, the issue is the same, the button is not active after the challenge is done. Xperia Z1 compact, android: 5.0.2, firefox: 39.0 Chrome: 43.0.2357.93
This is an issue whenever the screen size is small. It will also happen on a desktop if you resize the window to half screen or less.


Question: .col-xs-12.col-md-1 label.control-label.control-label-story-submission(for='name') Link .col-xs-12.col-md-11 <del> input#story-url.form-control(placeholder='Paste your link here', name='Link') </del> <ins> input#story-url.form-control(name='Link', ng-model='submitStory.url', disabled="disabled", ng-init='submitStory.url="#{storyURL}"') </ins> .form-group .col-xs-12.col-md-1 label.control-label.control-label-story-submission(for='name') Title

I tried submitting a URL to camper news and somehow it got as a blank URL. The link I tried to add was but it just links to http:// I also can't edit or delete it, so I can't try fixing it.
Yup, I confirmed this with that URL. Did you make a change to disallow blank URLs that might affect this?
Nope. Didn't realize this was possible.
I see the mistake I made, I clicked "Submit" then typed in the url and hit "Submit" again. Then on the next page the title is auto-filled out but the URL is not copied over so I hit submit again, which let it be a blank URL. URL should copy from previous page into the new textbox.
I think I may have done the same thing.
For some reason the url value is not copied from the page URL. This requires some adjustments in the jade template. I will fix that.


Question: padding: 25px; text-align: justify; justify-content: center; <ins> background-color: var(--primary-background); </ins> } .landing-top, .as-seen-in,

Looking forward for reporting a security issue: Please report security issues by sending an email to instead of raising a GitHub issue. Describe the bug The heights of the SVG files on the landing page vary, which causes the certification chart to look inconsistent. To Reproduce <img width="946" alt="zoomfloatingvideowindowandLearntoCode—ForFree—CodingCoursesforBusyPeople" src="https://user-"Desktop (please complete the following information): OS: Mac Browser: Chrome Version: Version 88.0.4324.96 (Official Build) (x86_64)
Hi Quincy, I let know about this already.
in min height, so should take care of it.


Question: import PropTypes from 'prop-types'; import { Grid, Col, Row } from '@freecodecamp/react-bootstrap'; import { createSelector } from 'reselect'; <del> import { reduxForm } from 'redux-form'; </del> <ins> import { connect } from 'react-redux'; </ins> import { graphql } from 'gatsby'; <del> import normalizeUrl from 'normalize-url'; </del> import { executeChallenge,

Describe the bug Submitting the solution link as "" produces an error. Submitting "" does not. Whenever we submit a solution link "" it is appended with "/api/" so resultant solution gives "Not Found/Timeout error" and the same link submitted without "/" like "" gives solution as accepted. To Reproduce Steps to reproduce the behavior: to on 'solution input box' "https://freecodecamp-" solution gets accepted. "https://freecodecamp-" error Expected behavior This should be tackled as Chrome appends "/" by default to any domain URL you copy, so people who would copy URL from search bars will get URLs appended with "/" hence producing wrong results. This file shows the testString is directly appended with "/api" without checking if the input URL contains "/" at the end or not. Screenshots ! Desktop (please complete the following information): OS: Ubuntu 18 Browser: Google Chrome Version 73.0.3683.75
I am not having this problem - my project will pass the tests with or without the trailing https://fcc-manage-npm- and https://fcc-manage-npm- both pass for me in chrome Can you share a share a screen shot of the error?
Updated
hmm, it's strange that my project will give a good response when that string is appended but not yours https://fcc-manage-npm- - package as response https://freecodecamp- - not found as response not sure what is causing this - the only difference seems to be that I'm using glitch and you're using heroku in fact mine will work like this... https://fcc-manage-npm- so maybe how the two websites process a route or something? can they do that? glitch strips out the extra or something? weird Either way - I think a solution like you suggested would probably work - check if the submitted URL ends in a and remove it if it's there. This same problem probably occurs throughout the whole backend area all over the place.
Weird, would u check with an alternative hosting if the problem persists? If the problem persists the last solution would be stripping the las from input url
Did you try this Above is the actual link processed in the test with an appended , It gives a response with the same as it is shown in the screenshot I posted. So I guess the problem is with the routing of Heroku.


Question: stroke: var(--color-quaternary); } <del> .map-title svg:first-child { transform: rotate(90deg); } </del> .open > .map-title svg:first-child { <del> transform: rotate(-90deg); </del> <ins> transform: rotate(90deg); </ins> } .map-challenges-ul {

Describe the bug The arrow to the left of Expand courses/Collapse courses buttons points down when the list is in collapsed state and points up when the list is in expanded state. This is opposed to standard behavior of similar features in other apps. To Reproduce Steps to reproduce the behavior: to at the arrow to the left of Collapse courses. It points up while the list is in expanded state. on the above mentioned button to collapse the list. the list is collapsed state but the arrow points down. Expected behavior By convention, the arrow should point to the right or up when the list is in collapsed state and point down when the list is in expanded state. Screenshots ! ! Desktop: OS: Ubuntu 20.04.2 LTS Browser: Opera Version: 76 Additional context Also tested this on the same OS with Firefox 88.0.1 with the same result.
I agree, we should have the arrow pointing to the left when the courses are collapsed and down when they are expanded.
Hi Ahmad, I think you mean we should have the arrow pointing to the right when the courses are collapsed, right?
Hi. I'm new to contributing to FreecodeCamp, and just read the guidelines. With your permission, I will fork the project and try to solve the issue with a pull request.


Question: isSignedInSelector, userSelector, challengeTestsSelector, <ins> isChallengeCompletedSelector, </ins> ( canFocus: boolean, { challengeType }: { challengeType: number },

I am learning from the RWD course, and I wanted to revise what I had done previously. I went to previous steps, but I found that the steps are shown incomplete when I open them. It tells you to do the step again. This doesn't make sense because you have a button at the top if you do want to do the step again. Completed code should be shown in completed challenge's code editor along with an indicator like ! !
It would be relatively easy to show the solution to a step, and the "Step completed" text, (rather than storing the user's code) if a user has already submitted that step. If other maintainers are in favour of this change, I'd be happy to open this up for PRs.
My concern with that approach would be it completely destroys the UX if someone wants to go through a practise project again.
I propose to add a button under the summary of each project for this issue.
I'm not keen on adding a button to do that, given the potential for frustration if someone triggers that accidentally.
I think I'd be in favour of the existing flow, presonally.
At a minimum, we could probably add the checkmark next to "Step 22" like we do for all the other challenges after it has been completed. That seems to be missing here. !
That's a good idea, IMO.
I think just adding that check mark is probably the way to go then. It keeps it consistent with everything else. I'm going to open it up for contributions. If anyone still has reservations, be sure to bring them up.
May I suggest in addition to indicating completed challenges in the challenge itself, to do that in the list of steps. Here is a crude representation of what I have in mind: <p align="center"<img src="https://user-" width=500 align="centre"/</p
I believe it already does that. Here's a screenshot of what the challenge looks like for me, after I've completed it (the steps are highlighted in blue instead of white). !
Also, I would like to work on this issue, and I agree that adding a checkmark next to the step would be a good fix, but I noticed that the RWD courses don't have a step number or title at the top like the other courses do.

For other courses, the checkmark for completion is displayed next to the name of the challenge, like you can see in the first screenshot (of the JS Algorithms & Data Structures courses). However, for the RWD course, there is nothing in this location, as you can see in the second screenshot. ! ! How should we go about adding a checkmark to the RWD course? Should we just put it next to where it says on the screenshot (inside the instructions block)? Or should we move the step number to the same place as where the challenge names are for the other courses and put the checkmark there, in order to be consistent with the other courses?
Thanks I could not log in since yesterday and this is probably the reason I don't see indication for completed challenges in the list of steps.


Question: "Choose Node.js in the selection area below the name field.", "Click the Create button. Then click into your new workspace.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.",  "Install how-to-npm with this command: npm install -g git-it",   "Install git-it with this command: npm install -g git-it",  "Now start the tutorial by running git-it.", "Note that you can resize the c9.io's windows by dragging their borders.", "Make sure that you are always in your project's "workspace" directory. You can always navigate back to this directory by running this command: cd ~/workspace.",

Challenge has an issue. Please describe how to reproduce it, and include links to screenshots if possible. step 9 says Install how-to-npm with this command: npm install -g git-it. it looks like we are installing something called git-it instead of how-to-npm. As before, if I am incorrect please disregard this issue and just close. Just trying to do what I can for you guys. Love this site!
Hey thanks for posting an issue! It looks like you are right! I believe the step should say
That's what it looked like to me to. It seems that the command was copied from the next page when you do actually have to install how-to-npm. Btw, now that I have done a lot of the free code camp challenges, how would I go about starting to contribute to the project? I would love to help out with the code or issues or anything really.
Awesome! Just jump right in :smile:! Maybe start with putting in a pull request for this issue? Feel free to ping me in gitter if you want to chat about this further (so as to not pollute this issue with conversation)
Dear camper, your issue is related to: Please see .
I checked when I was creating the pull request to fix this issue and it seems that the how-to-npm part of it is already fixed.


Question: ); ``` <del> `knapsackUnbounded([{ name:"panacea", value:3000, weight:0.3, volume:0.025 }, { name:"ichor", value:1800, weight:0.2, volume:0.015 }, { name:"gold", value:2500, weight:2, volume:0.002 }], 35, 0.35)` should return `75300`. </del> <ins> `knapsackUnbounded([{ name:"panacea", value:3000, weight:0.3, volume:0.025 }, { name:"ichor", value:1800, weight:0.2, volume:0.015 }, { name:"gold", value:2500, weight:2, volume:0.002 }], 35, 0.35)` should return `75900`. </ins> ```js assert.equal(

Describe your problem and how to reproduce it: One of the tests in this challenge has wrong result, both in test code and description. It says: This isn't correct. For example: knapsack having 11 panacea, 3 ichor and 15 gold has value , while being within the weight and value constrains: This seems to be case of precision issue. Multiplication input item weights, volumes and max values for those parameters, to start operations without decimals, makes result as it should be, also for the problematic test. Add a Link to the page with the problem:
Yes, it seems you are right - do you want to propose a solution?
Yes, sorry. The least invasive way to correct the seems to be to multiply in function, by the same factor, initial items weights, volumes, and in the first recursive call multiply and . This is enough to make calculations on integers and get correct answers. I don't know if just such change would be okay or if more desirable would be more elaborate rewrite of solution. Or at least changing to / and renaming some variables to better names.
would you be willing to open a PR for it so that the challenge can be changed? you can also contribute to the guide by opening a topic in the #subforum category in the forum
Definitely yes, although I need advice which approach here would be preferred. Considering that the sample solution in code is just used for internal testing and just small change to it can fix the issue.


Question: # --description-- <del> Promises are most useful when you have a process that takes an unknown amount of time in your code (i.e. something asynchronous), often a server request. When you make a server request it takes some amount of time, and after it completes you usually want to do something with the response from the server. This can be achieved by using the `then` method. The `then` method is executed immediately after your promise is fulfilled with `resolve`. Here’s an example: </del> <ins> Promises are most useful when you have a process that takes an unknown amount of time in your code (i.e. something asynchronous), often a server request. When you make a server request it takes some amount of time, and after it completes you usually want to do something with the response from the server. This can be achieved by using the `then` method. ```js Promise.prototype.then(onFulfilled, onRejected) ``` The `then` method schedules callback functions for the eventual completion of a Promise - either fulfillment or rejection. One of the `onFulfilled` and `onRejected` handlers will be executed to handle the current promise's fulfillment or rejection. When the promise is fulfilled with `resolve` the `onFulfilled` handler is called. </ins> ```js myPromise.then(result => {

I realize it is probably just an oversimplification but the part that may need correction is. I think this should say the handler is called when the promise becomes fulfilled. Or something to that effect. More precise verbiage. No response Device: [e.g. iPhone 6, Laptop] OS: [e.g. iOS 14, Windows 10, Ubuntu 20.04] Browser: [e.g. Chrome, Safari] Version: [e.g. 22] Forum: Specs/MDN:
I'd say something like: I think mentioning the might get confusing.
The thing is, it takes two callbacks. An and the optional . So we may have to make the distinction. The name is just the spec definition. It might be less confusing if we show the signature. I pretty much just stole the text from MDN. I think we are far enough into the curriculum that a little technical lingo isn't the worst. It might be a bit verbose although it explains it better if you ask me.
I could go with that, yeah.


Question:
"Bonus User Story: As a user, I navigate to different sections of the webpage by clicking buttons in the navigation.", "Don't worry if you don't have anything to showcase on your portfolio yet - you will build several apps on the next few CodePen challenges, and can come back and update your portfolio later.", "There are many great portfolio templates out there, but for this challenge, you'll need to build a portfolio page yourself. Using Bootstrap will make this much easier for you.",  "Note that CodePen.io overrides the Window.open() function, so if you want to open windows using jquery, you will need to target invisible anchor elements like this one: <a target='_blank'>.",   "Note that CodePen.io overrides the Window.open() function, so if you want to open windows using jQuery, you will need to target invisible anchor elements like this one: <a target='_blank'>.",  "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. If you pair programmed, you should also include the Free Code Camp username of your pair.", "If you'd like immediate feedback on your project from fellow campers, click this button and paste in a link to your CodePen project.

Click here then add your link to your tweet's text"

Challenge has an issue. User Agent is: <codeMozilla/5.0 (Macintosh; Intel Mac OS X ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36</code. Please describe how to reproduce this issue, and include links to screenshots if possible. Step 13 should have the "Q" capitalized in jQuery. !


Question: ## --text-- <del> Which of the following options can be used set a breakpoint in Visual Studio Code? </del> <ins> Which of the following options can be used to set a breakpoint in Visual Studio Code? </ins> ## --answers--

Hello, On the challenge project "Debug a C# Console Application Using Visual Studio Code, the question is: The word is missing between and . N/A I believe the question should be: No response Device: all OS: all Browser: all Version: all No response
Thanks for opening this issue. This looks something that can be fixed by "first time" code contributors to this repository. Here are the files that you should be looking at to work on a fix: List of files: Please make sure you read , we prioritize contributors following the instructions in our guides. Join us in or if you need help contributing, our moderators will guide you through this. Sometimes we may get more than one pull requests. We typically accept the most quality contribution followed by the one that is made first. Happy contributing.


Question: const origin = returnUrl.origin; // if this is not one of the client languages, validation will convert // this to '' before it is used. <del> const pathPrefix = returnUrl.pathname.split('/')[0]; </del> <ins> const pathPrefix = returnUrl.pathname.split('/')[1]; </ins> return _normalizeParams({ returnTo: returnUrl.href, origin, pathPrefix }); }

If I am signed in as a user while on and log out, I am redirected to the english home page. redirects to the chinese page.
wrong endpoint in server code? Thats what I would assume, but am not sure how to locate where the correct endpoint would be placed in the code.
Here is the endpoint: and most likely the issue is with the redirect "predictor" utility: However we would want to confirm the cause before we open this up for contributions.
yes, that's the issue. To fix it we can grab the from and combine that with to get the desired redirect.
Should that be done in the getRedirectParams function or should the path be put together from the data set returned by getRedirectParams in
You need to construct the URL from the values you get from the as a consumer of the function and not change its existing behavior. In simple terms the change is required within the endpoint handler.
That makes sense.
I got the codebase installed locally is there a way to run just
Not sure what you mean by running only one file? The API server is an express based application (Loopback 3). You need to start up at least the api-server app. If you want to do that, you should be able to do that by navigating to directory and using the run-script commands in its
I'm trying to figure out what gets passed in pathPrefix, from getRedirectParams, when one signs out from the Spanish page. But when running the site locally, switching to Espanol leads to a "This site can't be reached" error. Just for clarity's sake, I realize now that is not meant to be run alone and I am using the "npm run develop" command to try and recreate this bug locally. Is this a bad approach?
Ah - right. Sorry about sending you on a goose-chase. When you build locally, we do not have a way yet to develop both and at the same time alongside the API app. I am going to untag this from help-wanted and assign this instead. Oliver, you should be able to test / reproduce and recommend a fix on our staging instance - not sure because this may be needing access for "close to prod" type setup.
I was just in the process of going through the steps, when you commented Mrugesh!

I'll leave them here for the curious: Unfortunately testing locally is quite a pain, because we use since is entirely separate from . It's a bit of a slow, memory intensive process, but you can do this: in your .env file Then you can go to


Question: "Here's the anatomy of a CSS class:", "", "You can see that we've created a CSS class called "blue-text" within the <style> tag.",  "You can apply a class to an HTML element like this: <h2 class="blue-text">CatPhotoApp<h2>",   "You can apply a class to an HTML element like this: <h2 class="blue-text">CatPhotoApp</h2>",  "Note that in your CSS style element, classes should start with a period. In your HTML elements' class declarations, classes shouldn't start with a period.", "Instead of creating a new Style tag, try removing the h2 style declaration from the existing style element, and replace it with the class declaration for ".red-text"." ],

Challenge has an issue. Please describe how to reproduce it, and include links to screen shots if possible. What I see: You can apply a class to an HTML element like this: <h2 class="blue-text"CatPhotoApp<h2What I expected to see: You can apply a class to an HTML element like this: <h2 class="blue-text"CatPhotoApp</h2
Markdown's getting in the way, see screenshot. !


Question: ```yml tests: - text: Your regex myRegex should return true for the string Franklin D. Roosevelt  testString: assert(myRegex.test('Franklin D. Roosevelt'));   testString: myRegex.lastIndex = 0; assert(myRegex.test('Franklin D. Roosevelt'));  - text: Your regex myRegex should return true for the string Eleanor Roosevelt  testString: assert(myRegex.test('Eleanor Roosevelt'));   testString: myRegex.lastIndex = 0; assert(myRegex.test('Eleanor Roosevelt'));  - text: Your regex myRegex should return false for the string Franklin Rosevelt  testString: assert(!myRegex.test('Franklin Rosevelt'));   testString: myRegex.lastIndex = 0; assert(!myRegex.test('Franklin Rosevelt'));  - text: You should use .test() to test the regex. testString: assert(code.match(/myRegex.test(s*myStrings*)/)); - text: Your result should return true.

Link to the challenge: Adding a global flag to the regular expression has the test fail for the first two assertions. This can be confusing considering also how the challenge is introduced, since the code snippet explaining the concept shows the global flag being used. Update the code snippet introducing the challenge: However, since the global flag should not affect the outcome of the test (to what I can ascertain), a better suggestion would be to update the test itself, to account for its presence.
Thanks for the detailed report! I think it would make sense to do both. The isn't necessary, so it should not be there and it's not wrong, so we should not reject it.
It might be better to remove the global flag from the challenge example unless we also explain how and give some info on . I think in order to really know if we should fail the test when using the global flag we would have to consider how the code is supposed to run. Are we "emulating" that each is being run in isolation or are they executed one after the other.
Agreed. This challenge focuses on teaching the user about groups - the use of over seem incidental to me, as does the presence of the flag. Also, the challenge asks you to make sure so it's only asking you to use against once.
But it is when the test is called multiple times on the same regex. Isn't this kind of the same as when users use global variables which end up causing the user's code to fail for all tests except the first because the the global variable does not get reset each time?
I'm dumb - I'd completely failed to realise it's being run twice, once in the user's code and again in the tests. You're quite right and PR fixes that.
Challenge: Fails with: Passes with:
The example/seed code moves to 14. I guess one easy option would be to change the example string to something like "Fun with regular expressions!", that should let all the tests pass and accept the global flag. The problem is if the camper uses a different string to test the regex it may fail. So we might just have to reset before running the tests.
I assumed it would be the exact same fix as what Tom did:
yep, that's what I concluded. I think we can apply Tom's fix in , rather than modifying the tests. Either works, but that should be more concise.


Question: "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", "Click the "Start Editing" button.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.",  "Run this command: npm install how-to-npm -g", "Now start this tutorial by running npm install how-to-npm@2.0.0.",   "Install how-to-npm with this command: npm install how-to-npm -g", "Now start the tutorial by running how-to-npm.",  "Note that you can resize the c9.io's windows by dragging their borders.", "Make sure that you are always in your project's "workspace" directory. You can always navigate back to this directory by running this command: cd ~/workspace.", "Note that you can only add dist tags to the specific version numbers published in steps 8 and 10. If you receive a 403 or 404 error, run how-to-npm and try again.",

One of the instructions has the following: start this tutorial by running npm install how-to-npm it says to run the npm tutorial by typing 'npm install how-to-npm but you are actually supposed to just type 'how-to-npm'


Question: ```yml tests: - text: Your code should add one <code>s</code> tag to the markup. <del> testString: assert($('s').length == 1, 'Your code should add one <code>s</code> tag to the markup.'); </del> <ins> testString: assert($('s').length == 1); </ins> - text: A <code>s</code> tag should wrap around the Google text in the <code>h4</code> tag. It should not contain the word Alphabet. <del> testString: assert($('s').text().match(/Google/gi) && !$('s').text().match(/Alphabet/gi), 'A <code>s</code> tag should wrap around the Google text in the <code>h4</code> tag. It should not contain the word Alphabet.'); </del> <ins> testString: assert($('h4 > s').text().match(/Google/gi) && !$('h4 > s').text().match(/Alphabet/gi)); </ins> - text: Include the word Alphabet in the <code>h4</code> tag, without strikethrough formatting. <del> testString: assert($('h4').html().match(/Alphabet/gi), 'Include the word Alphabet in the <code>h4</code> tag, without strikethrough formatting.'); </del> <ins> testString: assert($('h4').html().match(/Alphabet/gi)); </ins> ```

<!-- NOTE: If you're reporting a security issue, don't create a GitHub issue. Instead, email We will look into it immediately. --Describe your problem and how to reproduce it: The test case is passed though I have not the s tag around the word Google in the h4 tag, it is counting the s tag around Google word in the p tag as valid. Add a Link to the page with the problem: Tell us about your browser and operating system: Browser Name: Google Chrome Browser Version: Version 74.0.3729.131 (Official Build) (64-bit) Operating System: Windows 10 64-bit If possible, add a screenshot here (you can drag and drop, png, jpg, gif, etc. in this box): !
Thank you for reporting this bug. I can confirm it needed to be fixed and I have created a pull request () which should resolve the issue.


Question: - text: You should remove the ES5 assignment syntax. testString: assert(!code.match(/highToday = HIGH_TEMPERATURES.today/g) && !code.match(/highTomorrow = HIGH_TEMPERATURES.tomorrow/g)) - text: You should use destructuring to create the highToday variable.  testString: assert(code.match(/(var|const|let)s*{s*(today:s*highToday[^}]*|[^,]*,s*todays*:s*highTodays*)}s*=s*HIGH_TEMPERATURES(;|s+|//)/g));   testString: assert(code.match(/(var|const|let)s*{s*(todays*:s*highToday[^}]*|[^,]*,s*todays*:s*highTodays*)}s*=s*HIGH_TEMPERATURES(;|s+|//)/g));  - text: You should use destructuring to create the highTomorrow variable.  testString: assert(code.match(/(var|const|let)s*{s*(tomorrow:s*highTomorrow[^}]*|[^,]*,s*tomorrows*:s*highTomorrows*)}s*=s*HIGH_TEMPERATURES(;|s+|//)/g));   testString: assert(code.match(/(var|const|let)s*{s*(tomorrows*:s*highTomorrow[^}]*|[^,]*,s*tomorrows*:s*highTomorrows*)}s*=s*HIGH_TEMPERATURES(;|s+|//)/g));  ```

In this challenge ,if i use space between , the following ouptut genrates. (code) (output) However,if i remove the space , there is no error in the console. So i crosscheck this problem in my local system and found that space does't generate the error.
. It should allow a space there with the following... assert((/(var//)/g)); The code that needs to be is highlighted.


Question: ], "tests": [ "assert.strictEqual(convert('Dolce & Gabbana'), 'Dolce & Gabbana', 'should escape characters');", <ins> "assert.strictEqual(convert('Hamburgers < Pizza < Tacos'), 'Hamburgers < Pizza < Tacos', 'should escape characters');", "assert.strictEqual(convert('Sixty > twelve'), 'Sixty > twelve', 'should escape characters');", "assert.strictEqual(convert('Stuff in "quotation marks"'), 'Stuff in "quotation marks"', 'should escape characters');", "assert.strictEqual(convert("Shindler's List"), 'Shindler's List', 'should escape characters');", </ins> "assert.strictEqual(convert('abc'), 'abc', 'should handle strings with nothing to escape');" ], "MDNlinks": [

<!-- NOTE: If you're reporting a security issue, don't create a GitHub issue. Instead, email We will look into it immediately. --Describe your problem and how to reproduce it: The sample calculator for does not allow integer 0 to be the first operand. To reproduce, go to the calculator link, try pressing 0, followed by an operation. Or just start using operations starting from the default screen, which shows a 0. You will see the operation appear on its own without a first operand. Add a Link to the page with the problem: Tell us about your browser and operating system: Browser Name: Firefox Browser Version: 67.0.4 (64 bit) Operating System: MacOS Mojave If possible, add a screenshot here (you can drag and drop, png, jpg, gif, etc. in this box): ! This is the result of hitting the 0 pad followed by the X pad followed by the 9 pad 3 times. You can continue entering other operations, and numbers, but the = pad will not do anything at this point. Must hit AC and start over.
is there any update on this? if not i whould like to try to fix this since robert didn't update this :)
Hi thanks for drawing my attention to this. can you please check the linked PR and confirm the action item on this?
/cc
Hi sorry for the late response and thank you both for your patience and for reporting this. I tested the changes in and it seems to solve this issue. I'll merge that once the tests pass and update the code on CodePen.

Challenge has an issue. This bonfire needs more tests. It's too easy to get them passed. Now it checks only &. I would add tests for <, , ", '.
Agreed. I can add more tests to this one. However, we also need to properly display the test cases so that the user understands what the test is asking. Currently, the test case reads like this: whereas what we need is something like this: ! Anyone have ideas on how to accomplish this?
This was solved in a recent commit. This issue should be closed.
Thank you for your help! We've now fixed this in production as well!

Challenge has an issue. Please describe how to reproduce it, and include links to screen shots if possible. This bonfire seems to be missing assertion tests for all the different test cases outlined in the instructions. It currently is only testing the case of the ampersand (&) and is leaving out the <, , ', and " cases. Suggest adding another assertion or assertions to test the rest of these cases.
Just for logging purposes, this was discussed in . I'm currently not at a computer, but if someone wants to assign me, I could fix this as soon as I can, which /should/ be tonight.


Question: The code editor has most of the `MyToDoList` component set up. Some of this code should look familiar if you completed the controlled form challenge. You'll notice a `textarea` and a `button`, along with a couple of methods that track their states, but nothing is rendered to the page yet. <del> Inside the `constructor`, create a `this.state` object and define two states: `userInput` should be initialized as an empty string, and `toDoList` should be initialized as an empty array. Next, delete the comment in the `render()` method next to the `items` variable. In its place, map over the `toDoList` array stored in the component's internal state and dynamically render a `li` for each item. Try entering the string `eat, code, sleep, repeat` into the `textarea`, then click the button and see what happens. </del> <ins> Inside the `constructor`, create a `this.state` object and define two states: `userInput` should be initialized as an empty string, and `toDoList` should be initialized as an empty array. Next, delete the `null` value in the `render()` method next to the `items` variable. In its place, map over the `toDoList` array stored in the component's internal state and dynamically render a `li` for each item. Try entering the string `eat, code, sleep, repeat` into the `textarea`, then click the button and see what happens. </ins> **Note:** You may know that all sibling child elements created by a mapping operation like this do need to be supplied with a unique `key` attribute. Don't worry, this is the topic of the next challenge.

Instructions say: "Next, delete the comment in the method..." instead of: "Next, delete the value in the method..."


Question: "nav": { "forum": "https://forum.freecodecamp.org/c/portugues/", "news": "https://freecodecamp.org/portuguese/news/" <ins> }, "help": { "HTML-CSS": "Portugues/HTML-CSS", "JavaScript": "Portugues/JavaScript", "Python": "Portugues/Python", "Relational Databases": "Portugues/Relational Databases" </ins> } }

As we are now rolling out the curriculum in Chinese and Spanish, we need to think about how to get the button to work for the two languages. Currently, when the button is clicked, the user is taken to the English forum () where a pre-populated topic message (in English) is displayed for the user to fill in with relevant information. These topics are dynamically generated before the post is created on the forum, so we will just need to make use of the file for the content of the topics. Also, we will need to route to the correct forum url for Chinese and target the correct subforum for Spanish.
So the Chinese links work correctly, because the Chinese forum is hosted at a different domain (which is passed in to the environment variable). For Espanol, as it currently stands the category comes from the value returned by the .


Question: You should use `Math.floor()` to round the result down to the nearest whole number. ```js <del> assert.match(code, /consts+randomDices*=s*Math.floors*(s*Math.randoms*(s*)s**s*6s*)s*/); </del> <ins> assert.match(code, /consts+randomDices*=s*Math.floors*((?s*Math.randoms*(s*)s**s*6s*)s*/); </ins> ``` You should add `1` to the end result of your `randomDice` variable. ```js <del> assert.match(code, /consts+randomDices*=s*Math.floors*(s*Math.randoms*(s*)s**s*6s*)s*+s*1s*/); </del> <ins> assert.match(code, /consts+randomDices*=s*Math.floors*((?s*Math.randoms*(s*)s**s*6s*)s*+s*1)?s*/); </ins> ``` # --seed--

Valid code will fail and give the wrong assert message about using which is confusing. Expected If you search for articles on you will find many of the examples has the min value inside the method, this includes MDN, fCC news articles, etc. The min value should be allowed inside the floor method. Update the regex that checks for to not depend on the rest of the code structure to avoid false positives. Tests: Valid code should pass and not throw unrelated assert messages. No response Device: [e.g. iPhone 6, Laptop] OS: [e.g. iOS 14, Windows 10, Ubuntu 20.04] Browser: [e.g. Chrome, Safari] Version: [e.g. 22] Forum:


Question: - text: Your incrementer function should take an argument. testString: assert(incrementer.length === 1); - text: Your incrementer function should return a value that is one larger than the fixedValue value.  testString: const newValue = incrementer(fixedValue); assert(newValue === 5);   testString: const __newValue = incrementer(fixedValue); assert(__newValue === 5);  ```

Describe your problem and how to reproduce it: The following code does not pass, because the test has a variable name which is the same: Solution: Change variable name of from: to To make it less likely someone uses the same variable name.
Hey! I am a beginner in open source programming. Can I take this issue up? Thanks.
, Yes you may have a go at this. To begin, you should go through the , if you have not already. Some things to highlight: We do not typically assign issues If an issue has help wanted or first timers only labels, then they are open for contribution The first PR which closes the issue will be accepted If you have any questions about contributing in general, or setting up fCC locally, the , and the are excellent places to start.


Question: You can respond to requests with a file using the `res.sendFile(path)` method. You can put it inside the `app.get('/', ...)` route handler. Behind the scenes, this method will set the appropriate headers to instruct your browser on how to handle the file you want to send, according to its type. Then it will read and send the file. This method needs an absolute file path. We recommend you to use the Node global variable `__dirname` to calculate the path like this: ```js <del> absolutePath = __dirname + relativePath/file.ext </del> <ins> absolutePath = __dirname + '/relativePath/file.ext' </ins> ``` # --instructions--

Currently, the instructions in the module, which happens to be a part of the module ( of the course ), suggest the following as the value of the variable: For the sake of more clarity, I think the value of the variable should be as follows: NOTE: There should a forward slash ( ) before the and should be enclosed within quotes because that particular part is supposed to be a string. The value of the variable should be as follows: NOTE: There should a forward slash ( ) before the and should be enclosed within quotes because that particular part is supposed to be a string. <img width="794" alt="image" src="https://user-"- Device: Laptop OS: macOS 13.0.1 Browser: Chrome Version: 107.0.5304.110 No response_


Question: <details><summary>Installing MailHog on Windows</summary> <del> Download the latest version of MailHog from [MailHog's official repository](https://github.com/mailhog/MailHog/releases). Locate and click on the link for your Windows version (32 or 64 bit) and a .exe file will be downloaded to your computer. </del> <ins> Download the latest version of MailHog from [MailHog's official repository](https://github.com/mailhog/MailHog/releases). Locate and click on the link for your Windows version (32 or 64 bit) and a `.exe` file will be downloaded to your computer. </ins> When the download completes, click to open the file. A Windows firewall notification may appear, requesting access permission for MailHog. A standard Windows command line prompt will open where MailHog will be running once firewall access is granted. <del> Close MailHog by closing the command prompt window. To start MailHog again, click on the MailHog executable (.exe) file that was downloaded initially - it is not necessary to download a new MailHog installation file. </del> <ins> Close MailHog by closing the command prompt window. To start MailHog again, click on the MailHog executable (`.exe`) file that was downloaded initially - it is not necessary to download a new MailHog installation file. </ins> Start [using MailHog](#using-mailhog).

Describe the bug there are situations in which you need to add special character (like ) which is fine, but for RTL the direction is reverted so the placement of the special character is reverted, as well. Here is the file Likely we have the CSS property to fix this, we simply need the element to wrap that word so we can apply them. To fix this issue wrap the , between markdown code, like this , so the sentence will be something like this If you would like to fix this issue, please make sure you read , we prioritize contributors following the instructions in our guides. Join us in or if you need help contributing, our moderators will guide you through this.
There is a second mentioning of .exe in this sentence if it changed to too, that would be awesome
Hi, Has this issue been assigned to someone? If not, could you please assign this to me?
We don't assign issues, feel free to open PR after reading our docs


Question: const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); <del> exports.onCreateWebpackConfig = ({ stage, plugins, actions }) => { </del> <ins> exports.onCreateWebpackConfig = ({ stage, actions }) => { </ins> const newPlugins = [ <del> plugins.define({ HOME_PATH: JSON.stringify( process.env.HOME_PATH || 'http://localhost:3000' ) }), </del> // We add the shims of the node globals to the global scope new webpack.ProvidePlugin({ Buffer: ['buffer', 'Buffer']

While Gatsby allows us to create globals in we also make use of for that purpose. We should DRY this out and use one ( seems the best). See


Question: # --hints-- <del> Yous should remove the code toggling the `hidden` class on `taskForm`. </del> <ins> You should remove the code toggling the `hidden` class on `taskForm`. </ins> ```js const splitter = code.split('<button type="button" class="btn">Delete</button>')

Describe the bug There's typo in two steps in the hint text. Yous should be changed to You. This can be fixed by "first time" code contributors to this repository. Here are the files that you should be looking at to work on a fix: List of files: Please make sure you read , we prioritize contributors following the instructions in our guides. Join us in or if you need help contributing, our moderators will guide you through this. Sometimes we may get more than one pull requests. We typically accept the most quality contribution followed by the one that is made first. Happy contributing.


Question: - text: Your code should not rely on any kind of loops (for or while or higher order functions such as forEach, map, filter, or reduce.). testString: assert(!removeJSComments(code).match(/for|while|forEach|map|filter|reduce/g)); - text: You should use recursion to solve this problem.  testString: assert(removeJSComments(sum.toString()).match(/sum(.*).*{.*sum(.*).*}/s));   testString: assert(removeJSComments(sum.toString()).match(/sum(.*)/g).length > 1);  ```

<!-- NOTE: If you're reporting a security issue, don't create a GitHub issue. Instead, email We will look into it immediately. --Describe your problem and how to reproduce it: I can't get the challenge to pass even when I use the solution from the get a hint page. Add a Link to the page with the problem: Tell us about your browser and operating system: Browser Name: firefox Browser Version: 69.0.3 (64-bit) Operating System: linux mint 19 If possible, add a screenshot here (you can drag and drop, png, jpg, gif, etc. in this box): !
I can reproduce this with same Firefox version. On latest Chrome, it is working well.
ok, so I can get it to work in chrome. but still not in firefox for me.
Seems like a bug with firefox - I get this this error... <img width="357" alt="Screen Shot 2019-10-20 at 9 13 36 AM" src="https://user-"should be a valid flag. So that's why the solution passed our tests, but is failing in firefox. This will be a problem anywhere else we used the flag. Fortunately, it's not something that is used in many other places, if any.
Open bug report on Bugzilla about the flag - Doesn't look like it will be implemented anytime soon.


Question: ```yml tests: <del> - text: 'the output is <code>{name: "Zodiac Hasbro", age: 56, gender: "male"}</code>.' testString: 'assert(() => {const res={name:"Zodiac Hasbro",age:56,gender:"male"}; const person=createPerson("Zodiac Hasbro", 56, "male"); return Object.keys(person).every(k => person[k] === res[k]);}, ''the output is <code>{name: "Zodiac Hasbro", age: 56, gender: "male"}</code>.'');' - text: No <code>:</code> were used. testString: getUserInput => assert(!getUserInput('index').match(/:/g), 'No <code>:</code> were used.'); </del> <ins> - text: 'The output is <code>{name: "Zodiac Hasbro", age: 56, gender: "male"}</code>.' testString: 'assert((() => {const res={name:"Zodiac Hasbro",age:56,gender:"male"}; const person=createPerson("Zodiac Hasbro", 56, "male"); return Object.keys(person).every(k => person[k] === res[k]);})(), ''The output is <code>{name: "Zodiac Hasbro", age: 56, gender: "male"}</code>.'');' - text: No <code>key:value</code> were used. testString: getUserInput => assert(!getUserInput('index').match(/:/g), 'No <code>key:value</code> were used.'); </ins> ```

<!-- NOTE: If you're reporting a security issue, don't create a GitHub issue. Instead, email We will look into it immediately. --1) Add any code into the challenge field (other than a valid solution) that will not result in a syntax error. 2) Run the tests Expected result: The test should fail Actual result: The test passes Browser Name: Firefox Browser Version: 61.0 Operating System: 10.12.6 !
The problem is this test in the : It returns true if returns an object with no keys, or just not-an-object. I assume we should really be using something like to check the expected object and the user's output object are the same.
Working on a fix.


Question: description, instructions, introPath, <ins> isChallengeCompleted, </ins> guideUrl, nextChallengePath, prevChallengePath,

In the new beta (currently at ), it would be great if a challenge page indicated somehow when the challenge has already been completed. Currently, since user inputed code is not saved, there is no indication on a challenge page that it has already been completed.
We need a check mark in the title or a badge or to indicate the same?
The most elegant thing I can think of to have something like the little circular check mark next to the title like how it is on the learn homepage - only if it's been solved, and don't show anything if it hasn't.
That would be a nice way to handle it. Please go forth if you are interested in this?


Question: ## Proofread Translations <del> ![Image - Proofreading View](./images/crowdin/proofread.png) </del> <ins> ![Image - Proofreading View](https://contribute.freecodecamp.org/images/crowdin/proofread.png) </ins> <!--Add proofread/crowdsource button to the image-->

! Our local images currently do not render in the translated documentation views. This is due to the use of a relative link, which breaks with the new path generated for i18n pages. A couple of potential fixes: Use an absolute link (<filename). This, IMHO, is the most effective. Have translators fix the link in the translation flow. Host the images through our CDN and fetch them.
We should use the absolute path.
Sounds good. I'll get a PR up shortly.


Question:
## Instructions
  The positionData variable holds a 3-dimensional (3D) array. Use a D3 method to find the maximum value of the z coordinate (the third value) from the arrays and save it in the output variable. Note
Fun fact - D3 can plot 3D arrays.   The positionData array holds sub arrays of x, y, and z coordinates. Use a D3 method to find the maximum value of the z coordinate (the third value) from the arrays and save it in the output variable.
 ## Tests

<!-- NOTE: If you're reporting a security issue, don't create a GitHub issue. Instead, email We will look into it immediately. --Describe your problem and how to reproduce it: I'd like to submit a suggestion for a clarification in the explanation used in the following lesson: The instructions in this lesson refer to variable which is defined as: The lesson describes this as being a 3d array: This is misleading as positionData is not a 3-dimensional array but a 2d array. A 3d array could not be mapped to a 2d representation like a table: A 3d array would have a structure like: I think this should be considered for rewording less it lead to a misunderstanding. Add a Link to the page with the problem: Tell us about your browser and operating system: Browser Name: Firefox Browser Version: 73.0.1 (64-bit) Operating System: Windows 10 If possible, add a screenshot here (you can drag and drop, png, jpg, gif, etc. in this box): !
How about this... I would also get rid of the and sentence.
Good suggestion. I think this still conveys the author's intended message without potentially misleading the student's understanding of what constitutes a dimension in the context of an array. Edit: also agree WRT the - I don't think this adds anything enlightening.
If anyone wants to make a PR using Tom's suggestion, it would be very welcome.
I'd like to take this issue
Looks like has already created a PR for this issue.
Missed it


Question: challengeFiles: SavedChallengeFiles; }; <ins> // TODO: remove unused properties and stop returning them from api? (e.g. // history, ext, name) </ins> export type SavedChallengeFile = { fileKey: string; ext: Ext;

Code in the doesn't seem to be evaluated in production for Cash Register project. (Edit)This appear to be related to the code saving / resetting. In development there isn't such issue. Including building production client and serving it. This is actually the only challenge from the new challenges that is using . Old challenges are working fine when using . Both when names start with ` might be somehow deciding factor, but there isn't any other new challenge to check that. After adding function to user code, error moves normally to the next used in test non-defined variable - and then . Steps to reproduce the behavior: (Be logged in, and have previously saved code for project). to solution. Example: tests. errors. Code present in the should be evaluated after the user code, and before running tests. (Edit) When logged out there's different error, or no errors at all(?!). This might be somehow related to saving / resetting code.
Thanks again for the detailed report, You were dead right about the issue: it's due to the fact that saved challenges don't include head or tail (aka and ) and we were just using them in place of challengeFiles (which does have that stuff).
I have marked this as a showstopper seeing as it is affecting camper's ability to complete a certificate project. It would be nice to get the fix in as soon as possible, so the forum isn't filled with support threads for this.


Question: } .fill-in-the-blank-input { <ins> font-family: monospace; </ins> padding: 0; text-align: center; background-color: var(--primary-background);

In the fill in the blank challenges, the size of the blanks are based on the number of characters in that blank. It's 11px per letter, plus an additional 11px buffer - This works pretty good, but sometimes you get a word with really wide letters and it doesn't fit: <img width="774" alt="Screenshot 2024-06-17 at 5 36 44 PM" src=""^ You can see is a little too wide to fit because it has wide letters. Other times, you have a bunch of narrow letters like with in the image. That fits, but there's more space on each side than needed. The challenge I noticed this on is still in beta, so you will have to run the repo with upcoming changes shown to see this specific one - but you can see it in any of the fill in the blank challenges. to http://localhost:8000/learn/a2-english-for-developers/learn-how-to-document-code-for-a-project/task-38 in the first blank that one of the letters gets cut off. The in firefox, the in Chrome. So browsers are handling it differently. in the third blank the extra space in the input before and after the word. See the image above The answers to fit in the blanks better. I think the solution I would prefer is to make a map of the letters and their spacing and make the size of the input based on what letters are in the answers. Or perhaps just a default size of the 11px or something, and a small group of narrow letters that get maybe 8, and small group wide letters that get maybe 13 or something. Or perhaps we could use a monospace font.
Not sure why, but this is what it looks like for me (Chrome, and in incognito/on Windows). ! Also, the text color doesn't seem to change to white in night mode.
I don't think monospace fonts are quite the answer; at least not itself. ! Sure it's fine for say the word "When" but for "descriptive", it's a little bigger than the blank.
I'm only using the font for the blanks, but the point remains the same.
I think using 14 maxlength will be be a better solution. before : ! after !
That's not a viable solution.

That's hard-coding a value for this one specific input. They're dynamically generated we can't do that.
I think this is the way to go. Then we can reliably know the size of every character, space our inputs accordingly, and we get the feature of visual feedback when a word is too long for that blank.
This is because the spacing is configured for 11px wide characters. I'd be willing to bet that monospace font is bigger. :)


Question: [ "http://i.imgur.com/EoTfOyC.jpg", "An image of some of our campers coding together in Montreal.", <del> "Keep practicing coding every day and hanging out with other people who code, and you will becoming a job-ready coder.", </del> <ins> "Keep practicing coding every day and hanging out with other people who code, and you will become a job-ready coder.", </ins> "" ], [

Should be "become" I would fix it but I'm not sure where this file is located. !
closed. Fixed with


Question: Prepositions of time are essential in English to talk about when something happens. <del> The preposition `in` is used for months, years, centuries, and long periods. For example, `We will update the software in July`, `I started learning coding in 2022`. `I like to workin in the morning`. </del> <ins> The preposition `in` is used for months, years, centuries, and long periods. For example, `We will update the software in July`, `I started learning coding in 2022`. `I like to work in the morning`. </ins> The preposition `on` is used for days and dates. For example: `Our team meets on Mondays`, `The coding class is on April 10th`, `I finished the task on the last day`.

The word 'in' is double I like to workin in the morning. -Proceed to the 4th course 'Learn How to Talk About a Typical Workday and Tasks' -Proceed to Task 2 -Observe the third sentence 'I like to workin in the morning. I like to work in the morning. !
Thanks for opening this issue. This looks like something that can be fixed by "first-time" code contributors to this repository. Here are the files that you should be looking at to work on a fix: List of files: /curriculum/challenges/english/21-a2-english-for-developers/learn-how-to-talk-about-a-typical-workday-and- Please make sure you read our , we prioritize contributors following the instructions in our guides. Join us in our or our if you need help contributing; our moderators will guide you through this. Sometimes we may get more than one pull request. We typically accept the most quality contribution followed by the one that is made first. Happy contributing.
We typically do not assign issues. Instead, we accept the first pull request that comprehensively solves the issue. Issues labelled with or are open for contributions. Please make sure you read . We prioritize contributors following the instructions in our guide. Join us in or if you need help contributing - our community will be happy to assist you.


Question: const allUser = { ..._.pick(user, publicUserProps), isGithub: !!user.githubProfile, <del> isLinkedIn: !!user.linkedIn, </del> <ins> isLinkedIn: !!user.linkedin, </ins> isTwitter: !!user.twitter, isWebsite: !!user.website, points: progressTimestamps.length,

Add a URL to the linkedIn input in your settings When viewing while logged in to your account... <img width="208" alt="Screen Shot 2019-10-23 at 11 05 37 AM" src="https://user-"Not logged in to your own account... <img width="195" alt="Screen Shot 2019-10-23 at 11 05 33 AM" src="https://user-"I can reproduce this on firefox and chrome, and locally and production.


Question:
</Link> .

I cannot pass a challenge, but I think my code is correct

 Some browser extensions can interfere with challenge tests. If you are using any, try disabling them and running the tests again. If the problem remains, click the challenge's 'Ask for Help' button to post on the forum. You will need to create a forum account if you don't already have one.

I have a support question that isn't answered here.

 You can ask for help on our forum, and the freeCodeCamp volunteer

I had some style issues on my firefox browser from the "Dark Mode" extension/add-on. Specifically these two issues: - After some frustration and help I found the add-on to be the problem. I'm not sure if there's anything that can be done to avoid issues like this, but I figured it could be discussed a little bit.
It would be tricky to come up with a generic solution, since it depends on the behaviour of each extension. For example, we could stop 's problem, passing with only the seed code, by adding a filter like this: That would fix the issue, but relies on an implementation detail of the extension. I guess we could solve them on a case-by-case basis, but it might be better to put a warning somewhere. Perhaps something that pops up when tests fail?
A warning might be the only way to go - adding tests on a case by case basis just isn't practical - browsers vary and change - extensions change and there's a ton of them. I'm a little concerned with a warning on the pop-up as well - it might make users start looking for problems with an extension when their code is the problem.
That's a good point. Maybe just a suggestion to turn them off at the start of the curriculum, then.
I really don't see a good spot for a warning like that - I remember a notice at one point to use chrome for the best experience, but I'm not sure where it is anymore - next to that might have been a good spot - or perhaps - I don't think too many people are having issue with this so we can probably just leave it alone.
Putting something on the support page could work. How about something like: #### I cannot pass a challenge, but I think my code is correct Some browser extensions can interfere with challenge tests. If you are using any, try disabling them and run the tests again. If the problem remains, click the challenge's 'Ask for Help' button to post on the forum. You will need to create a forum account if you don't already have one.
That actually sounds pretty good
Cool, I'll pop that in a PR.


Question: renderDonateForm() { const { isFormValid } = this.state; <ins> const { theme } = this.props; </ins> return ( <Row> <Col sm={10} smOffset={1} xs={12}>

Describe the bug ! The input text on the darkmode version of the donate page () are not readable so you cannot see what you are typing. To Reproduce Steps to reproduce the behavior: to '' with darkmode enabled. on the input labled 'Your Card Number:' and enter some numbers. entered input is not readable as the color of the input text is the same as the background-color of the input. bug applies to the credit card expiration and CVC inputs. ! Desktop (please complete the following information): OS: Win10 Browser Brave/Chrome/Firefox


Question: z-index: 100; } <ins> .map-fixed-header { background: white; z-index: 1; flex: 1; padding-bottom: 25px; } .map-accordion { flex: 9; overflow-y: auto; } </ins> .map-aside-action-item { display: flex; /* main axis */

I really do like the SideCar (I'm assuming that's what your using) Map menu! It gives really quick access to previous challenges. It would cool if the "collapse all challenges" area was fixed to top and everything would slide under it. That way, users wouldn't have to scroll all the way up or down if they're looking for something specific - they would just collapse everything and go to the specific component they're looking for.
I agree. Totally makes sense to have it fixed to the top somehow.
I'm going to start working on this now, should have a PR open shortly.


Question: "descriptionEs": [ "Hemos terminado de jugar en nuestro patio de recreo jQuery. ¡Vamos a derribarlo!", "jQuery también puede elegir el elemento body.",  "Así es como haríamos que el cuerpo entero desapareciera: $("body").addClass('animated fadeOut')",   "Así es como haríamos que el cuerpo entero desapareciera: $("body").addClass('animated fadeOut');",  "Pero vamos a hacer algo más dramático. Añade las clases animated y hinge a tu elemento body." ] }

Challenge has an issue. User Agent is: <codeMozilla/5.0 (Macintosh; Intel Mac OS X ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36</code. Please describe how to reproduce this issue, and include links to screenshots if possible. My code: The example code should have valid Javascript code but the semicolon at the end is missing. !
(Sorry, used the wrong branch at first.)


Question: handleSubmit(values) { const { updateBackendFormValues, executeChallenge } = this.props; <del> values.solution = normalizeUrl(values.solution); </del> updateBackendFormValues(values); executeChallenge(); }

Describe the bug Submitting the solution link as "" produces an error. Submitting "" does not. Whenever we submit a solution link "" it is appended with "/api/" so resultant solution gives "Not Found/Timeout error" and the same link submitted without "/" like "" gives solution as accepted. To Reproduce Steps to reproduce the behavior: to on 'solution input box' "https://freecodecamp-" solution gets accepted. "https://freecodecamp-" error Expected behavior This should be tackled as Chrome appends "/" by default to any domain URL you copy, so people who would copy URL from search bars will get URLs appended with "/" hence producing wrong results. This file shows the testString is directly appended with "/api" without checking if the input URL contains "/" at the end or not. Screenshots ! Desktop (please complete the following information): OS: Ubuntu 18 Browser: Google Chrome Version 73.0.3683.75
I am not having this problem - my project will pass the tests with or without the trailing https://fcc-manage-npm- and https://fcc-manage-npm- both pass for me in chrome Can you share a share a screen shot of the error?
Updated
hmm, it's strange that my project will give a good response when that string is appended but not yours https://fcc-manage-npm- - package as response https://freecodecamp- - not found as response not sure what is causing this - the only difference seems to be that I'm using glitch and you're using heroku in fact mine will work like this... https://fcc-manage-npm- so maybe how the two websites process a route or something? can they do that? glitch strips out the extra or something? weird Either way - I think a solution like you suggested would probably work - check if the submitted URL ends in a and remove it if it's there. This same problem probably occurs throughout the whole backend area all over the place.
Weird, would u check with an alternative hosting if the problem persists? If the problem persists the last solution would be stripping the las from input url
Did you try this Above is the actual link processed in the test with an appended , It gives a response with the same as it is shown in the screenshot I posted. So I guess the problem is with the routing of Heroku.


Question: - `fix(a11y): improved search bar contrast` - `feat: add more tests to HTML and CSS challenges` - `fix(api,client): prevent CORS errors on form submission` <del> - `docs(i18n): Chinese translation of local setup` </del> <ins> - `docs(i18n): fix links to be relative instead of absolute` </ins> ## Proposing a Pull Request

<!-- NOTE: If you want to become an author on freeCodeCamp, you can find everything here: --<!-- If you are reporting an issue with an article on our News publication, please follow this link to send an email to our editorial team --As stated in a by the example of a PR title () is misleading as this is not to be done manually; instead being perormed by automated pipelines. Visit the above page and scroll down to find the text: Remove this example from the documentation. <!-- If possible, add a screenshot here (you can drag and drop, png, jpg, gif, etc. in this box). --<img width="653" alt="Image of the invalid example of a pr title" src="https://user-"
Hello there If anything is done here, I would not remove it from the examples - I would change it to include something else that is relevant. Reason being, it is nice to have an example showing .
like we could make the last example something like , that is something we keep doing to avoid redirect to the EN docs from the other ones
I'd be in favour of implementing Ilenia's proposed change. Though I'm not sure anything needs to be fixed here. Yes, our translation PRs are automatic, but it's still a good example of a PR title.


Question: return <CurrentChallengeLink>Take me to the Challenges</CurrentChallengeLink>; } <del> function renderIsLocked(username) { </del> <ins> function renderIsLocked(username, isSessionUser) { </ins> return ( <Fragment> <Helmet>

The Portfolio button in the nav only takes me to my locked down profile. The settings button should be available on the user profile even when my profile is private and I am signed in. ! Edit raisedadead: We probably missed this while adding tests. Anyone interested can would be awesome if you could add tests while fixing this.
The settings button should be displayed here regardless of privacy settings.
You beat me to this, I opened without looking at the tracker.
Hi guys. I want to get and fix that issue.


Question: "title": "Where do I belong", "description": [ "Return the lowest index at which a value (second argument) should be inserted into an array (first argument) once it has been sorted.",  "For example, where([1,2,3,4], 1.5) should return 1 because it is greater than 1 (index 0), but less than 2 (index 1).", "Likewise, where([20,3,5], 19) should return 2 because it is less than 20 (index 2) and greater than 5 (index 1).",   "For example, where([1,2,3,4], 1.5) should return 1 because it is greater than 1 (index 0), but less than 2 (index 1).", "Likewise, where([20,3,5], 19) should return 2 because once the array has been sorted it will look like [3,5,20] and 19 is less than 20 (index 2) and greater than 5 (index 1).",  "Remember to use Read-Search-Ask if you get stuck. Write your own code." ], "challengeSeed": [

Challenge has an issue. User Agent is: <codeMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:44.0) Gecko/ Firefox/44.0</code. Please describe how to reproduce this issue, and include links to screenshots if possible. In the instructions for this exercise the second example reads, "Likewise, where([20,3,5], 19) should return 2 because it is less than 20 (index 2) and greater than 5 (index 1)." Based on the example result given, the example array should be [3,5,20].
After completing this exercise I realized that the second example may not be a typo, as the exercise requires the use of the sort() method to sort the given arrays in a numerically ascending order. So, rather than a typo, this example may just be confusing to those who have not completed the exercise.
It might make sense to add a clarifying statement like:


Question: }; User.prototype.updateMyProjects = function updateMyProjects(project) { <del> const updateData = {}; </del> <ins> const updateData = { $set: {} }; </ins> return this.getCompletedChallenges$() <del> .flatMap(completedChallenges => { updateData.completedChallenges = buildCompletedChallengesUpdate( completedChallenges, </del> <ins> .flatMap(() => { const { updated, isNewCompletionCount } = buildCompletedChallengesUpdate( this.completedChallenges, </ins> project ); <ins> updateData.$set.completedChallenges = updated; if (isNewCompletionCount) { let points = []; // give points a length of isNewCompletionCount points[isNewCompletionCount - 1] = true; updateData.$push = {}; updateData.$push.progressTimestamps = { $each: points.map(() => Date.now()) }; } </ins> return this.update$(updateData); }) .do(() => Object.assign(this, updateData))

Completing projects from the settings page, submitting a url, dose not increment the points a user has. We need to push a new timestamp to the users array.
Hi I can help out with this. Am I correct in thinking that this should be done in the file? If so, I'll look at for some guidance.


Question: import { handleActions } from 'redux-actions'; import { getLines } from '../../../../../shared/utils/get-lines'; <ins> import { mergeChallengeFiles } from '../classic/saved-challenges'; </ins> import { getTargetEditor } from '../utils/get-target-editor'; import { actionTypes, ns } from './action-types'; import codeStorageEpic from './code-storage-epic';

During development adding or modifying the head or tail code ( and ) don't seem to be updated in the challenge. Tested locally and on gitpod. Steps to reproduce the behavior: /modify the or in challenge. For example one of the steps in the JS curriculum. I was adding function and variables to it, and then was attempting to use them in tests. and wait for challenge to be updated. () the challenge page, or visit it for the first time. running tests, referencing the function/variables from head/tail code, there will be reference errors. Changing head or tail code, should update the challenge to use it. Login status don't seem to affect issue. During changing the code, thinking I might do something incorrectly, there were handful times when challenge was updated with the head/tail code. Not sure what was the exact reason. What makes it stranger is stopping client develop and starting again, is not necessarily solving the problem. At some point I thought that's working to get challenge fully updated, but right now that doesn't seem to work.
I might have seen this as well. I remember trying to save a regex in to use in multiple tests, and it didn't seem to work. Kind of just thought I was using it incorrectly, but maybe this was the issue.
Thanks for the detailed investigation of another tricky bug. It was another example where saved code messes things up. They're always a pain to debug because everyone sees something different, depending on whether or not they have something saved. Hopefully this is the last of them!
What's the most throwing off, that wasn't even code saved manually!
Weird. Is there nothing in your local storage?
Hmm, well there is after running tests. That must have been the point when saving mishap happened.
Oh, that's right. No mystery beyond "how did I forget this?" :face_exhaling:


Question:
## Description
 Objective: Build a full stack JavaScript app that allows you to search for images like this: https://cryptic-ridge-9197.herokuapp.com/api/imagesearch/lolcats%20funny?offset=10 and browse recent search queries like this: https://cryptic-ridge-9197.herokuapp.com/api/latest/imagesearch/. Then deploy it to Glitch.  Note that for each project, you should create a new GitHub repository and a new Glitch project. If you can't remember how to do this, revisit https://freecodecamp.org/challenges/get-set-for-our-api-development-projects.  Here are the specific user stories you should implement for this project: User Story: I can get the image URLs, alt text and page urls for a set of images relating to a given search string. User Story: I can paginate through the responses by adding a ?offset=2 parameter to the URL.

<!-- NOTE: If you're reporting a security issue, don't create a GitHub issue. Instead, email We will look into it immediately. --Describe your problem and how to reproduce it: In some of the take home projects there is a broken link in the description - - which leads to a 404. Add a Link to the page with the problem:
Here is a breakup of the action items (can be done in parallel, by multiple contributors): . we were hoping you could point us in the right direction by helping us with the source code repo link? [ ] This Glitch project can then be published and the challenge updated with the link and the verbiage. [ ] Finally we would also need to point the link for getting started use our standard intro for other projects.
if I have the original challenge link I could start on this.
I would like to work on this .
please let me know if you are still interested in making a pull request for this issue.
Please inform on the status of the work on this issue, otherwise I would like to have a go at it.
I would like to know the status. Do we have the correct link available or not?
What is the original challenge link which attempts to link to?
please let me know once the actual link is confirmed. I would like to work on this issue.
I'm not sure where the original link is. I thought it was in Apis And Microservices in the legacy site, but I can't find it. We may have to re-create this page? It is supposed to let users know how to create a repository and deploy to heroku. For some of these apps, users can also just use glitch.
It has to be somewhere in the history on Github. When using Git, it is not possible to lose content.
I'm not sure the very latest instance of the file, but it's the best I could find. If there's a way to find the latest version, I'd love to know how! Regardless, you might be able to get some inspiration from there, but unfortunately the specifics are all out of date.
That link is in four of the take home project descriptions - I didn't see it anywhere else. Maybe we should just remove that line from them... Note that for each project, you should create a new GitHub repository and a new Heroku project. If you can't remember how to do this, revisit
Yes please.


Question: ] ], "type": "hike",  "challengeType": 6   "challengeType": 6, "nameEs": "JavaScript Lingo: Tipos de valores", "descriptionEs": [ "Aprende sobre los tres tipos más básicos de valores: Booleanos, cadenas y números", "Un booleano es un valor true (verdadero) o false (falso). Estas palabras son especiales y reservadas. No puedes nombrar a una variable como "true", porque esa palabra es ya universal como un valor lógico (así como lo es "false"). ", "Una cadena es un conjunto de caracteres que se establecen entre apóstrofes (') o entre comillas ("). Una cadena puede ser "true", siempre y cuando sea con comillas o con apóstrofes. ", "Los números se explican por sí mismos - un número es un valor que se compone sólo de dígitos, aunque también puede contener un decimal o un signo negativo." ]  }, { "id": "56b15f15632298c12f31518b",

[ ] JavaScript Lingo: MDN and Documentation [ ] JavaScript Lingo: Value Types [ ] JavaScript Lingo: Variables & camelCase [ ] JavaScript Lingo: Arrays & Objects [ ] JavaScript Lingo: Finding and Indexing Data in Arays [ ] JavaScript Lingo: Manipulating Data [ ] JavaScript Lingo: Math [ ] JavaScript Lingo: Loops [ ] JavaScript Lingo: Regular Expressions
Working on this one


Question: {!hasEditableBoundaries && ( <TabPane eventKey={Tab.Instructions} <del> title={i18next.t('learn.editor-tabs.info')} </del> <ins> title={i18next.t('learn.editor-tabs.instructions')} </ins> tabIndex={0} > {instructions}

In the certification project pages, the tab on the left is "Instructions". However, if you resize the browser and the page switches to the mobile layout, the tab name changes to "Info". The "Console" on the desktop layout changes to "Tests" too. and other certification projects with built in editor to the browser Use the same name for the same content. ! ! Device: Laptop OS: Windows 10 Browser: Chrome Version: 108.0.5359.125 No response_
Technically, I don't think this is a WCAG failure. does address consistent identification of functional components. In this scenario, in wide view they are HTML buttons but in narrow view they are tabs, so technically they are not the same component and thus don't fall under 3.2.4. But for usability I would tend to agree that it would be best if they could use the same terminology since they basically do the same thing.
We can use "Console" for both mobile and desktop. Do we use "info" for the desktop layout and call it ?
I agree with using "Console" for both. For the panel showing user stories I would prefer using "Instructions" since the word "Info" seems too vague.
To solve this issue: use "Console" and "Instructions" for both layout. If you would like to fix this issue, please make sure you read , we prioritize contributors following the instructions in our guides. Join us in or if you need help contributing, our moderators will guide you through this.
We might want to keep in mind that is much longer than . We do not have much real-estate on mobile.
Here are words that I can think of are "details", "step", "story", "task", "manual", "guide", and "briefing". Is any of them good enough, or do we change the console for now and come back for "instructions" later?
My initial thought is: keep everything consistent, and just use the current mobile-naming for desktop as well. However, I am not entirely happy with the word for what it denotes. might be one option, but I also like your suggestion of .
I find or interesting . I vote for too, if no one else has issue with it, we can go with it, otherwise we go with .

I think is a term in agile development so I'm not sure if we can call it just . I would vote for or if is too long. However, my main concern was that the word changes as the user resizes the window. So, I'm okay with either of them as long as we use the same word for both layouts.
We decided to go with the desktop terms for both, "Instructions" and "Console". The file that needs to be changed is We are going to make another issue about improving the mobile UX to potentially use icons or another solution.
I think that should remain for responsive design issues on cell phones and since it is the appropriate term when the student goes to vsCode or another IDE


Question: padding: 0; margin: 0; border: none; <ins> background-color: white; </ins> } .enable-iframe {

I did not see anyone raising this issue, but I don't think the background of the preview in default or night mode should be anything other than white unless the coding exercise specifically changes the background to something else. The preview should be exactly what you would see in a browser. In almost all the challenges, the background would be white. !
I share your concerns The reason we changed the color of the display is that a white display is discomforting to the eye on night mode when everything else is dark. so we injected some styles to harmonize the view in general. That convention was carried over to light mode.
It might be better to default to white in light mode, same as the editor. As for night mode, some of the css challenges might need some changes to look reasonable in both modes. For instance, in night mode, looks like this: ! If we change the seed code to it would become ! It would have to be case-by-case, though.
That is a very good point. I will defer this to
Logically, I have to agree with - displaying anything other than what the code in the editor would produce might confuse campers. But it is a little rough on the eyes to have the white background on night mode. And the current theme looks a lot better - so it's a tough call. I scrolled through a number of challenges, and there's quite a few that don't look right with the blue background. So there might be a decent amount of work to go through and fix all of them.
I really like the new theme, but a preview should be a true preview. We want to make this like the real world. Developers working in some kind of night mode on their favorite local editors, still expect to check the "real" result of the code they have written on a browser or in a preview mode in their local editors. The night mode should only apply to the editor or the non-preview part of the FCC site. Anything else is just not realistic.
The preview should be white.
I agree with everyone here on this thread. The preview should remain white. Note that soon the preview won't always be there on the right side "brightening up" the user interface and ruining people's night mode experience.

Soon we will have a single column layout where you the preview only shows up when you click a button to show it, or it loads in a separate tab. - could you update the styling on this so that the preview area is unaffected by our styling?
Definitely.


Question: isSignedIn, output, theme, <del> tests </del> <ins> tests, isChallengeCompleted </ins> }) );

I am learning from the RWD course, and I wanted to revise what I had done previously. I went to previous steps, but I found that the steps are shown incomplete when I open them. It tells you to do the step again. This doesn't make sense because you have a button at the top if you do want to do the step again. Completed code should be shown in completed challenge's code editor along with an indicator like ! !
It would be relatively easy to show the solution to a step, and the "Step completed" text, (rather than storing the user's code) if a user has already submitted that step. If other maintainers are in favour of this change, I'd be happy to open this up for PRs.
My concern with that approach would be it completely destroys the UX if someone wants to go through a practise project again.
I propose to add a button under the summary of each project for this issue.
I'm not keen on adding a button to do that, given the potential for frustration if someone triggers that accidentally.
I think I'd be in favour of the existing flow, presonally.
At a minimum, we could probably add the checkmark next to "Step 22" like we do for all the other challenges after it has been completed. That seems to be missing here. !
That's a good idea, IMO.
I think just adding that check mark is probably the way to go then. It keeps it consistent with everything else. I'm going to open it up for contributions. If anyone still has reservations, be sure to bring them up.
May I suggest in addition to indicating completed challenges in the challenge itself, to do that in the list of steps. Here is a crude representation of what I have in mind: <p align="center"<img src="https://user-" width=500 align="centre"/</p
I believe it already does that. Here's a screenshot of what the challenge looks like for me, after I've completed it (the steps are highlighted in blue instead of white). !
Also, I would like to work on this issue, and I agree that adding a checkmark next to the step would be a good fix, but I noticed that the RWD courses don't have a step number or title at the top like the other courses do.

For other courses, the checkmark for completion is displayed next to the name of the challenge, like you can see in the first screenshot (of the JS Algorithms & Data Structures courses). However, for the RWD course, there is nothing in this location, as you can see in the second screenshot. ! ! How should we go about adding a checkmark to the RWD course? Should we just put it next to where it says on the screenshot (inside the instructions block)? Or should we move the step number to the same place as where the challenge names are for the other courses and put the checkmark there, in order to be consistent with the other courses?
Thanks I could not log in since yesterday and this is probably the reason I don't see indication for completed challenges in the list of steps.


Question: You have either deleted the `head` element or it is missing an opening tag or closing tag. ```js <del> assert(code.match(/<head>/) && code.match(/</head>/)); </del> <ins> assert.match(code, /<head>/); assert.match(code, /</head>/); </ins> ``` Your `title` element should be nested in the `head` element. Make sure to add an opening tag and closing tag for the `title` element. ```js const noSpaces = code.replace(/s/g, ''); <del> assert(noSpaces.match(/<head><title>.*</title></head>/)); </del> <ins> assert.match(noSpaces, /<head><title>.*</title></head>/); </ins> ``` Your `title` element should have a closing tag. Closing tags have a `/` just after the `<` character. ```js <del> assert(code.match(/</title>/)); </del> <ins> assert.match(code, /</title>/); </ins> ``` Your `title` element's text should be `CatPhotoApp`. You have either omitted the text or have a typo. ```js <del> assert(document.title && document.title.toLowerCase() === 'catphotoapp'); </del> <ins> assert.equal(document.title?.toLowerCase(), 'catphotoapp'); </ins> ``` # --seed--

We recently updated the guidelines for writing assertions here For consistency and matching what is in the docs, we should slowly start to update the tests for the workshops and labs in the new frontend cert. For this issue, just focus on updating the tests for steps 36 - 40 of the cat photo app workshop. We don't want to have a large PR that updates a whole bunch of tests in a bunch of steps and makes it harder to review. Here is the link to the workshop: The tests should be updated, where appropriate, to use specific methods like , , , etc instead of just . Here is the complete API reference Just focus on the new frontend cert and don't worry about updating the RWD cat photo app since that will become legacy anyway.


Question: .map-title-completed { margin-left: auto; <del> width: 90px; </del> <ins> width: 100px; </ins> padding-left: 20px; }

Describe the bug When you open a dropdown for any of the certificate, if the subtopic has 3 digit number of challenges it gets pushed to the next line. I think that it would be better if kept in same line. Screenshots ! !


Question:
"The map method is a convenient way to iterate through arrays. Here's an example usage:", "
var timesFour = oldArray.map(function(val){
  return val * 4;
});
", "",  "The map method will iterate through every element of the array, creating a new array with values that have been modified by the callback function, and return it.",   "The map method will iterate through every element of the array, creating a new array with values that have been modified by the callback function, and return it.  Note that it does not modify the original array.",  "In our example the callback only uses the value of the array element (the val argument) but your callback can also include arguments for the index and array being acted on.",  "Use the map function to add 3 to every value in the variable oldArray."   "Use the map function to add 3 to every value in the variable oldArray, and save the results into variable newArray. oldArray should not change."  ], "challengeSeed": [ "var oldArray = [1,2,3,4,5];",  "var newArray = [];",  "", "// Only change code below this line.", "",  "newArray = oldArray;"   "var newArray = oldArray;"  ], "tail": [ "(function() {return newArray;})();" ], "tests": [  "assert.deepEqual(oldArray, [1,2,3,4,5], 'message: You should not change the original array.');",  "assert.deepEqual(newArray, [4,5,6,7,8], 'message: You should add three to each value in the array.');", "assert(editor.getValue().match(/.maps*(/gi), 'message: You should be making use of the map method.');", "assert(editor.getValue().match(/[1,2,3,4,5]/gi), 'message: You should only modify the array with map.');"

There are two exercises dealing with JavaScript array functions that don't change the original array (.map and .filter). It is very confusing to a learner whether to modify the existing array or to assign the results to a separate array. Here's a snippet from The test assertions are all on , meaning it doesn't matter if was changed at all. I have two suggestions, either of which should make these exercises less confusing: Remove all references of and make the test assertions on or Reword the goal statement to : Update the starter code to : This concept would apply to both:
I like suggestion number two :+1:


Question: # --description-- <del> The `hasatttr` built-in function takes an object as its first argument and a string representing an attribute name as its second argument. It returns a boolean indicating if the object has the specified attribute. </del> <ins> The `hasattr` built-in function takes an object as its first argument and a string representing an attribute name as its second argument. It returns a boolean indicating if the object has the specified attribute. </ins> Now you are going to use the `__init_subclass__` method to check if the child class has the `degree` attribute at the moment of the instantiation.

There’s a typo in the instruction of step 11, which introduces the built-in function hasattr, which is mistyped as “hasatttr”. Campers who follow it would find the console raises “NameError: name ‘hasatttr’ is not defined”. Correct the typo No response Device: PC OS: Windows 10 Browser: Chrome Version: 126.0.6478.182 No response
Thank you for reporting the issue. This issue is open to first-time code contributors to this repository. The file that you should be updating is: We typically do not assign issues. Instead, we accept the most quality contribution followed by the one that is made first. Please make sure you read our as well as our , we prioritize contributors following the instructions in our guides. Join us in our or our if you need help contributing; our moderators will guide you through this. Happy contributing.
Thanks for quick response. I have made a pull request.


Question: # --description-- <del> Back in your event listener, you need to update the text of the `result` element. </del> <ins> Back in your event listener, you need to update the text of the `result` element. You can use a `ternary` operator to achieve this task. Here is an example of assigning the result of a ternary operator to an element's text content: ```js el.textContent = condition ? "Use this text if the condition is true" : "Use this text if the condition is false"; ``` </ins> After the `if` statement, use a ternary operator to check the truthiness of calling `isSpam()` with `messageInput.value` as the argument. If true, set the `textContent` property on the `result` element to `Oh no! This looks like a spam message.`. Otherwise, set it to `This message does not seem to contain any spam.`

We need to show the proper syntax for assiging the result of a ternary operator to a variable's text content as mentioned in this . Let's go with this updated description js el.textContent = condition ? "Use this text if the condition is true" : "Use this text if the condition is false"; ` see explanation above see explanation above No response Device: [e.g. iPhone 6, Laptop] OS: [e.g. iOS 14, Windows 10, Ubuntu 20.04] Browser: [e.g. Chrome, Safari] Version: [e.g. 22] No response
This has been opened for contribution. The first comprehensive PR created will be reviewed and merged. We typically do not assign issues to anyone other than long-time contributors. If you would like to contribute and have not read the contributors docs, please do so here: If you have any issues with contributing, be sure to join us on the , or on the Happy coding
I guess I'm fine with being this explicit about it and showing an example. But I would hope by now in the curriculum (this challenge is far in) we have promoted the proper usage of the ternary so that it might be handled just in the assert hints. Also, the hint in the assert for the code posted on the forum isn't super helpful in guiding the camper to the desired syntax.
I am not sure how the assert messages would be updated here to show the syntax. Unless we just give them the answer here. I am open to ideas for changes