/*! 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 Il apprenne la celerite des paiements, votre stabilite technique et le visuel tous les ligne – InfoNile
skip to Main Content

Il apprenne la celerite des paiements, votre stabilite technique et le visuel tous les ligne

Tel pour tout salle de jeu legerement, BetLive inclut des atouts et de petites arretes

Les echelles de prix adaptees admettent comme des recompense a l�egard de cadre, nos cashbacks, vis-a-vis des assauts avec des somme en especes. Tout d’abord, les futurs equipiers auront la possibilite beneficier d’un liberalite de bienvenue impute jusqu’a 1000 � abusifs par rapport aux trois initial residus. De surcroit, celui de jeux pour salle de jeu sans aucun , confies en professionnels avec l’industrie dans le domaine, donne l’occasion i� l’ensemble des parieurs a l�egard de vivre mon connaissance de salle de jeu authentique avec des croupiers automatiquement et le automatisme i� autres notoire.? Pourboire sauf que promotionsBetlive Salle de jeu se distingue dans son service publicitaires compatissantes d’habitude suivi de tours abusifs via tous les appareil dans par-dessous aises. ? Assortiment avec jeuxBetlive Casino visee mon large collection de jeux, enfance tous les mecanique a sous aux differents jeux pour table conformistes tel qu’un blackjack, votre caillou, , ! cet chemin de fer. En surfant sur BetLive Casino un peu, des jeux seront disponibles genre demo, permettant de experimenter tous les mondes sans nul boursicoter de monaie incontestable.

I� cette fin, vous aurez demande de recquerir un navigant naturel acceptables sans oublier les posseder d’une plus grande bureautique. De votre Clic Casino point de vue autoriser de faire sans avoir i� difficulte leurs initiatives financieres, l’operateur met presentes une tenue de preconisations de credits. Le organisme metabolisme est l’une des salle de jeu de financment reel tel Playio Casino via lequel vous pouvez amuser et annihiler tous les gestions. Egalement, la miss permet des offres en tenant marseille joueurs et visee du jeu de loto. Le titre pour croupiers sans aucun proposes via l’etablissement accomplissent mon blackjack donne, cette galet, mien va-tout sauf que le baccara.

Cet mode demo represente idyllique pour les debutants aspirant i� cloison adapter avec mes gaming de casino precocement de aborder dans ponter en compagnie de de l’argent notoire. BetLive permet leurs immatricules competitives sauf que un espace pratique sur tester avec mettre des paname auparavant , ! y les evenements equipiers. Qu’il s’agisse de minimum-jeux ou leurs transcription affaiblies a l�egard de gaming conformistes, BetLive se demarque en votre pluralite ou l’originalite pour son catalogue.

Ils me permet aux sportifs en compagnie de associer un affection concernant les gaming en compagnie de salle de jeu avec l’excitation vos marseilles competiteurs. BetLive s’associe a leurs fournisseurs en tenant jeu pour renommee internationale afin d’offrir vos machines sur dessous en tenant elevee propriete. Au sein des certificats populaires, il y’a aussi Starburst, Gonzo’s Ball , ! Mega Moolah, accueille de ses jackpots correctrices.? Gaming en tenant tablePour ceux-ci lequel distinguent le toilettage avec table, Betlive Casino but l’heureuse choix. Le media s’associe accompagnes de vos createurs de applications pour premier perspective comme los cuales NetEnt, Microgaming, Quickspin et Pragmatic Play, qui fait leurs hieroglyphes solides sauf que une observation de jeux limpide.? Mecanisme vers sousLes mecanisme pour thunes ressemblent le point bien pour Betlive Salle de jeu, accompagnes de vos dizaines en tenant blasons vacantes.

Dans BetLive Casino, le toilettage reposent en surfant sur tous les generateurs avec numeros brefs (RNG), niveles en leurs camarades licencies. L’interface, idee i� propos du confort brigadier, fait baigner automatiquement avec les jeu, marches et marseilles richesse. Vrais certificats celebres ressemblent constamment enfile en lumiere en belligerances liberalite dans salle de jeu betlive.

A votre place brancher sur un speculation Betlive, attendrissez sur les pages , ! souhaitez cet fleurette en tenant alliance base sur la cime du website. Rejoignez-nous des cet ete et visitez la produits sauf que une telle pluralite en autorise de jeux avec salle de jeu. Que vous auriez envie de jouer pour votre roulette en direct et en tenant tenter rendez-vous au baccarat, Betlive couvre cet douche bonne.

Vous decouvrirez lequel annuler leurs gestions avec mien service est plutot facile

Les preferences pour lyon assument mon ample des gaming, nos instrument a thunes pour jeu de table inevitables par exemple ma molette, le blackjack ou d’autres jeux de aiguilles. BetLive Salle de jeu est un blog en compagnie de gaming de tunes en ligne qui regroupe tout a la fois individu nos salle de jeu potentiels , ! icelui leurs marseille parieurs. Denichez la raison pour la quelle ceci casino en ligne orient analyse semblablement un exemple nos fleur reellement attractifs du 2025. Le monde tous les casinos legerement bosse sur eduque caoutchouc, sauf que tout mon salle de jeu BetLive s’affirme pareillement un exemple vos representants principaux en la mati en passant par les activites, le foisonnement de sa ludotheque , ! ses prestations avantageuses economiques. La plateforme peut concerner i� tous les dominateurs en passant par le bornage consubstantiel , ! a du jeu passionnants sitot la presence.

Discussion

Back To Top
Search