From: Scott Worley Date: Wed, 2 Mar 2022 00:04:18 +0000 (-0800) Subject: Nested tag view X-Git-Url: http://git.scottworley.com/vopamoi/commitdiff_plain/3a1649301b207e07fcfa1eb0a617e4c5b2f775e8 Nested tag view --- diff --git a/vopamoi.css b/vopamoi.css index c98337c..13ac4a9 100644 --- a/vopamoi.css +++ b/vopamoi.css @@ -21,6 +21,9 @@ input.tag { .task { clear: right; } +.task > .task { + margin-left: 1em; +} .statedate { font-size: 80%; margin-right: 0.5em; diff --git a/vopamoi.ts b/vopamoi.ts index bdc8b0d..f624db1 100644 --- a/vopamoi.ts +++ b/vopamoi.ts @@ -474,8 +474,12 @@ function BrowserUI() { resetTagView: function () { currentTagView = null; - for (const task of document.getElementsByClassName("task")) { + const taskList = document.getElementById("tasks")!; + for (const task of Array.from(document.getElementsByClassName("task"))) { task.classList.remove("hide"); + if (task.parentElement !== taskList) { + Model.insertInPriorityOrder(task, taskList); + } } }, @@ -522,13 +526,44 @@ function BrowserUI() { const target = this.currentTag(); if (!target) return; const tag = target.textContent!; + + if (currentTagView !== null) { + this.resetTagView(); + } + + const tasksWithTag = new Map(); for (const task of document.getElementsByClassName("task")) { + if (Model.hasTag(task, tag)) { + tasksWithTag.set(task.getElementsByClassName("desc")[0].textContent, [Model.getPriority(task), task]); + } + } + + function highestPrioritySuperTask(t: Element) { + var maxPriority = -1; + var superTask = null; + for (const child of t.getElementsByClassName("tag")) { + const e = tasksWithTag.get(child.textContent); + if (e !== undefined && e[0] > maxPriority) { + maxPriority = e[0]; + superTask = e[1]; + } + } + return superTask; + } + + for (const task of Array.from(document.getElementsByClassName("task"))) { if (Model.hasTag(task, tag)) { task.classList.remove("hide"); } else { - task.classList.add("hide"); + const superTask = highestPrioritySuperTask(task); + if (superTask !== null) { + Model.insertInPriorityOrder(task, superTask); + } else { + task.classList.add("hide"); + } } } + currentTagView = tag; }, @@ -549,6 +584,9 @@ function BrowserUI() { }, setUntaggedView: function () { + if (currentTagView !== null) { + this.resetTagView(); + } for (const task of document.getElementsByClassName("task")) { if (task.getElementsByClassName("tag").length === 0) { task.classList.remove("hide");