| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | --- | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | id: 5ddb965c65d27e1512d44dc2 | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | title: Part 43 | 
					
						
							|  |  |  | challengeType: 0 | 
					
						
							| 
									
										
										
										
											2021-01-13 03:31:00 +01:00
										 |  |  | dashedName: part-43 | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | --- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | # --description--
 | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | Append the `recommendedText` node to the `recommended` element. | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | This is similar to how the `resultText` is appended to `result` previously. | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | # --hints--
 | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | See description above for instructions. | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ```js | 
					
						
							|  |  |  | assert( | 
					
						
							|  |  |  |   code.replace(/\s/g, '').match(/recommended\.appendChild\(recommendedText\)/) | 
					
						
							|  |  |  | ); | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | # --seed--
 | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ## --before-user-code--
 | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```html | 
					
						
							|  |  |  | <!DOCTYPE html> | 
					
						
							|  |  |  | <html> | 
					
						
							|  |  |  |   <head> | 
					
						
							|  |  |  |     <meta charset="utf-8" /> | 
					
						
							|  |  |  |     <title></title> | 
					
						
							|  |  |  |     <meta name="description" content="" /> | 
					
						
							|  |  |  |     <meta name="viewport" content="width=device-width, initial-scale=1" /> | 
					
						
							|  |  |  |     <link rel="stylesheet" href="styles.css" /> | 
					
						
							|  |  |  |   </head> | 
					
						
							|  |  |  |   <body> | 
					
						
							|  |  |  |     <div class="container"> | 
					
						
							|  |  |  |       <form id="calorie-form"> | 
					
						
							|  |  |  |         <h2 class="center">Calorie Counter</h2> | 
					
						
							|  |  |  |         <div class="grid"> | 
					
						
							|  |  |  |           <legend>Sex</legend> | 
					
						
							|  |  |  |           <div> | 
					
						
							|  |  |  |             <input type="radio" name="sex" id="female" value="F" checked /> | 
					
						
							|  |  |  |             <label for="female"> | 
					
						
							|  |  |  |               Female (2,000 calories) | 
					
						
							|  |  |  |             </label> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             <div> | 
					
						
							|  |  |  |               <input type="radio" name="sex" id="male" value="M" /> | 
					
						
							|  |  |  |               <label for="male"> | 
					
						
							|  |  |  |                 Male (2,500 calories) | 
					
						
							|  |  |  |               </label> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |         <div class="grid" id="entries"> | 
					
						
							|  |  |  |           Breakfast | 
					
						
							|  |  |  |           <input | 
					
						
							|  |  |  |             type="number" | 
					
						
							|  |  |  |             min="0" | 
					
						
							|  |  |  |             class="cal-control" | 
					
						
							|  |  |  |             id="breakfast" | 
					
						
							|  |  |  |           /><br /> | 
					
						
							|  |  |  |           Lunch | 
					
						
							|  |  |  |           <input type="number" min="0" class="cal-control" id="lunch" /><br /> | 
					
						
							|  |  |  |           Dinner <input type="number" min="0" class="cal-control" id="dinner" /> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |         <button type="button" class="btn-add" id="add"> | 
					
						
							|  |  |  |           Add Entry | 
					
						
							|  |  |  |         </button> | 
					
						
							|  |  |  |         <button type="submit" class="btn-solid" id="calculate"> | 
					
						
							|  |  |  |           Calculate | 
					
						
							|  |  |  |         </button> | 
					
						
							|  |  |  |         <button type="button" class="btn-outline" id="clear"> | 
					
						
							|  |  |  |           Clear | 
					
						
							|  |  |  |         </button> | 
					
						
							|  |  |  |       </form> | 
					
						
							|  |  |  |       <div id="output"></div> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   </body> | 
					
						
							|  |  |  | </html> | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ## --after-user-code--
 | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```html | 
					
						
							|  |  |  |   </body> | 
					
						
							|  |  |  | </html> | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ## --seed-contents--
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```html | 
					
						
							|  |  |  | <script> | 
					
						
							|  |  |  |   document.getElementById('calorie-form').onsubmit = calculate; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function calculate(e) { | 
					
						
							|  |  |  |     e.preventDefault(); | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  |     const total = Array.from(document.getElementsByClassName('cal-control')) | 
					
						
							|  |  |  |       .map(meal => Number(meal.value)) | 
					
						
							|  |  |  |       .reduce((accumulator, currentValue) => accumulator + currentValue, 0); | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  |     const maxCalories = document.getElementById('female').checked ? 2000 : 2500; | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  |     const difference = total - maxCalories; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const surplusOrDeficit = difference > 0 ? 'Surplus' : 'Deficit'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const output = document.getElementById('output'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const result = document.createElement('h3'); | 
					
						
							|  |  |  |     const resultText = document.createTextNode( | 
					
						
							|  |  |  |       `${Math.abs(difference)} Calorie ${surplusOrDeficit}` | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     result.appendChild(resultText); | 
					
						
							|  |  |  |     output.appendChild(result); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const line = document.createElement('hr'); | 
					
						
							|  |  |  |     output.appendChild(line); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const recommended = document.createElement('h4'); | 
					
						
							|  |  |  |     const recommendedText = document.createTextNode( | 
					
						
							|  |  |  |       `${maxCalories} Recommended Calories` | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | </script> | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # --solutions--
 | 
					
						
							| 
									
										
										
										
											2019-12-07 17:11:14 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```html | 
					
						
							|  |  |  | <script> | 
					
						
							|  |  |  |   document.getElementById('calorie-form').onsubmit = calculate; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function calculate(e) { | 
					
						
							|  |  |  |     e.preventDefault(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const total = Array.from(document.getElementsByClassName('cal-control')) | 
					
						
							|  |  |  |       .map(meal => Number(meal.value)) | 
					
						
							|  |  |  |       .reduce((accumulator, currentValue) => accumulator + currentValue, 0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const maxCalories = document.getElementById('female').checked ? 2000 : 2500; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const difference = total - maxCalories; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const surplusOrDeficit = difference > 0 ? 'Surplus' : 'Deficit'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const output = document.getElementById('output'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const result = document.createElement('h3'); | 
					
						
							|  |  |  |     const resultText = document.createTextNode( | 
					
						
							|  |  |  |       `${Math.abs(difference)} Calorie ${surplusOrDeficit}` | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     result.appendChild(resultText); | 
					
						
							|  |  |  |     output.appendChild(result); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const line = document.createElement('hr'); | 
					
						
							|  |  |  |     output.appendChild(line); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const recommended = document.createElement('h4'); | 
					
						
							|  |  |  |     const recommendedText = document.createTextNode( | 
					
						
							|  |  |  |       `${maxCalories} Recommended Calories` | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     recommended.appendChild(recommendedText); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | </script> | 
					
						
							|  |  |  | ``` |