/*! 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 Веб-обозрение откликов сообщества онлайновый-игорный дом и Вулкан Платинум игрового навыка – InfoNile
skip to Main Content

Веб-обозрение откликов сообщества онлайновый-игорный дом и Вулкан Платинум игрового навыка

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

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

Стабильность сервиса

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

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

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

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

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

Коллективное аспект пользователей

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

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

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

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

Уровни довольства

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

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

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

Discussion

Back To Top
Search