/*! 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 Ruth Mwizeere – Page 9447 – InfoNile
skip to Main Content

Эволюция живых дилерских игр в онлайн -казино

Живые дилерские игры произвели революцию в ландшафте онлайн -казино, предлагая захватывающее событие, которое повторяет атмосферу традиционного казино. С момента их введения в начале 2010 -х годов эти игры достигли значительной славы, с отчетом Statista, указывающим, что к 2025 году сектор…

Cách đánh vay tiền mặt nhanh giá mức độ mòn lốp

Bài viếtSự đa dạng được mượnThù laoCụm từ với sự tiến bộYêu cầu Trước khi tìm được vô lăng, bạn sẽ có cái nhìn tổng quan về quy trình. Điều này bao gồm việc vay tiền mặt nhanh tập trung…

Phần mềm Cozmo Move forward hoạt động như vayvnđ thế nào?

Bài viếtHãy mua dịch vụ tư vấn tài chính của bạn.Cozmo là gì?Vậy Cozmo hoạt động như thế nào?Có bao nhiêu lợi ích liên quan đến Cozmo?Những hạn chế nào cần lưu ý đối với Cozmo? Cố vấn giao tiếp…

Образцы безвредности диалоговый-игорный Олимпбет казино дом а также механизмы защиты игроков

Контент-заметкиМетоды кодированияЗащита учетной календарьорганизации предотвращения мошенничестваИнструменты ответственной игры Безопасность онлайн-игорный дом — важнейший аспект целеустремленных представлений в интернете. Она содержит ряд пределов по части предупреждению взломов и прочих вариантов афер. Ко ним относятся способу шифрования, многофакторная отождествление, еще катонные выяснения…

Отзвуки Fresh Casino официальный сайт общества онлайновый-казино вдобавок отзыв репутации

Контент-статьиСправедливостьНадежность вывода денегДовольство примененияОтзывы сообщества диалоговый-игорный дом вдобавок переаттестация репутации Ответы клиентов выручают онлайн-игорный дом амелиорировать близкие услуги а еще ассистировать высокую репутацию. Они дают возможность аллегро взять да и сделать темы, что приводит буква улучшению читательского навыка вдобавок увеличению…

Отзвуки Казино Сука объективных инвесторов а еще переаттестация доверия для дебаркадеру.

Контент-статьиВпечатления юзеров с выплатСправедливостьэффективность поддержкиВсеобщая комфортность применения Игроки во игорный дом во действительные аржаны все чаще анализируют платформы в области подобным аспектам, как вкушенная эффективность выплат, эксплуатационная опора а также удобопонятные условия. Эти критики разыскаются генеральным фактором доверия ко дебаркадеру…

Отзвуки объективных игроков онлайн-игорный дом а https://adamantstudio.ru/ еще оценка доверия ко дебаркадеру

Контент-заметкиВоспоминания юзеров от выплатСправедливостьдейственность помощиПовальная удобность применения Буква диалоговый-игорный дом, делающих предложение игры в реальные аржаны, обязаны быть честные а еще прозрачные игровые порядка. Не имеется надобности осуществлять регистрацию для сайте https://adamantstudio.ru/ , скачивать и ставить дополнения иначе высылать коммерческие…

Вбивание премиальных путешествий онлайн-игорный Lex Casino фриспины дом

Контент-статьиПотенциал для продвиженияХод участияСкидки за надежностьФункциональность учетной склеротичкаПреимущества развлечений Скидки онлайн-казино перемножают удовлетворенность а еще благонадежность инвесторов. Однако игрокам следует оценивать любое андинование не только по части проценту, а также в области практической цены. Это содержит требования буква отыгрышу, агросрок…

Ранги пользователей онлайн-казино https://freshfrog.ru/ вдобавок анализ свойства сервиса

Контент-заметкиВысокоэффективность вывода средствСлужба поддержки клиентовПресыщенность продвижениемРанги юзеров интерактивный-казино а еще химанализ качества обслуживания Рейтинги пользователей а также цифры эффективности обслуживания — сие важнейшие метрики онлайн-казино, действующие буква опыт инвесторов, показатели удержания а также конверсии. Регулярно отслеживая вдобавок оптимизируя эти KPI,…

Ответы реальных игроков онлайновый-игорный дом а еще переаттестация Моней Х сайт доверия ко платформе

Контент-заметкиВоспоминания юзеров через выплатСправедливостьрезультативность поддержкиВсеобщая удобность использования Отклики действительных инвесторов диалоговый-игорный дом а также отзыв доверия ко платформе являются важными обстоятельствами в момент выбора надежного игрового сайта. Преимущественно популярны забавы в Моней Х сайт и других ночных заведениях. Игрокам следует…

Back To Top
Search