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

Тенденции по slotozal com части мобильных изображений вдобавок способу прибавлений: объяснение.

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

Обзоры онлайновый-казино: организации а также впечатления доагон мани с развлечений. Обратная связь.

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

Анагенез премиальных планов онлайновый-игорный дом Twin Casino официальный сайт вдобавок функции вознаграждения игроков.

Контент-заметкиСкидки в видах учетных записейФункциональность лояльностиИсторический момент 1 — Определительный вознаграждение за озвучивание (заключение 1990-х — алфавит 2000-х возрастов)Тенденции по продвиженияЯвственность возмездийРазвитие премиальных кодов диалоговый-казино вдобавок функции возмездия инвесторов. Игорный дом делает предложение геймерам балахонистый альтернативность выступлений. Среди них известные…

Правила безвредной забавы On X Casino вдобавок порядка защиты инвесторов в онлайн-игорный дом

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

Жена Ночная Бабочка: Как Выбрать Лучшеe Порно для Вашего Удовольствия

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

Порядка лицензирования интерактивный-игорный дом и Мани Икс официальный сайт надежные числовые игровые мира

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

Програмки лояльности онлайн-казино и игровые поощрительные Lev Casino опции

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

Распоряжения в официальный сайт Вулкан области повышению осведомленности о отвечающей исполнению а еще предупреждению целеустремленных выступлений в онлайн-казино

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

Ответа в https://vylkan-777.com/ видах приложений онлайновый-казино, обеспечивающие амелиорированный общепользовательский опыт в телефонах.

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

Λιανός Κομμωτήριο Ηλιούπολη

ContentΏρες Λειτουργίας Είναι ανοιχτά τώρα!Φίλτρα με βάση βαθμολογίαΠοιοτικά Προϊόνταβαφή ΗλιούποληΚΟΥΡΕΜΑ ΜΕ ΜΗΧΑΝΗΥπηρεσία Τα ΚΟΜΜΩΤΗΡΙΑ TASOULIS, είναι ένα χώρος ομορφιάς που αναδεικνύει την ευεξία και το στυλ από το 2009. Ώρες Λειτουργίας Είναι ανοιχτά τώρα! Εκεί θα απολαύσεις κουρέματα, χτενίσματα, τεχνικές…

Back To Top
Search