HTML Academy
Live data
Introduction to JavaScript in the browser19/23
Back to the list of tasks
  • 1. Script to start!
  • 2. Ready or not, here I come
  • 3. First class
  • 4. Find every single one
  • 5. Under cover
  • 6. Temporarily unavailable
  • 7. Special offer
  • 8. Summary of “JavaScript in the browser”. Part 1
  • 9. Twelfth program: “Ice cream test”
  • 10. Be careful, children!
  • 11. Creating a card
  • 12. Describe yourself
  • 13. Don’t repeat yourself
  • 14. Refactor and conquer
  • 15. Adding a picture
  • 16. One more function
  • 17. Check yourself
  • 18. Live data
  • 19. Got it in stock? What if I find one?
  • 20. Special offer
  • 21. Start the conveyor
  • 22. Summary of “JavaScript in the browser”. Part 2
  • 23. Thirteenth program: “Ice cream returns”
Special offer
  • Sign up
  • Log in

Loading…
Everything will be ready in few seconds

  • Theory
  • Theory
  • Comments

Got it in stock? What if I find one?

We are already processing the three properties from the loaded data. We need to process the fourth one: isAvailable. This property stores a Boolean value that describes product availability. If the product is in stock, then the property contains true, otherwise it contains false.

Depending on the presence or absence of the product, the card must have one of the two additional classes: product--available or product--unavailable.

You have already solved this task, and that’s why you need to repeat the same steps by analogy with the first program. Here is a brief summary:

  1. set the variable to store the class name and write the default value into it;
  2. set up a check to see if the product is available;
  3. if the check fails, change the value in the variable;
  4. after the check, add the class of the variable to the product card.

After the function is completed, you need to test it. To do this, change the value of the isAvailable property in the data object to false. If everything is done correctly, the appearance of the card will change.

Comments

  • index.html
  • style.css
  • script.js
HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Catalog | Device</title> <link rel="stylesheet" href="device/setting.css"> <link rel="stylesheet" href="style.css"> </head> <body> <ul class="products"> </ul> <script src="script.js"></script> </body> </html>
CSS
.products { display: flex; flex-wrap: wrap; justify-content: space-between; width: 570px; margin: 20px auto; padding: 0; list-style: none; } .product { position: relative; display: flex; flex-wrap: wrap; justify-content: space-between; width: 270px; margin-bottom: 30px; } .product__image { order: -1; width: 270px; height: 380px; margin-bottom: 15px; } .product__title { max-width: 180px; margin: 0; font-weight: 500; font-size: 18px; line-height: 24px; } .product__price { max-width: 80px; margin: 0; text-align: right; font-weight: 300; font-size: 16px; line-height: 27px; } .product--special { order: -1; width: 100%; height: 380px; flex-direction: column; justify-content: flex-start; align-content: space-between; } .product--special .product__title { width: 270px; max-width: 100%; margin-bottom: 10px; font-size: 28px; line-height: 36px; } .product--special .product__price { width: 270px; max-width: 100%; text-align: left; text-decoration: line-through; color: #cccccc; } .product--special .product__special-price { margin: 0; } .product--special .product__image { outline: 3px solid #ffc600; } .product--special::before { content: "Product of the day"; position: absolute; top: 0; left: 0; display: flex; justify-content: center; align-items: center; padding: 5px 10px; font-weight: 500; color: #111111; text-transform: uppercase; background-color: #ffc600; } .product--available::after, .product--unavailable::after { position: absolute; top: 343px; left: 50%; padding: 10px 5px 2px 5px; border-bottom: 1px solid #57c74b; transform: translateX(-50%); } .product--available::after { content: "In stock"; } .product--unavailable { filter: grayscale(1) opacity(0.7); } .product--unavailable::after { content: "Out of stock"; } .product--special.product--available::after, .product--special.product--unavailable::after { left: 135px; }
JavaScript
var makeElement = function (tagName, className, text) { var element = document.createElement(tagName); element.classList.add(className); if (text) { element.textContent = text; } return element; }; var createCard = function (product) { var listItem = makeElement('li', 'product'); var title = makeElement('h2', 'product__title', product.text); listItem.appendChild(title); var picture = makeElement('img', 'product__image'); picture.src = product.imgUrl; picture.alt = product.text; listItem.appendChild(picture); var price = makeElement('p', 'product__price', product.price); listItem.appendChild(price); return listItem; }; var cardList = document.querySelector('.products'); var productInfo = { isAvailable: true, imgUrl: 'device/item-1.jpg', text: 'Selfie stick for beginners', price: 200, isSpecial: false, specialPrice: null }; var cardItem = createCard(productInfo); cardList.appendChild(cardItem);

What didn’t you like in this task?

Thanks! We’ll fix everything at once!

Click inside the mini browser to put the focus in this window.

100%
Console
Goalscompleted
0
    1. In the createCard function before return, create a variable availabilityClass with 'product--available' value.
    2. After it, add a check to see if the product is out of stock.
    3. If the check works, override the value of availabilityClass to 'product--unavailable'.
    4. After the check, add the listItem class from availabilityClass.
    5. In the productInfo object, change the value of isAvailable to false.

    Cookies ∙ Privacy ∙ License Agreement ∙ About ∙ Contacts ∙ © HTML Academy OÜ, 2019−2025

    VISAMastercard

    Log in

    or

    Forgot your password?

    Sign up

    Sign up

    or
    Log in

    Restore access

    Have you forgotten your password or lost access to your profile? Enter your email connected to your profile and we will send you a link to restore access.

    Forgot to connect your email to the profile? Email us and we’ll help.