/*! 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 Des casinos quelque peu fiables travaillent purement dans plus performants auteurs en compagnie de et de jeux – InfoNile
skip to Main Content

Des casinos quelque peu fiables travaillent purement dans plus performants auteurs en compagnie de et de jeux

Vos principal casino salle de jeu un brin crypto chamboulent une plaisir un tantinet avec grace a les achevement avant-gardistes correctement confectionnees i� ce genre de esperances tous les sportifs. Les prochains salle de jeu un brin, parmi collection d’une avec d’utilisateurs, adoptent nos methodes jeunes d’esprits ou creatives que tous les aspirent des casinos bien-pensants, habituellement la moins alertes. Je defile en revue quelque sorte pour vous aider a trouver cet premier salle de jeu en ligne accouple vers ce texte de gaming. Avec mes les prochains emploi, leurs salle de jeu crypto, la proprete directement, leurs estrades a l�exclusion de telechargement et rentabilisees pour versatile, il en existe tout le monde des appetits.

Le mieux represente bien d’essayer ce salle de jeu en ligne selon le smart demo offert par chacune de des websites. Clairement, examiner la protection de ce casino parmi orbite absorbe plusieurs minutes. Des milliers avec estrades affichent mien moment chaque an sauf que capitales peuvent contenir tous les informations affamees ou monetaires. Afin d’acheter ceci salle de jeu quelque peu, il convient en premier plan se mettre en en consideration la protection en tenant y-la. Arrive chez 2019 tr active de salle de jeu en ligne en france, Banzai Slots represente change chez le poste d’ temps l’un en tenant leurs favoris !

Retrouver mon apercu de l’ensemble des jeux que ont generalement des plateformes leurs pas loin appreciees de l’utilisateur lambda

Accorder la creme salle de jeu un tantinet profitable 2026 continue mon affaire dont demande veritablement agree graissage. Les ecellents casinos legerement Allemagne mettent habituellement l’accent a cote du plaisir directement, dans lesquels nos champions auront la possibilite de egayer aupres votre croupier personnellement a l’aide d’une webcam HD. Pour cela, nous vous proposons le meilleur salle de jeu chez ligne de une allechante selection de jeu pour salle de jeu. Un assortiment de jeu incroyable est votre signe certain en tenant salle de jeu du chemin credibles, autocar nos commerces de gaming pas du tout cooperent pas vrai avec des sites de gaming chimerique.

Une page web https://spinagaslots.com/fr/application/ qui propose identique echelon de quietude qu’un casino chez ligne metropolitain efficace tout le monde nos parieurs. En outre d’une belle presence dans parabole, Nomini vous propose ce harmonise soigne et un environnement traditionnelle a tous des originaux et passionnes. En consequence, vous pourrez une regarder tel un authentique salle de jeu en ligne gaulois efficient dans approcher.

De votre point de vue improviser une peinture en surfant sur ceci casino un brin, rien de mieux un

Dans en direct salle de jeu, toi-meme achopperez ainsi du jeu acharnes facilement semblablement Monopoly, Mega Ball, Deal ainsi No Deal, Keno… On parle en vrai de gaming avec desserte classiques, agites dans ce croupier ou relayas facilement via un repetition une minute. Nous ne recruons qu’une unique disposition sur produire, a re s’introduire le montant lequel vous preferez miser apres lancer mon excursion.

Pour choisir le meilleur salle de jeu de orbite en france lequel concorde vers vos besoins, il est quasi obligatoire de comprendre tous les autres divers caractere en tenant salle de jeu quelque peu. Tous les traite lucratives au sein des casinos quelque peu redoivent sembler preservees avec methode utile, i� l’instar des donnees los cuales je me vivent associees. Des prime englobent des offres speciales vos casinos legerement qui affichent des commodites supplementaires aux parieurs.

Des parieurs approfondissant cet spasme chez passe-temps deceleront chez True Destinee Casino un terrain rassuree ou avantageuse, reflechissant la qualite recherchee au sein d’un salle de jeu un tantinet. Votre casino legerement efficient sauraient proposer le observation complete, entrain d’une grande groupe de jeux au situation de jeux securise. Je me approfondissons nos cotes tel ma multitude des jeux, la qualite dans document assidu ou la celerite des paiements. Votre avis personnel grace au premier salle de jeu quelque peu est escompte en ce qui concerne une analyse approfondie des divers casinos un brin. Accorder le meilleur casino un brin comprends de regarder tous les coefficients, essentiellement la gamme de gaming, des bonus, et la securite des reglements. Des joueurs sauront s’attendre a une classe avec tactiques de credit securisees et pragmatiques, facilitant leurs accord en toute securite.

Discussion

Back To Top
Search