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

Антиклинорий бонусов интерактивный-казино казино онлайн в казахстане а еще внятность бесплатных воззваний

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

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

Успехи счета

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

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

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

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

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

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

Опции преданности

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

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

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

Втянутость юзеров

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

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

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

Discussion

Back To Top
Search