/*! 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 Una vez que hablamos sobre seguridad desplazandolo hacia el pelo intimidad, es su recto a cubrir tu documentacion particular – InfoNile
skip to Main Content

Una vez que hablamos sobre seguridad desplazandolo hacia el pelo intimidad, es su recto a cubrir tu documentacion particular

Si estas pensando en cualquier organizacion sobre paga especial, igual que PayPal en el caso de que nos lo olvidemos Skrill, se puede marcar los opciones deseadas al remoto de �Organizacion de paga� para que solo asalten los casinos en internet que se fabrican con todos estos metodologias. Primero, durante pestana �Recien abiertos� se puede organizar los casinos en internet como novedad de varias formas diferentes, seleccionando una eleccion deseada dentro del menu �Organizar por�. Nuestro indice de decision de un casino nos ofrece exactamente entre los que podri�amos aguardar de el novio, no obstante los filtros de el plana asimismo son con el fin de identificar los superiores casinos en internet segun nuestras gustos.

Los mejores casinos online cero millas de 2026 nunca resultan simplemente versiones cero millas de plataformas debido a conocidas

Con el fin de pensar en el trabajo de el bono sin tanque para casinos en internet sobre Espana con el pasar del tiempo dinero positivo, vamos a fijarnos en que consisten las clases cual estan a su disposicion acerca de los operadores autorizados del pais. En , combinamos decadas especialistas en compania de contribucii?n observadas sobre usuarios como usted con el fin de asegurar una sobra elevada clase desplazandolo hacia el pelo empuje referente a las sugerencias.

Asimismo, una seguridad es una preponderancia en las https://verdecasinos.io/es/codigo-promocional/ casinos online espanoles, garantizando cualquier escenario sobre juego con total seguridad asi� como protegido. Es necesario preciso los opiniones de los individuos y informacion objetivos de potenciales encaminarse la decision informada. Las plataformas de esparcimiento online poseen una amplia variacii?n sobre material sobre casino online, inclusive maquinas tragaperras, ruletas, blackjack asi� como una enorme coleccion sobre slots populares.

Menos pasos de registrarte, menus intuitivos y no ha transpirado marcas sobre carga optimizados son elementos importante en la nueva procreacion sobre plataformas. En el momento en que nuestro sometimiento hasta el inicial jubilacion, nuestro es reducir fricciones asi� como demostrar precision pronto, alguna cosa importante para originar empuje delante la aparicion sobre cero millas casinos. Las casinos mas en De cualquier parte del mundo tienen interfaces novedosas, tecnologias avanzadas como verdad potencial referente a juegos acerca de preparado, metodos de remuneracion sobra diferentes (incl. criptomonedas) desplazandolo hacia el pelo promociones adaptadas a los orientaciones modernos.

Habitualmente, recibiras lugares por tus apuestas, que posteriormente se podri? cambiar para giros de balde u otras premios

Hemos descargado y no ha transpirado vivido la funcionalidad de estas aplicaciones desplazandolo hacia el pelo debemos destacado los 5 mas grandes aplicaciones, en donde igualmente tranquilo participar mediante la zapatilla y el pie excepcional calidad grafica. Oriente cuerpo es el encargado sobre entregar, actualizar y no ha transpirado suspender licencias para la realizacion sobre tareas de entretenimiento. Las casinos sobre avispado mejoran la experiencia de consumidor del ofertar la interaccion mas profusamente realista desplazandolo hacia el pelo excitante. Su mejor forma de calcular el asistencia de un casino sobre linea seri�a mediante una ruleta sobre vivo. Algun casino en preparado en linea permite del componente experimentar las instintos sobre cualquier casino real, pero mediante una monitor de el ordenador o bien del iphone.

Nuestro bono sobre bienvenida asciende alrededor del 150% del deposito inicial (inclusive 750 eurillos) con manga larga 150 tiradas gratuitas y no ha transpirado algun bono Cangrejo, desplazandolo hacia el pelo hay para los cero millas registrantes. Una proposicion de juegos se va a apoyar sobre el silli�n total en compania de algunos excelentes bonos sobre casino, cual llegan a convertirse en focos de luces se fabrican con a las personas en cuanto se piensen por primera oportunidad. No obstante, la eleccion no es facil, puesto que hay muchas plataformas entre las que elegir, y no ha transpirado nuestra seleccion pretende ayudarle a procurar nuestro nuevo casino en internet que verdaderamente merezca una amargura, teniendo en consideracion sus aficiones y horizontes. Para clientes espanoles, esto obliga mas alternativas, superiores sensaciones desplazandolo hacia el pelo estandares sobra altos en una una taller. Las metodos visionarios pueden enviar alertas personalizadas sobre torneos relevantes, como novedad juegos cual coinciden con las gustos del atleta o incluso recordatorios de entretenimiento importante fundamentados acerca de patrones sobre actividad. Los chatbots vanguardistas podran mantener conversaciones complejas, descifrar dificultades peritos y inclusive proveer opiniones sobre entretenimiento formal de manera personalizada.

Discussion

Back To Top
Search