//shopping-cart
let cartIcon = document.querySelector('#cart-icon');
let cart = document.querySelector('.cart');
let closeCart = document.querySelector('#close-cart');
cartIcon.onclick = () =>{
cart.classList.add("active");
};
closeCart.onclick = () =>{
cart.classList.remove("active");
};
//-------------------- add/remove items from the cart --------------------
if (document.readyState == 'loading'){
document.addEventListener('DOMContentLoaded', ready);
}
else{
ready();
}
function ready(){
//remove item from the cart
var removeCartBtn = document.getElementsByClassName('cart-remove');
for(var i = 0; i < removeCartBtn.length; i++){
var button = removeCartBtn[i];
button.addEventListener('click', removeCartItem);
}
//quantity
var quantityInput = document.getElementsByClassName('cart-quantity');
for(var i = 0; i < quantityInput.length; i++){
var input = quantityInput[i];
input.addEventListener('change', quantityChange);
}
//add cart
var addCart = document.getElementsByClassName('add-cart');
for(var i = 0; i < addCart.length; i++){
var button = addCart[i];
button.addEventListener('click', addCartClick);
}
loadCartItems();
}
//remove item
function removeCartItem(event){
var buttonClicked = event.target;
buttonClicked.parentElement.remove();
updateTotal();
saveCartItem();
}
//quantity change
function quantityChange(event){
var input = event.target;
if(isNaN(input.value) || input.value <= 0){
input.value = 1;
}
updateTotal();
saveCartItem();
updateCartIcon();
}
//add item to cart
function addCartClick(event){
var button = event.target;
var shopProduct = button.parentElement;
var title = shopProduct.getElementsByClassName('product-title')[0].innerText;
var price = shopProduct.getElementsByClassName('price')[0].innerText;
var productImg = shopProduct.getElementsByClassName('product-img')[0].src;
addProductToCart(title, price, productImg);
updateTotal();
saveCartItem();
updateCartIcon();
}
function addProductToCart(title, price, productImg){
var cartShopBox = document.createElement('div');
cartShopBox.classList.add('cart-box');
var cartItems = document.getElementsByClassName('cart-content')[0];
var cartItemName = cartItems.getElementsByClassName('cart-product-title');
for (var i = 0; i < cartItemName.length; i++){
if (cartItemName[i].innerText == title){
alert('You have already added this item to your cart');
return;
}
}
var cartBoxContent = `
`;
cartShopBox.innerHTML = cartBoxContent;
cartItems.append(cartShopBox);
cartShopBox.getElementsByClassName('cart-remove')[0].addEventListener('click', removeCartItem);
cartShopBox.getElementsByClassName('cart-quantity')[0].addEventListener('change', quantityChange);
saveCartItem();
updateCartIcon();
}
//price total
function updateTotal(){
var cartContent = document.getElementsByClassName('cart-content')[0];
var cartBoxes = cartContent.getElementsByClassName('cart-box');
var total =0;
for(var i = 0; i < cartBoxes.length; i++){
var cartBox = cartBoxes[i];
var priceElement = cartBox.getElementsByClassName('cart-price')[0];
var quantityElement = cartBox.getElementsByClassName('cart-quantity')[0];
var price = parseFloat(priceElement.innerText.replace('$', ''))
var quantity = quantityElement.value;
total += price*quantity;
}
total = Math.round(total * 100)/100;
document.getElementsByClassName('total-price')[0].innerText = '$' + total;
//save total
localStorage.setItem('cartTotal', total);
}
//item in cart
function saveCartItem(){
var cartContent = document.getElementsByClassName('cart-content')[0];
var cartBoxes = cartContent.getElementsByClassName('cart-box');
var cartItems = [];
for (var i = 0; i < cartBoxes.length; i++){
cartBox = cartBoxes[i];
var titleElement = cartBox.getElementsByClassName('cart-product-title')[0];
var priceElement = cart.getElementsByClassName('cart-price')[0];
var quantityElement = cartBox.getElementsByClassName('cart-quantity')[0];
var productImg = cartBox.getElementsByClassName('cart-img')[0].src;
var item = {
title: titleElement.innerText,
price: priceElement.innerText,
quantity: quantityElement.value,
productImg: productImg,
};
cartItems.push(item);
}
localStorage.setItem('cartItems', JSON.stringify(cartItems));
}
//load in cart
function loadCartItems(){
var cartItems = localStorage.getItem('cartItems');
if (cartItems){
cartItems = JSON.parse(cartItems);
for (var i = 0; i < cartItems.length; i++){
var item = cartItems[i];
addProductToCart(item.title, item.price, item.productImg);
var cartBoxes = document.getElementsByClassName('cart-box');
var cartBox = cartBoxes[cartBoxes.length - 1];
var quantityElement = cartBox.getElementsByClassName('cart-quantity')[0];
quantityElement.value = item.quantity;
}
}
var cartTotal = localStorage.getItem('cartTotal');
if(cartTotal){
document.getElementsByClassName('total-price')[0].innerText = '$' + cartTotal;
}
updateCartIcon();
}
//quantity in cart icon
function updateCartIcon(){
var cartBoxes = document.getElementsByClassName('cart-box');
var quantity = 0;
for (var i = 0; i < cartBoxes.length; i++){
var cartBox = cartBoxes[i];
var quantityElement = cartBox.getElementsByClassName('cart-quantity')[0];
quantity += parseInt(quantityElement.value);
}
var cartIcon = document.querySelector('#cart-icon');
cartIcon.setAttribute('data-quantity', quantity);
}
//clear cart after making a payment
function clearCart(){
var cartContent = document.getElementsByClassName('cart-content')[0];
cartContent.innerHTML = '';
updateTotal();
localStorage.removeItem('cartItems');
}