/*! 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 VipLuck sinon distingue verso il conveniente eccezionale involto di saluto astuto verso 2 – InfoNile
skip to Main Content

VipLuck sinon distingue verso il conveniente eccezionale involto di saluto astuto verso 2

SpinLander eccelle nel distretto dei Casino Online puntando sopra chiarezza d’uso anche immediatezza di accesso

Dea Spin e una nuova basamento di inganno online scagliata nel 2025, che razza di vocabolario contro certain nota di giochi eccezionalmente vasto anche circa una resistente insieme di gamification verso tentare rso giocatori. 000 � con l’aggiunta di 300 giri gratuiti distribuiti sui primi tre depositi, fuso in una ripiano interamente ottimizzata sopra HTML5 che tipo di funziona speditamente sui dispositivi mobilio iOS di nuovo Android. Crown Play si distingue verso la degoutta “Gratifica Crab”, una funzionamento di gamification unica quale permette di superare premi reali giornalieri, combinata con una programma ibrida completa quale unisce un bisca sopra nuovo 90 provider a indivisible ottimo sportsbook. Sopra questa manuale trovi esperienze pratiche, controlli da convenire avanti di registrarti, checklist anti?sorprese e una opzione ragionata di piattaforme durante permesso estera. E celebre verificare la condivisione di emancipazione valida, cifratura SSL e certificazioni RNG.

Questa sara un’operazione alquanto modesto, vi bastera avviarsi sul collocato del casino eletto, produrre durante tutti volte dati richiesti il cartoncino a la registrazione. Giocare sui casa da gioco online non AAMS e excretion fascicolo alcuno sciolto come ti offre l’opportunita di giungere per una vasta genere di esperienze di ricevimento. Contro queste piattaforme volte giocatori possono infatti scommettere come mediante il pre-lotto che tipo di con rso match, oltre a corrente si possono ed seguire gli eventi di nuovo le partite con occasione pratico approfittando ed di offerte limitate. La tabella qui sopra vi sara attivo per poter riscontrare le offerte proposte dai bisca non AAMS verso poter anteporre esso che si adatta al ideale al vostro direzione di inganno intimo.

La qualita delle soluzioni di deposito include opzioni moderne come Apple Pay anche PaysafeCard, adattandosi alle preferenze di un’utenza diversificata. Successivo all’estetica affascinante, presente Casa da gioco Online propone una libreria ludica completa anche esattamente organizzata, per migliaia di slot machine, tavoli tradizionali di nuovo una partita live casa da gioco animata da croupier esperti durante diretta streaming.

Ancora se vuoi piuttosto concessione, qualita di giochi ne celibe le solite slot

Scoperchiare rso migliori tumulto non AAMS sicuri anche affidabili puo sembrare una sfida, tuttavia per le giuste informazioni e con l’aggiunta di reale di dafabet casino codice bonus senza deposito quanto pensi. .. quest’anno i migliori siti senza contare arbitrio sono il tuo palcoscenico. Gioca consapevolmente, leggi di continuo i termini, anche fatti condurre da ranking, dati e recensioni reali � non dalle assurance �magiche�.

Quando parlo sopra rso giocatori italiani, generale che razza di le stesse slot tornano continuamente nelle loro scelte. Laddove un luogo offre queste informazioni sopra mezzo evidente, io lo considero parecchio oltre a coscienzioso. Certi siti includono ancora lotterie e instagame con giro gratta addirittura vinci digitale, utili a chi vuole codifica semplici anche partite veloci. Dal momento che valuto le giochi di indivisible casino, controllo sempre qualita, RTP manifesto di nuovo provider, affinche sono i dettagli che razza di cambiano l’esperienza. Io vidimazione continuamente le percentuali reali addirittura circa quali giochi valgono, giacche non molti siti escludono live ovvero slot ad alta volatilita.

L’utente puo giungere agevolmente alle piattaforme estere, an intesa di amministrare apertamente la proclamazione ostinato delle vincite. Offrono premio di benvenuto come superano gli standard dei circuiti nazionali, garantendo al contempo codice dei dati e un’esperienza di gioco protetta. Anche se i vantaggi sopra termini di gratifica ed modello siano evidenti, la maturita rimane nondimeno il canone centrale. Dal momento che giochi verso piattaforme internazionali utilizza cartella elettronici regolamentati con UE a appoggiare il pubblicazione dei soldi verso il tuo opportunita codesto italico.

Assimilare avvenimento distingue queste coppia oggettivita ti aiutera a produrre una opzione ancora sicuro basata sulle abat priorita mediante termini di varieta di bazzecola, gratifica, pagamenti ed livelli di cura. Assentarsi entro i tumulto non AAMS significa scoperchiare un terra quale offre esperienze alquanto diverse considerazione alle piattaforme mediante arbitrio italiana. Per molti fruitori rappresentano un’alternativa affascinante ai siti regolamentati, soprattutto nel caso che si cercano varieta e promozioni aggressive in cui contare. Rso tumulto non AAMS sono piattaforme di inganno online come non possiedono la emancipazione rilasciata dall’ADM, obbligatoria per gli operatori con luogo mediante Italia. La deborda annuncio e contraddistinta da indivis regolato slot sterminato anche dall’integrazione di sistemi moderni verso le transazioni. La distilla ripiano si distingue a l’estrema fortuna delle transazioni, le promozioni ricorrenti abbastanza generose (per tornei settimanali succedane verso quelli proposti sui siti non AAMS) anche l’ampia alternativa di titoli sviluppati da provider internazionali.

Discussion

Back To Top
Search