2026-03-26 12:55:30 +00:00

569 lines
19 KiB
JavaScript

var wp_asp_prefetched = false;
stripehandler.log = (function ($mod, $msg) {
if (this.debug) {
console.log('[StripePayments]' + $mod + ': ' + $msg);
}
});
stripehandler.apply_tax = function (amount, data) {
if (data.tax !== 0) {
var tax = Math.round(amount * parseFloat(data.tax) / 100);
amount = parseInt(amount) + parseInt(tax);
}
return amount;
};
stripehandler.apply_tax_and_shipping = function (amount, data) {
amount = stripehandler.apply_tax(amount, data);
if (data.shipping !== 0) {
amount = amount + parseInt(data.shipping);
}
return amount;
};
stripehandler.apply_variations = function (amount, data) {
var grpId;
if (data.variations.applied) {
for (grpId = 0; grpId < data.variations.applied.length; ++grpId) {
amount = amount + stripehandler.amount_to_cents(data.variations.prices[grpId][data.variations.applied[grpId]], data.currency);
}
}
return amount;
}
stripehandler.is_zero_cents = (function (curr) {
if (stripehandler.zeroCents.indexOf(curr) === -1) {
return false;
}
return true;
});
stripehandler.cents_to_amount = (function (amount, curr) {
if (!stripehandler.is_zero_cents(curr)) {
amount = amount / 100;
}
return amount;
});
stripehandler.amount_to_cents = function (amount, curr) {
if (!stripehandler.is_zero_cents(curr)) {
amount = Math.round(amount * 100);
}
return parseFloat(amount);
}
stripehandler.formatMoney = function (n, data) {
n = stripehandler.cents_to_amount(n, data.currency);
var c = isNaN(c = Math.abs(data.currencyFormat.c)) ? 2 : data.currencyFormat.c,
d = d == undefined ? "." : data.currencyFormat.d,
t = t == undefined ? "," : data.currencyFormat.t,
s = n < 0 ? "-" : "",
i = String(parseInt(n = Math.abs(Number(n) || 0).toFixed(c))),
j = (j = i.length) > 3 ? j % 3 : 0;
var result = s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
return (data.currencyFormat.pos !== "right" ? data.currencyFormat.s + result : result + data.currencyFormat.s);
};
stripehandler.updateAllAmounts = function (data) {
var totValue;
if (data.custom_quantity === "1") {
var custom_quantity = wp_asp_validate_custom_quantity(data);
if (custom_quantity !== false) {
data.quantity = custom_quantity;
} else {
return false;
}
}
if (data.variable) {
var amt = wp_asp_validate_custom_amount(data, true);
if (amt !== false) {
totValue = amt;
} else {
return false;
}
} else {
totValue = data.item_price;
}
totValue = stripehandler.apply_variations(totValue, data);
var itemPrice = totValue;
var totalCont = jQuery('form#stripe_form_' + data.uniq_id).parent().siblings('.asp_price_container');
if (data.discount) {
var couponVal = stripehandler.apply_coupon(totValue, data);
couponVal = stripehandler.apply_tax_and_shipping(couponVal, data);
totNew = totalCont.find('span.asp_tot_new_price');
if (totNew.length !== 0) {
totNew.html(stripehandler.formatMoney(couponVal, data));
} else {
totalCont.find('span.asp_new_price_amount').html(stripehandler.formatMoney(couponVal, data));
}
}
totValue = stripehandler.apply_tax_and_shipping(totValue, data);
totalCont.children().find('span.asp_tot_current_price').html(stripehandler.formatMoney(totValue, data));
totalCont.find('span.asp_price_amount').html(stripehandler.formatMoney(itemPrice, data));
var taxVal = false;
if (data.tax !== 0) {
var taxVal = Math.round(data.item_price * parseFloat(data.tax) / 100) * data.quantity;
}
if (taxVal) {
var taxStr = data.displayStr.tax.replace('%s', stripehandler.formatMoney(taxVal, data));
totalCont.children().find('span.asp_price_tax_section').html(taxStr);
}
var qntStr = '';
if (data.quantity !== 1) {
qntStr = 'x ' + data.quantity;
}
totalCont.find('span.asp_quantity').html(qntStr);
if (data.descrGenerated) {
var descrAmt = totValue;
if (data.discount) {
descrAmt = couponVal;
}
data.description = data.quantity + ' X ' + stripehandler.formatMoney(descrAmt, data);
}
}
stripehandler.apply_coupon = (function (amount, data) {
var discountAmount = 0;
if (typeof data.discount !== "undefined") {
if (data.discountType === 'perc') {
discountAmount = Math.round(amount * (data.discount / 100));
} else {
discountAmount = data.discount * 100;
if (stripehandler.is_zero_cents(data.currency)) {
discountAmount = Math.round(discountAmount / 100);
}
}
amount = amount - discountAmount;
data.discountAmount = discountAmount;
}
return amount;
});
jQuery(document).ready(function () {
jQuery('input[data-stripe-button-uid]').each(function (ind, obj) {
var uid = jQuery(obj).data('stripeButtonUid');
if (typeof (window['stripehandler' + uid]) !== 'undefined') {
if (!window['stripehandler' + uid].data.core_attached) {
wp_asp_add_stripe_handler(window['stripehandler' + uid].data);
window['stripehandler' + uid].data.core_attached = true;
}
}
});
});
function wp_asp_validate_custom_quantity(data) {
var custom_quantity_orig = jQuery('input#stripeCustomQuantity_' + data.uniq_id).val();
var custom_quantity = parseInt(custom_quantity_orig);
if (isNaN(custom_quantity)) {
jQuery('#error_explanation_quantity_' + data.uniq_id).hide().html(stripehandler.strEnterQuantity).fadeIn('slow');
return false;
} else if (custom_quantity_orig % 1 !== 0) {
jQuery('#error_explanation_quantity_' + data.uniq_id).hide().html(stripehandler.strQuantityIsFloat).fadeIn('slow');
return false;
} else if (custom_quantity <= 0) {
jQuery('#error_explanation_quantity_' + data.uniq_id).hide().html(stripehandler.strQuantityIsZero).fadeIn('slow');
return false;
} else if (data.stock_control_enabled === true && custom_quantity > data.stock_items) {
jQuery('#error_explanation_quantity_' + data.uniq_id).hide().html(stripehandler.strStockNotAvailable.replace('%d', data.stock_items)).fadeIn('slow');
return false;
} else {
jQuery('#error_explanation_quantity_' + data.uniq_id).hide();
return custom_quantity;
}
}
function wp_asp_validate_custom_amount(data, noTaxAndShipping) {
var amount = jQuery('input#stripeAmount_' + data.uniq_id).val();
if (stripehandler.amountOpts.applySepOpts != 0) {
amount = amount.replace(stripehandler.amountOpts.thousandSep, '');
amount = amount.replace(stripehandler.amountOpts.decimalSep, '.');
} else {
amount = amount.replace(/\$/g, '');
amount = amount.replace(/\,/g, '');
amount = amount.replace(/\ /g, '');
}
amount = parseFloat(amount);
if (isNaN(amount)) {
if (!stripehandler.dontShowValidationErrors) {
jQuery('#error_explanation_' + data.uniq_id).hide().html(stripehandler.strEnterValidAmount).fadeIn('slow');
}
return false;
}
var displayAmount = amount.toFixed(2).toString();
if (stripehandler.amountOpts.applySepOpts != 0) {
displayAmount = displayAmount.replace('.', stripehandler.amountOpts.decimalSep);
}
if (data.zeroCents.indexOf(data.currency) <= -1) {
amount = Math.round(amount * 100);
}
if (typeof stripehandler.minAmounts[data.currency] !== 'undefined') {
if (stripehandler.minAmounts[data.currency] > amount) {
jQuery('#error_explanation_' + data.uniq_id).hide().html(stripehandler.strMinAmount + ' ' + stripehandler.cents_to_amount(stripehandler.minAmounts[data.currency], data.currency)).fadeIn('slow');
return false;
}
} else if (50 > amount) {
jQuery('#error_explanation_' + data.uniq_id).hide().html(stripehandler.strMinAmount + ' 0.5').fadeIn('slow');
return false;
}
jQuery('#error_explanation_' + data.uniq_id).html('');
jQuery('input#stripeAmount_' + data.uniq_id).val(displayAmount);
if (typeof noTaxAndShipping === 'undefined') {
noTaxAndShipping = false;
}
if (!noTaxAndShipping) {
amount = stripehandler.apply_tax_and_shipping(amount, data);
}
return amount;
}
function wp_asp_can_proceed(data, openHandler) {
function button_clicked_hooks(data) {
if (data.addonHooks.length !== 0) {
data.addonHooks.forEach(function (hookName) {
if (typeof window["wp_asp_button_clicked_" + hookName] === "function") {
data.executingHook = "wp_asp_button_clicked_" + hookName;
data = window["wp_asp_button_clicked_" + hookName](data);
data.executingHook = "";
}
});
}
return data;
}
if (data.currency_variable) {
currSel = jQuery('select#stripeCurrency_' + data.uniq_id);
data.currency = currSel.val();
data.currencyFormat.s = currSel.find(':selected').data('asp-curr-sym');
jQuery('form#stripe_form_' + data.uniq_id).find('input[name="currency_code"]').val(data.currency);
}
if (data.variable) {
var amount = wp_asp_validate_custom_amount(data, true);
if (amount === false) {
return false;
}
data.item_price = wp_asp_validate_custom_amount(data, true);
}
if (data.custom_quantity === "1") {
var custom_quantity = wp_asp_validate_custom_quantity(data);
if (custom_quantity !== false) {
data.quantity = custom_quantity;
} else {
return false;
}
}
amount = stripehandler.apply_variations(data.item_price, data);
amount = amount * data.quantity;
amount = stripehandler.apply_coupon(amount, data);
amount = stripehandler.apply_tax_and_shipping(amount, data);
var description = data.description;
if (description === '') {
var descr_quantity = 1;
if (typeof custom_quantity !== "undefined") {
descr_quantity = custom_quantity;
} else {
descr_quantity = data.quantity;
}
description = ' X ' + descr_quantity;
}
if (data.custom_field != '0') {
jQuery('form#stripe_form_' + data.uniq_id).find('.asp_product_custom_field_error').hide();
var customInputs = jQuery('form#stripe_form_' + data.uniq_id+', #asp-all-buttons-container-'+data.uniq_id).find('.asp_product_custom_field_input').toArray();
var valid = true;
if (typeof (data.custom_field_validation_regex) !== "undefined" && data.custom_field_validation_regex !== '') {
try {
var re = new RegExp(data.custom_field_validation_regex);
} catch (error) {
alert(stripehandler.strInvalidCFValidationRegex + ' ' + data.custom_field_validation_regex + "\n" + error);
return valid = false;
}
}
jQuery.each(customInputs, function (id, customInput) {
customInput = jQuery(customInput);
if (typeof (customInput.attr('data-asp-custom-mandatory')) !== "undefined") {
if (customInput.attr('type') === 'text' && customInput.val() === '') {
jQuery(this).siblings('.asp_product_custom_field_error').hide().html(stripehandler.strPleaseFillIn).fadeIn('slow');
return valid = false;
}
if (customInput.attr('type') === 'checkbox' && customInput.prop('checked') !== true) {
jQuery(this).parent().siblings('.asp_product_custom_field_error').hide().html(stripehandler.strPleaseCheckCheckbox).fadeIn('slow');
return valid = false;
}
}
if (customInput.attr('class') === 'asp_product_custom_field_input' && customInput.attr('type') === 'text' && typeof re !== "undefined") {
if (customInput.val() && !re.test(customInput.val())) {
jQuery(this).siblings('.asp_product_custom_field_error').hide().html(data.custom_field_validation_err_msg).fadeIn('slow');
return valid = false;
}
}
});
if (!valid) {
return false;
}
}
if (data.tos == 1) {
if (jQuery('#asp-tos-' + data.uniq_id).prop('checked') !== true) {
jQuery('#tos_error_explanation_' + data.uniq_id).hide().html(stripehandler.strMustAcceptTos).fadeIn('slow');
return false;
}
}
data.canProceed = true;
var handlerOpts = {};
if (typeof (data.is_trial) !== "undefined" && data.is_trial) {
handlerOpts.panelLabel = stripehandler.strStartFreeTrial;
amount = 0;
}
data.totalAmount = amount;
data = button_clicked_hooks(data);
if (!data.canProceed) {
return false;
}
if (!openHandler) {
return true;
}
handlerOpts.description = description;
handlerOpts.currency = data.currency;
if (typeof (amount) !== "undefined") {
handlerOpts.amount = amount;
}
data.handler.open(handlerOpts);
return true;
}
function wp_asp_hadnle_token(data, token, args) {
jQuery('input#stripeToken_' + data.uniq_id).val(token.id);
jQuery('input#stripeTokenType_' + data.uniq_id).val(token.type);
jQuery('input#stripeEmail_' + data.uniq_id).val(token.email);
form = jQuery('form#stripe_form_' + data.uniq_id);
for (var key in args) {
inputName = key.replace(/[^_]+/g, function (word) {
return word.replace(/^./, function (first) {
return first.toUpperCase();
});
});
inputName = 'stripe' + inputName.replace(/[_]/g, '');
form.append('<input type="hidden" name="' + inputName + '" value="' + args[key] + '">')
}
//jQuery('#stripe_button_' + data.uniq_id).html(jQuery('.asp-processing-cont').html());
jQuery('div#asp-all-buttons-container-' + data.uniq_id).hide();
jQuery('div#asp-btn-spinner-container-' + data.uniq_id).show();
jQuery('#stripe_button_' + data.uniq_id).prop('disabled', true);
if (data.addonHooks.length !== 0) {
data.addonHooks.forEach(function (hookName) {
if (typeof window["wp_asp_before_form_submit_" + hookName] === "function") {
window["wp_asp_before_form_submit_" + hookName](data);
}
});
}
form.append('<input type="hidden" name="clickProcessed" value="1">');
form.off('submit');
form.find('input').prop('readonly', true);
form.submit();
}
function wp_asp_add_stripe_handler(data) {
function wp_asp_check_handler(data) {
if (typeof (data.handler) === "undefined") {
var key;
if (data.is_live) {
key = stripehandler.key;
} else {
key = stripehandler.key_test;
}
var handler_opts = {
key: key,
amount: data.amount,
locale: data.locale,
description: data.description,
name: data.name,
currency: data.currency,
image: data.image,
allowRememberMe: data.allowRememberMe,
token: function (token, args) {
wp_asp_hadnle_token(data, token, args);
}
};
if (data.billingAddress !== false) {
handler_opts.billingAddress = true;
}
if (data.shippingAddress !== false) {
handler_opts.shippingAddress = true;
//'billingAddress' must be enabled whenever 'shippingAddress' is.
handler_opts.billingAddress = true;
}
if (data.customer_email !== '') {
handler_opts.email = data.customer_email;
}
if (data.verifyZip !== 0) {
handler_opts.zipCode = true;
}
if (data.addonHooks.length !== 0) {
data.addonHooks.forEach(function (hookName) {
if (typeof window["wp_asp_before_handler_configure_" + hookName] === "function") {
handler_opts = window["wp_asp_before_handler_configure_" + hookName](handler_opts, data);
}
});
}
data.handler = StripeCheckout.configure(handler_opts);
}
}
if (!wp_asp_prefetched) {
wp_asp_prefetched = true;
wp_asp_check_handler(data);
}
jQuery('input#asp-redeem-coupon-btn-' + data.uniq_id).click(function (e) {
e.preventDefault();
var couponCode = jQuery(this).siblings('input#asp-coupon-field-' + data.uniq_id).val();
if (couponCode === '') {
return false;
}
var aspCouponBtn = jQuery(this);
var aspCouponSpinner = jQuery(jQuery.parseHTML('<div class="asp-spinner">Loading...</div>'));
aspCouponBtn.prop('disabled', true);
aspCouponBtn.after(aspCouponSpinner);
var ajaxData = {
'action': 'asp_check_coupon',
'product_id': data.product_id,
'coupon_code': couponCode,
'curr': data.currency,
'amount': data.item_price,
'tax': data.tax,
'shipping': data.shipping
};
jQuery.post(stripehandler.ajax_url, ajaxData, function (response) {
if (response.success) {
data.discount = response.discount;
data.discountType = response.discountType;
data.couponCode = response.code;
jQuery('div#asp-coupon-info-' + data.uniq_id).html(response.discountStr + ' <input type="button" class="asp_btn_normalize asp_coupon_apply_btn" id="asp-remove-coupon-' + data.uniq_id + '" title="' + stripehandler.strRemoveCoupon + '" value="' + stripehandler.strRemove + '">');
jQuery('input#asp-redeem-coupon-btn-' + data.uniq_id).hide();
jQuery('input#asp-coupon-field-' + data.uniq_id).hide();
var totalCont = jQuery('form#stripe_form_' + data.uniq_id).parent().siblings('.asp_price_container');
var totCurr;
var totNew;
if (totalCont.find('.asp_price_full_total').length !== 0) {
totCurr = totalCont.children().find('span.asp_tot_current_price').addClass('asp_line_through');
totNew = totalCont.children().find('span.asp_tot_new_price');
} else {
totCurr = totalCont.find('span.asp_price_amount').addClass('asp_line_through');
totNew = totalCont.find('span.asp_new_price_amount');
}
stripehandler.updateAllAmounts(data);
jQuery('#asp-remove-coupon-' + data.uniq_id).on('click', function (e) {
e.preventDefault();
jQuery('div#asp-coupon-info-' + data.uniq_id).html('');
jQuery('input#asp-coupon-field-' + data.uniq_id).val('');
jQuery('input#asp-coupon-field-' + data.uniq_id).show();
jQuery('input#asp-redeem-coupon-btn-' + data.uniq_id).show();
totCurr.removeClass('asp_line_through');
totNew.html('');
delete data.discount;
delete data.discountType;
delete data.couponCode;
delete data.newAmountFmt;
});
} else {
jQuery('div#asp-coupon-info-' + data.uniq_id).html(response.msg);
}
aspCouponSpinner.remove();
aspCouponBtn.prop('disabled', false);
});
});
jQuery('input#asp-coupon-field-' + data.uniq_id).keydown(function (e) {
if (e.keyCode === 13) {
e.preventDefault();
jQuery('input#asp-redeem-coupon-btn-' + data.uniq_id).click();
return false;
}
});
jQuery('#stripe_button_' + data.uniq_id).on('click', function (e) {
e.preventDefault();
wp_asp_check_handler(data);
data.buttonClicked = jQuery(this);
return wp_asp_can_proceed(data, true);
});
var aspProductForm = jQuery('form#stripe_form_' + data.uniq_id);
aspProductForm.on('submit', function (e) {
e.preventDefault();
jQuery('#stripe_button_' + data.uniq_id).click();
});
aspProductForm.find('div.asp_product_item_qty_input_container').children('.asp_product_item_qty_input').change(function () {
var qnt = wp_asp_validate_custom_quantity(data);
if (qnt !== false) {
data.quantity = qnt;
stripehandler.updateAllAmounts(data);
}
});
aspProductForm.find('div.asp_product_item_amount_input_container').children('.asp_product_item_amount_input').change(function () {
var amt = wp_asp_validate_custom_amount(data);
if (amt !== false) {
data.item_price = amt;
stripehandler.updateAllAmounts(data);
}
});
aspProductForm.find('select.asp-product-variations-select, input.asp-product-variations-select-radio').change(function () {
var grpId = jQuery(this).data('asp-variations-group-id');
var varId = jQuery(this).val();
if (Object.getOwnPropertyNames(data.variations).length !== 0) {
if (!data.variations.applied) {
data.variations.applied = [];
}
data.variations.applied[grpId] = varId;
stripehandler.updateAllAmounts(data);
}
});
stripehandler.dontShowValidationErrors = true;
aspProductForm.find('select.asp-product-variations-select, input.asp-product-variations-select-radio:checked').change();
stripehandler.dontShowValidationErrors = false;
jQuery('#stripe_button_' + data.uniq_id).prop("disabled", false);
}