/*! 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

Системы безобидной забавы буква онлайн-казино и казино с выводом на Тинькофф Платинум функции контролирования действия.

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

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

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

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

Отвечающее использование

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

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

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

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

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

Поры охлаждения

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

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

Оповещения об энергичности

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

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

Discussion

Back To Top
Search