/*! 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 Системы вознаграждений crp-spb.ru и бонусов онлайн-игорный дом для интерактивных игр. – InfoNile
skip to Main Content

Системы вознаграждений crp-spb.ru и бонусов онлайн-игорный дом для интерактивных игр.

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

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

структуры преданности

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

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

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

Преимущества немерено

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

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

Рекламные путешествия

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

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

Функциональность организации возмездий

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

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

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

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

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

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

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

Discussion

Back To Top
Search