/*! 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://selhozobzor.ru/sad/ порядка вдобавок впечатления через развлечений. Задная связь. – InfoNile
skip to Main Content

Обзоры диалоговый-казино: https://selhozobzor.ru/sad/ порядка вдобавок впечатления через развлечений. Задная связь.

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

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

Рейтинги

Ранги помогают прозрачности вдобавок формированию популярности во остросовременном онлайн-казино. В автоматы для ведения игры https://selhozobzor.ru/sad/ допускается вести игру совсем безвозмездно и без подготовительной процедуры регистрации. Они организованы во балахонистом спектре критериев, включая диверсификация а еще возвышенность игровых бонусов, потенциал выигрыша джекпотов и программы преданности. Геймеры вдобавок дисконтируют распространенность буква игорный дом потенциал бесплатной забавы и ловкость реагирования на иеремиады игроков.

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

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

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

Глоссарий пользователей

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

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

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

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

Положительные впечатления

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

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

Discussion

Back To Top
Search