Наш каталог

Современная мебель для вашего дома

'; resultCount.textContent = '0 товаров'; return; } var html = ''; for (var i = 0; i < products.length; i++) { var p = products[i]; var priceStr = p.price.toLocaleString('ru-RU') + ' ₽'; var oldStr = p.oldPrice ? '' + p.oldPrice.toLocaleString('ru-RU') + ' ₽' : ''; html += '
' + '
' + '' + p.name + '' + '' + p.category + '' + '
' + '
' + '

' + p.name + '

' + '

' + p.description + '

' + '
' + '
' + priceStr + '' + oldStr + '
' + '
' + '' + '
' + '
' + '
' + '
'; } grid.innerHTML = html; resultCount.textContent = products.length + ' ' + pluralize(products.length, ['товар', 'товара', 'товаров']); } function pluralize(n, forms) { return forms[(n % 10 === 1 && n % 100 !== 11) ? 0 : (n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20)) ? 1 : 2]; } /* ===== Filter + search ===== */ function filterProducts() { var query = searchInput.value.trim().toLowerCase(); var filtered = PRODUCTS.filter(function(p) { if (activeFilter !== 'Все' && p.category !== activeFilter) { return false; } if (query) { return p.name.toLowerCase().indexOf(query) !== -1 || p.description.toLowerCase().indexOf(query) !== -1 || p.category.toLowerCase().indexOf(query) !== -1; } return true; }); renderGrid(filtered); } /* ===== Open popup ===== */ function openPopup(productId) { var p = null; for (var i = 0; i < PRODUCTS.length; i++) { if (PRODUCTS[i].id === productId) { p = PRODUCTS[i]; break; } } if (!p) { return; } currentProductId = productId; /* Gallery */ popupMainImg.src = p.images[0]; popupMainImg.alt = p.name; var thumbsHtml = ''; for (var j = 0; j < p.images.length; j++) { thumbsHtml += 'Фото ' + (j + 1) + ''; } popupThumbs.innerHTML = thumbsHtml; /* Info */ popupCategory.textContent = p.category.toUpperCase(); popupName.textContent = p.name; popupPrice.textContent = p.price.toLocaleString('ru-RU') + ' ₽'; popupPriceOld.textContent = p.oldPrice ? p.oldPrice.toLocaleString('ru-RU') + ' ₽' : ''; popupPriceOld.style.display = p.oldPrice ? '' : 'none'; popupDesc.textContent = p.description; /* Characteristics */ var charsHtml = ''; var keys = Object.keys(p.characteristics); for (var k = 0; k < keys.length; k++) { charsHtml += '' + keys[k] + '' + p.characteristics[keys[k]] + ''; } popupCharsTable.innerHTML = charsHtml; /* Included */ var inclHtml = ''; for (var m = 0; m < p.included.length; m++) { inclHtml += '
  • ' + p.included[m] + '
  • '; } popupIncludedList.innerHTML = inclHtml; /* Layout */ popupLayoutText.textContent = p.layout; /* WhatsApp */ var phone = '79261234567'; /* ← замени на свой номер */ var msg = 'Здравствуйте! Меня интересует товар: ' + p.name + ' (' + p.price.toLocaleString('ru-RU') + ' ₽). Каталог на сайте.'; whatsappBtn.href = 'https://wa.me/' + phone + '?text=' + encodeURIComponent(msg); /* Reset tabs */ var tabs = popupInner.querySelectorAll('.cat1__popup-tab'); var contents = popupInner.querySelectorAll('.cat1__popup-tab-content'); for (var t = 0; t < tabs.length; t++) { tabs[t].classList.remove('cat1__popup-tab--active'); } for (var c = 0; c < contents.length; c++) { contents[c].classList.remove('cat1__popup-tab-content--active'); } if (tabs[0]) { tabs[0].classList.add('cat1__popup-tab--active'); } if (contents[0]) { contents[0].classList.add('cat1__popup-tab-content--active'); } /* Show */ document.body.style.overflow = 'hidden'; overlay.classList.add('cat1__overlay--open'); popup.classList.add('cat1__popup--open'); } function closePopup() { document.body.style.overflow = ''; overlay.classList.remove('cat1__overlay--open'); popup.classList.remove('cat1__popup--open'); currentProductId = null; } /* ===== Event listeners ===== */ /* Filter buttons (delegation) */ filtersWrap.addEventListener('click', function(e) { var btn = e.target.closest('.cat1__filter-btn'); if (!btn) { return; } var cat = btn.getAttribute('data-cat'); if (cat === activeFilter) { return; } activeFilter = cat; var allBtns = filtersWrap.querySelectorAll('.cat1__filter-btn'); for (var i = 0; i < allBtns.length; i++) { allBtns[i].classList.remove('cat1__filter-btn--active'); } btn.classList.add('cat1__filter-btn--active'); filterProducts(); }); /* Search */ searchInput.addEventListener('input', filterProducts); /* Card click (delegation) */ grid.addEventListener('click', function(e) { var card = e.target.closest('.cat1__card'); if (!card) { return; } var id = parseInt(card.getAttribute('data-id'), 10); openPopup(id); }); /* Close popup */ popupClose.addEventListener('click', closePopup); overlay.addEventListener('click', closePopup); /* Close on Escape */ document.addEventListener('keydown', function(e) { if (e.key === 'Escape') { closePopup(); } }); /* Tab switching */ popupInner.addEventListener('click', function(e) { var tab = e.target.closest('.cat1__popup-tab'); if (!tab) { return; } var target = tab.getAttribute('data-tab'); var allTabs = popupInner.querySelectorAll('.cat1__popup-tab'); var allContents = popupInner.querySelectorAll('.cat1__popup-tab-content'); for (var i = 0; i < allTabs.length; i++) { allTabs[i].classList.remove('cat1__popup-tab--active'); } for (var j = 0; j < allContents.length; j++) { allContents[j].classList.remove('cat1__popup-tab-content--active'); } tab.classList.add('cat1__popup-tab--active'); var contentEl = document.getElementById('cat1-popup-tab-' + target); if (contentEl) { contentEl.classList.add('cat1__popup-tab-content--active'); } }); /* Thumbnail click (delegation) */ popupThumbs.addEventListener('click', function(e) { var thumb = e.target.closest('.cat1__popup-thumb'); if (!thumb) { return; } var index = parseInt(thumb.getAttribute('data-index'), 10); if (currentProductId === null) { return; } var p = null; for (var i = 0; i < PRODUCTS.length; i++) { if (PRODUCTS[i].id === currentProductId) { p = PRODUCTS[i]; break; } } if (!p || !p.images[index]) { return; } popupMainImg.src = p.images[index]; var allThumbs = popupThumbs.querySelectorAll('.cat1__popup-thumb'); for (var j = 0; j < allThumbs.length; j++) { allThumbs[j].classList.remove('cat1__popup-thumb--active'); } thumb.classList.add('cat1__popup-thumb--active'); }); /* ===== Init ===== */ renderFilters(); filterProducts(); })();
    Made on
    Tilda