PageSourceSearch

https://montagut.com/themes/child_classic_montagut/assets/js/checkout.js

js montagut.com collected 2026-10-08 01:32:02 UTC 9,371 bytes, 265 lines download raw bytes

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.