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

Приборы отвечающей забавы во онлайн-казино а также невредная среда в Моней Х официальный сайт видах развлечений.

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

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

Альтернативы самоисключения

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

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

Автоконтроль над расходами

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

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

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

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

Приборы для ответственной игры а еще безопасная антураж в видах веселий.

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

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

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

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

Discussion

Back To Top
Search