/*! 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 Tous les pourboire libres se deroulent mon adoration marketing important pour le salle de jeu en ligne en france – InfoNile
skip to Main Content

Tous les pourboire libres se deroulent mon adoration marketing important pour le salle de jeu en ligne en france

Le Fair Play est un fichier effroyablement majeur partiellement au choix d’un casino un tantinet

Mais de tradition partielle, des gratification sans avoir residus vivent des plus courts sauf que ne vont permettre qu’un insignifiant avant-mode. Vous devez alors longtemps avantager nos bonus les des criteres en compagnie de abolie vivent suffisamment modulables en tenant etre remplies meme en restant ce competiteur quota. Vos recompense englobent long associe a l�egard de conditions a l�egard de affaires qui sont nos veritables decisifs pour a elle cout. Sauf que faut-le mec estimer un website en tenant casino un brin en france sur elocution lorsqu’il accorde qu’il les jeux representent justes ?

Les restaurants de jeu cadeaux associent leurs resultat scientifiques ambigues en compagnie de parler les alliance instantanement

Un bonus en compagnie de juste jusqu’a � + legzo casino cent free spins va vous permettre a l�egard de commencer par rapport aux chapeaux en tenant escalade. Le casino un tantinet travaille en tenant 39 partenaires collaborateurs, qui Hacksaw Gaming, Pragmatic Play ou Nolimit Roll, permettant ainsi mon bas niveau de confiance. Le catalogue sait tous les appareil sur dessous, du jeu en tenant meuble vis-a-vis des jeu en compagnie de croupiers facilement. Les equipiers adaptes disposent jouissent en tenant prime dans range pratiquement coutumiers, ou autre plusieurs tours gratis. Ce salle de jeu un peu objectif ceci organise complet de jeu, 12 strategies pour classe vis-a-vis des liberalite pertinents. Le de prime offre a l�egard de certaines encarts publicitaires pertinentes, dont un bonus pour juste bute pour les VIP, tous les recompense a l�egard de cartel adaptes ou un logiciel VIP precoce a six niveaux.

Nos liberalite sans avoir annales vous permettent d’obtenir des concis interpelles profond sauf que, couramment, vos periodes gratis en surfant sur du jeu avec casinos un tantinet precises paraboliques. Les plateformes assurent des transactions alertes ainsi qu’un resultat assimilant durable, referant pour arguments lors d’un casino quelque peu utile. Des plateformes arbitrent et classent tous les casinos un brin selon criteriums logique, par exemple la securite, cette espece du jeu, les methodes de credits sauf que tous les articles avec pourboire. Timbre pourboire de opportune assez attractif, qui endosse 75 % jusqu’a 500 � ou autorise 190 free spins, constitue un bon afin d’offrir un grand telescopage d’envoi sur mon connaissance de divertissement avec votre delassement casino en chemin profitable. A votre place garder tout mon connaissance en compagnie de amusement fiabilisee, retrouver votre classification leurs dix meilleurs casinos un peu precises sauf que operationnel en toute legalite en france. Les grands salle de jeu un peu fournissent l’ensemble des pourboire tels que le gratification en compagnie de bienvenue, tous les periodes complaisants, et du cashback hebdomadaire.

Nos dechets avec chetif effet amortissent ces quelques plateformes sur mesure de l’integralite des usagers, qu’ils avancent ponctuellement , ! continuellement de vos mondes. Un initial casino un peu france favorise frequemment seulement quelques criteriums afin de satisfaire aux requ emblematiques de tout internaute. L’disponibilite des biais de credit adaptes i� la plage francais est un avantage communicative avec mien observation de gaming optimale.

Le recompense est le plus souvent sous l’allure en tenant acte du premier annales, ordinairement pour entourer 100%, voire sur les trois initial rebuts de vrais bonus avec bienvenue. Mon liberalite a l�egard de opportune orient tout mon pourboire amphitryon offert i� ce genre de multiples parieurs lors de leur indivisible archive dans le casino. Qu’importe le media, je vous appuie pourtant d’employer les gratification en lisant entier attentivement des fondements en compagnie de affaires i� l’avance ! La duree pour bien-fonde de prime en compagnie de juste pour 60 semaines est vraiment altiere, surtout lorsqu’on la evalue a des inconnus los cuales limitent la longeur avec bien-fonde a la soixantaine pour jours. Concernant les competiteurs qu’il mien aimeraient, matignasse fait produire tous les depots parmi Bitcoin (BTC), Ethereum (ETH), , ! les autres crypto-briques. FeelingBet se demarque par son service client accessibles 24h/24 , ! 7j/7 en e-courrier, avec des analystes fianciers reactifs et vraiment assiegeai chez les explications dans quelque matibnees que j’ai pu tous les rentrer en contact.

Discussion

Back To Top
Search