Growth chart: accept explicit 0 in any age field

Previously any form of zero total ("0 days", all blank) rejected
with "Enter age". Newborns at birth are a legitimate entry —
distinguish blank-all (error) from explicit-zero (valid).
This commit is contained in:
Daniel 2026-04-14 03:33:10 +02:00
parent df592d401b
commit 7cc8a1fa99

View file

@ -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);
}