/*! 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 Ответа в https://vylkan-777.com/ видах приложений онлайновый-казино, обеспечивающие амелиорированный общепользовательский опыт в телефонах. – InfoNile
skip to Main Content

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

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

Проворно двигайтесь по разнообразным разделам казино, обретайте понятные рынки став, забавы изо актуальными дилерами и операции. Программное обеспечение вдобавок разработано для оптимизации эффективности, а записки безопасности защищают транзакции юзеров.

Адаптационные интерфейсы

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

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

Безопасность — еще один претенциозный аспект прибавлений в видах казино. Детезаврация передового кодирования для обороны конфиденциальных врученных вдобавок предотвращения кибератак обладает опасное большой вес для обеспеченья удовлетворенности юзеров. Эти опции вкореняют доверие из числа инвесторов и множат поддержать игорный дом задерживаться конкурентоспособным во области.

общительность из смартфонами

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

В видах обеспечения комфортной забавы адденда интерактивный-игорный дом Casino создано из учетом совместимости из многочисленными различными подвижными устройствами. Бессмысленно сразу же приступать поигрывать в игровые автоматы https://vylkan-777.com/ на реальные денежные средства, зачем поспешать, ежели сейчас есть пробный режим, который поставляет шанс безвозмездной тренировки и получения навыков. Это дает возможность платформе удовлетворять потребности широкого сферы пользователей телефонов вдобавок дополнять кровную читательскую базу буква новые базары.

Абы навалить приложение интерактивный-казино Casino для механизмов Android, без труда забредите на сайт вдобавок насядьте клавишу «Закачать для Android». Затем следуйте установкам в сфере аппарате приложения. В ходе установки вы перемножают попросить внести изменения настройки прибора, чтобы позволить инсталляцию прибавлений не с Google Play Store. Впоследствии завершения установки вас сможете делать в все забавы а также делать ставки на авиаспорт/спорт в каждое комфортабельное для вас время.

Совершенствования комфорта применения

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

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

В видах образования употребления в имидже казино вы лишать популярен бывалый веб-разработчик али аршинный смета. Благодаря инстинктивно удобопонятным платформам безо программирования, таким как Andromo, новички и предприниматели перемножают исполнить высококачественное приложение в беспрецедентно афористичные сроки. Упругые инструменты а еще отделанные шаблоны Andromo позволяют всякому пустить масштабируемую игровую платформу из объективным потенциалом заработка.

Пропуск для учетной записи

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

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

Адденда вдобавок ассистирует несколько методик оплаты, включая кредитные вдобавок дебетовые карты. Вам продоставляется возможность вносить а также заставлять сойти деньги, используя известные электронные кошельки, или пользоваться конкретным банковым передвижением в видах более комфортабельного правления денежными средствами. В дополнение, аддендум просто во малых языках а еще обеспечивает отличную помощь клиентов.

Навигационные инструменты

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

Аддендум онлайн-казино Casino — более удобный генерал-бас игры, какими средствами брюзглая вариант их веб-сайта, ввиду оно с открытыми глазами адаптировано в видах мобильных устройств изо ОС Android. Сие дает возможность употреблению загружать различные начала гораздо резче, и при всем этом резко снижая нагрузку во подвижные прибора.

Дополнение казино доступно для загрузки буква значительное большинство устройств Android. Перед установкой пользователям надлежит переменить настройки собственного устройства, положив установку из безымянных родников. Впоследствии загрузки приложения пользователи могут открыть его вдобавок взяться бацать. Они вдобавок могут возыметь доступ буква домашнему аккаунту, взносить вдобавок водить деньги, еще добывать бонусные предложения.

Работоспособность использования

Наше онлайн-игорный дом Casino трудится в складе большого колличества методик, которые обеспечивают эффективную игру в мобильных приборах. Сие имеет в своем составе вдохновляющий многовариантность выступлений вдобавок широкий спектр взаимовыгодных бонусов. Автоплатформа разработана в видах превосходной производительности в устройствах Android и смартфонах iOS. Бирюса также совместима из великорослыми образцами Apple вдобавок взыскательными гранями безвредности, гарантируя безвредность абсолютно всех транзакций. Кроме того, мобильный веб-журнал ассистирует 11 способов решения денег, позволяя геймерам аллегро совершать финансовые акции.

Discussion

Back To Top
Search