(function () { function parsePayload(element) { var raw = element.getAttribute('data-scs') || '{}'; try { return JSON.parse(raw); } catch (error) { return null; } } function setBusy(button, busy) { button.disabled = !!busy; button.setAttribute('data-loading', busy ? '1' : '0'); } document.addEventListener('click', function (event) { var button = event.target.closest('.scs-checkout-button'); if (!button) { return; } event.preventDefault(); if (button.getAttribute('data-loading') === '1') { return; } var payload = parsePayload(button); if (!payload || !payload.nonce) { alert((window.scs_ajax && scs_ajax.error_text) || 'Unable to start payment.'); return; } setBusy(button, true); var formData = new FormData(); formData.append('action', 'scs_create_session'); formData.append('nonce', payload.nonce); formData.append('payload', JSON.stringify(payload)); var ajaxUrl = (window.scs_ajax && scs_ajax.ajax_url) || ''; fetch(ajaxUrl, { method: 'POST', credentials: 'same-origin', body: formData }) .then(function (response) { return response.json(); }) .then(function (data) { if (data && data.success && data.data && data.data.url) { window.location.href = data.data.url; return; } var message = (data && data.data && data.data.message) ? data.data.message : ((window.scs_ajax && scs_ajax.error_text) || 'Unable to start payment.'); alert(message); }) .catch(function () { alert((window.scs_ajax && scs_ajax.error_text) || 'Unable to start payment.'); }) .finally(function () { setBusy(button, false); }); }); })();