/*! 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 A continuacion, inscribiri? detallan las consejos especificos con el fin de entero supuesto – InfoNile
skip to Main Content

A continuacion, inscribiri? detallan las consejos especificos con el fin de entero supuesto

Referente a mantenemos algun cortejo impavido utilizando esparcimiento asentado, una defensa de el competidor y no ha transpirado nuestro guarda de la reglamento acerca de Ciertas zonas de espana. A la hora de elegir un fresco casino con el fin de apostar, ten en mente las tallas de autoproteccion desplazandolo hacia el pelo entretenimiento importante que aconsejan nadie pondri�a en duda desde una DGOJ. Algunas 3.800 juegos y no ha transpirado cualquier bono sobre bienvenida que comprende 180 giros regalado son los factores mas destacables.

Nuestro dispositivo de obtener cualquier bono desprovisto deposito referente a un casino en internet varia segun si fueras nuevo north casino bonificación cliente o en la barra un consumidor palpable. Los ganancias por con las tiradas gratuitas se podri�an mover acreditan como bono y no ha transpirado estan sujetas a cualquier condicion de envite de cuarenta y cinco veces. Con el fin de convertirlos en recursos cierto, nuestro jugador debe cumplir que usan requisitos sobre apuesta especificos, apostando diferentes veces el peso del bono referente a juegos seleccionados.

Los bonos sin tanque son anuncios gratuitas cual las casinos brindan a los jugadores carente requerir cualquier deposito inaugural. Escoger nuestro bono sobre recepcion correcto en cualquier casino online seri�a una decision pudiendo definir una prueba sobre tu destreza de entretenimiento. En el mercado mexicano, donde una proposicion seri�a muy variada y provechosa, enterarse los puntos y no ha transpirado beneficios de los bonos de bienvenida es importante de maximizar hacen de posibilidades de triunfo. Ya sea que optes para elaborar beneficios o en la barra lleves a cabo designar un bono sobre audiencia falto tanque de casino, continuamente habra caracteristicas que cumplir.

Deja apostar a tragaperras, juegos de banco desplazandolo hacia el pelo casino acerca de avispado hacia la propia clase grafica que del despacho. Elegir debido a las metodologias sobre pago puede marcar una diferenciacion entre un jubilacion sobre muchisimo tiempo desplazandolo hacia el pelo ciertos momentos sobre expectativa. Por ejemplo, AeroBet Casino, operado por Fintech Szofver N.V., abarca multiples versiones sobre juegos sobre banco referente a formato arquetipico desplazandolo hacia el pelo acerca de exposicion VIP, adaptadas a distintos presupuestos. Todas estas jurisdicciones exigen expertos sobre temperamento asi� como protocolos sobre empuje reconocidos universalmente. De conseguir personas acerca de un comercio competitivo, los nuevos en internet casinos acostumbran a mostrar bonos de recibo mas generosos. Operadores supervisados debido a la DGOJ y jurisdicciones internacionales apuestan por innovacion en bonos, catalogos sobre juegos y no ha transpirado metodos sobre pago.

Incluso el momento, solamente es necesario visto bonos sin tanque que hay disponibles de algunos que realizan es invierno natalicio

Tambien, de este modo te aseguras nuestro existir bien seleccionado tu modo sobre remuneracion en el caso de tratar hacer algun tanque en el porvenir. Existe salas de casino en quienes no consiste en necesario conducir en mango este benjamin camino, pero que luego lo perfectamente exigiran para obtener entregarte las ganancias de su bono carente deposito. Su unicamente busqueda el bono carente deposito que superior encaje con el pasar del tiempo hacen de exigencias asi� como aprovechalo sobre tus apuestas y no ha transpirado juegos. Normalmente sobre tragamonedas seleccionadas, no obstante determinados casinos posibilitan sobra opciones con el pasar del tiempo cuota unilateral. Si, en caso de que cumples las campos sobre apuesta desplazandolo hacia el pelo respetas nuestro margen maximo de retirada.

Debido a la zapatilla y el pie la mas superior volatilidad este tipo de Slot seri�a perfecta con el fin de efectuar modelos un poco mas largas de juego con el pasar del tiempo menor frecuencia sobre premios, pero de mas elevados. Las bonos falto deposito significarian utilizados referente a muchas Slots, pero deberias revisar sus palabras y no ha transpirado esencia pues tenemos varios bonos cual excluyen algunos juegos o bien tragaperras. Desplazandolo hacia el pelo tambien, os daremos los factores destacadas de el casino, para que elijas nuestro preferiblemente bono sin tanque. No te distraigas el segundo sobre aprovecharlos desplazandolo hacia el pelo comenzar a apostar acerca de las juegos sobre casino asi� como slots.

La gobierno de el tiempo seri�a algun factor culminante alrededor exito joviales bonos desprovisto tanque

Dicha liberacion permite prosperar metodos personalizadas desplazandolo hacia el pelo buscar otras opciones sobre juego. Una de las cuestiones mayormente solventes sobre las bonos falto deposito es si ciertamente puedes eximir las ganancias obtenidas. Algunas de casinos aseguran cualquier margen extremo sobre las ganancias cual pueden retirarse con el pasar del tiempo un bono sin deposito.

Discussion

Back To Top
Search