diff --git a/_redirects b/_redirects new file mode 100644 index 0000000..dd558c6 --- /dev/null +++ b/_redirects @@ -0,0 +1 @@ +/* / 200 diff --git a/app/scripts/main.js b/app/scripts/main.js deleted file mode 100644 index 3c2a106..0000000 --- a/app/scripts/main.js +++ /dev/null @@ -1,130 +0,0 @@ -const inputs = document.querySelectorAll('input'); -const closeButtons = document.querySelectorAll('.nevermind, header .thanks button'); -const header = document.querySelector('header'); -const form = document.querySelector('header form'); -const submitButton = document.querySelector('.invite'); - -const positionModal = () => { - if (document.body.classList.contains('invite-modal')) { - const screenHeight = window.innerHeight; - const headerHeight = header.clientHeight; - const newTop = `${(screenHeight - headerHeight) / 2}px`; - header.style.top = newTop; - } -}; - -header.addEventListener('transitionend', () => { - window.requestAnimationFrame(positionModal); -}, false); - -let resizeTimeout; -window.addEventListener('resize', () => { - if (!resizeTimeout) { - resizeTimeout = setTimeout(() => { - resizeTimeout = null; - positionModal(); - }, 66); - } -}, false); - -const showModal = () => { - document.body.classList.add('invite-modal'); - positionModal(); -}; - -const closeModal = () => { - header.style.top = '0px'; - form.reset(); - for (let i = 0; i < form.elements.length; i++) { - form.elements[i].classList.remove('changed'); - form.elements[i].disabled = false; - } - submitButton.innerHTML = ' Okay'; - document.body.classList.remove('invite-modal', 'thanks', 'error'); -}; - -const handleCloseButton = (event) => { - event.preventDefault(); - closeModal(); -}; - -const handleInviteSuccess = () => { - document.body.classList.add('thanks'); -}; - -const handleInviteError = (message) => { - submitButton.innerHTML = ' Okay'; - for (let i = 0; i < form.elements.length; i++) { - form.elements[i].disabled = false; - } - document.querySelector('.error p.message').innerHTML = message; - document.body.classList.add('error'); -}; - -document.querySelector('header .error button[type=submit]').addEventListener('click', (event) => { - event.preventDefault(); - document.body.classList.remove('error'); -}); - -const handleInviteSubmit = (event) => { - event.preventDefault(); - - for (let i = 0; i < form.elements.length; i++) { - form.elements[i].disabled = true; - } - - const preservedWidth = window.getComputedStyle(submitButton).width; - submitButton.innerHTML = ''; - submitButton.style.width = preservedWidth; - - try { - const xhr = new XMLHttpRequest(); - xhr.open('POST', 'https://oouple62r7.execute-api.us-east-1.amazonaws.com/production/invite'); - xhr.setRequestHeader('Content-Type', 'application/json'); - xhr.responseType = 'json'; - xhr.send(JSON.stringify({ - email: form.emailAddress.value, - first_name: form.familyName.value, - last_name: form.givenName.value, - })); - xhr.onreadystatechange = () => { - if (xhr.readyState === 4 && xhr.status === 200) { - const data = JSON.parse(xhr.response); - if (data.ok) { - handleInviteSuccess(); - } else { - handleInviteError(`Error: ${data.error}`); - } - } - }; - } catch (e) { - handleInviteError(`Unknown Error: ${e}`); - } -}; -form.addEventListener('submit', handleInviteSubmit, false); - -document.querySelector('.invite-o-matic').addEventListener('click', (event) => { - event.preventDefault(); - showModal(); -}, false); - -document.body.addEventListener('click', (event) => { - if (!header.contains(event.target)) { - closeModal(); - } -}, true); - -for (let i = 0; i < closeButtons.length; i++) { - closeButtons[i].addEventListener('click', handleCloseButton); -} - -for (let i = 0; i < inputs.length; i++) { - inputs[i].addEventListener('change', (event) => { - const input = event.target; - if (input.value !== '') { - input.classList.add('changed'); - } else { - input.classList.remove('changed'); - } - }); -}