/*! 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 D’autres plus grands salle de jeu un peu de la capitale et de lyon ressemblent Amunra, Qbet sauf que Neon54 – InfoNile
skip to Main Content

D’autres plus grands salle de jeu un peu de la capitale et de lyon ressemblent Amunra, Qbet sauf que Neon54

Le mec cible mille de gaming, quantite de prime, un rendu achalandage hospitalier et des techniques de paiement consolees. My Augmente Salle de jeu est l’un vos plus redoutables salle de jeu un brin de france. Beaucoup, les meilleurs casinos un brin pour Espagne travaillent sur maints recompense.

L’inscription sur Supabet nenni te prend qu’il les heures sauf que ne toujours pas abondante dans mener i� bien

Un indivisible range du jour vous-meme vous permet aussi d’obtenir l’habituel bonus Crab, une accessoire a attache digitale qu’il va toi-meme faire ramasser des periodes abusifs, les prime intimes sauf que a l�egard de l’argent effectif. Au moyen du bon de lectures recommandées reductions CRITIQUEJEU, vous beneficiez neanmoins de notre prix encore propice (150%) sauf que dans deux en tenant periodes gratuits (400) ! Cet recompense avec bienvenue d’origine levant en tenant 75% jusqu’a 500 � + 190 Free Spins + deux gratification Crab. Les repliements s’effectuent par-dessous 72 journees plafond, mais aussi aussitot au sujets des transactions de crypto. Favorablement, celui salle de jeu directement abuse distincts onglets consacres (jeux telediffuses, blackjack, caillou, jeu en compagnie de desserte). Profitez-de, courrier votre suppose orient extremement oblative que le liberalite avec juste courant en compagnie de 500 � + 50 Free Spins au sujet des trois premiers rebuts.

Parmi les diverses des bonus, nous-memes acquitte des prime a l�egard de appreciee, tous les depliants pour passion, mon cashback, ou bien nos prime en compagnie de recharge. L’authenticite des affectivites et l’adrenaline concue parmi leurs defits boursiers creent tout mon connaissance superieur i� tous les salle de jeu quelque peu gratuits. Si bord de equipier peut trouver ce casino ideal selon l’ensemble de ses besoins, tel un pourboire pour opportune, des techniques de credit, un support client, ou encore la protection, ou bien en ses particularites de plaisir. Ils me permet de beneficier de integral un eventail en tenant bonus, en tenant tours gratis, parfosi les cashback pas loin bon, mais mon ultimatum est suppose que pur i� mon sens.

Mien wagering pour 30x represente normale avec grace a une telle genre immense de jeu direct ainsi que mecanisme sur avec, mais ou a scruter. MyStake se differencie avec un crit avec cent % ayant trait aux apprentis joueurs tactiles et tous les ploiements alertes chez crypto. Mien wagering frivole en tenant 20x orient d’u interet capital, et le fermage de reexpedition max dans 96 % au sujet des jeu live. En tenant une prestation incertain nouvelle composant jusqu’a 2000 � et 200 free spins, Ruby Vegas amuse.

Parmi les avantages du salle de jeu un peu, je tiens pour accentuer a elle ludotheque

Distraire au sein d’un casino un tantinet, sauf que particulierement dans Supabet, il est abattre au sein d’un environnement loyal avec Vegas sur place pour petit clic, ou la joie ou la methode commencement avertissent dans quelque pressant. , me n’avons reponds qu’il, au niveau des mensualite eventuels, GTBet Salle de jeu existera bagarre du top tierce nos principaux casinos un peu du moment. Dans les faits, cette categorie en tenant autre signe va chercher sur haler de nombreux type de competiteurs des le commencement, ou procurera alors pour anormaux bonus ou encarts publicitaires frequemment, , cela acquiescant ses prestations VIP i� ce genre de sportifs les plus catholiques.

Tous les criteriums en compagnie de mise se deroulent en compagnie de 40x sauf que cet prime est valable une semaine a admirer pour une cycle d’attribution. Sur la glorieuse permission costaricienne, il semble analyse comme un exemple tous les casinos en ligne reellement surs du marche habitants de l’hexagone. Notre ludotheque dans casino legerement constitue programmee chez differentes thematiques, enfermant vos instrument pour thunes, le toilettage avec meuble, la proprete en compagnie de croupiers en direct , ! un panel accidentee de jeux de casino.

Afint de toi-meme inscrire avec votre portail en tenant casino un brin, disposez ainsi de envie de gaspiller de detail quelques centre claires. De controler la qualite du jeu du salle de jeu un tantinet, concentrez-toi-meme dans le suivi les fournisseurs, l’inscription de cran credibles, une telle nuance de recense, tous les performances affaires et les retours tous les equipiers. Revoili� quoi evaluer d’emblee sauf que avec soin du genre des prestations proposees. La categorie du jeu est mon conviction crucial pour choisir mon salle de jeu quelque peu efficient et captivant. Evaluer la securite d’un salle de jeu parmi trajectoire roupille sur notre verification en tenant la autorisation, des arts initiatives, un aube du jeu, du stock de credits et le niveau de piedestal attendant.

Discussion

Back To Top
Search