Ghost/core/server/public/members.js

91 lines
3.0 KiB
JavaScript
Raw Normal View History

Array.prototype.forEach.call(document.querySelectorAll('form[data-members-form]'), function (form){
form.addEventListener('submit', function (event) {
event.preventDefault();
form.classList.remove('success', 'invalid', 'error');
var input = event.target.querySelector('input[data-members-email]');
var email = input.value;
if (!email.includes('@')) {
form.classList.add('invalid')
return;
}
form.classList.add('loading');
fetch('{{admin-url}}/api/canary/members/send-magic-link/', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: email
})
}).then(function (res) {
form.classList.remove('loading');
if (res.ok) {
form.classList.add('success')
} else {
form.classList.add('error')
}
});
});
});
Array.prototype.forEach.call(document.querySelectorAll('[data-members-subscription]'), function (button) {
button.addEventListener('click', function (event) {
event.preventDefault();
var plan = event.target.dataset.membersSubscriptionPlan;
button.classList.add('loading');
fetch('{{blog-url}}/members/ssr', {
credentials: 'same-origin'
}).then(function (res) {
if (!res.ok) {
throw new Error('Could not get identity token');
}
return res.text();
}).then(function (identity) {
return fetch('{{admin-url}}/api/canary/members/create-stripe-checkout-session/', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
plan: plan,
identity: identity
})
}).then(function (res) {
if (!res.ok) {
throw new Error('Could not create stripe checkout session');
}
return res.json();
});
}).then(function (result) {
var stripe = Stripe(result.publicKey);
return stripe.redirectToCheckout({
sessionId: result.sessionId
});
}, function (_err) {
console.error(_err);
button.classList.remove('loading');
button.classList.add('error');
});
});
});
var magicLinkRegEx = /token=([a-zA-Z0-9_\-]+\.[a-zA-Z0-9_\-]+\.[a-zA-Z0-9_\-]+)/;
var match = location.search.match(magicLinkRegEx);
var isMagicLink = !!match
var token = match && match[1];
if (isMagicLink) {
fetch('{{blog-url}}/members/ssr', {
method: 'POST',
body: token
}).then(function (res) {
if (res.ok) {
window.location.search = window.location.search.replace(magicLinkRegEx, '');
}
});
}