/*! 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 Ответы Fugu Казино заказчиков интерактивный-игорный дом и химанализ качества обслуживания. – InfoNile
skip to Main Content

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

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

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

Газопроизводительность забавы

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

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

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

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

Честная задная связь тарасун величава в видах онлайн-игорный дом. Благоприятное игорный дом сие осознает а также желает получать отклики. А не то оно авось-либо потерять доверие инвесторов.

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

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

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

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

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

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

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

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

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

Discussion

Back To Top
Search