Make Weekly Tasks a parent card with individual weeks subordinate to it
Weekly task sheets are pulled out of the flat sidebar list into their own WEEKLY_TASKS_DATA array. "Weekly Tasks" is now one top-level card among the track cards; selecting it drills into a breadcrumb view (Weekly Tasks > Week of...) with a week picker on the left and the selected week's full detail (table/notes/reports) on the right, using the same buildTaskDetail renderer as before. Sets up for multiple weeks to coexist cleanly.
This commit is contained in:
1 parent
ba6c8bac1d
commit
2a5607e56e
1 file changed
+71
-4
+71
-4
@@ -6314,6 +6314,9 @@
|
||||
],
|
||||
reports: []
|
||||
},
|
||||
];
|
||||
|
||||
var WEEKLY_TASKS_DATA = [
|
||||
{
|
||||
id: "week-2026-08-17",
|
||||
label: "Week of 17–21 Aug 2026",
|
||||
@@ -6334,7 +6337,10 @@
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
var WEEKLY_TASKS_PARENT_ID = "weekly-tasks-parent";
|
||||
var tasksSelectedId = null;
|
||||
var weeklySelectedId = null;
|
||||
|
||||
function tasksEsc(s) {
|
||||
return String(s == null ? "" : s).replace(/[&<>"]/g, function (c) {
|
||||
@@ -6344,8 +6350,8 @@
|
||||
|
||||
function renderTasksBoard() {
|
||||
var sorted = TASKS_DATA; // newest-first order is authored order for now
|
||||
if (!tasksSelectedId || !sorted.some(function (t) { return t.id === tasksSelectedId; })) {
|
||||
tasksSelectedId = sorted.length ? sorted[0].id : null;
|
||||
if (!tasksSelectedId || (tasksSelectedId !== WEEKLY_TASKS_PARENT_ID && !sorted.some(function (t) { return t.id === tasksSelectedId; }))) {
|
||||
tasksSelectedId = sorted.length ? sorted[0].id : WEEKLY_TASKS_PARENT_ID;
|
||||
}
|
||||
|
||||
var list = document.getElementById("tasks-list");
|
||||
@@ -6353,10 +6359,71 @@
|
||||
sorted.forEach(function (entry) {
|
||||
list.appendChild(buildTaskSidebarCard(entry, entry.id === tasksSelectedId));
|
||||
});
|
||||
list.appendChild(buildWeeklyParentSidebarCard(tasksSelectedId === WEEKLY_TASKS_PARENT_ID));
|
||||
|
||||
var detail = document.getElementById("tasks-detail");
|
||||
var selected = sorted.filter(function (t) { return t.id === tasksSelectedId; })[0];
|
||||
detail.innerHTML = selected ? buildTaskDetail(selected) : "<div class=\"ab-outreach-empty\">No tasks yet.</div>";
|
||||
if (tasksSelectedId === WEEKLY_TASKS_PARENT_ID) {
|
||||
detail.innerHTML = buildWeeklyTasksDrilldown();
|
||||
wireWeeklyDrilldown();
|
||||
} else {
|
||||
var selected = sorted.filter(function (t) { return t.id === tasksSelectedId; })[0];
|
||||
detail.innerHTML = selected ? buildTaskDetail(selected) : "<div class=\"ab-outreach-empty\">No tasks yet.</div>";
|
||||
}
|
||||
}
|
||||
|
||||
function buildWeeklyParentSidebarCard(isSelected) {
|
||||
var card = document.createElement("div");
|
||||
card.className = "ab-card" + (isSelected ? " selected" : "");
|
||||
card.dataset.id = WEEKLY_TASKS_PARENT_ID;
|
||||
card.innerHTML =
|
||||
"<div class=\"ab-card-top\">" +
|
||||
"<div class=\"ab-card-company\">Weekly Tasks</div>" +
|
||||
"<span class=\"ab-source-chip boss\">" + WEEKLY_TASKS_DATA.length + (WEEKLY_TASKS_DATA.length === 1 ? " week" : " weeks") + "</span>" +
|
||||
"</div>" +
|
||||
"<div class=\"ab-card-name\">Peter's weekly task sheets</div>";
|
||||
card.addEventListener("click", function () {
|
||||
tasksSelectedId = WEEKLY_TASKS_PARENT_ID;
|
||||
renderTasksBoard();
|
||||
});
|
||||
return card;
|
||||
}
|
||||
|
||||
function buildWeeklyTasksDrilldown() {
|
||||
if (!weeklySelectedId || !WEEKLY_TASKS_DATA.some(function (w) { return w.id === weeklySelectedId; })) {
|
||||
weeklySelectedId = WEEKLY_TASKS_DATA.length ? WEEKLY_TASKS_DATA[0].id : null;
|
||||
}
|
||||
var selectedWeek = WEEKLY_TASKS_DATA.filter(function (w) { return w.id === weeklySelectedId; })[0];
|
||||
|
||||
var crumbs =
|
||||
"<div class=\"drill-crumbs\">" +
|
||||
"<span class=\"crumb\">Weekly Tasks</span>" +
|
||||
(selectedWeek ? "<span class=\"sep\">/</span><span class=\"crumb current\">" + tasksEsc(selectedWeek.label) + "</span>" : "") +
|
||||
"</div>";
|
||||
|
||||
var weekListHtml = WEEKLY_TASKS_DATA.map(function (w) {
|
||||
return "<div class=\"ab-card" + (w.id === weeklySelectedId ? " selected" : "") + "\" data-week-id=\"" + w.id + "\">" +
|
||||
"<div class=\"ab-card-company\">" + tasksEsc(w.label) + "</div>" +
|
||||
"</div>";
|
||||
}).join("");
|
||||
|
||||
var weekDetailHtml = selectedWeek ? buildTaskDetail(selectedWeek) : "<div class=\"ab-outreach-empty\">No weekly sheets yet.</div>";
|
||||
|
||||
return (
|
||||
crumbs +
|
||||
"<div class=\"ab-outreach\" style=\"display:flex; margin-top:12px;\">" +
|
||||
"<div class=\"ab-outreach-list\" style=\"width:260px;\">" + weekListHtml + "</div>" +
|
||||
"<div class=\"ab-outreach-detail\">" + weekDetailHtml + "</div>" +
|
||||
"</div>"
|
||||
);
|
||||
}
|
||||
|
||||
function wireWeeklyDrilldown() {
|
||||
document.querySelectorAll("#tasks-detail [data-week-id]").forEach(function (el) {
|
||||
el.addEventListener("click", function () {
|
||||
weeklySelectedId = el.getAttribute("data-week-id");
|
||||
renderTasksBoard();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function buildTaskSidebarCard(entry, isSelected) {
|
||||
|
||||
Reference in new issue
Block a user