/** * Gestion de la sélection des options produit * Met à jour les attributs Snipcart et gère les classes CSS */ (function() { 'use strict'; /** * Initialise la gestion des options */ function initOptionSelector() { const optionsContainer = document.querySelector('.product-options'); const addToCartButton = document.querySelector('.snipcart-add-item'); if (!addToCartButton) { return; } // Si pas d'options, le bouton est déjà actif if (!optionsContainer) { return; } const radios = optionsContainer.querySelectorAll('input[type="radio"]'); // Réinitialiser toutes les options (important pour le cache navigateur) radios.forEach(radio => { radio.checked = false; }); // Retirer la classe is-selected de tous les li const allLi = optionsContainer.querySelectorAll('li'); allLi.forEach(li => li.classList.remove('is-selected')); // S'assurer que le bouton est désactivé au départ addToCartButton.setAttribute('disabled', 'disabled'); // Écouter les changements de sélection radios.forEach(radio => { radio.addEventListener('change', function() { // Mettre à jour l'attribut Snipcart addToCartButton.setAttribute('data-item-custom1-value', this.value); // Activer le bouton addToCartButton.removeAttribute('disabled'); // Changer le texte du bouton const buttonText = addToCartButton.querySelector('.txt'); if (buttonText) { buttonText.textContent = buttonText.getAttribute('data-default-text') || 'Ajouter au panier'; } // Gérer la classe is-selected sur les li parents allLi.forEach(li => li.classList.remove('is-selected')); this.closest('li').classList.add('is-selected'); }); }); } /** * Initialisation au chargement de la page */ document.addEventListener('DOMContentLoaded', initOptionSelector); })();