diff --git a/public/js/calculators.js b/public/js/calculators.js index 905c084..64e839d 100644 --- a/public/js/calculators.js +++ b/public/js/calculators.js @@ -1151,11 +1151,21 @@ return; } - var yr = parseFloat((document.getElementById('growth-age-yr') || {}).value) || 0; - var mo = parseFloat((document.getElementById('growth-age-mo') || {}).value) || 0; - var dy = parseFloat((document.getElementById('growth-age-d') || {}).value) || 0; + var yrEl = document.getElementById('growth-age-yr'); + var moEl = document.getElementById('growth-age-mo'); + var dyEl = document.getElementById('growth-age-d'); + var yrRaw = yrEl ? yrEl.value.trim() : ''; + var moRaw = moEl ? moEl.value.trim() : ''; + var dyRaw = dyEl ? dyEl.value.trim() : ''; + // Treat blank fields as 0, but require at least ONE field to have any value. + // "0 days" (newborn at birth) is valid — explicit zero counts. + if (yrRaw === '' && moRaw === '' && dyRaw === '') { + showToast('Enter age (years, months, or days)', 'error'); return; + } + var yr = parseFloat(yrRaw) || 0; + var mo = parseFloat(moRaw) || 0; + var dy = parseFloat(dyRaw) || 0; var age = yr * 12 + mo + dy / 30.4375; // age in months, fractional OK - if (!age && yr === 0 && mo === 0 && dy === 0) { showToast('Enter age (years, months, or days)', 'error'); return; } if (age < 0) { showToast('Age cannot be negative', 'error'); return; } if (currentGrowthType === 'wfa') { @@ -1266,11 +1276,11 @@ var ageHint = document.getElementById('growth-age-parsed'); function updateAgeHint() { if (!ageHint) return; - var yr = parseFloat((document.getElementById('growth-age-yr') || {}).value) || 0; - var mo = parseFloat((document.getElementById('growth-age-mo') || {}).value) || 0; - var dy = parseFloat((document.getElementById('growth-age-d') || {}).value) || 0; - if (!yr && !mo && !dy) { ageHint.textContent = ''; return; } - var total = yr * 12 + mo + dy / 30.4375; + var yrRaw = ((document.getElementById('growth-age-yr') || {}).value || '').trim(); + var moRaw = ((document.getElementById('growth-age-mo') || {}).value || '').trim(); + var dyRaw = ((document.getElementById('growth-age-d') || {}).value || '').trim(); + if (yrRaw === '' && moRaw === '' && dyRaw === '') { ageHint.textContent = ''; return; } + var total = (parseFloat(yrRaw) || 0) * 12 + (parseFloat(moRaw) || 0) + (parseFloat(dyRaw) || 0) / 30.4375; ageHint.style.color = 'var(--g500)'; ageHint.textContent = formatParsedAge(total); }