Question:
please clarify the instructions for step 39 of JS Beta Build a Music Player Currently they consist of 2 sentences: "Add an else block to handle the current song’s position in the playlist. Within the else block, set the currentTime property of the audio object to the value stored in userData?.songCurrentTime." The first sentence doesn't seem to relate to the second. It is not clear how 'the current song's position in the playlist" is affected by the actions requested of setting the audio object's currentTime? This makes me think that there's a mistake in the first sentence (or maybe I've misunderstood what it is trying to say so it needs more clarification) N/A N/A No response N/A No response
I don't think it has anything to do with the playlist order. The only thing is used for is pause/play (it gets reset everywhere else). Maybe it can just be:
My thoughts was that the else block was designed to continue playing the song at the place you stopped it. The current song has been chosen and it's same id of the song. In the block, we're setting the time to zero. In the else block, we're setting it at the old time.
FYI: I attempted to test pausing and restarting the song but it always restarted from the beginning.
In what step did you test it? If you go to the last step, the play/pause should work as intended (or to whatever step has it implemented). Pausing saves the audio element's current time to , and playing restores it back to the element's current time when is available.
I see, I thought I would be able to pause and play something else then come back to the original selection and it would start from where I stopped (but I don't think the code was created for that).
Nah. It only resumes and plays back for the current song. Once you switch songs, it forgets where you left off on the old one.
I would be fine adding something like "This allows you to resume the current song at the point where it was paused."
This looks like something that can be fixed by "first time" code contributors to this repository. Here is the file that you should be looking at to work on a fix: Change: To: Please make sure you read , we prioritize contributors following the instructions in our guides. Join us in our chat room or the forum 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.

# --description-- <del> Add an `else` block to handle the current song's position in the playlist. </del> <ins> Add an `else` block to handle the song's current playback time. This allows you to resume the current song at the point where it was paused. </ins> Within the `else` block, set the `currentTime` property of the `audio` object to the value stored in `userData?.songCurrentTime`.


Question:
I was going through the new JS Beta curriculum and when I got to the date formatter project I realized that it probably doesn't really help add any specific knowledge that would be useful in completing the palindrome project. I think the date formatter project being in its current position may even be a hindrance because I think it is better to get people to work on the skills they have learned sooner rather than later. My suggestion is to move the palindrome project ahead of the date formatter project for this reason. N/A N/A No response N/A No response
please assign this to me
issues are not generally assigned, and this issue has not been marked as ready for contributions.
okiee thank you
I agree. That seems like the way to go. A PR which resolves this issue, then, will swap the properties in the meta files for these two projects.

"dashedName": "build-a-palindrome-checker-project", "usesMultifileEditor": true, "helpCategory": "JavaScript", <del> "order": 8, </del> <ins> "order": 7, </ins> "superBlock": "javascript-algorithms-and-data-structures-v8", "challengeOrder": [ {

"usesMultifileEditor": true, "hasEditableBoundaries": true, "dashedName": "learn-the-date-object-by-building-a-date-formatter", <del> "order": 7, </del> <ins> "order": 8, </ins> "superBlock": "javascript-algorithms-and-data-structures-v8", "challengeOrder": [ {


Question: The is being hard-coded with an English string, we should change this to use a translation string instead. Additionally, the attribute is redundant as already has role implicitly. Replace the string with a translation string, something like (the string also needs to be to ) Remove

"last-page": "Go to last page", "primary-nav": "primary", "breadcrumb-nav": "breadcrumb", <ins> "timeline-pagination-nav": "Timeline Pagination", </ins> "submit": "Use Ctrl + Enter to submit.", "running-tests": "Running tests", "hide-preview": "Hide the preview",

</tbody> </table> <nav <del> aria-label="Timeline Pagination" role="navigation" </del> <ins> aria-label="aria.timeline-pagination-nav" </ins> > <ul aria-hidden="true"

const { t } = useTranslation(); return ( <del> <nav aria-label='Timeline Pagination' role='navigation'> </del> <ins> <nav aria-label={t('aria.timeline-pagination-nav')}> </ins> <ul aria-hidden='true' className='timeline-pagination_list'> {totalPages > 10 && ( <li


Question:
The description of the project to build football team cards in the js beta curriculum says: In this project, you will build a set of football team cards and learn about nested objects, object destructuring, default parameters, event listeners, and switch statements. But switch statements were introduced in the date formatter project (step 16, 17). I think the description should be modified therefore to not mention learning switch statements. I haven't actually done this project, so I don't actually know if it re-teaches switch statements or not. (it would be nice if the date formatter description mentioned learning about switch statements though) N/A N/A No response N/A No response
I don't really get the title of this challenge, what "modern javascript methods" is it referring to, is it just the ? Because surely both map and filter has already been taught at this point. I'm also not sure the switch is really needed. It seems a little verbose and a lot of boilerplate. Compared to say:
Let's go ahead and remove switch statements from the description and the first step.
I feel like the switch used in the code is because the idea of the challenge, among other things, was to teach it. It takes up a lot of the total code. Not mentioning it, doesn't really change that fact. Not unless, we remove the switch from the code as well.
That's a fair point. I'd be fine rewriting the challenge to use the example you shared earlier.
Hi! I am a new, first time contributor. Can I put up a PR for this issue? Seems like a simple fix, just removing 'switch statements' from description and first step
It could be seen as reinforcement. I'm not saying we have to remove it, I'm just saying it seems like part of the point of this challenge was to teach the switch, which is why it is in the description and the code. Not sure how often we use switch statements, but this project is definitely reinforcing it. So we might want to keep it just for that reason. This also isn't the first time we teach and it is in the description as well. Maybe that could be it, reinforcement. Or something like that?
changing the description slightly seems like an easy way to fix the issue
I like this copy, yeah.

"title": "Learn Modern JavaScript Methods by Building Football Team Cards", "intro": [ "One common aspect of building web applications: processing datasets, and then outputting information to the screen. In this sports team cards project, you'll learn how to work with DOM manipulation, object destructuring, event handling, and data filtering.",  "This project will cover concepts like switch statements, default parameters, Object.freeze(), the map() method, and more."   "This project will cover concepts like, default parameters, Object.freeze(), and reinforce your knowledge of the switch statement and map() method."  ] }, "learn-advanced-array-methods-by-building-a-statistics-calculator": {

# --description-- <del> In this project, you will build a set of football team cards and learn about nested objects, object destructuring, default parameters, event listeners, and switch statements. All of the HTML and CSS for this project has been provided for you. </del> <ins> In this project, you will build a set of football team cards and learn about nested objects, object destructuring, and default parameters. All of the HTML and CSS for this project has been provided for you. </ins> Start by accessing the `id` called `"team"` from the HTML document and storing it in a `const` variable called `teamName`.


Question:
In step 6 of the Todo app (js beta) the following sentence needs a slight correction: The part where it says "an empty callback function for the second argument" is the issue. It needs to say "a callback function..." (minus the word empty). This is because the word empty implies this: but actually the very next instruction tells us to add some code in the function after-all. Note that step 7 has a very similar set of instructions but doesn't make the mistake of saying "an empty callback function" in its instructions. (please compare 6 to 7 for this slight difference in the wording) N/A N/A N/A N/A No response
Maybe instead:
This looks like something that can be fixed by "first time" code contributors to this repository. Here is the file that you should be looking at to work on a fix: Change: To: Please make sure you read , we prioritize contributors following the instructions in our guides. Join us in our chat room or the forum 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.
Hi, I can fix this issue
It is open to all first timers, you do not need to get permission.
Ok, thank for letting me know

element.classList.toggle("class-to-toggle"); ``` <del> Add an event listener to the `openTaskFormBtn` element and pass in a `click` event for the first argument and an empty callback function for the second argument. </del> <ins> Add an event listener to the `openTaskFormBtn` element and pass in a `"click"` event for the first argument and an anonymous callback function for the second argument. </ins> <del> For the callback function, use the `classList.toggle()` method to toggle the `hidden` class on the `taskForm` element. </del> <ins> Inside the callback function, use the `classList.toggle()` method to toggle the `"hidden"` class on the `taskForm` element. </ins> Now you can `click` on the "Add new Task" button and see the form modal.


Question:
Error thrown: The issue seems to be with the dependencies and/or NumPy. Not really sure if it is a peer dependency or if PIL is part of the docker image. Forum post for context The Gitpod boilerplate not to throw errors. 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
I updgraded with : It installed version. After that was giving errors, and after upgrading it: To the version project appears to work fine. might need updating to these versions.

extends ../layout block content <del> .jumbotron .col-sm-8.col-sm-offset-2 form(method='POST') </del> <ins> .col-sm-8.col-sm-offset-2.jumbotron form(method='POST', action="/forgot") </ins> h1 Forgot Password input(type='hidden', name='_csrf', value=_csrf) .form-group

button.btn.btn-primary(type='submit') i.fa.fa-key | Reset Password


Question:
Step 77 of the decimal to binary converter project (js beta) says this: Now your showAnimation() function is set up. But if you look closely at your checkUserInput() function, you'll notice that it's not very DRY – you're calling parseInt() to convert into a number several times. I don't think the DRY acronym was introduced before and so this would be a confusing sentence to parse. If the acronym is required, then a definition should be presented. N/A N/A No response N/A No response
Even if we do give a definition, the principle is introduced pretty haphazardly. It's perfectly fine that we make the camper aware that some code is being repeated that should be consolidated. But I don't think we need to introduce the DRY principle. The DRY principle has both pros and cons. Mentioning it as an absolute, without any depth to the subject, is questionable. This is especially true for learners/beginners, which tend to create premature abstractions and over-abstractions the minute they hear about the DRY principle.
I personally think the lesson works without any reference to DRY
My initial reaction is also to just remove it. Maybe something like:
would it also be possible to say something about why it is desirable to not call parseInt several times? Is it a good time to mention for eg that this is waste of processing power or can introduce errors in the code or something like that which would be relevant to know?
Sure, building on lasjorg's suggestion:

# --description-- <del> Now your `showAnimation()` function is set up. But if you look closely at your `checkUserInput()` function, you'll notice that it's not very DRY – you're calling `parseInt()` to convert `numberInput.value` into a number several times. </del> <ins> Now your `showAnimation()` function is set up. But if you look at your `checkUserInput()` function, you'll notice that it is calling `parseInt()` to convert `numberInput.value` into a number several times. </ins> <del> A simple way to fix this is to create a new variable to store the converted number. Then you only have to convert the number once and can use it throughout the function. </del> <ins> This is generally a poor practice, for reasons like performance concerns or even just the fact that you'd have to change your logic in multiple places to update the `parseInt()` call. To fix this, create a new variable to store the converted number. Then you only have to convert the number once and can use it throughout the function. </ins> Create a new variable called `inputInt` and assign it the number converted from `numberInput.value`.


Question:
in step 99 of the decimal to binary project (js beta), the instructions are: Set the value of the msg property to the following string: Example Code "decimalToBinary(1) returns '1' (base case) and gives that value to the stack below. Then it pops off the stack." Note that, since the string itself contains double quotation marks, you'll need to escape them with a backslash, or use single quotation marks for your string value. The remarks at the end say we need to escape the 'double quotation marks' in the string, but the string doesn't have any double quotation marks and I'm able to copy the string as-is and submit it with success to move onto step 100. However, in step 100, the string suddenly changes in the code and becomes: 'decimalToBinary(1) returns "1" (base case) and gives that value to the stack below. Then it pops off the stack.' And now we can see the double quotes that step 99 was referring to. I'm not sure what happened between step 99 and 100 but I think it is confusing and some fix (to one or the other of these steps) is needed. The above is what I have in the editor in step 99 when I click submit and successfully move forward to step 100. N/A No response N/A No response
As I can see, in the step 99, it shows how to use single quotation marks instead of double so that the string works. And in the 100th step it makes a swap in the use of single and double quotation marks. Is there a need to make the swap in the quotation marks in step 99? As the note would then become useless and would need to be changed also
How do you explain the note? I didn’t see double quotation marks in the string that need a backlash , did you?
All I can infer from the note is that to emphasize that 1 by either "1" or '1' a backlash is required or the need to change the quotation so that it does't count that string as ending at that point. The message has chosen the latter solution.
That is not how you should interpret the note. It clearly uses present tense when it says “the string itself contains quotation marks”. This is undeniable and needs an appropriate fix.
But it's indirectly stating to use whichever method to print the required message right? Possibility1: "decimalToBinary(1) returns '1' (base case) and gives that value to the stack below. Then it pops off the stack." Possibility2: "decimalToBinary(1) returns "1 " (base case) and gives that value to the stack below. Then it pops off the stack." I just made the msg same as step 100
And for that double quotation mark, the note says as the string starts with ", it should end with ", and thus it can't use simply " for "1" and need to use '1' instead. Backlash would be another method to amend this issue as I stated in the message above.
Specifying why it's bad would be a little helpful rather than thumbs down, no?
It's a bit odd that step 100 uses single quotes for the string, while other strings in the file use double quotes instead. To simplify things, I think we could: Remove the note from step 99 Swap the quotation marks of the string from step 100 onward: -
thanks. Incorporated both of your suggestions in the linked PR.

"decimalToBinary(1) returns '1' (base case) and gives that value to the stack below. Then it pops off the stack." ``` <del> Note that, since the string itself contains double quotation marks, you'll need to escape them with a backslash, or use single quotation marks for your string value. </del> # --hints-- You should add the property `msg` to the animation object at the top of the stack.

inputVal: 1, marginTop: -200, addElDelay: 2000, <del> msg: 'decimalToBinary(1) returns "1" (base case) and gives that value to the stack below. Then it pops off the stack.' </del> <ins> msg: "decimalToBinary(1) returns '1' (base case) and gives that value to the stack below. Then it pops off the stack." </ins> } --fcc-editable-region-- ];

inputVal: 1, marginTop: -200, addElDelay: 2000, <del> msg: 'decimalToBinary(1) returns "1" (base case) and gives that value to the stack below. Then it pops off the stack.', </del> <ins> msg: "decimalToBinary(1) returns '1' (base case) and gives that value to the stack below. Then it pops off the stack.", </ins> showMsgDelay: 5000, removeElDelay: 10000, },


Question:
There is a bug in the coding challenge JavaScript Algorithms and Data Structures (Beta) in the topic of "Learn Intermediate OOP by Building a Platformer Game," specifically in lesson 25. The requirement states: "Right now, when the player jumps up, it is possible for it to move past the height of the canvas. To fix that, you will need to add a condition to stop the player from falling past the height of the canvas. Create an empty if statement that checks if the sum of the player's y position, height, and y velocity is less than or equal to the height of the canvas." However, when I wrote the code based on this requirement—by adding an if statement and passing the conditions—it shows the code doesn't work. Despite numerous attempts, I applied the correct logic, but it shows various errors such as, "Your condition for the if statement should check if the sum of the player's y position, height, and y velocity is less than or equal to the height of the canvas," and, "You should update your if() statement." The requirement says to keep the statement empty, which contradicts the errors shown. This issue needs to be addressed to ensure the challenge works as intended. According to the requirement in lesson 25 of the JavaScript Algorithms and Data Structures (Beta) course under "Learn Intermediate OOP by Building a Platformer Game," I expected the following behavior: The task was to ensure that when the player jumps up, they do not move past the height of the canvas. The requirement instructed to create an empty if statement that checks if the sum of the player's y position, height, and y velocity is less than or equal to the height of the canvas. Despite fulfilling this requirement by writing an if statement with the correct condition, the system consistently returned an error message stating, "Your condition for the if statement should check if the sum of the player's y position, height, and y velocity is less than or equal to the height of the canvas." I followed the requirement precisely, expecting the code to execute without error after adding the if statement with the specified condition. However, the error message persisted, indicating a discrepancy between the expected behavior and the actual outcome. ! Device: [Laptop] OS: [Windows 11] Browser: [Brave] Version: [1.67.123] No response
Test is expecting literally to not be anything between . It could be changed to remove comments from the code first, or another test could be with appropriate message.
It isn't empty if you add a comment. Empty means nothing. Anyway, I'm fine with removing comments. But there is something to be said for learning to follow instructions precisely. The assert message is bad because it is just a big regex. We could also check the statement body and assert the statement should be empty if we find anything inside it.
Hi and To address the issue with the empty if statement, I've created a function to verify that the if statement's body is entirely empty. Here’s an example: Player Code: update() { (); this.position.x += this.velocity.x; this.position.y += this.velocity.y; if (this.position.y + + this.velocity.y <= ) { // Empty if statement as per your requirement } } Testing Code: function checkIfStatement(playerCode) { const ifStatementRegex = /ifs([sS]?)s{([sS]?)}/; const match = (ifStatementRegex); if (match) { const ifBody = match[1].trim(); return ifBody === ''; // Check if the body is empty } return false; // No matching if statement found } // Example usage const playerCode = update() { (); this.position.x += this.velocity.x; this.position.y += this.velocity.y; if (this.position.y + + this.velocity.y <= ) { // Empty if statement as per your requirement } }; (checkIfStatement(playerCode)); // Should print false because of the comment By ensuring the if statement is entirely empty, we can avoid confusion and meet the requirement precisely. Would this solution be acceptable? I'd be happy to implement it and submit a pull request. Thank you!
Hi yeah it is acceptable and implement the pull request. Thanks for that.
Hi Thank you for the approval! I’m glad to hear that the implementation is acceptable. I’ll keep an eye on the pull request status and address any further issues if they come up. Please let me know if there’s anything else needed from my side. Thanks again for your guidance!

```js const player = new Player(); <del> assert.match(player.update.toString(), /ifs*(s*(?:this.position.ys*+s*this.heights*+s*this.velocity.y|this.position.ys*+s*this.velocity.ys*+s*this.height|this.heights*+s*this.position.ys*+s*this.velocity.y|this.heights*+s*this.velocity.ys*+s*this.position.y|this.velocity.ys*+s*this.position.ys*+s*this.height|this.velocity.ys*+s*this.heights*+s*this.position.y)s*<=s*canvas.heights*)s*{s*}/); </del> <ins> assert.match(player.update.toString(), /ifs*(s*(?:this.position.ys*+s*this.heights*+s*this.velocity.y|this.position.ys*+s*this.velocity.ys*+s*this.height|this.heights*+s*this.position.ys*+s*this.velocity.y|this.heights*+s*this.velocity.ys*+s*this.position.y|this.velocity.ys*+s*this.position.ys*+s*this.height|this.velocity.ys*+s*this.heights*+s*this.position.y)s*<=s*canvas.heights*)/); ``` Your `if` statement should be empty. ```js const player = new Player(); assert.match(player.update.toString(), /ifs*(.*)s*{s*}/); </ins> ``` # --seed--


Question:
in Step 70 of the music player project (js beta) the step requests a ternary statement that is assigned to a variable. People on the forum have a fair amount of struggles with this which is expected given that this may be the first time they are putting these two things together (ternary and assignment). But, now that I've personally moved on to the spam filter project, I noted a curious thing. Step 5 of the spam filter project has a handy-dandy example of exactly the type of thing needed back in the music player project: Here is an example of assigning the result of a ternary operator to an element's text content: Example Code So this issue is a request to consider adding a similar example into step 70. A quick search for this step in the forum will show many examples of people struggling with this code's construction as further evidence of need. I realise that this may make the text too long for step 70 though. If the example is , please modify it to include the 'else' section too. And maybe explain what is el. (el is the element reference) Thanks for your help. N/A N/A No response N/A No response
I think we can simplify the example to something like: And say "here's an example of assigning the result of a ternary operator to a variable. now do this for the elements text contents."
I started working on this and I was wondering how the localization is handled for the challenge markdowns? do I change one of the markdowns and run a script to apply it all?
You only need to update the English markdown. The rest are handled through Crowdin and our automated syncs. However, this issue has not been marked as open for contribution yet.
yeah I realized the issue is marked as discussing still, what more is needed to move the issue forward?
No one else has chimed in, so I'll go ahead and open it for contribution. A PR which resolves this issue should apply my suggestion:

console.log(element.textContent); // Output: This is some text content ``` <ins> You can use a ternary operator to conditionally set the text content value. Here is an example of assigning the result of a ternary operator to a variable: ```js const example = condition ? "I'm true" : "I'm false"; ``` </ins> Use a ternary operator to check if `currentTitle` evaluates to a truthy value. If it does, set `playingSong.textContent` to `currentTitle`. Otherwise, set it to an empty string. Then below that, use a `ternary` operator to check if `currentArtist` is truthy. If so, set `songArtist.textContent` to `currentArtist`. Otherwise, set it to empty string.


Question: The text desription of this challenge is all wrong. It asks you to get a lot of elements, but the code to do so appears to already be populated when the page loads. See screenshot. As such following the instructions would duplicate the code. All the task requires is that you create the following variables. But that is not what the task description asks for: let diceValuesArr = []; let isModalShowing = false; let score = 0; let total = 0; let round = 1; let rolls = 0; let diceValuesArr = []; let isModalShowing = false; let score = 0; let total = 0; let round = 1; let rolls = 0; My code above works. But this does not match what the description asks for. ! Windows 10, Chrome No response

``` ```js <del> const listOfAllDice = document.querySelectorAll(".die"); const scoreInputs = document.querySelectorAll("#score-options input"); const scoreSpans = document.querySelectorAll("#score-options span"); const currentRound = document.getElementById("current-round"); const currentRoundRolls = document.getElementById("current-round-rolls"); const totalScore = document.getElementById("total-score"); const scoreHistory = document.getElementById("score-history"); const rollDiceBtn = document.getElementById("roll-dice-btn"); const keepScoreBtn = document.getElementById("keep-score-btn"); const rulesContainer = document.querySelector(".rules-container"); const rulesBtn = document.getElementById("rules-btn"); </del> --fcc-editable-region-- --fcc-editable-region--


Question:
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:

*/`; function ShowClassic({ <del> challengeFiles: reduxChallengeFiles, </del> <ins> challengeFiles, </ins> data: { challengeNode: { challenge: { <del> challengeFiles, </del> <ins> challengeFiles: seedChallengeFiles, </ins> block, title, description,

}); createFiles( <del> mergeChallengeFiles(challengeFiles, savedChallenge?.challengeFiles) </del> <ins> mergeChallengeFiles(seedChallengeFiles, savedChallenge?.challengeFiles) </ins> ); initTests(tests);

isUsingKeyboardInTablist }: RenderEditorArgs) => { return ( <del> reduxChallengeFiles && ( </del> <ins> challengeFiles && ( </ins> <MultifileEditor <del> challengeFiles={reduxChallengeFiles} </del> <ins> challengeFiles={challengeFiles} </ins> block={block} superBlock={superBlock} containerRef={containerRef}

)} {!isMobile && ( <DesktopLayout <del> challengeFiles={reduxChallengeFiles} </del> <ins> challengeFiles={challengeFiles} </ins> challengeType={challengeType} editor={renderEditor({ isMobileLayout: false,

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';

}, [actionTypes.storedCodeFound]: (state, { payload }) => ({ ...state, <del> challengeFiles: payload </del> <ins> challengeFiles: state.challengeFiles.length ? mergeChallengeFiles(state.challengeFiles, payload) : payload </ins> }), [actionTypes.initTests]: (state, { payload }) => ({ ...state,


Question:
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.

# --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.


Question:
When I want to add my x account to my profile the format of the link must be but the domain nowadays is and when I add it with x instead of twitter it shows me an error ! to the settings of your profile the Your Internet Presence section to add/change the Twitter account link It should allow both domains to be entered not only ! Device: [Desktop] OS: [Ubuntu 22.04] Browser: [Firefox v128.0 - 64bit] If the context is not enough for the issue reply to this issue and mention my username
! Huh?? That's me too!!!
Hello, I am new to contributing so please inform me if I am doing anything wrong. The Line254 effects social link validation. could be changed to X.com for a quick patch although moderators may want to redefine all twitter references to x. Line239
Hey Yes, I think the same but I think it should not be changed to x.com we have to change the value to array instead of string like this: then use a conditional statement to be sure the entered data from a user includes one of these two.

const allowedSocialsAndDomains = { githubProfile: 'github.com', linkedin: 'linkedin.com', <del> twitter: 'twitter.com', </del> <ins> twitter: ['twitter.com', 'x.com'], </ins> website: '' };

const url = new URL(val); const topDomain = url.hostname.split('.').slice(-2); if (topDomain.length === 2) { <del> return topDomain.join('.') === domain; </del> <ins> return Array.isArray(domain) ? domain.some(d => topDomain.join('.') === d) : topDomain.join('.') === domain; </ins> } return false; } catch (e) {


Question:
In the building a spam filter project's step 's instructions, we are told: "Remember that arrays have a .some() method. " However, we cannot remember as it was not taught. In fact it is not actually taught until step 100 of the building a spreadsheet project as far as I'm aware: I suggest that the part of lesson 100 that applies to teaching the some() method be moved into the spam filter project's step 12. N/A Adding the missing lesson for some() before or during step 12 of the building a spam filter project. No response N/A No response
Hello I am a first timer, can i take up this issue? because adding the .some() function explaination to step 12 will solve this issue and i think it will be pretty easy to do that..

# --description-- <del> Arrays have a `.some()` method. Like the `.filter()` method, `.some()` accepts a callback function which should take an element of the array as the argument. The `.some()` method will return `true` if the callback function returns `true` for at least one element in the array. Here is an example of a `.some()` method call to check if any element in the array is an uppercase letter. ```js const arr = ["A", "b", "C"]; arr.some(letter => letter === letter.toUpperCase()); ``` </del> Add a `someeven` property to your `spreadsheetFunctions` - use the `.some()` method to check if any element in the array is even. # --hints--

# --description-- <del> Remember that arrays have a `.some()` method. Use the `.some()` method to check if testing your `msg` on any of your `denyList` regular expressions returns `true`. </del> <ins> Arrays have a `.some()` method. Like the `.filter()` method, `.some()` accepts a callback function which should take an element of the array as the argument. The `.some()` method will return `true` if the callback function returns `true` for at least one element in the array. Here is an example of a `.some()` method call to check if any element in the array is an uppercase letter. ```js const arr = ["A", "b", "C"]; arr.some(letter => letter === letter.toUpperCase()); ``` Use the `.some()` method to check if testing your `msg` on any of your `denyList` regular expressions returns `true`. </ins> Use `regex` as the parameter for the callback function, for clarity.


Question:
There is a typo in the following sentence: . Rectify typo from time to times. No response Device: Laptop OS: Windows 11 Pro 23H2 .3880 Browser: Brave Version: Version 1.67.134 Chromium: 126.0.6478.186 (Official Build) (64-bit)]() No response
This has been opened for First Timers only 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

Your fCC Authors Page is now complete. But you could improve on a few things. <del> First, if you click the `Load More Authors` button a couple of time, you'll see that it won't add more authors to the page. That's because you've reached the end of the authors list. For a better user experience, you should make it clear when there's no more data to display by disabling the button and changing its text. An `if` statement is the perfect tool for this. </del> <ins> First, if you click the `Load More Authors` button a couple of times, you'll see that it won't add more authors to the page. That's because you've reached the end of the authors list. For a better user experience, you should make it clear when there's no more data to display by disabling the button and changing its text. An `if` statement is the perfect tool for this. </ins> Inside the `fetchMoreAuthors` function, write an `if` statement and set the condition to `authorDataArr.length <= endingIndex` – meaning there's no more data to load.


Question:
Initial text of the button is . After step clicking button is expected to change text to , capitalizing the second word. Clicking it again is expected to change text to . Which is too differing from initial capitalization. n/a Capitalization should be consistent throughout the project. Either Show rules and Hide rules; or Show Rules and Hide Rules. No response n/a No response
We will do this option

When the user clicks on the `Show rules` button, the rules for the game should display on the screen. When they click on the button again, the rules should be hidden. <del> Use an event listener to invert the value of the `isModalShowing` variable, toggle the visibility of the `rulesContainer`, and change the text of the `rulesBtn` to `Show Rules` or `Hide Rules`. </del> <ins> Use an event listener to invert the value of the `isModalShowing` variable, toggle the visibility of the `rulesContainer`, and change the text of the `rulesBtn` to `Show rules` or `Hide rules`. </ins> # --hints--

assert.isTrue(rulesContainer.checkVisibility()); ``` <del> When your `rulesBtn` is clicked, your `rulesBtn` should say `Hide Rules`. </del> <ins> When your `rulesBtn` is clicked, your `rulesBtn` should say `Hide rules`. </ins> ```js <del> assert.strictEqual(rulesBtn.innerText.trim(), "Hide Rules"); </del> <ins> assert.strictEqual(rulesBtn.innerText.trim(), "Hide rules"); </ins> ``` When your `rulesBtn` is clicked again, your `isModalShowing` should be `false`.

assert.isFalse(rulesContainer.checkVisibility()); ``` <del> When your `rulesBtn` is clicked again, your `rulesBtn` should say `Show Rules`. </del> <ins> When your `rulesBtn` is clicked again, your `rulesBtn` should say `Show rules`. </ins> ```js <del> assert.strictEqual(rulesBtn.innerText.trim(), "Show Rules"); </del> <ins> assert.strictEqual(rulesBtn.innerText.trim(), "Show rules"); </ins> ``` # --seed--

isModalShowing = !isModalShowing; if (isModalShowing) { <del> rulesBtn.textContent = "Hide Rules"; </del> <ins> rulesBtn.textContent = "Hide rules"; </ins> rulesContainer.style.display = "block"; } else { <del> rulesBtn.textContent = "Show Rules"; </del> <ins> rulesBtn.textContent = "Show rules"; </ins> rulesContainer.style.display = "none"; } });


Question:
There is an extra spacer in the top of the donate page. It might be cause by the donate page or its wrappers. The spacer should be removed or adjusted so it does not show up unecessarly. The issue is viewable locally or on production by viewing the donate page. <img width="1067" alt="Screenshot 2024-07-23 at 3 02 34 PM" src=""- 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
Hi, can I be assigned to this task?
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.
sorry, the issue not so clear for me... where is extra space mentioned in issue? is it this gap under the topbar? !
I think we should just remove the spacers: If the page content needs some extra space below the nav, then the content could have some margin/padding in its CSS.

/> ) : null} <SignoutModal />  {isChallenge && !examInProgress && isRenderBreadcrumb ? (
 <BreadCrumb block={block as string} superBlock={superBlock as string} />
 ) : isExSmallViewportHeight ? ( <Spacer size='xxSmall' /> ) : ( <Spacer size='small' /> )}   {isChallenge && !examInProgress && (isRenderBreadcrumb ? (
 <BreadCrumb block={block as string} superBlock={superBlock as string} />
 ) : ( <Spacer size={isExSmallViewportHeight ? 'xxSmall' : 'small'} /> ))}  {fetchState.complete && children}
 {showFooter && }


Question:
1) Navigate to a multifile challenge: 2) Input some code over multiple lines: 3) Save code 4) Refresh page ! Seen in: I assume this has to do with the container defaulting to the size it is originally given (e.g. 1 line), even though the saved code spans more.
An issue with the label is open 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
This is where the bounds come from. A function called in . In order to fix this, we're going to have to save the current editable region boundaries and then load from them in this function.
Hi Would using be appropriate for persisting the editable region bounds? We could potentially leverage the existing or methods to handle this, rather than writing to every time is called. Please let me know your thoughts or if there’s a better approach. Thanks!
The editable region boundaries are already persisted in local storage, as shown in the screenshot. The issue is when the editor component is mounted, it is preferring the editable regions defined in the challenge seed, as opposed to using the boundaries kept in the saved code from local storage.

ext: Ext; name: string; history?: string[]; <ins> editableRegionBoundaries?: number[]; </ins> contents: string; };

return sortedChallengeFiles.map((file, index) => ({ ...file, <del> contents: sortedSavedChallengeFiles[index].contents </del> <ins> contents: sortedSavedChallengeFiles[index].contents, editableRegionBoundaries: sortedSavedChallengeFiles[index].editableRegionBoundaries </ins> })); }


Question:
The second paragraph of step 8 in the Number Sorter project is awkwardly phrased. The instructions begin as follows: You should use () to print out the result of inputValues. Write the code for this inside the sortInputArray function. To see the result for the inputValues array, log out the inputValues array to the console. Then click on the sort button and open up the console. You should see an array of strings like this: The second paragraph should really say: To see the logged inputValues array, click on the sort button and open up the console. You should see an array of strings like this: It's clearer than the original text. The 1st and 2nd paragraphs together can flow better together as well since the first paragraph just told us to log the inputValues array (so saying again 'log out the inputValues array' sounds wrong). N/A rewrite the 2nd paragraph with clearer text. No response N/A No response
I can work on this issue.
I will open this up as it sounds like a reasonable change. Please make sure you have read the . When an issue has the label, it is not yet ready for a PR. It must be triaged first.

You should use `console.log()` to print out the result of `inputValues`. Write the code for this inside the `sortInputArray` function. <del> To see the result for the `inputValues` array, log out the `inputValues` array to the console. Then click on the sort button and open up the console. You should see an array of strings like this: </del> <ins> To see the logged `inputValues` array, click on the sort button and open up the console. You should see an array of strings like this: </ins> ```js [ '8', '2', '4', '1', '3' ]


Question:
I have completed this, but noticed there is an error in the code which doesn't seem to cause any problems during the lessons. In lesson 20 we use an if statement (seen in the first code block below) and the action is . This stays the same in steps 21 through 25. However from steps 26 onwards has been replaced by as highlighted in the second code block below. (Please note that I did not change the code and have pressed Reset a number of times but the code stays the same) Please advise First code block: Second code block: I expect code that passed to stay the same and be correct - is the code in the second code block above correct? No response Device: HP Laptop OS: Windows 10 Browser: Firefox Version: 128.0.2 No response
Thanks for reporting this. The answer is no, that snippet of code is not correct and it should be fixed. Each occurrence of should be replaced with

terms = [] for n, coefficient in self.coefficients.items(): if not coefficient: <del> coefficient </del> <ins> continue </ins> --fcc-editable-region-- if n == 0: terms.append(f'{coefficient:+}')

terms = [] for n, coefficient in self.coefficients.items(): if not coefficient: <del> coefficient </del> <ins> continue </ins> if n == 0: terms.append(f'{coefficient:+}') elif n == 1:


Question:
Step 18 of the spreadsheet project (js beta) asks us to: Set the aria-label attribute for the input element to the same value as the id attribute. This should be doable just by saying: ; But this code is not accepted and the hint shown is: You should assign letter + number to input.ariaLabel. I think the step should accept assigning into input.ariaLabel No response N/A No response
Yeah, I agree. should pass the test. Since the instruction is vague, I think the test should allow both answers: - Note that the hint text needs to be updated as well. I guess it could be something like:

``` <del> You should assign `letter + number` to `input.ariaLabel`. </del> <ins> You should give `input.ariaLabel` the same value as `input.id`. </ins> ```js <del> assert.match(code, /input.ariaLabels*=s*letters*+s*number/); </del> <ins> assert.match(code, /input.ariaLabels*=s*((letters*+s*number)|(input.id))/); </ins> ``` # --seed--


Question:
The instructions for step 102 of the spreadsheet project (js beta) want us to "use the first two numbers from an array to generate a random whole number." They also say that "The range for this number starts at the smaller positive number (inclusive) among the first two numbers and ends just before the sum of these two numbers." However, looking at the solution, no effort is made to sort out which number is smallest before finding the random value. This tells me that this step is assuming we know that the array is in ascending sorted order. I would like the step to just say this explicitly. For eg it could say: Create a random property. This property should use the first two numbers from an array that has been sorted in ascending order to generate a random whole number. (the change is I said 'an array that has been sorted in ascending order') Or, we could just not care in what order the random number gets generated? (and change the instructions to say to get a random number between the first two numbers of the array regardless of which one goes first?) N/A instructions can be more explicit or checks can be more lenient No response N/A No response
I wrote about this also on discord - I'm not sure why the constraint to have the first number smaller. There's no reason to not allow first number to be higher than second one. Both will give number from different, valid ranges: -number from to . -number from to .
Yeah, I'd just update the text to say:

# --description-- <del> Create a `random` property. This property should use the first two numbers from an array to generate a random whole number. The range for this number starts at the smaller positive number (inclusive) among the first two numbers and ends just before the sum of these two numbers. Use the `Math.floor()` and `Math.random()` methods for the calculation. </del> <ins> Create a `random` property. This property should use the first two numbers from an array to generate a random whole number. The range for this number starts at the first number (inclusive) of the two and ends just before the sum of these two numbers. Use the `Math.floor()` and `Math.random()` methods for the calculation. </ins> # --hints--


Question:
the check for step 15 of the shopping cart does not allow a space to be placed to the immediate right-hand-side of the word constructor (just before the parenthesis), however that seems to be valid syntax. update the check for this step to allow a space to the immediate right-hand-side of the word constructor No response N/A No response
I found a similar issue with another step here: (it also doesn't allow the constructor to have a single space to the immediate right of the word constructor) Can this be fixed at the same time?

You should add a `constructor` method to the `ShoppingCart` class. ```js <del> assert.match(code,  /classs+ShoppingCarts*{s*constructor(s*)s*/) </del> <ins> assert.match(code,  /classs+ShoppingCarts*{s*constructors*(s*)s*/) </ins> ``` Your `constructor` method should be empty. ```js <del> assert.match(code,  /classs+ShoppingCarts*{s*constructor(s*)s*{s*}s*}/) </del> <ins> assert.match(code,  /classs+ShoppingCarts*{s*constructors*(s*)s*{s*}s*}/) </ins> ``` # --seed--


Question:
In the instruction it says: It might be related to , but I think we shouldn't have the double quotes here since they don't appear in the code. If the user put double quotes around , they will get the hint below: ! (It's not deployed to production yet) Change to . 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
Issue is related to string literals. I think you are right, quote marks are not used in the RWD instructions for html text.
I agree, lets remove the quotes from the description. I the first timers label. The Be sure to check out our if you haven't already. Let us know if there's any questions.

# --description-- <del> Within the first `span` element, add the text `"Question"`. </del> <ins> Within the first `span` element, add the text `Question`. </ins> <del> In the second `span` element, add the text `"Question"`. </del> <ins> In the second `span` element, add the text `Question`. </ins> # --hints--


Question:
in step 13 of the dice game (js beta), the instructions say: Your detectFullHouse function should check if the user has rolled three of one number and two of another number. If so, it should update the third radio button to display a score of 25, with the correct attributes. If not, it should update the last radio button to display a score of 0, with the correct attributes. However when we look at the code in the following step 14 for this function we see this: Notice how the last radio button is updated regardless of the full house check? But the instructions said: "If not, it should update the last radio button...". People are trying to follow this instruction and failing and not understanding why (they use an if-else statement for example as in the code below) The instructions should be changed to match the requested code: Your detectFullHouse function should check if the user has rolled three of one number and two of another number. If so, it should update the third radio button to display a score of 25, with the correct attributes. It should also update the last radio button to display a score of 0, with the correct attributes. However, I noticed that the functions getHighestDuplicates and detectFullHouse are both updating the last radio button. So it seems like one of these need not do that? (so we could just not ask for this in this step since it is gonna get updated elsewhere anyway?) No response N/A I noticed this issue when I was attempting to help a camper on the forum:
I don't know why we are updating the (5,0) radio button when there is a non zero value i.e. full house, three of a kind, four of a kind ? Anything positive integer will result in more high score. I think we should only implement the last radio button the zero one when nothing above works. There is two scenario whether the None of the above is a choice which should be present every time OR we must give it as a last option to the user or maybe make it default when rolls are over. I just removed the updateRadioOption(5, 0); from the getHighestDuplicates && detectFullHouse locally in my machine and initiated it when all the 3 roll options are over, then it became the obvious choice. ! ! If you like my implementation I would love to raise a PR or if you have any other implementation logic, I would like to work on this issue :)
I propose updating the text to:
the text works but should we look at why so many of the functions in this project need to update the last radio button? I feel like updating the last radio should just happen independently of the various functions like getHighestDuplicates or detectFullHouse
In a production app, sure. Here, I think the reinforcement of how conditions work and how code after an block executes and such is good.
Okay fair enough, thanks.

If the user rolls three of one number, and two of another number, this is called a full house. Declare a `detectFullHouse` function that accepts a single argument. The function will be passed the `diceValuesArr` array when called. <del> Your `detectFullHouse` function should check if the user has rolled three of one number and two of another number. If so, it should update the third radio button to display a score of `25`, with the correct attributes. If not, it should update the last radio button to display a score of 0, with the correct attributes. </del> <ins> Your `detectFullHouse` function should check if the user has rolled three of one number and two of another number. If so, it should update the third radio button to display a score of `25`, with the correct attributes. Regardless, it should always update the last radio button to display a score of 0, with the correct attributes. </ins> Don't forget to call your new function when the dice are rolled.


Question:
In step 7 of the dice game (js beta) project, the instructions say: If a number appears four or more times, you will need to update the Four of a Kind option with your updateRadioOption function. If a number appears three or more times, you will need to update the Three of a Kind option. In both cases, the score value should be the sum of all five dice. If neither of those are true, the final option should be updated with a score of 0. However, when we check the code in step 8 we see that in fact, the final radio button should be updated regardless of whether any four or three of kind checks passed or failed. The code looks like this in step 8: So in fact the instruction was misleading when it said: If neither of those are true, the final option should be updated with a score of 0. What it actually should have said was: Also, the final option should be updated with a score of 0. (since the decision to update has nothing to do with whether duplicates were found) Whoever works on this issue should be aware of the other issue affecting step 13 in case the discussion there ends up changing what is done for this step N/A step should not suggest that the last radio button should only be updated if the previous checks have failed No response N/A No response
How about:? Regardless of the outcome, the final option should be updated with a score of .
Yes, let's go with this:

If a number appears four or more times, you will need to update the `Four of a Kind` option with your `updateRadioOption` function. If a number appears three or more times, you will need to update the `Three of a Kind` option. In both cases, the score value should be the sum of all five dice. <del> If neither of those are true, the final option should be updated with a score of `0`. Make sure to call your `getHighestDuplicates` when the dice are rolled. </del> <ins> Regardless of the outcome, the final option should be updated with a score of `0`. Make sure to call your `getHighestDuplicates` when the dice are rolled. </ins> # --hints--


Question: 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.

**Tips** <del> - Remember that you learned about conditional statements(`if`, `else if`, and `else`). </del> <ins> - Remember that you learned about conditional statements (`if`, `else if`, and `else`). </ins> - Remember that you learned about comparison operators (`>`, `<`, `>=`, `<=`, `===`). # --hints--


Question: step 68 of the platformer project doesn't provide a useful hint when the solution contains this line: Note the value given to the function is 400 not 40 as requested. The hint when you write this code says: We can probably give a more useful hint if the height property has been defined but with an incorrect value? for eg we could say: You should assign the height property . step should detect that has been defined and give a better hint when the value is incorrect. No response N/A No response

```js const splitter = code.split("if (this.position.x < this.width) {") <ins> assert.match(splitter[1], /this.heights*=s*proportionalSize(s*d+s*)s*;?/); ``` You should assign `proportionalSize(40)` to the `height` property. ```js const splitter = code.split("if (this.position.x < this.width) {") </ins> assert.match(splitter[1], /this.heights*=s*proportionalSize(s*40s*)s*;?/); ```


Question: the code below should be accepted by the check for step 35 of the pyramid project as it is a valid attempt. However, currently it is not accepted unless the user deletes the extra space to the immediate left of the second semi-colon. less strict space checking in the for loop condition. No response N/A No response

Your `for` loop should use `i < count` as the condition. ```js <del> assert.match(__helpers.removeJSComments(code), /fors*(s*lets+is*=s*0;s*is*<s*count;/); </del> <ins> assert.match(__helpers.removeJSComments(code), /fors*(s*lets+is*=s*0s*;s*is*<s*counts*;/); </ins> ``` # --seed--


Question: step 78 of the platformer game project wants the user to type: but if we type the checks in reverse like: It is not accepted. Stumbled on this one because to me writing the long variable name first is easier because I copy and paste it directly from the step and then I spend a little longer looking up how to tell the right key is pressed so I put that second. Since the order of conditions is not specified though in the step, the check should not be so picky. (see above) less strict checking when the order of comparisons in the if makes no difference to the result (or please specify that order matters in the instructions or the hint) No response N/A please note that step 80 has the same issue as well:

You should have an `if` statement that checks if the right key was pressed and if the `isCheckpointCollisionDetectionActive` is true. ```js <del> assert.match(code, /ifs*(s*keys.rightKey.presseds*&&s*isCheckpointCollisionDetectionActives*)s*{s*(.*?)s*}/); </del> <ins> assert.match(code, /ifs*(((s*keys.rightKey.presseds*&&s*isCheckpointCollisionDetectionActives*)|(s*isCheckpointCollisionDetectionActives*&&s*keys.rightKey.presseds*)))s*{s*(.*?)s*}/); </ins> ``` # --seed--

You should have a condition that checks if the left key was pressed and if `isCheckpointCollisionDetectionActive` is true. ```js <del> assert.match(code, /ifs*(s*keys.rightKey.presseds*&&s*isCheckpointCollisionDetectionActives*)s*{s*platforms.forEach(s*((s*platforms*)|platform)s*=>s*{s*platform.position.xs*-=s*5s*;s*}s*)s*;?s*}s*elses+ifs*(s*keys.leftKey.presseds*&&s*isCheckpointCollisionDetectionActives*)s*{.*}s*)s*;?/s); </del> <ins> assert.match(code, /ifs*(((s*keys.rightKey.presseds*&&s*isCheckpointCollisionDetectionActives*)|(s*isCheckpointCollisionDetectionActives*&&s*keys.rightKey.presseds*)))s*{s*platforms.forEach(s*((s*platforms*)|platform)s*=>s*{s*platform.position.xs*-=s*5s*;s*}s*)s*;?s*}s*elses+ifs*(((s*keys.leftKey.presseds*&&s*isCheckpointCollisionDetectionActives*)|(s*isCheckpointCollisionDetectionActives*&&s*keys.leftKey.presseds*)))s*{.*}s*)s*;?/s); </ins> ```


Question:
in step 3 of the fcc authors project (js beta), they mention that we should " Open your console and expand the Response object to see what it contains." but it doesn't actually say that this means we should open the browser's console. It would be best to explicitly say "Open your browser's console and ..." instead. (Also step 4 mentions the console too but if we fix step 3, then hopefully people will remember which console was being referred to when they move to step 4) N/A specific reference to the browser's console is needed so as not to be confused with the fcc console No response N/A No response
I think we should apply the change to both step 3 and step 4 as campers might lose the context if they stop at step 3 and start step 4 some time later. I'm opening this issue to first-time code contributors to this repository. The changes you need to make are: Change "Open your console" to "Open the browser console" in Change "in the console" to "in the browser console" in 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.
I have created a PR

.then((res) => res) ``` <del> Chain the `.then()` method to your `fetch` call. Inside the `.then()` method, add a callback function with `res` as a parameter, then log the `res` to the console so you can see the `Response` object. Open your console and expand the `Response` object to see what it contains. </del> <ins> Chain the `.then()` method to your `fetch` call. Inside the `.then()` method, add a callback function with `res` as a parameter, then log the `res` to the console so you can see the `Response` object. Open your browser console and expand the `Response` object to see what it contains. </ins> Again, don't terminate the code with a semicolon yet.

# --description-- <del> The data you get from a `GET` request is not usable at first. To make the data usable, you can use the `.json()` method on the `Response` object to parse it into JSON. If you expand the `Prototype` of the `Response` object in the console, you will see the `.json()` method there. </del> <ins> The data you get from a `GET` request is not usable at first. To make the data usable, you can use the `.json()` method on the `Response` object to parse it into JSON. If you expand the `Prototype` of the `Response` object in the browser console, you will see the `.json()` method there. </ins> Remove `console.log(res)` and implicitly return `res.json()` instead.


Question:
The hint text should read "You should have" instead of "You could have".
This issue is open to first-time code contributors to this repository. The files that you should be updating are: 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.

# --hints-- <del> You could have `card_number = '4111-1111-4555-1141'` within the main function. </del> <ins> You should have `card_number = '4111-1111-4555-1141'` within the main function. </ins> ```js ({

# --hints-- <del> You could have `card_number_reversed = card_number[-1:-5:-1]` within the `verify_card_number` function. Expected `--fcc-actual--` to equal `--fcc-expected--`. </del> <ins> You should have `card_number_reversed = card_number[-1:-5:-1]` within the `verify_card_number` function. Expected `--fcc-actual--` to equal `--fcc-expected--`. </ins> ```js ({


Question:
The test "Build a Pokémon Search App Project - Build a Pokémon Search App" has some stories that require me to have certain elements with specific IDs to be present in the project. Now, nowhere does it say that those elements must strictly be present in the file. So, when I created those elements with the exact Id-naming requirements in The test did not pass. I think the tests should pass as long as the elements are present in the project regardless of the file they are in. / file: / body{ background-color: black; color: white; } Expected the code to pass since the required elements were present in the project. No response Browser: Microsoft Edge [Version 127.0.2651.105 (Official build) (64-bit)] I am only talking about the tests 3 to 13 here. Ignore other tests as I have not completed the project as of submitting this request.
It's not as much in which file they are, but at which point they are present on page. Tests 3-13 are using similar wording as tests 1 & 2. 1 & 2 clearly must be present on load to be able to fulfill further tests. Similarly tests 14+ are very clear that specific actions must be taken before result can be checked. That's not a case for 1-13 tests.
I understand that the wording is similar but in both the modules of API in "JavaScript Algorithms and Data Structures (Beta)", the elements are created in the and not in the So, when the elements created in the "Build a Pokémon Search App Project" in do not pass, It seems counter-intuitive to teach that in the first place. Also, it makes the test seem more rigid than flexible on methods.
Thank you for your feedback, I see how this might be a bit confusing. We should add a second note: Please note that the first 13 steps must be completed inside the file. We should put this note above the user stories.

In this project, you'll build an app that will search for Pokémon by name or ID and display the results to the user. To retrieve the Pokémon data and images, you'll use freeCodeCamp's PokéAPI Proxy.  **Note:** The first 13 steps must be completed inside the `index.html` file.  **Objective:** Build an app that is functionally similar to https://pokemon-search-app.freecodecamp.rocks **User Stories:**


Question:
A sentence in the description is missing the word "object". It currently says: It should say: The word "object" is missing. The sentence should say, "A NodeList is an array-like object..." ! Device: MacBook Air OS: MacOS 12 Browser: Opera Version: 112.0.5197.53 No response
Would love to be assigned to this issue. I am a first-time contributor and fixing a typo seems like a great first contribution to make to freeCodeCamp! Thanks!
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.

You also need to get the value of your `#budget` input. You already queried this at the top of your code, and set it to the `budgetNumberInput` variable. However, you used `getElementById`, which returns an `Element`, not a `NodeList`. <del> A `NodeList` is an array-like, which means you can iterate through it and it shares some common methods with an array. For your `getCaloriesFromInputs` function, an array will work for the argument just as well as a `NodeList` does. </del> <ins> A `NodeList` is an array-like object, which means you can iterate through it and it shares some common methods with an array. For your `getCaloriesFromInputs` function, an array will work for the argument just as well as a `NodeList` does. </ins> Declare a `budgetCalories` variable and set it to the result of calling `getCaloriesFromInputs` – pass an array containing your `budgetNumberInput` as the argument.


Question: this sentence is missing a comma after "absolute". This looks like something that can be fixed by "first-time" code contributors to this repository. You should look at the file linked above. 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.

# --description-- <del> Move the right eye into position with a `position` property of `absolute` a `top` of `54px`, and a `left` of `134px`. </del> <ins> Move the right eye into position with a `position` property of `absolute`, a `top` of `54px`, and a `left` of `134px`. </ins> # --hints--


Question:
There is a typo in the alt text: Fix the typo in the following files:
This issue is open to first-time code contributors to this repository. The files that you should be updating are linked in the original post. 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.

In the Elements pane, you can see the entire HTML structure of your page. You can click on any of the elements in this pane to select that specific element. Alternatively, you can click the blue-highlighted icon shown below on the left, and hover over any element on the page.       When an element is selected, the Styles tab will show all the currently applied styles, as well as any styles that are being overwritten (indicated by a strikethrough of the text). For example, if you use the inspector to click on the “Your Career in Web Development Starts Here” header on the The Odin Project homepage, on the right-hand side you’ll see all the styles that are currently affecting the element, as seen below:


Question:
The Assignment section is not displayed correctly. <img width="707" alt="Screenshot 2024-09-06 at 07 11 32" src="" Add an empty line between these:
This issue is open to first-time code contributors to this repository. The file that you should be updating is linked in the original post. 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.

When an element is selected, the Styles tab will show all the currently applied styles, as well as any styles that are being overwritten (indicated by a strikethrough of the text). For example, if you use the inspector to click on the “Your Career in Web Development Starts Here” header on the The Odin Project homepage, on the right-hand side you’ll see all the styles that are currently affecting the element, as seen below:  # --assignment-- Play around with Chrome Dev Tools and see if you can answer the following question.


Question:
Keywords in the following sentence should be wrapped within . Update the file with this change:
This issue is open to first-time code contributors to this repository. The file that you should be updating is linked in the original post. 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.
I can work on this.
Are you still working on this?
I submitted a pull request () that is waiting to be reviewed.
I would like to work on this.
I can work on this.

"workshop-blog-page": { "title": "Build a Cat Blog Page", "intro": [  "In this workshop, you will learn how to build an HTML only blog page using semantic elements including the main, nav, article and footer elements."   "In this workshop, you will learn how to build an HTML only blog page using semantic elements including the main, nav, article and footer elements."  ] }, "szcd": { "title": "13", "intro": [] },


Question: The B1 English icon isn't available, so we are temporarily using the A2 icon for this superblock. <img width="709" alt="Screenshot 2024-09-11 at 05 43 53" src=""An icon for B1 should be created (it should look similar to the A2). Link to the A2 icon: You will need to make the following change to your file in order to see the B1 superblock:

import CollegeAlgebra from './college-algebra'; import CSharpLogo from './c-sharp-logo'; import A2EnglishIcon from './a2-english'; <ins> import B1EnglishIcon from './b1-english'; </ins> import RosettaCodeIcon from './rosetta-code'; const iconMap = {

[SuperBlocks.FrontEndDevelopment]: ResponsiveDesign, [SuperBlocks.UpcomingPython]: PythonIcon, [SuperBlocks.A2English]: A2EnglishIcon, <del> [SuperBlocks.B1English]: A2EnglishIcon, </del> <ins> [SuperBlocks.B1English]: B1EnglishIcon, </ins> [SuperBlocks.RosettaCode]: RosettaCodeIcon, [SuperBlocks.PythonForEverybody]: PythonIcon };


Question: "Bash a script" should be "a Bash script" This looks like something that can be fixed by "first-time" code contributors to this repository. The files you need to fix are the two above. 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.

"title": "Periodic Table Database", "intro": [ "This is one of the required projects to earn your certification.", <del> "For this project, you will create Bash a script to get information about chemical elements from a periodic table database." </del> <ins> "For this project, you will create a Bash script to get information about chemical elements from a periodic table database." </ins> ] }, "build-a-salon-appointment-scheduler-project": {

# --description-- <del> This is one of the required projects to earn your certification. For this project, you will create Bash a script to get information about chemical elements from a periodic table database. </del> <ins> This is one of the required projects to earn your certification. For this project, you will create a Bash script to get information about chemical elements from a periodic table database. </ins> # --instructions--


Question: needs to be wrapped in backticks ( ``) in the first sentence needs to be wrapped in backticks. Here also needs to be wrapped in backticks. This looks like something that can be fixed by "first-time" code contributors to this repository. The files you should look at to work on a fix are the 3 linked above. 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.

# --description-- <del> So far you have learned how to create questions with the verb to be. In sentences with the verb `to be` (am, is, are) you just have to change the order of the noun and the verb to create a question. Like this: </del> <ins> So far you have learned how to create questions with the verb `to be`. In sentences with the verb `to be` (am, is, are) you just have to change the order of the noun and the verb to create a question. Like this: </ins> `You are a developer` -> `Are you a developer?`

### --feedback-- <del> `There are` is used for plural nouns, and `bank` is singular. You’ll learn about there are in the next few lessons. </del> <ins> `There are` is used for plural nouns, and `bank` is singular. You’ll learn about `there are` in the next few lessons. </ins> ---

# --description-- <del> To elaborate a question using `there is` you just need to change the order of the verb to be, like so: </del> <ins> To elaborate a question using `there is` you just need to change the order of the verb `to be`, like so: </ins> `There is an ATM nearby` -> `Is there an ATM nearby?`


Question:
There are some small issues that need to be fixed in the following files: optionfor elementsinline"Check your code" String` This looks like something that can be fixed by "first-time" code contributors to this repository. The files you should look at to work on a fix are those linked above. 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.
Hi I'd like to work on this issue. Thanks
Hey 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.

# --description-- <del> JavaScript has seven primitive data types, with `String` being one of them. In JavaScript, a <dfn>string</dfn> represents a sequence of characters and can be enclosed in either single (`'`) or double (`"`) quotes. </del> <ins> JavaScript has seven primitive data types, with String being one of them. In JavaScript, a <dfn>string</dfn> represents a sequence of characters and can be enclosed in either single (`'`) or double (`"`) quotes. </ins> Note that strings are <dfn>immutable</dfn>, which means once they are created, they cannot be changed. The variable can still be reassigned another value.

A pyramid generator is a program where you can set the type of character, the count for the pyramid, and the direction of the pyramid. The program will then generate a pyramid based on those inputs. <del> Click on the `"Check your code"` button to proceed to the next step and start the project. </del> <ins> Click on the "Check your code" button to proceed to the next step and start the project. </ins> # --hints--

--- # --description-- <del> Now that you have some basic understanding of `block` and inline `elements`, pull up your list of `block` and `inline` elements from a couple questions ago and see if you can identify which of the following elements are `block` elements and which are `inline` elements. </del> <ins> Now that you have some basic understanding of `block` and `inline` elements, pull up your list of `block` and `inline` elements from a couple questions ago and see if you can identify which of the following elements are `block` elements and which are `inline` elements. </ins> # --question--

For the checkbox `input`, both the `id`, `name` and `value` attributes should be set to `"location"`. <del> Below that `input` element, add another `label` element with the text of `Reputation` and the for attribute set to `"reputation"`. </del> <ins> Below that `input` element, add another `label` element with the text of `Reputation` and the `for` attribute set to `"reputation"`. </ins> For the checkbox `input`, both the `id`, `name` and `value` attributes should be set to `"reputation"`.

# --description-- <del> Inside your `select` element, add the following five `option` elements with these corresponding values for the option text and `value` attribute: </del> <ins> Inside your `select` element, add the following five `option` elements with these corresponding values for the `option` text and `value` attribute: </ins> **Value Attributes:**

# --description-- <del> Inside your `select` element, add the following five `option` elements with these corresponding values for the option text and `value` attribute: </del> <ins> Inside your `select` element, add the following five `option` elements with these corresponding values for the `option` text and `value` attribute: </ins> **Value Attribute:**


Question:
In the Step 12 of module: "Learn Basic OOP by Building a Shopping Cart". The phrase "with a dollar sign in front of it" might sound like the dollar sign should come after the price value, but it actually means before the price. To avoid this ambiguity, a clearer way to phrase it could be: "Precede the price with a dollar sign ($)." Or "Display the price with a dollar sign ($) before the value." This wording explicitly states that the dollar sign should come before the price, avoiding any confusion. ! 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
Right, but that's what "front" means - it's the beginning. e.g. "I was at the front of the queue, so I was served first". That said, when you write it might be confusing since the hint is "Your first element should have the text of the variable with a dollar sign in front of it.". I can see people reading that and thinking that they do have a dollar sign in front of it. Perhaps the hint would be better as "Your first element should have the text of the variable with a dollar sign in front of it. For example, using "
The phrase would be a good to avoid all these confusion which has been to the pull request
This issue is open for contribution. A PR which resolves this issue should: Update the instructions to read classdessert-price"$"price`
Is this PR Still Open?
the issue is open for contribution, but there are already two PRs that aim to close this issue

# --description-- <del> After your `h2` element, create two `p` elements. Give the first a `class` of `dessert-price`, and the text of the `price` variable with a dollar sign in front of it. Give the second a `class` of `product-category`, and the text `"Category: "` followed by the value of the `category` variable. </del> <ins> After your `h2` element, create two `p` elements. Give the first a `class` of `dessert-price`, and set the text to a dollar sign `"$"` followed by the value of the `price` variable. Give the second a `class` of `product-category`, and the text `"Category: "` followed by the value of the `category` variable. </ins> # --hints--

assert.equal(document.querySelector('.dessert-card')?.children[1].className, 'dessert-price'); ``` <del> Your first `p` element should have the text of the `price` variable with a dollar sign in front of it. </del> <ins> Your first `p` element should have the dollar sign `"$"` followed by the value of the `price` variable. </ins> ```js assert.equal(document.querySelector('.dessert-card')?.children[1].textContent, '$12.99');


Question:
There is an error in the code provided in Step 90 regarding the collision detection logic for platforms. The problem is: The fourth condition contains a syntax error (the unnecessary before ) and will not correctly evaluate the player's vertical position relative to the platform. Recommendation: Please update the course materials to reflect the correct condition in the collision detection logic. Thank you! ! ! 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
Hey can u assign this issue to me!
Hello there This is the starting (seed) code: The third and fourth conditions are by YOU. So, if there is an unnecessary , only you can remove it. Also, your issue description and screenshot do not match. So, I am unsure what problem you are referring to. As such, I am going to close this issue. If you can explain where the problem in the content is, then we will reopen this issue. Thank you.
Hi , The test seems to fail because the expected order isn't being followed, even though both are equivalent. 1+2 = 3 2+1 != 3 ?
Ah. Ok, I understand what you mean now. Thank you for explaining further. The current tests are too strict with the expected input: The solution should probably be to test the value of with mocked data.
Opening for contribution, the test should be updated to at least accept both orders Optional the part of testing with mocked data instead of regex, but it would make the test more robust for sure

You should have a boolean expression that checks if the player's `y` position plus the player's height is greater than or equal to the platform's `y` position. ```js <del> assert.match(code, /consts+platformDetectionRuless*=s*[s*player.position.xs*>=s*platform.position.xs*-s*player.widths*/s*2s*,s*player.position.xs*<=s*platform.position.xs*+s*platform.widths*-s*player.widths*/s*3s*,s*player.position.ys*+s*player.heights*>=s*platform.position.ys*,s*.*s*]s*;?/) </del> <ins> assert.match(code, /consts+platformDetectionRuless*=s*[s*player.position.xs*>=s*platform.position.xs*-s*player.widths*/s*2s*,s*player.position.xs*<=s*platform.position.xs*+s*platform.widths*-s*player.widths*/s*3s*,s*(?:player.position.ys*+s*player.height|player.heights*+s*player.position.y)s*>=s*platform.position.ys*,s*.*s*]s*;?/) </ins> ``` You should have a boolean expression that checks if the player's `y` position is less than or equal to the sum of the platform's `y` position plus the platform's height. ```js <del> assert.match(code, /consts+platformDetectionRuless*=s*[s*player.position.xs*>=s*platform.position.xs*-s*player.widths*/s*2s*,s*player.position.xs*<=s*platform.position.xs*+s*platform.widths*-s*player.widths*/s*3s*,s*player.position.ys*+s*player.heights*>=s*platform.position.ys*,s*player.position.ys*<=s*platform.position.ys*+s*platform.heights*,?s*]s*;?/) </del> <ins> assert.match(code, /consts+platformDetectionRuless*=s*[s*player.position.xs*>=s*platform.position.xs*-s*player.widths*/s*2s*,s*player.position.xs*<=s*platform.position.xs*+s*platform.widths*-s*player.widths*/s*3s*,s*(?:player.position.ys*+s*player.height|player.heights*+s*player.position.y)s*>=s*platform.position.ys*,s*(?:player.position.ys*<=s*platform.position.ys*+s*platform.height|player.position.ys*<=s*platform.heights*+s*platform.position.y)s*,?s*]s*;?/) </ins> ```


Question:
I'm not sure how to fix this sentence, probably or ?
is pretty clear.
This issue is open to first-time code contributors to this repository. The file that you should be updating is linked in the original post. 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.

--- <del> The link's has the mouse is over it. </del> <ins> The mouse cursor is over the link. </ins> ---


Question:
.price { text-align: right; width: 25% } Line 156 of the file within the freeCodeCamp curriculum. Impact: While functionally harmless in modern browsers, adding the semicolon improves code consistency and maintainability. Discussion: The comments on the issue highlight: It's likely a typo since other CSS rules in the challenge have semicolons. While not strictly an error, adding the semicolon for consistency is recommended. to '' on 'Code Edit' down to 'Line 156' ; at last character The default code has not ; sign In css part It does look like a typo: ! ! Device: Laptop OS: Windows 11 Browser: edge Current Status: The issue is labeled as help wanted and type: bug. Multiple pull requests have been linked that might fix this issue: Update by sharabshrestha99 fix(curriculum): typo error on css file by brunades Additional Notes: A comment offers a reference for further details on semicolons in CSS:
it's not necessarily an error, the last rule doesn't need semicolon, but it could be for consistency yeah The list of files in which this is present is (44 files): I will open this for contribution.
Some additional context on last-rule semi-colons for those who might be interested: ! But I agree that omitting it is inconsistent with other steps and so it was likely a typo and we should fix it for consistency.
is this still open? I would like to contribute
hey We typically do not assign issues. Instead, we accept the first pull request that comprehensively solves the issue. Issues labeled 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.

.price { text-align: right; <del> width: 25% </del> <ins> width: 25%; </ins> } --fcc-editable-region-- ```

.price { text-align: right; <del> width: 25% </del> <ins> width: 25%; </ins> } /* FOOTER */

.price { text-align: right; <del> width: 25% </del> <ins> width: 25%; </ins> } ```


Question: 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.

You have either deleted the `body` element or it is missing an opening tag or closing tag. ```js <del> assert(document.querySelector('body') && code.match(/</body>/)); </del> <ins> assert.exists(document.querySelector('body')); assert.match(code, /</body>/); </ins> ``` Your `head` element should have an opening tag. Opening tags have the following syntax: `<elementName>`. ```js <del> assert(code.match(/<head>/)); </del> <ins> assert.match(code, /<head>/); </ins> ``` Your `head` element should have a closing tag. Closing tags have a `/` just after the `<` character. ```js <del> assert(code.match(/</head>/)); </del> <ins> assert.match(code, /</head>/); </ins> ``` Your `head` element should be above the opening `body` element tag. You have put it somewhere else. ```js const noSpaces = code.replace(/s/g, ''); <del> assert(noSpaces.match(/</head><body>/)); </del> <ins> assert.match(noSpaces, /</head><body>/); </ins> ``` # --seed--

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--

You have either deleted the `html` element or it is missing an opening tag or closing tag. ```js <del> assert(code.match(/<html.*?>/) && code.match(/</html>/)); </del> <ins> assert.match(code, /<html.*?>/); assert.match(code, /</html>/); </ins> ``` Your `html` element should have a `lang` attribute with the value `en`. You may have omitted the attribute/value, or have a typo. ```js const extraSpacesRemoved = code.replace(/s+/g, " "); <del> assert(extraSpacesRemoved.match(/<htmls+langs*=s*("?|'?)en1s*>/)); </del> <ins> assert.match(extraSpacesRemoved, /<htmls+langs*=s*("?|'?)en1s*>/); </ins> ``` # --seed--

Your code should begin with the declaration `<!DOCTYPE html>`. You may have omitted the declaration, have a typo, or it is not the first line of code. ```js <del> assert(code.match(/<s*!DOCTYPEs+htmls*>/)); </del> <ins> assert.match(code, /<s*!DOCTYPEs+htmls*>/); </ins> ``` Your `<!DOCTYPE html>` must be located at the top of the document. ```js const noSpaces = code.replace(/s/g, ''); <del> assert(noSpaces.match(/^<!DOCTYPEhtml><html/)); </del> <ins> assert.match(noSpaces, /^<!DOCTYPEhtml><html/); </ins> ``` # --seed--