/* ========================================================================== Brew Log — page behaviour Small, dependency-free helpers. Charts live in charts.js. ========================================================================== */ (function () { "use strict"; /** Auto-focus the first empty field on a form. */ function focusFirstEmpty() { var fields = document.querySelectorAll("input:not([type=hidden]), textarea, select"); for (var i = 0; i < fields.length; i++) { if (!fields[i].value && !fields[i].readOnly) { fields[i].focus(); return; } } } /** Default the reading date to today when the field is left empty. */ function defaultDateFields() { var today = new Date().toISOString().slice(0, 10); var dateFields = document.querySelectorAll('input[type="date"][data-default-today]'); for (var i = 0; i < dateFields.length; i++) { if (!dateFields[i].value) { dateFields[i].value = today; } } } /** Show/hide blocks driven by a checkbox. */ function wireToggles() { var toggles = document.querySelectorAll("[data-toggle-target]"); for (var i = 0; i < toggles.length; i++) { (function (toggle) { var target = document.getElementById(toggle.getAttribute("data-toggle-target")); if (!target) { return; } function apply() { target.classList.toggle("hidden", !toggle.checked); } toggle.addEventListener("change", apply); apply(); })(toggles[i]); } } /** Confirm destructive actions. */ function wireConfirms() { var forms = document.querySelectorAll("[data-confirm]"); for (var i = 0; i < forms.length; i++) { forms[i].addEventListener("submit", function (event) { if (!window.confirm(this.getAttribute("data-confirm"))) { event.preventDefault(); } }); } } function init() { focusFirstEmpty(); defaultDateFields(); wireToggles(); wireConfirms(); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", init); } else { init(); } })();