freeCodeCamp/curriculum/challenges/german/15-javascript-algorithms-an.../learn-form-validation-by-bu.../step-035.md

4.1 KiB

id title challengeType dashedName
5ddb965c65d27e1512d44dba Step 35 0 step-35

--description--

The data that we currently pass to createTextNode() is Math.abs(difference) + ' Calorie ' + surplusOrDeficit.

Some people consider this a little cumbersome and prefer to use template literals instead.

Template literals are enclosed in backticks (``), and JavaScript expressions and variables can be embedded by enclosing them in ${}.

For example, console.log(`Hello ${firstName}, today is ${Date.now()}`) is the same as writing console.log('Hello ' + firstName + ', today is ' + Date.now()).

Convert the data inside of createTextNode() to be a template literal.

--hints--

See description above for instructions.

assert(
  code
    .replace(/\s/g, '')
    .match(
      /document\.createTextNode\(\`\$\{Math\.abs\(difference\)\}Calorie\$\{surplusOrDeficit\}\`/
    )
);

--seed--

--before-user-code--

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

--after-user-code--

  </body>
</html>

--seed-contents--

<script>
  document.getElementById('calorie-form').onsubmit = calculate;

--fcc-editable-region--
  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
    );
  }
--fcc-editable-region--
</script>

--solutions--

<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}`
    );
  }
</script>