Initial commit

This commit is contained in:
Azmat Ali
2026-03-02 13:22:47 +05:30
commit e4c373f050
36 changed files with 7304 additions and 0 deletions
+319
View File
@@ -0,0 +1,319 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Loading Product...</title>
<link rel="stylesheet" href="assets/css/styles.css" />
<link rel="stylesheet" href="assets/css/product.css" />
<link rel="stylesheet" href="assets/css/components.css" />
</head>
<body>
<!-- TOP BAR -->
<!-- <div id="topbar-placeholder"></div> -->
<!-- NAVBAR -->
<div id="navbar-placeholder"></div>
<!-- BREADCRUMB -->
<div class="breadcrumb-bar">
<div class="breadcrumb-inner">
<a href="index.html">Home</a>
<span class="sep">›</span>
<a href="#">Product</a>
<span class="sep">›</span>
<span class="current">Loading...</span>
</div>
</div>
<div class="product-page">
<!-- ========================= -->
<!-- TOP SECTION -->
<!-- ========================= -->
<div class="product-top">
<!-- GALLERY -->
<div class="gallery-col">
<div class="gallery-main">
<img
src=""
alt=""
width="600"
height="600"
loading="eager"
decoding="async"
draggable="false" />
</div>
</div>
<!-- SUMMARY -->
<div class="summary-col">
<div class="product-title-row">
<h1 class="product-title"></h1>
</div>
<!-- Rating -->
<div class="rating-row">
<span class="stars">★★★★★</span>
<span class="rating-count"></span>
<span class="rating-divider">|</span>
<span class="review-link"></span>
<span class="rating-divider">|</span>
<span class="sold-count"></span>
</div>
<!-- Price -->
<div class="product-price-row">
<span class="price-current"></span>
<span class="price-original"></span>
<span class="price-badge"></span>
</div>
<!-- Short desc -->
<p class="product-short-desc"></p>
<!-- Benefit pills -->
<div class="benefit-pills"></div>
<!-- Stock -->
<div class="stock-status"></div>
<hr class="prod-divider" />
<!-- Qty + Add to Cart -->
<div class="qty-cart-row">
<div class="qty-control">
<button class="qty-btn" onclick="changeQty(-1)">−</button>
<span class="qty-num" id="qty">1</span>
<button class="qty-btn" onclick="changeQty(1)">+</button>
</div>
<button class="add-to-cart-btn" onclick="addCurrentProductToCart()">
ADD TO CART
</button>
</div>
<hr class="prod-divider" />
<!-- Meta -->
<div class="product-meta-block">
<div class="meta-row">
<span class="meta-label">SKU:</span>
<span class="meta-sku"></span>
</div>
<div class="meta-row">
<span class="meta-label">Weight:</span>
<span class="meta-weight"></span>
</div>
<div class="meta-row">
<span class="meta-label">Price:</span>
<span class="meta-price"></span>
</div>
<div class="meta-row">
<span class="meta-label">Categories:</span>
<div class="meta-categories"></div>
</div>
<div class="meta-row">
<span class="meta-label">Tags:</span>
<div class="meta-tags"></div>
</div>
<div class="meta-row">
<span class="meta-label">Ideal For:</span>
<span class="meta-ideal"></span>
</div>
</div>
</div>
</div>
<!-- ========================= -->
<!-- TABS SECTION -->
<!-- ========================= -->
<div class="product-lower">
<div class="tabs-panel">
<div class="tab-nav">
<button class="tab-nav-btn active" onclick="switchTab(0)">
Description
</button>
<button class="tab-nav-btn" onclick="switchTab(1)">
Ingredients
</button>
<button class="tab-nav-btn" onclick="switchTab(2)">Reviews</button>
<button class="tab-nav-btn" onclick="switchTab(3)">Shipping</button>
</div>
<!-- DESCRIPTION -->
<div class="tab-pane active">
<p class="desc-lead"></p>
<div class="desc-body"></div>
<div class="desc-features"></div>
<div class="how-to-use">
<h4>📋 How to Use</h4>
<div class="how-steps"></div>
</div>
</div>
<!-- INGREDIENTS -->
<div class="tab-pane">
<p class="desc-lead"></p>
<div class="ingredients-grid"></div>
<div class="full-ingredients"></div>
</div>
<!-- REVIEWS -->
<div class="tab-pane">
<div class="reviews-summary">
<div class="rating-big">
<div class="score"></div>
<div class="stars-big">★★★★★</div>
<div class="total"></div>
</div>
<div class="rating-bars"></div>
</div>
<div class="review-list"></div>
</div>
<!-- SHIPPING -->
<div class="tab-pane">
<p class="desc-lead"></p>
<div class="desc-body"></div>
</div>
</div>
</div>
<!-- ========================= -->
<!-- RELATED PRODUCTS SECTION -->
<!-- ========================= -->
<div class="related-section">
<div class="related-header">
<h2 class="related-title">Related Products</h2>
</div>
<div class="related-grid"></div>
</div>
</div>
<!-- FOOTER -->
<div id="footer-placeholder"></div>
<div class="toast" id="toast">
<span class="toast-icon">🛒</span>
<span id="toast-msg">Item added to cart!</span>
<span class="toast-view" onclick="window.location.href='cart.html'">
View Cart
</span>
</div>
<!-- SCRIPTS -->
<script src="assets/js/components.js"></script>
<script src="assets/js/products.js"></script>
<script src="assets/js/cart.js"></script>
<script src="assets/js/product-renderer.js"></script>
<script>
let qty = 1;
let currentProduct = null;
// -----------------------------
// TOAST
// -----------------------------
function showToast(name) {
const toast = document.getElementById("toast");
const msg = document.getElementById("toast-msg");
msg.textContent = `"${name.substring(0, 30)}" added to cart!`;
toast.classList.add("show");
setTimeout(() => {
toast.classList.remove("show");
}, 3500);
}
// -----------------------------
// TABS
// -----------------------------
function switchTab(index) {
const panes = document.querySelectorAll(".tab-pane");
const buttons = document.querySelectorAll(".tab-nav-btn");
panes.forEach((pane, i) => {
pane.classList.toggle("active", i === index);
});
buttons.forEach((btn, i) => {
btn.classList.toggle("active", i === index);
});
if (index === 2) {
document
.querySelector(".tabs-panel")
.scrollIntoView({ behavior: "smooth", block: "start" });
}
}
// -----------------------------
// QUANTITY
// -----------------------------
function changeQty(delta) {
qty = Math.max(1, qty + delta);
document.getElementById("qty").textContent = qty;
}
// -----------------------------
// NAV CART COUNT (Uses Cart Module)
// -----------------------------
function updateNavCartCount() {
const countEl = document.getElementById("nav-cart-count");
if (countEl) {
countEl.textContent = Cart.getTotalCount();
}
}
// Listen for global cart updates
window.addEventListener("cartUpdated", updateNavCartCount);
// -----------------------------
// ADD TO CART (Uses Cart Module)
// -----------------------------
function addCurrentProductToCart() {
if (!currentProduct) return;
Cart.addItem(currentProduct, qty);
showToast(currentProduct.basic.name);
}
// -----------------------------
// INIT PAGE
// -----------------------------
(function () {
const params = new URLSearchParams(window.location.search);
const productId = params.get("id");
if (!productId) {
document.querySelector(".product-page").innerHTML =
"<h2 style='padding:40px'>Product not found</h2>";
return;
}
const product = PRODUCTS.find((p) => p.id === productId);
if (!product) {
document.querySelector(".product-page").innerHTML =
"<h2 style='padding:40px'>Product not found</h2>";
return;
}
currentProduct = product;
renderProduct(product.id);
// Set initial cart badge value
updateNavCartCount();
})();
</script>
</body>
</html>