diff --git a/src/app/main.js b/src/app/main.js index c9c30e4..460e29b 100644 --- a/src/app/main.js +++ b/src/app/main.js @@ -851,7 +851,8 @@ function openBarMenu(id,anchor){
Owner
${Object.entries(PEOPLE).map(([k,p])=>``).join("")}
Size${["s","m","l","xl"].map(z=>``).join("")}
-
Due
`; +
Start
+
End
`; BM.classList.add("show"); BARMENU=id; const mw=BM.offsetWidth||236, mh=BM.offsetHeight||170, gap=8, vw=window.innerWidth, vh=window.innerHeight; // sit to the RIGHT of the pill (flip left only if there's no room) @@ -865,12 +866,18 @@ function refreshBarMenu(id){ if(BARMENU===id) openBarMenu(id); } function closeBarMenu(){ BM.classList.remove("show"); BARMENU=null; } document.addEventListener("pointerdown",e=>{ if(BARMENU&&!e.target.closest("#barMenu")) closeBarMenu(); },true); +function syncTaskDates(n,field){ + if(!n.start||!n.due) return; + const s=dayN(n.start), e=dayN(n.due); + if(isNaN(s)||isNaN(e)||s<=e) return; + if(field==="start") n.due=n.start; else n.start=n.due; +} function updTask(id,f,v,quiet){ snap(); const n=findPath(id).pop(); if(f==="title") n.title=v.trim()||n.title; else if(f==="owner") n.owner=v; else if(f==="priority") n.priority=v; - else if(f==="due") n.due=v||null; - else if(f==="start") n.start=v||null; + else if(f==="due"){ n.due=v||null; syncTaskDates(n,"due"); } + else if(f==="start"){ n.start=v||null; syncTaskDates(n,"start"); } else if(f==="size") n.size=v||null; renderAll(); if(!quiet&&f!=="title") openDetail(id); } function deleteTask(id){ const n=findPath(id).pop(); @@ -926,7 +933,8 @@ function openDetail(id){ document.getElementById("dBody").innerHTML=`
Owner${av(n.owner)}
-
Due${dueChip(n.due,leaf&&n.done)}
+
Start
+
End${dueChip(n.due,leaf&&n.done)}
${sizeFld} ${leaf?`
Status