| | |
| | | ob_start(); |
| | | ?> |
| | | |
| | | document.addEventListener('DOMContentLoaded', () => { |
| | | const form = document.querySelector('.login form'); |
| | | if (!form) return; |
| | | document.addEventListener('DOMContentLoaded', async function () { |
| | | window.auth.subscribe(event => { |
| | | if (event === 'auth-loaded') { |
| | | const form = document.querySelector('.login form'); |
| | | if (!form) return; |
| | | |
| | | if (!window.jvbForm) { |
| | | console.error('jvbForm not loaded'); |
| | | return; |
| | | } |
| | | |
| | | window.LoginController = new window.jvbForm(); |
| | | window.LoginController.registerForm(form, { |
| | | autosave: false, |
| | | endpoint: <?= "'{$action}'" ?>, |
| | | formStatus: false, |
| | | cache: false, |
| | | }); |
| | | |
| | | window.LoginController.subscribe((event, data) => { |
| | | if (event === 'form-submit') { |
| | | handleFormSubmission(data); |
| | | if (!window.jvbForm) { |
| | | console.error('jvbForm not loaded'); |
| | | return; |
| | | } |
| | | }); |
| | | |
| | | |
| | | async function handleFormSubmission(data) { |
| | | let realFormData = data.fullData; |
| | | const { formId, config, data: formData } = data; |
| | | |
| | | |
| | | const form = config.element; |
| | | |
| | | const submit = form.querySelector('[type=submit]'); |
| | | let oldText = submit.textContent; |
| | | |
| | | |
| | | window.LoginController.showFormStatus(formId, 'uploading'); |
| | | |
| | | try { |
| | | submit.disabled = true; |
| | | submit.textContent = 'Loading...'; |
| | | const response = await fetch(`${jvbSettings.api}<?=($action === 'magic') ? $action : 'auth/'.$action?>`, { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | | 'X-WP-Nonce': window.auth.getNonce() |
| | | }, |
| | | body: JSON.stringify(realFormData) |
| | | window.LoginController = new window.jvbForm(); |
| | | window.LoginController.registerForm(form, { |
| | | autosave: false, |
| | | endpoint: <?= "'{$action}'" ?>, |
| | | formStatus: false, |
| | | cache: false, |
| | | }); |
| | | |
| | | const result = await response.json(); |
| | | |
| | | // Handle errors |
| | | if (!response.ok) { |
| | | window.LoginController.showFormStatus(formId, 'error'); |
| | | window.LoginController.handleFormError(form, result); |
| | | return; |
| | | window.LoginController.subscribe((event, data) => { |
| | | if (event === 'form-submit') { |
| | | handleFormSubmission(data); |
| | | } |
| | | }); |
| | | |
| | | // Handle success |
| | | window.LoginController.showFormStatus(formId, 'submitted'); |
| | | |
| | | // Show success message briefly before redirect |
| | | if (result.message) { |
| | | window.LoginController.handleFormSuccess(form, result); |
| | | } |
| | | async function handleFormSubmission(data) { |
| | | let realFormData = data.fullData; |
| | | const { formId, config, data: formData } = data; |
| | | |
| | | if (window.auth && typeof window.auth.handleLogin === 'function' && Object.hasOwn(result, 'auth')) { |
| | | console.log('Awaiting Auth...'); |
| | | await window.auth.handleLogin(result.auth); // Pass the full result |
| | | } |
| | | |
| | | // Handle redirect |
| | | if (result.redirect) { |
| | | setTimeout(() => { |
| | | window.location.href = result.redirect; |
| | | }, 200); // Brief delay to show success message |
| | | } |
| | | const form = config.element; |
| | | |
| | | } catch (error) { |
| | | console.error('Form submission error:', error); |
| | | window.LoginController.showFormStatus(formId, 'error'); |
| | | window.LoginController.handleFormError(form, { |
| | | message: 'Network error. Please check your connection and try again.', |
| | | code: 'network_error' |
| | | const submit = form.querySelector('[type=submit]'); |
| | | let oldText = submit.textContent; |
| | | |
| | | |
| | | window.LoginController.showFormStatus(formId, 'uploading'); |
| | | |
| | | try { |
| | | submit.disabled = true; |
| | | submit.textContent = 'Loading...'; |
| | | const response = await window.auth.fetch(`${jvbSettings.api}auth/<?php echo $action; ?>`, { |
| | | method: 'POST', |
| | | body: JSON.stringify(realFormData) |
| | | }); |
| | | } finally { |
| | | submit.textContent = oldText; |
| | | submit.disabled = false; |
| | | |
| | | const result = await response.json(); |
| | | |
| | | // Handle errors |
| | | if (!response.ok) { |
| | | window.LoginController.showFormStatus(formId, 'error'); |
| | | window.LoginController.handleFormError(form, result); |
| | | return; |
| | | } |
| | | |
| | | // Handle success |
| | | window.LoginController.showFormStatus(formId, 'submitted'); |
| | | |
| | | // Show success message briefly before redirect |
| | | if (result.message) { |
| | | window.LoginController.handleFormSuccess(form, result); |
| | | } |
| | | |
| | | if (window.auth && typeof window.auth.handleLogin === 'function' && Object.hasOwn(result, 'auth')) { |
| | | console.log('Awaiting Auth...'); |
| | | await window.auth.handleLogin(result.auth); // Pass the full result |
| | | } |
| | | |
| | | // Handle redirect |
| | | if (result.redirect) { |
| | | setTimeout(() => { |
| | | window.location.href = result.redirect; |
| | | }, 100); // Brief delay to show success message |
| | | } |
| | | |
| | | } catch (error) { |
| | | console.error('Form submission error:', error); |
| | | window.LoginController.showFormStatus(formId, 'error'); |
| | | window.LoginController.handleFormError(form, { |
| | | message: 'Network error. Please check your connection and try again.', |
| | | code: 'network_error' |
| | | }); |
| | | } finally { |
| | | submit.textContent = oldText; |
| | | submit.disabled = false; |
| | | } |
| | | } |
| | | } |
| | | |
| | | }); |
| | | |
| | | }); |
| | | |
| | | |
| | | |
| | | <?php |