"use strict"; import { ERROR_SERVER, PRODUCT_INFORMATION_NOT_FOUND } from '/js/constants.js'; import { showErrorMessage, setBasketLocalStorage, getBasketLocalStorage, checkingRelevanceValueBasket } from './utils.js'; /* ================================ ЗАЩИТА ШАБЛОНА card.html ================================ */ (function () { const path = window.location.pathname; if (path !== '/card.html') return; const params = new URLSearchParams(window.location.search); const productId = params.get('id'); if (!productId) { const meta = document.createElement('meta'); meta.name = 'robots'; meta.content = 'noindex, nofollow'; document.head.appendChild(meta); window.location.replace('/'); } })(); /* ================================ ОСНОВНОЙ КОД ================================ */ const wrapper = document.querySelector('.wrapper'); let productsData = []; // Формирование ссылки фабрики function formatFabricLink(fabricName) { if (!fabricName) return '#'; const FABRIC_LINKS = { 'ATLAS CONCORDE': 'atlas-concorde', 'ITALGRANITI': 'italgraniti', }; const special = FABRIC_LINKS[fabricName.toUpperCase()]; if (special) return special; return fabricName .toLowerCase() .replace(/\s+/g, '-') .replace(/[^a-z0-9-]/g, ''); } document.addEventListener('DOMContentLoaded', getProducts); async function getProducts() { try { if (!productsData.length) { const response = await fetch('/data/products.json'); if (!response.ok) { throw new Error(ERROR_SERVER); } productsData = await response.json(); } loadProductDetails(productsData); } catch (error) { showErrorMessage(ERROR_SERVER); console.error(error); } } function getParameterFromURL(parameter) { const params = new URLSearchParams(window.location.search); return params.get(parameter); } function loadProductDetails(data) { if (!data || !data.length) { showErrorMessage(ERROR_SERVER); return; } checkingRelevanceValueBasket(data); const productId = Number(getParameterFromURL('id')); if (!productId) { showErrorMessage(PRODUCT_INFORMATION_NOT_FOUND); return; } const currentProduct = data.find(p => p.id === productId); if (!currentProduct) { showErrorMessage(PRODUCT_INFORMATION_NOT_FOUND); return; } renderInfoProduct(currentProduct); } function renderInfoProduct(product) { const { id, img, title, fabric, collection, price, discount, descr, edizm, razmer, type } = product; const priceDiscount = price - ((price * discount) / 100); setCanonicalForCard(id); optimizePageSEO(title, type, fabric, priceDiscount, discount, descr); const fabricLink = formatFabricLink(fabric); const productHTML = `
${descr}
Размер: ${razmer}