(function(){ 'use strict'; function validateFormData(data) { var errors = {} if(!data.address) { errors.email = "Please enter an email address."; } else if(data.address.length > 244) { errors.email = "Email is too long.
" + "If your email address is really this long, we apologize.
" + "Please email us directly (hello@ppl.family) so we can adjust our form."; } else if(!/.+@.+\..+/.test(data.address)) { errors.email = "Please enter a valid email address."; } if(data.comment && data.comment.length > 102400) { errors.name = "Name is too long.
Please use a shorter version of your name."; } if(Object.keys(errors).length) { return errors; } return false; } function enableForm(form) { var elements = form.elements; for(var i = 0; i < elements.length; ++i) { elements[i].removeAttribute("disabled"); } } function disableForm(form) { var elements = form.elements; for(var i = 0; i < elements.length; ++i) { elements[i].setAttribute("disabled", ""); } } function enableEmailForms() { enableForm(document.querySelector(".js-inline-email-form")); } function disableEmailForms() { disableForm(document.querySelector(".js-inline-email-form")); } function displaySuccess(form) { var successEle = form.querySelector(".success-message"); if(successEle) { successEle.classList.remove("js-inactive"); } } function hideSuccess(form){ var successEle = form.querySelector(".success-message"); if(successEle) { successEle.classList.add("js-inactive"); } } function displayErrors(form, errors) { errors = errors || {}; form.querySelectorAll(".input-error").forEach(function(ele) { ele.classList.add("js-inactive"); }); form.querySelector(".form-error").classList.add("js-inactive"); Object.keys(errors).forEach(function(key) { var errorEle; if(key === "_form" && errors[key]) { errorEle = form.querySelector(".form-error"); } else if(errors[key]) { var query = "." + key + ".input-error"; errorEle = form.querySelector(query); } if(!errorEle) return; errorEle.innerHTML = errors[key]; errorEle.classList.remove("js-inactive"); }); } function submitFormData(form) { hideSuccess(form); var data = new FormData(form); var msg = { address: data.get("email") , comment: 'telebit: ' + (data.get("name") || '') }; var errors = validateFormData(msg); displayErrors(form, errors); if(errors) { console.warn("Form validation failed: ", errors); return Promise.resolve(); } disableEmailForms(); return window.fetch('https://api.ppl.family/api/ppl.family/public/list', { method: 'POST' , cors: true , headers: new Headers({ 'Content-Type': 'application/json' }) , body: JSON.stringify(msg) }).then(function (resp) { return resp.json(); }).then(function (data) { enableEmailForms(); if (data.error) { console.error("Error submitting form: ", data.error); err = { "_form": "Couldn't save email.
Try again or email hello@ppl.family directly." }; return displayErrors(form, errors); } displaySuccess(form); console.log("Successfully subscribed!"); form.reset(); }, function (err) { enableEmailForms(); console.error("Error sending form data to server: ", err); displayErrors(form, { "_form": "Unable to send the info to the server.
" + "Please try again or email hello@ppl.family directly." }); }); } document.body.addEventListener('submit', function (ev) { console.log("Caught event!"); function eleMatchesString(ele, selector) { return ele.matches ? ele.matches(selector) : ele.msMatchesSelector(selector); } var form = ev.target; if (!eleMatchesString(form, '.js-inline-email-form')) { return; } ev.preventDefault(); ev.stopPropagation(); submitFormData(form); return; }); })();