Skip to content

Commit 506b1d7

Browse files
committed
Generieke parameters (gewicht, VO2max, ...)
1 parent 67f5b28 commit 506b1d7

1 file changed

Lines changed: 26 additions & 18 deletions

File tree

index.html

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ <h1 id="titel">Training</h1>
116116

117117
<script>
118118
const LS = localStorage;
119-
const state = { schema:null, oef:null, voeding:null, trends:null, log:{entries:[]}, dagIdx:0, view:'training' };
119+
const state = { schema:null, oef:null, voeding:null, trends:null, params:null, log:{entries:[]}, dagIdx:0, view:'training' };
120120

121121
/* ---------- config ---------- */
122122
function cfg(){ try{ return JSON.parse(LS.getItem('cfg'))||null }catch(e){ return null } }
@@ -168,6 +168,8 @@ <h1 id="titel">Training</h1>
168168
catch(e){ state.voeding = JSON.parse(LS.getItem('cache.voeding')||'null'); }
169169
try{ state.trends = await getJson('trends.json'); LS.setItem('cache.trends', JSON.stringify(state.trends)); }
170170
catch(e){ state.trends = JSON.parse(LS.getItem('cache.trends')||'null'); }
171+
try{ state.params = await getJson('parameters.json'); LS.setItem('cache.params', JSON.stringify(state.params)); }
172+
catch(e){ state.params = JSON.parse(LS.getItem('cache.params')||'null'); }
171173
try{ state.log = await getJson('logs/'+schema.id+'.json') }
172174
catch(e){ state.log = {schema:schema.id, entries:[]} }
173175
LS.setItem('cache.log', JSON.stringify(state.log));
@@ -179,6 +181,7 @@ <h1 id="titel">Training</h1>
179181
if(s){ state.schema=JSON.parse(s); state.oef=JSON.parse(LS.getItem('cache.oef')||'{}');
180182
state.voeding=JSON.parse(LS.getItem('cache.voeding')||'null');
181183
state.trends=JSON.parse(LS.getItem('cache.trends')||'null');
184+
state.params=JSON.parse(LS.getItem('cache.params')||'null');
182185
state.log=JSON.parse(LS.getItem('cache.log')||'{"entries":[]}');
183186
render(); toast('Offline — cache gebruikt'); }
184187
else if(String(e).includes('401')||String(e).includes('404')){
@@ -393,19 +396,24 @@ <h1 id="titel">Training</h1>
393396
function dl(d){ return d.slice(8)+'/'+d.slice(5,7); }
394397
function renderTrends(){
395398
const tr=state.trends||{}; const ann=annulled();
396-
// lichaamsgewicht
397-
const histKg=(tr.gewicht&&tr.gewicht.punten)||[];
398-
const kseen=new Set(histKg.map(p=>p.d));
399-
const liveKg=state.log.entries.filter(x=>x.type==='lichaamsgewicht'&&!ann.has(x.ts)&&!kseen.has(x.datum)).map(x=>({d:x.datum,kg:x.kg}));
400-
const kg=histKg.concat(liveKg).sort((a,b)=>a.d<b.d?-1:1);
401-
const doelKg=(tr.gewicht&&tr.gewicht.doel)||90;
402-
let h=`<div class="card"><p class="focus">Lichaamsgewicht</p>
403-
<div class="meta">${kg.length? 'laatste: '+kg[kg.length-1].kg+' kg':'nog geen meting'} · doel ${doelKg} kg</div>
404-
${spark(kg.map(p=>({y:p.kg,l:dl(p.d)})),{doel:doelKg})}
405-
<div class="sec">Nieuw weegmoment</div>
406-
<div class="logrow"><input id="kgIn" type="number" inputmode="decimal" step="0.1" placeholder="kg">
407-
<button class="ghost" onclick="logKg()">Opslaan</button></div>
408-
<div class="hist">Weeg 1×/week, zaterdagochtend, zelfde moment — kijk naar de trend, niet de dagschommeling.</div></div>`;
399+
// parameters (gewicht, VO2max, ...)
400+
const plist=((state.params&&state.params.parameters)||[{id:'gewicht',naam:'Gewicht',eenheid:'kg',doel:90,beter:'lager'}]);
401+
let h='';
402+
plist.forEach(pa=>{
403+
const hist=(((tr.parameters||{})[pa.id])||{}).punten||[];
404+
let extra=[];
405+
if(pa.id==='gewicht') extra=((tr.gewicht&&tr.gewicht.punten)||[]).map(p=>({d:p.d,v:p.kg}));
406+
const seen=new Set(hist.concat(extra).map(p=>p.d));
407+
const live=state.log.entries.filter(x=>!ann.has(x.ts)&&!seen.has(x.datum)&&((x.type==='parameter'&&x.param===pa.id)||(pa.id==='gewicht'&&x.type==='lichaamsgewicht')))
408+
.map(x=>({d:x.datum,v:x.waarde!=null?x.waarde:x.kg}));
409+
const reeks=hist.concat(extra,live).sort((a,b)=>a.d<b.d?-1:1);
410+
h+=`<div class="card"><p class="focus">${pa.naam}</p>
411+
<div class="meta">${reeks.length? 'laatste: '+reeks[reeks.length-1].v+' '+pa.eenheid:'nog geen meting'}${pa.doel!=null? ' · doel '+pa.doel+' '+pa.eenheid:''}</div>
412+
${spark(reeks.map(p=>({y:p.v,l:dl(p.d)})),{doel:pa.doel})}
413+
<div class="logrow"><input id="pIn-${pa.id}" type="number" inputmode="decimal" step="0.1" placeholder="${pa.eenheid}">
414+
<button class="ghost" onclick="logParam('${pa.id}')">Opslaan</button></div>
415+
${pa.tip? '<div class="hist">'+pa.tip+'</div>':''}</div>`;
416+
});
409417
// eiwit per dag
410418
const histE=(tr.eiwit&&tr.eiwit.punten)||[];
411419
const eseen=new Set(histE.map(p=>p.d));
@@ -442,10 +450,10 @@ <h1 id="titel">Training</h1>
442450
h+='</div>';
443451
main.innerHTML=h;
444452
}
445-
function logKg(){
446-
const v=parseFloat(document.getElementById('kgIn').value);
447-
if(!v||v<50||v>150){ toast('Geef een realistisch gewicht in kg'); return }
448-
addEntry({type:'lichaamsgewicht', datum:localDate(), kg:v});
453+
function logParam(id){
454+
const v=parseFloat(document.getElementById('pIn-'+id).value);
455+
if(isNaN(v)){ toast('Geef een waarde in'); return }
456+
addEntry({type:'parameter', param:id, datum:localDate(), waarde:v});
449457
render();
450458
}
451459

0 commit comments

Comments
 (0)