···3838393940404141-// Forms
4242-// -----
4343-// Adds a `changed` attribute to form fields, if the form was "changed".
4444-// This is to help with styling, we don't want to show an error immediately.
4545-4646-const FIELD_SELECTOR = "input, textarea"
4747-4848-4949-document.addEventListener("keyup", e => {
5050- const field = e.target && (<HTMLElement>e.target).closest(FIELD_SELECTOR)
5151- if (field) field.setAttribute("changed", "")
5252-})
5353-5454-5555-document.addEventListener("click", e => {
5656- if (!e.target || (<HTMLElement>e.target).tagName !== "BUTTON") return;
5757- const form = (<HTMLElement>e.target).closest("form")
5858- if (form) markAllFormFieldsAsChanged(form)
5959-})
6060-6161-6262-document.addEventListener("submit", e => {
6363- const form = e.target && (<HTMLElement>e.target).closest("form")
6464- if (form) markAllFormFieldsAsChanged(form)
6565-})
6666-6767-6868-function markAllFormFieldsAsChanged(form) {
6969- [].slice.call(form.querySelectorAll(FIELD_SELECTOR)).forEach(field => {
7070- field.setAttribute("changed", "")
7171- })
7272-}
7373-7474-7575-7641// Internet Connection
7742// -------------------
7843