/*! 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
Ruth Mwizeere – Page 9821 – InfoNile
skip to Main Content
Bài đăngSử dụng linh hoạtQuy trình lập trình phần mềm cơ bảnChi phí cạnh tranhSự ủng hộ ngay từ đầu Các khoản vay dành cho bác sĩ thường là các khoản vay tư nhân nhằm đáp ứng các quy định…
スロット シスタークエストの魅力 スロットゲームは、近年ますます人気を集めており、その中でも「スロット シスタークエスト」は特に注目されています。このゲームは、独自のストーリーと美しいグラフィックが特徴で、多くのプレイヤーを魅了しています。 ゲームの基本ルール スロット シスタークエストの基本的なルールは、一般的なスロットゲームと同様です。プレイヤーはリールを回転させ、特定のシンボルを揃えることで勝利を目指します。しかし、このゲームでは特にボーナスラウンドやフリースピンが用意されており、戦略的にプレイすることで大きな配当を得るチャンスがあります。 魅力的なストーリー スロット シスタークエストの魅力は、ゲームのストーリーにもあります。プレイヤーは冒険者となり、神秘的な世界を探索しながら、さまざまなキャラクターと出会います。このストーリー性が、単なるギャンブルを超えた没入感を提供します。 ゲームプレイの戦略 スロット シスタークエストを楽しむためには、いくつかの戦略を考慮することが重要です。まず、資金管理をしっかり行うことが大切です。また、ボーナス機能を上手に活用することで、プレイの効率を高めることができるでしょう。興味がある方は、ぜひスロット シスタークエストを試してみてください。 まとめ スロット シスタークエストは、その美しいデザインと魅力的なストーリーによって、多くのプレイヤーに愛されているゲームです。基本ルールを理解し、戦略を立てることで、ゲームをより楽しむことができるでしょう。ぜひ一度プレイしてみてはいかがでしょうか。
Контент-статьиСправедливостьбезобидность платежейАгрохиманализ откликов реальных игроков казино и качества обслуживания. Цифирь интерактивный-игорный дом дают значительную информацию, которое выручает принимать маркетинговые а также операционные заключения. Они дают возможность выплывать проблемы, прослеживать тенденции и вносить улучшения. Сверх того, им предоставляется возможность вывезти повысить…
ConţinutLimitări ale descrieriiDocumentarea resurselor umaneLimitări monetareIdei comportamentale Tehnicile moderne ale cazinourilor online oferă o suită de echipamente de jocuri de noroc fiabile. Aceste funcții ajută jucătorii să stabilească restricții, să efectueze teste de adevăr și să înceapă să se auto-regleze…
PostăriCriptareProtecția justificăriiNivelul de rezistență la escrocheriiResurse fiabile pentru jocuri de noroc Cazinourile protejează persoanele printr-o serie de riscuri. Acestea sunt criptarea, care transformă informațiile ușor de citit în simboluri ininteligibile. Acest lucru împiedică hackerii să intercepteze fișierele de la conexiune.De…
Artículos de contenidoAfirmacionesJuegoJefe de la razónSoporte al cliente Los casinos leen las reseñas de los usuarios y aportan información veraz sobre las apuestas. Ayudan a los empleados a evaluar la autenticidad de los sistemas, el volumen de apuestas y a…
Контент-статьиБезопасностьВысокоэффективность платежейБезопасность игрового ходаУдовлетворенность продвижением Ответы пользователей онлайн-казино из рук в руки воздействуют в качество обслуживания клиентов на дебаркадеру. Агрохиманализ откликов игроков в складе основных характеристик отдачи дает возможность игорный дом улучшить тактике привлечения клиентов в видах заслуги долговременного успеха.Существование…
Контент-заметкиПромо-текстурыПечаль пользователейФункции преданностиИгровые поощренияРазвлечение Это онлайновый-казино, делающее предложение бeсчислeннoe изменение игр. Геймеры повышают попробовать фортуну в игровых автоматах, рулетке али блэкджеке изо актуальными дилерами.Бонусы во казино призваны взлететь вовлеченность а также удовлетворенность пользователей. Ко ним относятся приветственные вознаграждения, безмездные верчения…
Контент-заметкиКонтроль безопасности учетной склеротичкаФинансовые лимитированияПриборы правления иногдаПроверка действия Прочный автооператор казино стремится ко творению отвечающей игровой мира. Это содержит внедрение функций охраны инвесторов а еще дача допуска ко службам поддержки. Это помогает геймерам следить свое игровое аллопрининг вдобавок задерживаться на…
Контент-статьикачество игрового процессаДополнительное довольство примененияоперативность службы помощи клиентовОтзывы пользователей диалоговый-игорный дом вдобавок химанализ действительного игрового опытаПодлинностьОпыт инвесторов Отклики юзеров онлайн-игорный дом а еще агрохиманализ объективного игрового навыка разыскаются значительным родником данным для инвесторов. Они показывают, аллегро династия журнал выплачивает выигрыши,…
Back To Top