$(document).ready(function(){
var stripeFormModule = $(".stripe-payment-form")
var stripeModuleToken = stripeFormModule.attr("data-token")
var stripeModuleNextUrl = stripeFormModule.attr("data-next-url")
var stripeModuleBtnTitle = stripeFormModule.attr("data-btn-title") || "Add card"
var stripeTemplate = $.templates("#stripeTemplate")
var stripeTemplateDataContext = {
publishKey: stripeModuleToken,
nextUrl: stripeModuleNextUrl,
btnTitle: stripeModuleBtnTitle
}
var stripeTemplateHtml = stripeTemplate.render(stripeTemplateDataContext)
stripeFormModule.html(stripeTemplateHtml)
// https secure site when live
var paymentForm = $(".payment-form")
if (paymentForm.length > 1){
alert("Only one payment form is allowed per page")
paymentForm.css('display', 'none')
}
else if (paymentForm.length == 1) {
var pubKey = paymentForm.attr('data-token')
var nextUrl = paymentForm.attr('data-next-url')
// Create a Stripe client
var stripe = Stripe(pubKey);
// Create an instance of Elements
var elements = stripe.elements();
// Custom styling can be passed to options when creating an Element.
// (Note that this demo uses a wider set of styles than the guide below.)
var style = {
base: {
color: '#32325d',
lineHeight: '24px',
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
fontSmoothing: 'antialiased',
fontSize: '16px',
'::placeholder': {
color: '#aab7c4'
}
},
invalid: {
color: '#fa755a',
iconColor: '#fa755a'
}
};
// Create an instance of the card Element
var card = elements.create('card', {style: style});
// Add an instance of the card Element into the `card-element`
card.mount('#card-element');
// Handle real-time validation errors from the card Element.
card.addEventListener('change', function(event) {
var displayError = document.getElementById('card-errors');
if (event.error) {
displayError.textContent = event.error.message;
} else {
displayError.textContent = '';
}
});
// Handle form submission
// var form = document.getElementById('payment-form');
// form.addEventListener('submit', function(event) {
// event.preventDefault();
// // get the btn
// // display new btn ui
// var loadTime = 1500
// var errorHtml = " An error occured"
// var errorClasses = "btn btn-danger disabled my-3"
// var loadingHtml = " Loading..."
// var loadingClasses = "btn btn-success disabled my-3"
// stripe.createToken(card).then(function(result) {
// if (result.error) {
// // Inform the user if there was an error
// var errorElement = document.getElementById('card-errors');
// errorElement.textContent = result.error.message;
// } else {
// // Send the token to your server
// stripeTokenHandler(nextUrl, result.token);
// }
// });
// });
var form = $('#payment-form');
var btnLoad = form.find(".btn-load")
var btnLoadDefaultHtml = btnLoad.html()
var btnLoadDefaultClasses = btnLoad.attr("class")
form.on('submit', function(event) {
event.preventDefault();
// get the btn
// display new btn ui
var $this = $(this)
// btnLoad = $this.find('.btn-load')
btnLoad.blur()
var loadTime = 1500
var currentTimeout;
var errorHtml = " An error occured"
var errorClasses = "btn btn-danger disabled my-3"
var loadingHtml = " Loading..."
var loadingClasses = "btn btn-success disabled my-3"
stripe.createToken(card).then(function(result) {
if (result.error) {
// Inform the user if there was an error
var errorElement = $('#card-errors');
errorElement.textContent = result.error.message;
currentTimeout = displayBtnStatus(
btnLoad,
errorHtml,
errorClasses,
1000,
currentTimeout
)
} else {
// Send the token to your server
currentTimeout = displayBtnStatus(
btnLoad,
loadingHtml,
loadingClasses,
10000,
currentTimeout
)
stripeTokenHandler(nextUrl, result.token);
}
});
});
function displayBtnStatus(element, newHtml, newClasses, loadTime, timeout){
// if (timeout){
// clearTimeout(timeout)
// }
if (!loadTime){
loadTime = 1500
}
//var defaultHtml = element.html()
//var defaultClasses = element.attr("class")
element.html(newHtml)
element.removeClass(btnLoadDefaultClasses)
element.addClass(newClasses)
return setTimeout(function(){
element.html(btnLoadDefaultHtml)
element.removeClass(newClasses)
element.addClass(btnLoadDefaultClasses)
}, loadTime)
}
function redirectToNext(nextPath, timeoffset) {
// body...
if (nextPath){
setTimeout(function(){
window.location.href = nextPath
}, timeoffset)
}
}
function stripeTokenHandler(nextUrl, token){
// console.log(token.id)
var paymentMethodEndpoint = '/billing/payment-method/create/'
var data = {
'token': token.id
}
$.ajax({
data: data,
url: paymentMethodEndpoint,
method: "POST",
success: function(data){
var succesMsg = data.message || "Success! Your card was added."
card.clear()
if (nextUrl){
succesMsg = succesMsg + "
Redirecting..."
}
if ($.alert){
$.alert(succesMsg)
} else {
alert(succesMsg)
}
btnLoad.html(btnLoadDefaultHtml)
btnLoad.attr('class', btnLoadDefaultClasses)
redirectToNext(nextUrl, 1500)
},
error: function(error){
// console.log(error)
$.alert({title: "An error occured", content:"Please try adding your card again."})
btnLoad.html(btnLoadDefaultHtml)
btnLoad.attr('class', btnLoadDefaultClasses)
}
})
}
}
})