/*! 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 Приборы отвечающей игры на Казино Turbo играть бесплатно онлайн-казино и невредная круг для веселий. – InfoNile
skip to Main Content

Приборы отвечающей игры на Казино Turbo играть бесплатно онлайн-казино и невредная круг для веселий.

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

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

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

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

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

Контроль надо затратами

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

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

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

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

Инструменты для отвечающей забавы вдобавок безвредная антураж для веселий.

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

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

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

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

Discussion

Back To Top
Search