Spaces:
Running
Running
| // Track product views | |
| function trackProductView(productId) { | |
| let viewCounts = JSON.parse(localStorage.getItem('viewCounts') || '{}'); | |
| viewCounts[productId] = (viewCounts[productId] || 0) + 1; | |
| localStorage.setItem('viewCounts', JSON.stringify(viewCounts)); | |
| } | |
| // Track add to cart events | |
| function trackAddToCart(productId) { | |
| let addToCartCounts = JSON.parse(localStorage.getItem('addToCartCounts') || '{}'); | |
| addToCartCounts[productId] = (addToCartCounts[productId] || 0) + 1; | |
| localStorage.setItem('addToCartCounts', JSON.stringify(addToCartCounts)); | |
| } | |
| document.addEventListener('DOMContentLoaded', function() { | |
| // Function to get cart items from local storage | |
| function getCartItems() { | |
| const cartItems = localStorage.getItem('cart'); | |
| return cartItems ? JSON.parse(cartItems) : []; | |
| } | |
| // Function to set cart items in local storage | |
| function setCartItems(cartItems) { | |
| localStorage.setItem('cart', JSON.stringify(cartItems)); | |
| } | |
| // Function to add an item to the cart | |
| function addToCart(product) { | |
| trackAddToCart(product.id); // Track add to cart event | |
| let cartItems = getCartItems(); | |
| const existingItem = cartItems.find(item => item.id === product.id); | |
| if (existingItem) { | |
| existingItem.quantity += 1; | |
| } else { | |
| product.quantity = 1; | |
| cartItems.push(product); | |
| } | |
| setCartItems(cartItems); | |
| updateCartUI(); | |
| } | |
| function addToCart(product) { | |
| trackAddToCart('product123'); // Track add to cart event | |
| let cartItems = getCartItems(); | |
| const existingItem = cartItems.find(item => item.id === product.id); | |
| if (existingItem) { | |
| existingItem.quantity += 1; | |
| } else { | |
| product.quantity = 1; | |
| cartItems.push(product); | |
| } | |
| setCartItems(cartItems); | |
| updateCartUI(); | |
| } | |
| function addToCart(product) { | |
| let cartItems = getCartItems(); | |
| const existingItem = cartItems.find(item => item.id === product.id); | |
| if (existingItem) { | |
| existingItem.quantity += 1; | |
| } else { | |
| product.quantity = 1; | |
| cartItems.push(product); | |
| } | |
| setCartItems(cartItems); | |
| updateCartUI(); | |
| } | |
| // Function to update item quantity in the cart | |
| function updateQuantity(productId, quantity) { | |
| let cartItems = getCartItems(); | |
| const itemIndex = cartItems.findIndex(item => item.id === productId); | |
| if (itemIndex !== -1) { | |
| cartItems[itemIndex].quantity = quantity; | |
| if (cartItems[itemIndex].quantity <= 0) { | |
| cartItems.splice(itemIndex, 1); // Remove item if quantity is 0 or less | |
| } | |
| setCartItems(cartItems); | |
| updateCartUI(); | |
| } | |
| updateCartUI(); // Call updateCartUI to update the order summary | |
| } | |
| // Function to remove an item from the cart | |
| function removeItem(productId) { | |
| let cartItems = getCartItems(); | |
| const itemIndex = cartItems.findIndex(item => item.id === productId); | |
| if (itemIndex !== -1) { | |
| cartItems.splice(itemIndex, 1); | |
| setCartItems(cartItems); | |
| updateCartUI(); | |
| } | |
| } | |
| // Function to calculate cart totals | |
| function calculateTotals() { | |
| let cartItems = getCartItems(); | |
| let subtotal = 0; | |
| cartItems.forEach(item => { | |
| subtotal += item.price * item.quantity; | |
| }); | |
| const shipping = 5.00; | |
| const total = subtotal + shipping; | |
| return { subtotal, shipping, total }; | |
| } | |
| // Function to display cart items in cart.html | |
| function displayCartItems() { | |
| let cartItems = getCartItems(); | |
| const cartItemsContainer = document.getElementById('cart-items'); | |
| if (cartItemsContainer) { | |
| cartItemsContainer.innerHTML = ''; // Clear existing items | |
| cartItems.forEach(item => { | |
| const cartItemDiv = document.createElement('div'); | |
| cartItemDiv.classList.add('flex', 'items-center', 'border', 'border-gray-300', 'rounded-md', 'p-4'); | |
| cartItemDiv.innerHTML = ` | |
| <img src="${item.image}" alt="Product Image" class="w-24 h-24 mr-4"> | |
| <div> | |
| <h2 class="text-lg font-bold">${item.name}</h2> | |
| <p class="text-gray-600">$${item.price.toFixed(2)}</p> | |
| <div class="flex items-center mt-2"> | |
| <button class="bg-gray-200 px-2 py-1 rounded-md decrease-quantity" data-product-id="${item.id}">-</button> | |
| <input type="number" value="${item.quantity}" class="w-16 text-center border border-gray-300 rounded-md mx-2 quantity-input" data-product-id="${item.id}"> | |
| <button class="bg-gray-200 px-2 py-1 rounded-md increase-quantity" data-product-id="${item.id}">+</button> | |
| <button class="text-red-500 hover:text-red-700 ml-4 remove-item" data-product-id="${item.id}">Remove</button> | |
| </div> | |
| </div> | |
| `; | |
| cartItemsContainer.appendChild(cartItemDiv); | |
| // Add event listener to remove button | |
| const removeButton = cartItemDiv.querySelector('.remove-item'); | |
| removeButton.addEventListener('click', function() { | |
| const productId = this.dataset.productId; | |
| removeItem(productId); | |
| }); | |
| }); | |
| // Add event listeners to quantity buttons and remove buttons | |
| const decreaseButtons = document.querySelectorAll('.decrease-quantity'); | |
| decreaseButtons.forEach(button => { | |
| button.addEventListener('click', function() { | |
| const productId = this.dataset.productId; | |
| const quantityInput = this.parentNode.querySelector('.quantity-input'); | |
| let quantity = parseInt(quantityInput.value); | |
| quantity = Math.max(1, quantity - 1); // Ensure quantity is not less than 1 | |
| quantityInput.value = quantity; | |
| updateQuantity(productId, quantity); | |
| }); | |
| }); | |
| const increaseButtons = document.querySelectorAll('.increase-quantity'); | |
| increaseButtons.forEach(button => { | |
| button.addEventListener('click', function() { | |
| const productId = this.dataset.productId; | |
| const quantityInput = this.parentNode.querySelector('.quantity-input'); | |
| let quantity = parseInt(quantityInput.value); | |
| quantity++; | |
| quantityInput.value = quantity; | |
| updateQuantity(productId, quantity); | |
| }); | |
| }); | |
| } | |
| } | |
| // Function to update the order summary in cart.html and checkout.html | |
| function updateOrderSummary() { | |
| const { subtotal, shipping, total } = calculateTotals(); | |
| const subtotalElements = document.querySelectorAll('#subtotal'); | |
| subtotalElements.forEach(element => element.textContent = `$${subtotal.toFixed(2)}`); | |
| const shippingElements = document.querySelectorAll('#shipping'); | |
| shippingElements.forEach(element => element.textContent = `$${shipping.toFixed(2)}`); | |
| const totalElements = document.querySelectorAll('#total'); | |
| totalElements.forEach(element => element.textContent = `$${total.toFixed(2)}`); | |
| } | |
| // Function to handle checkout | |
| function handleCheckout() { | |
| const checkoutForm = document.getElementById('checkout-form'); | |
| if (checkoutForm) { | |
| checkoutForm.addEventListener('submit', function(event) { | |
| event.preventDefault(); // Prevent form submission | |
| // Get form data | |
| const name = document.getElementById('name').value; | |
| const address = document.getElementById('address').value; | |
| const city = document.getElementById('city').value; | |
| const state = document.getElementById('state').value; | |
| const zip = document.getElementById('zip').value; | |
| const credit_card = document.getElementById('credit_card').value; | |
| const expiration_date = document.getElementById('expiration_date').value; | |
| const cvv = document.getElementById('cvv').value; | |
| // Store form data in local storage | |
| const shippingInfo = { name, address, city, state, zip }; | |
| const paymentInfo = { credit_card, expiration_date, cvv }; | |
| localStorage.setItem('shippingInfo', JSON.stringify(shippingInfo)); | |
| localStorage.setItem('paymentInfo', JSON.stringify(paymentInfo)); | |
| // Redirect to confirmation page | |
| window.location.href = '/confirmation.html'; | |
| }); | |
| } | |
| } | |
| // Function to display order confirmation details | |
| function displayConfirmationDetails() { | |
| const shippingInfo = localStorage.getItem('shippingInfo'); | |
| const paymentInfo = localStorage.getItem('paymentInfo'); | |
| const cartItems = getCartItems(); | |
| if (shippingInfo && paymentInfo && cartItems) { | |
| const shipping = JSON.parse(shippingInfo); | |
| const payment = JSON.parse(paymentInfo); | |
| document.getElementById('shipping-name').textContent = shipping.name; | |
| document.getElementById('shipping-address').textContent = shipping.address; | |
| document.getElementById('shipping-city').textContent = shipping.city; | |
| document.getElementById('shipping-state').textContent = shipping.state; | |
| document.getElementById('shipping-zip').textContent = shipping.zip; | |
| // Payment information is dummy data in confirmation.html | |
| const orderItemsList = document.getElementById('order-items'); | |
| let orderTotal = 0; | |
| cartItems.forEach(item => { | |
| const listItem = document.createElement('li'); | |
| listItem.textContent = `${item.name} (${item.quantity}) - $${(item.price * item.quantity).toFixed(2)}`; | |
| orderItemsList.appendChild(listItem); | |
| orderTotal += item.price * item.quantity; | |
| }); | |
| document.getElementById('order-total').textContent = `$${orderTotal.toFixed(2)}`; | |
| // Clear cart and shipping info from local storage | |
| localStorage.removeItem('cart'); | |
| localStorage.removeItem('shippingInfo'); | |
| localStorage.removeItem('paymentInfo'); | |
| } | |
| } | |
| // Initialize the cart page | |
| if (window.location.pathname === '/cart.html') { | |
| displayCartItems(); | |
| updateOrderSummary(); | |
| } | |
| // Initialize the checkout page | |
| if (window.location.pathname === '/checkout.html') { | |
| updateOrderSummary(); | |
| handleCheckout(); | |
| } | |
| // Initialize the confirmation page | |
| if (window.location.pathname === '/confirmation.html') { | |
| displayConfirmationDetails(); | |
| } | |
| }); | |
| function updateCartUI() { | |
| if (window.location.pathname === '/cart.html') { | |
| displayCartItems(); | |
| updateOrderSummary(); | |
| } | |
| } | |