알파이 피자 로고 알파이 피자

로그인

회원가입

테마 설정

내 계정

U
사용자
user@example.com

메뉴

상세 정보

-white' : ''); btn.addEventListener('click', () => { state.page = i; render(); window.scrollTo({top:0, behavior:'smooth'}); setQS(); }); pagesEl.appendChild(btn); } if (end < totalPages) { if (end < totalPages - 1) { const dots = document.createElement('span'); dots.textContent = '…'; dots.className = 'px-2'; pagesEl.appendChild(dots); } const last = document.createElement('button'); last.textContent = totalPages; last.className = 'px-3 py-1.5 rounded-lg border'; last.addEventListener('click', () => { state.page = totalPages; render(); window.scrollTo({top:0, behavior:'smooth'}); setQS(); }); pagesEl.appendChild(last); } document.getElementById('prev').disabled = state.page === 1; document.getElementById('next').disabled = state.page === totalPages; } function openDetails(id) { const p = state.data.find(x => x.id === id); const el = document.getElementById('pm-content'); if (!p) return; el.innerHTML = `
${p.name}

${p.name}

${vegBadge(p)} ${availabilityPill(p)}
${p.size} • ${p.crust} • ${spiceLabel(p.spiceLevel)}
${p.description}
Ingredients: ${p.ingredients.map(i => `${i}`).join(' ')}
₹${p.price}
Rating: ${p.rating.toFixed(1)} (${p.reviews} reviews)
`; document.getElementById('product-modal').showModal(); } function saveFavorites() { localStorage.setItem('favorites', JSON.stringify([...state.favorites])); } function saveCart() { localStorage.setItem('cart', JSON.stringify(state.cart)); } document.addEventListener('click', (e) => { const detailsId = e.target.getAttribute('data-details'); const favId = e.target.getAttribute('data-fav'); const cartId = e.target.getAttribute('data-cart'); if (detailsId) openDetails(detailsId); if (favId) { if (state.favorites.has(favId)) state.favorites.delete(favId); else state.favorites.add(favId); saveFavorites(); render(); } if (cartId) { const p = state.data.find(x => x.id === cartId); if (!p || !p.inStock) return; state.cart[cartId] = (state.cart[cartId] || 0) + 1; saveCart(); const alert = document.getElementById('alert-modal'); document.getElementById('alert-text').textContent = 'Added to cart.'; alert.showModal(); } }); document.getElementById('filters').addEventListener('submit', (e) => e.preventDefault()); let searchDebounce; ['search','category','spice','min','max','vegOnly','jainOnly','sort'].forEach(id => { document.addEventListener('change', (e) => { if (e.target.id === id) { if (id !== 'search') { state.page = 1; applyFilters(); } } }); document.addEventListener('input', (e) => { if (e.target.id === id && (id === 'search' || id === 'min' || id === 'max')) { clearTimeout(searchDebounce); searchDebounce = setTimeout(() => { state.page = 1; applyFilters(); }, 180); } }); }); document.getElementById('prev').addEventListener('click', () => { if (state.page > 1) { state.page--; render(); setQS(); window.scrollTo({top:0, behavior:'smooth'}); } }); document.getElementById('next').addEventListener('click', () => { const totalPages = Math.max(1, Math.ceil(state.filtered.length / state.perPage)); if (state.page < totalPages) { state.page++; render(); setQS(); window.scrollTo({top:0, behavior:'smooth'}); } }); document.addEventListener('keydown', (e) => { const tag = (e.target.tagName || '').toLowerCase(); if (e.key.toLowerCase() === 'k' && (tag !== 'input' && tag !== 'textarea')) { e.preventDefault(); document.getElementById('search').focus(); } if (e.key.toLowerCase() === 't' && (tag !== 'input' && tag !== 'textarea')) { e.preventDefault(); const now = document.documentElement.classList.contains('dark') ? 'light' : 'dark'; window.setTheme(now); } }); loadCatalog();