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

Авантажность Fugu Casino взглядов сообщества диалоговый-казино а еще откликов о эксперименте числовых представлений.

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

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

Отзвуки связанных с безвредности

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

безвредность платежей

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

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

Подвижный впуск

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

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

Организации продвижения

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

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

Общая развлекательная наука

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

Discussion

Back To Top
Search