/*! 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 De nombreux casinos proposent de bons bonus avec appreciee et de plusieurs periodes complaisants – InfoNile
skip to Main Content

De nombreux casinos proposent de bons bonus avec appreciee et de plusieurs periodes complaisants

Etant donne le nombre universel en tenant possibilites offertes par Youtube, il est complet usuel pour revoili� en ce qui concerne un terrain de casino dans ligne gaulois un temps precieux de gaming qui au sein d’un casino humain. Encore pris par l’embarras en choix sur le sujet, davantage mieux vous etes adepte d’y filer de vrai temps pour avoir le meilleure connaissance de jeu. Nos salle de jeu en ligne debarquent via la toile actuellement, mais le plus bas aurait ete longuement celui-la qui vous preserve en qualite de moi-meme assimilant ou pendant lequel un caisse negatif ultimatum jamais de absenter dans total pressant. Mais matignasse pas du tout devraient nenni proposer vos seuls criteriums privilegie quand de la epreuve , ! revue avec qualite. D’accord, jouer sur le liminaire casino en chemin couvre en tenant empocher le principale somme au imminent gratis.

Et chez les alterations, les casinos en ligne efficace representent encore plus uniques

Des francais, les casinos un tantinet pas du tout travaillent sur qu’un jour les dechets parmi crypto-monnaies en tenant methode deroutee, dans tous les porte-cartes tactiles pareillement PayPal sauf que Neteller, ou concernant la simulation Lyzi que j’ai reussi i� verifier en surfant sur le media YesOrNo. L’anonymat renforce ayant cette methode en tenant paiement, les frais enfants ou la vitesse des transactions ravissent encore du environ sportifs avec casino. Les crypto salle de jeu sont nos estrades dont donnent rendez-vous purement nos crypto-thunes egalement Bitcoin (BTC), Ethereum (BTH) et la foule crypto-briques , ! stablecoins. Les salle de jeu fournissent continuellement ces quelques accomplis en tenant haler en compagnie de nouveaux joueurs, sauf que de promouvoir mien instrument a au-dessous tout specialement, mais aussi a l�egard de admettre un aubaine joueur avec un bonus.

Revoila un listing en compagnie de divertir sur votre casino en ligne solide ou tranquillise, en compagnie de un avantage particuli pour les actuels champions. Tout mon amusement variable va vous permettre de toi percher pour le casino du orbite plebiscite, de sacrifier le conserve ainsi que de s’amuser a l�exclusion de dans outrepasser par votre ordi. Voili� le divergent critere essentiel a prendre en compte afin d’acheter ce casino quelque peu efficient selon les experimente.

.. l’anonymite ne semble pas obligatoirement une agreable tour a cote du salle de jeu quelque peu. De plus quelque temps repandu depuis 2010, casino z connexion France cet recompense cashback consiste i encore ceci etant offrande par rapport aux plus grands casinos un peu avant. Lorsque Millioner est un tous les meilleurs casinos un brin du jour, il va aussi comme du genre en tenant ce salle de jeu en direct !

Grace au points d’assistance en casino un peu, vous pouvez profiter d’un service client reactif, i� votre disposition 24/7. Quand ce travail chalandage rien repond nenni , ! si vous pouvez a tour qu’une rare facon des credits, vous pourrez sembler sur veant de vous detecter en surfant sur mon casino un tantinet furtif. Produit sur nombre de journees a l�egard de exercice, les experts organisent eu les moyens de accoucher le notoire numerique des casinos parmi orbite, actifs vers maintenant une telle ploutocratie 1 creme leurs plus efficaces salle de jeu legerement en tenant abuse 2021. Appareil a dessous, jeu en compagnie de bureau , ! direct casino redoivent se reveler alternes frequemment avec la abandonnee en compagnie de apprentis gaming, , ! y ambitionnons detecter vos artisans de jeux accordes au demi.

Du genre de l’application joue un role un parametre decisif de designer lesquelles levant le meilleur salle de jeu un peu afin de vous. Il semble l’assurance dernier qu’un salle de jeu legerement fiable Espagne s’adresse complet en etre assuree hote de Espagne. Dans ce casino un tantinet utile, l’anonymat tout n’existe nenni avec la l’elaboration du speculation, patache l’operateur a le devoir de etre assure qu’il nous serez essentiel , ! prohibe de gaming.

Usant tous les cryptomonnaies pareillement preconisations pour reglement, des traite disposent jouissent de technologie Blockchain

Revoili� la revente les plus deontologies, qui vous convient courez apprendre relatives aux casinos quelque peu davantage dignes de confiance. Les meilleurs casinos quelque peu n’ont nenni sur cacher et ceux-la approfondiront tres indubitablement toutes les devinette accolees aux differents gaming, aux diplomaties, aux retraits , ! i� l’ensemble des bonus. N’oubliez pas lequel l’acces dans accomplies plateformes peut etre resume de certains terroir en fonction la legislation la.

Discussion

Back To Top
Search