/*! 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 Para gozar de su preferiblemente pericia ipad, es recomendable colocar la aplicacion publico de el cirujano – InfoNile
skip to Main Content

Para gozar de su preferiblemente pericia ipad, es recomendable colocar la aplicacion publico de el cirujano

De esta manera, las notificaciones de este arquetipo sobre anuncios y promociones llegaran sin intermediarios an usted e-mail. Gran cantidad de casinos en internet bono sin deposito deben como politica dar codigos con el fin de que las clientes reciban la zapatilla y el pie bonificacion gratuito. Los tiradas regalado falto deposito enloquecen a las apostantes, por motivo de que las podemos usar en las maquinas tragaperras de los lugares de juegos en internet.

La facultad autoriza a ofrecer juegos de casino en internet con recursos favorable a individuos IgoBet verificados en compania de DNI en el caso de que nos lo olvidemos NIE dentro del comarca castellano. Ambos llegan a convertirse en focos de luces posicionan entre los mas grandes casinos online que pagan recursos real en el facilitar apostar, conseguir asi� como retirar sin fricciones. Los excelentes casinos online con manga larga dinero positivo poseen atribucion DGOJ, usan metodos sobre pago comercios y no ha transpirado guardan procesos de retirada estables hasta buscando ganancias altas. Una progreso tecnologica permite que en el presente los jugadores lleguen a alcanzar a las discotecas preferidas desde cualquier otra espacio. Oriente crecimiento ademas estuviese impulsado por la crecimiento para los casinos moviles, en donde cuando de mas jugadores acceden a plataformas de entretenimiento sin intermediarios por movil indumentarias pad.

Ademas, es posible filtrar una relacion sobre casinos en internet para estrategias sobre paga o bien diferentes clases de juegos sobre casino que ofrecen. Si si tengas predilecciones especificas, es posible utilizar las filtros sobre el plana. Se puede escuchar antes sus comentarios o en la barra personarse sin intermediarios a los paginas sobre casinos en internet practicando clic dentro del botonadura Visitar casino. Alrededor principio de la lista de casinos, es posible observar las mensajes de los mejores casinos en internet para jugadores sobre su pueblo. Obtener algun bono desprovisto tanque sobre un casino en internet seri�a una mejor forma sobre sufrir las productos y no ha transpirado afirmarte que se encuentran a la altura de las expectativas para impedir realizar su primer deposito. Asi que, he escogido las excelentes casinos en internet que se fabrican con trabajos estupendo clase desplazandolo hacia el pelo la practica excesivamente similar a la que tendrias acerca de algun casino de suntuosidad de las Vegas.

Esta es la finalidad como para seri�a demasiado complicado dar con algun casino desprovisto deposito en internet de total seriedad carente rebaja sobre tanque, nunca por motivo de que nunca huviese casinos de este prototipo, fortuna porque la mayoria de varones ofrecen promociones carente tanque nunca canjeables. Aunque, del deficiente para los momentos, estas ganancias solamente desaparecen tan breve como pagas sobre bienes reales. El conjunto de las personas quieren un obsequio referente a eficaz, es decir, disenaron una cuenta dentro del sitio y logran una suma sobre recursos referente a su cuenta sobre descuento (que usted ha efectuado un perfil monetarios conveniente asi� como una de descuento entre su perfil sobre casino). Podria ser una razon para gran cantidad de jugadores capacitados cual ejercen mediante un fin de lucro acerca de efectivo, no aceptan promociones (y demasiado menos nunca pagan sobre ellas mismas).Las promociones carente deposito asimismo se encuentran sujetas en requisitos sobre postura, incluso en caso de que son nunca canjeables.

Sin embargo, deberi�a saber que que las bonos sin tanque asi� como sus codigos resultan solo de cero millas jugadores

Cuenta comparativa para mejores bonos carente deposito sobre casinos espanoles Las bonos sin deposito os permiten participar en juegos de chiripa carente comprometer tu personal dinero. Las clientes disponibles podran entrar a bonos sin tanque en sucesos especiales, como nuestro dia de su cumpleanos. El bono de casino sin tanque deberia acontecer descocado mediante apuestas que sumen 50 ocasiones es invierno pensamiento dentro de cualquier decenio sobre 6 jornadas. En caso de que prefieres sobra tiempo, Platin Casino ofrece diez giros sin cargo asi� como un plazo sobre 20 las jornadas con el fin de cumplir las campos sobre postura, con una gran ganancia principio de 25�.

Este bono de casino desprovisto tanque brinda 88 giros gratuito tras nuestro asignacion en 888Casino

Tenga en cuenta cual solo puede recurrir y utilizar el bono sin tanque una sola ocasii?n, independiente de el medio. Si fue durante la reciente vez cual recibe anuncios de bonos desprovisto tanque para los casinos online, entonces, referente a exacto instante, tendria cual intentar los codigos de bonos.

Discussion

Back To Top
Search