From 32808c9a5b8154746bf98339e58ed827c399a9d3 Mon Sep 17 00:00:00 2001 From: Scott Worley Date: Wed, 9 Feb 2022 16:54:15 -0800 Subject: [PATCH] Task-level operations should work even when a tag is focused --- vopamoi.ts | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/vopamoi.ts b/vopamoi.ts index 76c2d29..a114959 100644 --- a/vopamoi.ts +++ b/vopamoi.ts @@ -297,9 +297,8 @@ function BrowserUI() { }, beginEdit: function (event: Event) { - var task = document.activeElement; + const task = this.currentTask(); if (!task) return; - if (task.classList.contains("tag")) task = task.parentElement!; const input = document.createElement("input"); const desc = task.getElementsByClassName("desc")[0]; const oldDescription = desc.textContent!; @@ -313,7 +312,7 @@ function BrowserUI() { }, beginTagEdit: function (event: Event) { - const task = document.activeElement; + const task = this.currentTask(); if (!task) return; const input = document.createElement("input"); input.classList.add("tag"); @@ -366,6 +365,13 @@ function BrowserUI() { return target; }, + currentTask: function (): HTMLElement | null { + var target = document.activeElement; + if (!target) return null; + if (target.classList.contains("tag")) target = target.parentElement!; + return target as HTMLElement; + }, + firstVisibleTask: function () { for (const task of document.getElementsByClassName("task")) { const state = task.getAttribute("data-state"); @@ -380,9 +386,7 @@ function BrowserUI() { }, focusTaskNameInput: function (event: Event) { - if (document.activeElement instanceof HTMLElement) { - taskFocusedBeforeJumpingToInput = document.activeElement; - } + taskFocusedBeforeJumpingToInput = this.currentTask(); document.getElementById("taskName")!.focus(); window.scroll(0, 0); event.preventDefault(); @@ -416,20 +420,20 @@ function BrowserUI() { }, makeBottomPriority: function (task: Element | null = null) { - if (!task) task = document.activeElement; + if (!task) task = this.currentTask(); if (!task) return; this.setPriority(task, document.getElementById("tasks")!.lastElementChild, null); }, makeTopPriority: function (task: Element | null = null) { - if (!task) task = document.activeElement; + if (!task) task = this.currentTask(); if (!task) return; ui.setPriority(task.getAttribute("data-created")!, clock.now(), Model.getPriority(task)); task instanceof HTMLElement && task.focus(); }, moveCursor: function (offset: number): boolean { - const active = document.activeElement; + const active = this.currentTask(); if (!active) return false; const dest = this.visibleTaskAtOffset(active, offset); if (dest !== active && dest instanceof HTMLElement) { @@ -440,7 +444,7 @@ function BrowserUI() { }, moveTask: function (offset: number) { - const active = document.activeElement; + const active = this.currentTask(); if (!active) return; const dest = this.visibleTaskAtOffset(active, offset); if (dest === active) return; // Already extremal @@ -493,7 +497,7 @@ function BrowserUI() { }, setState: function (newState: string) { - const task = document.activeElement; + const task = this.currentTask(); if (!task) return; const oldState = task.getAttribute("data-state")!; if (newState === oldState) return; @@ -528,7 +532,7 @@ function BrowserUI() { sheet.removeRule(2); sheet.removeRule(2); currentViewState = state; - if (document.activeElement?.getAttribute("data-state") !== state) { + if (this.currentTask()?.getAttribute("data-state") !== state) { this.firstVisibleTask()?.focus(); } }, -- 2.44.1