diff --git a/skills/daily-focus-board/assets/board.template.html b/skills/daily-focus-board/assets/board.template.html index 747f8509..ddffae7b 100644 --- a/skills/daily-focus-board/assets/board.template.html +++ b/skills/daily-focus-board/assets/board.template.html @@ -250,7 +250,7 @@ -
+progress saves automatically in this browser · 🔥 built with Ember
@@ -275,7 +275,7 @@ let state={counters:(raw.counters||{}),t:(raw.t||{}),day:(raw.day||[]),brain:(ra let dragId=null, renderedIds=[]; function ensureTaskState(){tasks.forEach(t=>{ if(typeof t.goal==="number"){if(state.counters[t.id]===undefined)state.counters[t.id]=(t.start||0);} else if(!state.t[t.id])state.t[t.id]={status:"todo",notes:[],carried:false}; else if(state.t[t.id].carried===undefined)state.t[t.id].carried=false; });} -function rebuildTasks(){tasks=baseTasks.concat(state.added||[]);ensureTaskState();if(state.focus&&!tasks.some(t=>t.id===state.focus))state.focus=null;} +function rebuildTasks(){const seen={};tasks=baseTasks.concat(state.added||[]).filter(t=>{const id=t&&t.id;if(!validId(id)||seen[id])return false;seen[id]=1;return true;});ensureTaskState();if(state.focus&&!tasks.some(t=>t.id===state.focus))state.focus=null;} rebuildTasks(); const cardsEl=document.getElementById("cards"),feedEl=document.getElementById("feed"),brainEl=document.getElementById("brain"); @@ -303,7 +303,7 @@ function fmt(ms){return new Date(ms).toLocaleTimeString(undefined,{hour:"numeric function esc(s){return (s||"").replace(/[&<>]/g,m=>({"&":"&","<":"<",">":">"}[m]));} const LABEL={todo:"to do",doing:"in progress",done:"done"}; function isCounter(t){return typeof t.goal==="number";} -function statusOf(t){if(isCounter(t)){const v=state.counters[t.id];return v>=t.goal?"done":(v>(t.start||0)?"doing":"todo");}return state.t[t.id].status;} +function statusOf(t){if(isCounter(t)){const v=state.counters[t.id];return v>=t.goal?"done":(v>0?"doing":"todo");}return state.t[t.id].status;} function carriedOf(t){return !isCounter(t)&&state.t[t.id].carried;} function dueStr(t){ @@ -355,7 +355,7 @@ function render(){ ${rmHtml} ${notes.length?`progress saves automatically in this browser · 🔥 built with Ember
@@ -285,7 +285,7 @@ let state={counters:(raw.counters||{}),t:(raw.t||{}),day:(raw.day||[]),brain:(ra let dragId=null, renderedIds=[]; function ensureTaskState(){tasks.forEach(t=>{ if(typeof t.goal==="number"){if(state.counters[t.id]===undefined)state.counters[t.id]=(t.start||0);} else if(!state.t[t.id])state.t[t.id]={status:"todo",notes:[],carried:false}; else if(state.t[t.id].carried===undefined)state.t[t.id].carried=false; });} -function rebuildTasks(){tasks=baseTasks.concat(state.added||[]);ensureTaskState();if(state.focus&&!tasks.some(t=>t.id===state.focus))state.focus=null;} +function rebuildTasks(){const seen={};tasks=baseTasks.concat(state.added||[]).filter(t=>{const id=t&&t.id;if(!validId(id)||seen[id])return false;seen[id]=1;return true;});ensureTaskState();if(state.focus&&!tasks.some(t=>t.id===state.focus))state.focus=null;} rebuildTasks(); const cardsEl=document.getElementById("cards"),feedEl=document.getElementById("feed"),brainEl=document.getElementById("brain"); @@ -313,7 +313,7 @@ function fmt(ms){return new Date(ms).toLocaleTimeString(undefined,{hour:"numeric function esc(s){return (s||"").replace(/[&<>]/g,m=>({"&":"&","<":"<",">":">"}[m]));} const LABEL={todo:"to do",doing:"in progress",done:"done"}; function isCounter(t){return typeof t.goal==="number";} -function statusOf(t){if(isCounter(t)){const v=state.counters[t.id];return v>=t.goal?"done":(v>(t.start||0)?"doing":"todo");}return state.t[t.id].status;} +function statusOf(t){if(isCounter(t)){const v=state.counters[t.id];return v>=t.goal?"done":(v>0?"doing":"todo");}return state.t[t.id].status;} function carriedOf(t){return !isCounter(t)&&state.t[t.id].carried;} function dueStr(t){ @@ -365,7 +365,7 @@ function render(){ ${rmHtml} ${notes.length?`