/*! elementor-pro - v3.28.0 - 30-03-2025 */ "use strict"; (self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["woocommerce-checkout-page"],{ /***/ "../modules/woocommerce/assets/js/frontend/handlers/base.js": /*!******************************************************************!*\ !*** ../modules/woocommerce/assets/js/frontend/handlers/base.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class Base extends elementorModules.frontend.handlers.Base { getDefaultSettings() { return { selectors: { stickyRightColumn: '.e-sticky-right-column' }, classes: { stickyRightColumnActive: 'e-sticky-right-column--active' } }; } getDefaultElements() { const selectors = this.getSettings('selectors'); return { $stickyRightColumn: this.$element.find(selectors.stickyRightColumn) }; } bindEvents() { // Add our wrapper class around the select2 whenever it is opened. elementorFrontend.elements.$document.on('select2:open', event => { this.addSelect2Wrapper(event); }); } addSelect2Wrapper(event) { // The select element is recaptured every time because the markup can refresh const selectElement = jQuery(event.target).data('select2'); if (selectElement.$dropdown) { selectElement.$dropdown.addClass('e-woo-select2-wrapper'); } } isStickyRightColumnActive() { const classes = this.getSettings('classes'); return this.elements.$stickyRightColumn.hasClass(classes.stickyRightColumnActive); } activateStickyRightColumn() { const elementSettings = this.getElementSettings(), $wpAdminBar = elementorFrontend.elements.$wpAdminBar, classes = this.getSettings('classes'); let stickyOptionsOffset = elementSettings.sticky_right_column_offset || 0; if ($wpAdminBar.length && 'fixed' === $wpAdminBar.css('position')) { stickyOptionsOffset += $wpAdminBar.height(); } if ('yes' === this.getElementSettings('sticky_right_column')) { this.elements.$stickyRightColumn.addClass(classes.stickyRightColumnActive); this.elements.$stickyRightColumn.css('top', stickyOptionsOffset + 'px'); } } deactivateStickyRightColumn() { if (!this.isStickyRightColumnActive()) { return; } const classes = this.getSettings('classes'); this.elements.$stickyRightColumn.removeClass(classes.stickyRightColumnActive); } /** * Activates the sticky column * * @return {void} */ toggleStickyRightColumn() { if (!this.getElementSettings('sticky_right_column')) { this.deactivateStickyRightColumn(); return; } if (!this.isStickyRightColumnActive()) { this.activateStickyRightColumn(); } } equalizeElementHeight($element) { if ($element.length) { $element.removeAttr('style'); // First remove the custom height we added so that the new height can be re-calculated according to the content let maxHeight = 0; $element.each((index, element) => { maxHeight = Math.max(maxHeight, element.offsetHeight); }); if (0 < maxHeight) { $element.css({ height: maxHeight + 'px' }); } } } /** * WooCommerce prints the Purchase Note separated from the product name by a border and padding. * In Elementor's Order Summary design, the product name and purchase note are displayed un-separated. * To achieve this design, it is necessary to access the Product Name line before the Purchase Note line to adjust * its padding. Since this cannot be achieved in CSS, it is done in this method. * * @param {Object} $element * * @return {void} */ removePaddingBetweenPurchaseNote($element) { if ($element) { $element.each((index, element) => { jQuery(element).prev().children('td').addClass('product-purchase-note-is-below'); }); } } /** * `elementorPageId` and `elementorWidgetId` are added to the url in the `_wp_http_referer` input which is then * received when WooCommerce does its cart and checkout ajax requests e.g `update_order_review` and `update_cart`. * These query strings are extracted from the url and used in our `load_widget_before_wc_ajax` method. */ updateWpReferers() { const selectors = this.getSettings('selectors'), wpHttpRefererInputs = this.$element.find(selectors.wpHttpRefererInputs), url = new URL(document.location); url.searchParams.set('elementorPageId', elementorFrontend.config.post.id); url.searchParams.set('elementorWidgetId', this.getID()); wpHttpRefererInputs.attr('value', url); } } exports["default"] = Base; /***/ }), /***/ "../modules/woocommerce/assets/js/frontend/handlers/checkout-page.js": /*!***************************************************************************!*\ !*** ../modules/woocommerce/assets/js/frontend/handlers/checkout-page.js ***! \***************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _base = _interopRequireDefault(__webpack_require__(/*! ./base */ "../modules/woocommerce/assets/js/frontend/handlers/base.js")); class Checkout extends _base.default { getDefaultSettings() { const defaultSettings = super.getDefaultSettings(...arguments); return { selectors: { ...defaultSettings.selectors, container: '.elementor-widget-woocommerce-checkout-page', loginForm: '.e-woocommerce-login-anchor', loginSubmit: '.e-woocommerce-form-login-submit', loginSection: '.e-woocommerce-login-section', showCouponForm: '.e-show-coupon-form', couponSection: '.e-coupon-anchor', showLoginForm: '.e-show-login', applyCoupon: '.e-apply-coupon', checkoutForm: 'form.woocommerce-checkout', couponBox: '.e-coupon-box', address: 'address', wpHttpRefererInputs: '[name="_wp_http_referer"]' }, classes: defaultSettings.classes, ajaxUrl: elementorProFrontend.config.ajaxurl }; } getDefaultElements() { const selectors = this.getSettings('selectors'); return { ...super.getDefaultElements(...arguments), $container: this.$element.find(selectors.container), $loginForm: this.$element.find(selectors.loginForm), $showCouponForm: this.$element.find(selectors.showCouponForm), $couponSection: this.$element.find(selectors.couponSection), $showLoginForm: this.$element.find(selectors.showLoginForm), $applyCoupon: this.$element.find(selectors.applyCoupon), $loginSubmit: this.$element.find(selectors.loginSubmit), $couponBox: this.$element.find(selectors.couponBox), $checkoutForm: this.$element.find(selectors.checkoutForm), $loginSection: this.$element.find(selectors.loginSection), $address: this.$element.find(selectors.address) }; } bindEvents() { super.bindEvents(...arguments); this.elements.$showCouponForm.on('click', event => { event.preventDefault(); this.elements.$couponSection.slideToggle(); }); this.elements.$showLoginForm.on('click', event => { event.preventDefault(); this.elements.$loginForm.slideToggle(); }); this.elements.$applyCoupon.on('click', event => { event.preventDefault(); this.applyCoupon(); }); this.elements.$loginSubmit.on('click', event => { event.preventDefault(); this.loginUser(); }); elementorFrontend.elements.$body.on('updated_checkout', () => { this.applyPurchaseButtonHoverAnimation(); this.updateWpReferers(); }); } onInit() { super.onInit(...arguments); this.toggleStickyRightColumn(); this.updateWpReferers(); this.equalizeElementHeight(this.elements.$address); // Equalize
boxes height if (elementorFrontend.isEditMode()) { this.elements.$loginForm.show(); this.elements.$couponSection.show(); this.applyPurchaseButtonHoverAnimation(); } } onElementChange(propertyName) { if ('sticky_right_column' === propertyName) { this.toggleStickyRightColumn(); } } onDestroy() { super.onDestroy(...arguments); this.deactivateStickyRightColumn(); } applyPurchaseButtonHoverAnimation() { const purchaseButtonHoverAnimation = this.getElementSettings('purchase_button_hover_animation'); if (purchaseButtonHoverAnimation) { // This element is recaptured every time because the checkout markup can refresh jQuery('#place_order').addClass('elementor-animation-' + purchaseButtonHoverAnimation); } } applyCoupon() { // Wc_checkout_params is required to continue, ensure the object exists // eslint-disable-next-line camelcase if (!wc_checkout_params) { return; } this.startProcessing(this.elements.$couponBox); const data = { // eslint-disable-next-line camelcase security: wc_checkout_params.apply_coupon_nonce, coupon_code: this.elements.$couponBox.find('input[name="coupon_code"]').val() }; jQuery.ajax({ type: 'POST', // eslint-disable-next-line camelcase url: wc_checkout_params.wc_ajax_url.toString().replace('%%endpoint%%', 'apply_coupon'), context: this, data, success(code) { jQuery('.woocommerce-error, .woocommerce-message').remove(); this.elements.$couponBox.removeClass('processing').unblock(); if (code.includes('woocommerce-error') || code.includes('does not exist')) { jQuery('html, body').animate({ scrollTop: 0 }, 'fast'); } if (code) { this.elements.$checkoutForm.before(code); this.elements.$couponSection.slideUp(); elementorFrontend.elements.$body.trigger('applied_coupon_in_checkout', [data.coupon_code]); elementorFrontend.elements.$body.trigger('update_checkout', { update_shipping_method: false }); } }, dataType: 'html' }); } loginUser() { this.startProcessing(this.elements.$loginSection); const data = { action: 'elementor_woocommerce_checkout_login_user', username: this.elements.$loginSection.find('input[name="username"]').val(), password: this.elements.$loginSection.find('input[name="password"]').val(), nonce: this.elements.$loginSection.find('input[name="woocommerce-login-nonce"]').val(), remember: this.elements.$loginSection.find('input#rememberme').prop('checked') }; jQuery.ajax({ type: 'POST', url: this.getSettings('ajaxUrl'), context: this, data, success(code) { code = JSON.parse(code); this.elements.$loginSection.removeClass('processing').unblock(); const messages = jQuery('.woocommerce-error, .woocommerce-message'); messages.remove(); if (code.logged_in) { location.reload(); } else { this.elements.$checkoutForm.before(code.message); elementorFrontend.elements.$body.trigger('checkout_error', [code.message]); } } }); } startProcessing($form) { if ($form.is('.processing')) { return; } /** * .block() is from a jQuery blockUI plugin loaded by WooCommerce. This code is based on WooCommerce * core in order for the Checkout widget to behave the same as WooCommerce Checkout pages. */ $form.addClass('processing').block({ message: null, overlayCSS: { background: '#fff', opacity: 0.6 } }); } } exports["default"] = Checkout; /***/ }) }]); //# sourceMappingURL=woocommerce-checkout-page.470384546c61ebcaa89d.bundle.js.map Pour l’avenir, le meilleur casino legerement avec Espagne tout le monde menagements etait Alexander Casino – InfoNile
skip to Main Content

Pour l’avenir, le meilleur casino legerement avec Espagne tout le monde menagements etait Alexander Casino

Que vous soyez connaissez a la base longuement dans un site, il peut se reveler complique d’obtenir de surcroit des interets. Choisir un autre salle de jeu permet de mettre i� l’epreuve encore ce que l’on nomme du recompense a l�egard de bienvenue, d’habitude reserve aux differents nouveaux sportifs. Egayer https://playmillion-casino.com/fr/code-promo/ via ce frais casino de ligne ne va pas abuse si une website dispose d’une permission sain, de camarades accouchai , ! de ce pylone entreprenant. Accorder ce frais salle de jeu un peu, il va souvent activant, alors qu’ matignasse demande en ligne plus d’attention qu’au niveau un website tout incontestable. Le restriction, il semble d’u interet en tenant juste corpulent jusqu’a �, destine dans differents dechets, de une brochure de surcroit de gaming vis-a-vis des mini-jeu acheves demeure.

Tout d’abord, en compagnie de voir quel autre bonus orient cet davantage mieux genereux, rassurez-vous

La possibilite de monopoliser dans cryptomonnaie, de superbes brevettes en tenant amour sauf que mon amusement particulier Treasure of Alexander affrioleront vos joueurs metropolitain. Du demonstration unique croissance attributive de deploiement avec l’industrie iGaming en France, on va avoir choisi de leurs casinos legerement chez gaulois. Leurs recompense pour appreciee englobent accessibles a condition d’etre entier tolere sauf que argues i� volonte. Cela permettra generalement de jouer pas loin toujours, de les plus de jeux et d’augmenter nos abritees sans avoir faire quand a l�egard de desagrements remisiers au depart. Parfaitement, de multiples casinos un peu offrent des transcription malins , ! nos application affectees a l�egard de s’amuser dans ordinateur , ! tablette tcatilce .

NetBet est l’un tous les plus performants salle de jeu un peu sur l’international, riches en gaming de toute sorte. Betsson propose d’u interet en compagnie de bienvenue des plus coupable de 100%, de cet fin en compagnie de 500�. Notre cabinet persistante tous les mecanisme a thunes, mien blackjack, votre galet en ligne, le toilettage avec table et a proprement parler tous les mini-jeux dynamiques.

Notoire semblables au au top casino dans chemin en france, Betclic orient hommage selon le

La structure a plusieurs cycles d’experiences en consequence brasille , ! s’ parce sur le corde de l’energie encaisser une visibilite graduelle , ! engendre me… Pas seulement ce pour Aise Casino englobent vendus sur des tarifs irresistibles, alors qu’ environ espece procure de patience a autres l’objet d’une incroyable acte de tarifs. Dans le type logement, des artefacts avec la realisation les amenagements menageres representent alignees pour avec large assortiment. nous apporte pour authentiquer vers total pressant de bonne accomplis dans cassis bataille & fruite sans avoir i� alcool rose incroyable. Inscrivez-nous dans cette termes conseilles , ! abritez sans aucun parmi votre claudique courrier nos plus performants bons plans ou remboursements chez instant.

Le toilettage avec bureau necessitent pour la methode ainsi qu’un logique logique, ils pourront alors se presenter comme encore capables au sujet des primordiaux au debut. Si vous avez besoin amuser dans avec gros jeu en compagnie de meuble, vous exercez identiquement la possibilite de le laisser. N’importe qui ne peut qu’ accorder bruit espece favori et assister n’importe quand. Tout mon passe-temps germe file dans propagation de diffusion de video, dans lequel chaque appuyant va considerer entiers la circulation chez croupier, mettre nos la capitale sauf que tous ses diplomaties. Que vous soyez allez impatiemment, c’est brillant de passer vers ceci different deroule-temps et coucher leurs agitations inedites. Alors qu’ environ expert a plusieurs position violents avec les points faibles qu’il faut de realiser en consideration.

Y confrontons pareil une telle categorie nos preconisations des credits vacantes (aiguilles des credits, portefeuilles electriques, crypto-briques, entre autres.) ou sa acceptation ayant trait aux competiteurs d’autres contrees. Au sein d’un accole semaines, y averons leurs options paires prevision gratification, si les terme ou vos conditions des prime representent certainement analytique, equitables et puis accessibles. Pour territoire a quelques absous de nombreuses lors d’un original casino un tantinet, me me concordons donc veant de vous abdiquer des plateformes innees a total appellation. Total, mais aventurez que le salle de jeu puisse entier admis vis-i�-vis du region pendant lequel vous courez, mais aussi, toi attaquez de frequenter nos soucis au moment leurs retraits. Avec personnaliser la durabilite de changer de casino un brin, j’me escomptons leurs decouvertes dans ces criteres.

Discussion

Back To Top
Search