/*! 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 8904 – InfoNile
skip to Main Content

Опции безопасной Casino Mers забавы в онлайн-казино и системы контроля рисков.

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

Aplicaciones de préstamos préstamo en oxxo en línea confiables

Material de contenidoOneMain FinancialTema sobre préstamoAvant Las aplicaciones de préstamos online confiables son transparentes, deben algún monto extremo de préstamo gran así­ como nunca cobran comisiones excesivas como suscripciones cada mes o bien cargos para transferencias instantáneas. Igualmente, contabilizan con…

Qimor o'yinlari muassasasi Buni o'zingiz Glory casino login bajaring – texnikalarni cheklang va qimor o'yinlarini ko'rib chiqish sozlamalarini boshlang

MaqolalarShlyapalarni olishDastur cheklovlariSovutish holatlariAsoslash cheklovlari Onlayn qimor uylari sizning sobiq qimor o'yinlaringiz amalga oshiradigan shaxslar qonunlariga mos keladigan vositalarni taqdim etadi. Ular dastlabki to'lov cheklovlari va sovutish vaqtlarini boshlaydi. Nazorat qiluvchi organlar ham o'z-o'zini boshqarishni taklif qilishadi. Markazlashtirilgan o'z-o'zini boshqarish…

Граница отвечающей игры Сукааа Казино официальный сайт а еще соблюдения законодательства на интерактивный-игорный дом

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

Порядка лицензирования Авиатор игра онлайновый-игорный дом а также фонды доверия игроков

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

Отзвуки клиентов 1Win официальный сайт вход в личный кабинет интерактивный-казино и химанализ свойства сервиса.

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

Нерассказанная летопись выяснений правдивости онлайн-казино а регистрация в Drip casino также сертифицированных игровых приборов.

Контент-статьиСертификация генератора независимых количеств (ГСЧ)Тестирование посторонними организациямилад прозрачностиВыяснения соотношения нормативным требованиям Нерассказанная летопись проверок правдивости онлайн-игорный дом вдобавок сертифицированных игровых систем есть грабастающее буквосочетание сверхтехнологичной арифметики, постоянного контроля и допотопной осторожности. Сие вдобавок главной компонент сопровождения доверия для регулирующим устройствам…

Методике отвечающей игры Олимп казино а также функции безопасного применения

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

Casino Foundation belgilari yoki alomatlari va aniq iste'molchi tajribasi hisoblarini vivi casino uz boshlash

Kontent maqolalariTavsif farovonlikQo'shimcha samaradorlikOlov so'rashQiziqarli kod Poydevor muhim bo'lgan elektron raqamli muhitda foydalanuvchilar veb-saytda obro'ga ega bo'lish bilan bog'liq muammolarga alternativalarni topishga yordam berishadi. E'tiborga loyiq xilma-xillik ularning to'lovni davom ettirishi, hisobot berishi va boshlashiga ta'sir qilishda muhim rol o'ynaydi.Qimorxonalarda…

Back To Top
Search