1$(document).ready(function() { 2 3 /* Gestion du tunnel de commande */ 4 $('.stepOrder.activated').click(function(){ 5 if($(this).attr('target') == "cart"){ 6 7 document.location.href="/index.php?controller=cart&action=show"; 8 }else{ 9 $(this).parent().parent().hide(); 10 $('#'+$(this).attr('target')).find('.content').fadeIn(); 11 12 } 13 14 15 }); 16}); 17 18document.addEventListener('DOMContentLoaded', function() { 19 if (typeof jQuery === 'undefined') return; 20 21 const $ = jQuery; 22 23 // Remplacer les boutons pour supprimer les gestionnaires existants 24 $('button[data-action="show-password"]').each(function() { 25 const $oldButton = $(this); 26 const $newButton = $oldButton.clone(false); // Cloner sans les événements 27 $oldButton.replaceWith($newButton); 28 29 // Ajouter notre propre gestionnaire isolé 30 $newButton.on('click', function(event) { 31 // Bloquer complètement la propagation 32 event.preventDefault(); 33 event.stopPropagation(); 34 event.stopImmediatePropagation(); 35 36 // Référence au champ de mot de passe 37 const $passwordField = $(this).closest('.input-group').find('input.js-visible-password'); 38 39 // Basculer la visibilité du mot de passe 40 if ($passwordField.attr('type') === 'password') { 41 $passwordField.attr('type', 'text'); 42 $(this).find('i.material-icons').text('visibility_off'); 43 } else { 44 $passwordField.attr('type', 'password'); 45 $(this).find('i.material-icons').text('remove_red_eye'); 46 } 47 48 // Empêcher toute modification des classes checkout-step 49 setTimeout(function() { 50 $('.content').removeClass('-reachable -clickable'); 51 }, 0); 52 53 return false; 54 }); 55 }); 56}); 57/* ***** */ 58 59/** 60 * PrestaShop 8.2 - Désactivation du bouton de réduction à quantité 1 61 * 62 * Ce script est spécifiquement optimisé pour fonctionner avec la structure HTML 63 * du panier PrestaShop 8.2. Il désactive le bouton de réduction lorsque la 64 * quantité du produit est égale à 1 et applique un style visuel distinctif. 65 * 66 * Fonctionnalités : 67 * - Vérification immédiate des quantités au chargement de la page 68 * - Désactivation du bouton de réduction pour les produits à quantité 1 69 * - Style visuel avec opacité réduite pour les boutons désactivés 70 * - Compatible avec la structure spécifique du panier PrestaShop 8.2 71 * 72 * @author Inspiré des pratiques de Ghislain Auzillon 73 * @version 1.2.0 74 */ 75(function() { 76 // Fonction qui s'exécute lorsque le DOM est complètement chargé 77 function onDOMReady() { 78 // Ajoute des styles CSS pour les boutons désactivés 79 addCustomStyles(); 80 81 // Initialise la gestion des boutons de quantité 82 initQuantityButtonsManager(); 83 84 // Configure les écouteurs d'événements pour les mises à jour dynamiques 85 setupEventListeners(); 86 } 87 88 /** 89 * Ajoute des styles CSS personnalisés pour les boutons désactivés 90 */ 91 function addCustomStyles() { 92 // Crée un élément style 93 const styleElement = document.createElement('style'); 94 95 // Définit les styles pour les boutons désactivés 96 styleElement.textContent = ` 97 /* Styles pour les boutons désactivés */ 98 .btn-touchspin.disabled, 99 .btn-touchspin[disabled] { 100 opacity: 0.4 !important; 101 cursor: not-allowed !important; 102 pointer-events: none !important; 103 } 104 105 /* Style spécifique pour l'icône dans le bouton désactivé */ 106 .btn-touchspin.disabled i, 107 .btn-touchspin[disabled] i { 108 opacity: 0.9 !important; 109 color:#000000; 110 } 111 `; 112 113 // Ajoute les styles à la page 114 document.head.appendChild(styleElement); 115 } 116 117 /** 118 * Initialise la gestion des boutons de quantité sur tous les produits du panier 119 */ 120 function initQuantityButtonsManager() { 121 // Sélectionne tous les éléments de quantité dans le panier 122 const quantityInputs = document.querySelectorAll('.js-cart-line-product-quantity'); 123 124 // Si aucun input de quantité n'est trouvé, on s'arrête là 125 if (!quantityInputs.length) return; 126 127 // Pour chaque input de quantité trouvé
128 quantityInputs.forEach(function(input) { 129 // Trouve le conteneur parent qui contient les boutons 130 const container = input.closest('.bootstrap-touchspin'); 131 if (!container) return; 132 133 // Trouve le bouton de décrémentation associé à cet input 134 const decrementButton = container.querySelector('.js-decrease-product-quantity'); 135 if (!decrementButton) return; 136 137 // Vérifie et met à jour l'état du bouton en fonction de la valeur actuelle 138 updateDecrementButtonState(input, decrementButton); 139 140 // Ajoute un écouteur d'événement pour surveiller les changements de valeur 141 input.addEventListener('change', function() { 142 updateDecrementButtonState(this, decrementButton); 143 }); 144 145 // Ajoute des écouteurs pour les boutons d'incrémentation et de décrémentation 146 setupButtonListeners(container, input, decrementButton); 147 }); 148 } 149 150 /** 151 * Configure les écouteurs d'événements pour les boutons d'incrémentation et de décrémentation 152 * @param {HTMLElement} container - Le conteneur bootstrap-touchspin 153 * @param {HTMLElement} input - L'input de quantité 154 * @param {HTMLElement} decrementButton - Le bouton de décrémentation 155 */ 156 function setupButtonListeners(container, input, decrementButton) { 157 // Trouve le bouton d'incrémentation 158 const incrementButton = container.querySelector('.js-increase-product-quantity'); 159 if (incrementButton) { 160 // Ajoute un écouteur pour le bouton d'incrémentation 161 incrementButton.addEventListener('click', function() { 162 // Temporisation pour laisser PrestaShop mettre à jour la valeur 163 setTimeout(function() { 164 updateDecrementButtonState(input, decrementButton); 165 }, 50); 166 }); 167 } 168 169 // Ajoute un écouteur pour le bouton de décrémentation 170 decrementButton.addEventListener('click', function() { 171 // Temporisation pour laisser PrestaShop mettre à jour la valeur 172 setTimeout(function() { 173 updateDecrementButtonState(input, decrementButton); 174 }, 50); 175 }); 176 } 177 178 /** 179 * Met à jour l'état du bouton de décrémentation selon la valeur de l'input 180 * @param {HTMLElement} input - L'élément input de quantité 181 * @param {HTMLElement} button - Le bouton de décrémentation 182 */ 183 function updateDecrementButtonState(input, button) { 184 // Récupère la valeur numérique de l'input 185 const quantity = parseInt(input.value, 10); 186 187 // Si la quantité est 1 ou moins, désactive le bouton 188 if (isNaN(quantity) || quantity <= 1) { 189 button.setAttribute('disabled', 'disabled'); 190 button.classList.add('disabled'); 191 } 192 // Sinon, active le bouton 193 else { 194 button.removeAttribute('disabled'); 195 button.classList.remove('disabled'); 196 } 197 } 198 199 /** 200 * Configure les écouteurs d'événements pour les mises à jour dynamiques du panier 201 */ 202 function setupEventListeners() { 203 // Ãcoute l'événement de mise à jour du panier de PrestaShop 204 document.addEventListener('prestashop:updateCart', function() { 205 setTimeout(initQuantityButtonsManager, 100); 206 }); 207 208 // Ãcoute l'événement de mise à jour du produit de PrestaShop 209 if (typeof prestashop !== 'undefined') { 210 prestashop.on('updatedProduct', function() { 211 setTimeout(initQuantityButtonsManager, 100); 212 }); 213 214 // Ãcoute aussi les autres événements qui pourraient déclencher une mise à jour 215 prestashop.on('updatedCart', function() { 216 setTimeout(initQuantityButtonsManager, 100); 217 }); 218 } 219 220 // Vérifie aussi après que toutes les ressources sont chargées 221 window.addEventListener('load', function() { 222 initQuantityButtonsManager(); 223 }); 224 225 // Ajoute un observateur de mutations pour détecter les changements dans le DOM 226 setupMutationObserver(); 227 } 228 229 /** 230 * Configure un observateur de mutations pour détecter les changements dans le panier 231 */ 232 function setupMutationObserver() { 233 // Si l'API MutationObserver est disponible 234 if (window.MutationObserver) { 235 // Sélectionne le conteneur du panier 236 const cartContainer = document.querySelector('.cart-container'); 237 if (!cartContainer) return; 238 239 // Crée un observateur de mutations 240 const observer = new MutationObserver(function(mutations) { 241 // Pour chaque mutation 242 for (let mutation of mutations) { 243 // Si des nÅuds ont été ajoutés ou modifiés 244 if (mutation.type === 'childList' || mutation.type === 'subtree') { 245 initQuantityButtonsManager(); 246 break; 247 } 248 } 249 }); 250 251 // Configure l'observateur pour surveiller les modifications dans le conteneur du panier 252 observer.observe(cartContainer, { 253 childList: true, 254 subtree: true 255 }); 256 } 257 } 258 259 // Exécute le script lorsque le DOM est chargé 260 if (document.readyState === 'loading') { 261 document.addEventListener('DOMContentLoaded', onDOMReady); 262 } else { 263 onDOMReady(); 264 } 265})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.