]> git.scottworley.com Git - vopamoi/blobdiff - vopamoi.ts
Hide task list during replay
[vopamoi] / vopamoi.ts
index f13e5790b9cef86c431f780e4d3103f2e682d71c..f550fa1cbbbd1ea9fa309a60d0d5e549dd5aacf0 100644 (file)
@@ -207,6 +207,7 @@ function Log(prefix: string = "vp-") {
     },
 
     replay: function () {
+      document.getElementById("tasks")!.style.display = "none";
       while (true) {
         const entry = window.localStorage.getItem(`${prefix}${next_log_index}`);
         if (entry === null) {
@@ -215,6 +216,7 @@ function Log(prefix: string = "vp-") {
         this.apply(entry);
         next_log_index++;
       }
+      document.getElementById("tasks")!.style.display = "";
     },
   };
 }
@@ -297,9 +299,6 @@ function BrowserUI() {
         this.firstVisibleTask()?.focus();
       }
       input.value = "";
-      if (currentTagView) {
-        ui.addTag(task.getAttribute("data-created")!, currentTagView);
-      }
       if (event.getModifierState("Control")) {
         this.makeBottomPriority(task);
       }
@@ -381,8 +380,9 @@ function BrowserUI() {
       return target as HTMLElement;
     },
 
-    firstVisibleTask: function () {
-      for (const task of document.getElementsByClassName("task")) {
+    firstVisibleTask: function (root: Element | null = null) {
+      if (root === null) root = document.body;
+      for (const task of root.getElementsByClassName("task")) {
         const state = task.getAttribute("data-state");
         if (
           task instanceof HTMLElement &&
@@ -441,7 +441,21 @@ function BrowserUI() {
       task instanceof HTMLElement && task.focus();
     },
 
-    moveCursor: function (offset: number): boolean {
+    moveCursorLeft: function () {
+      const active = this.currentTask();
+      if (!active) return false;
+      if (active.parentElement!.classList.contains("task")) {
+        active.parentElement!.focus();
+      }
+    },
+
+    moveCursorRight: function () {
+      const active = this.currentTask();
+      if (!active) return false;
+      (this.firstVisibleTask(active) as HTMLElement | null)?.focus();
+    },
+
+    moveCursorVertically: function (offset: number): boolean {
       const active = this.currentTask();
       if (!active) return false;
       const dest = this.visibleTaskAtOffset(active, offset);
@@ -517,7 +531,7 @@ function BrowserUI() {
       if (newState === oldState) return;
       const createTimestamp = task.getAttribute("data-created")!;
       if (currentViewState !== "all" || newState == "deleted") {
-        this.moveCursor(1) || this.moveCursor(-1);
+        this.moveCursorVertically(1) || this.moveCursorVertically(-1);
       }
       return ui.setState(createTimestamp, newState, oldState);
     },
@@ -643,8 +657,10 @@ function handleKey(event: any) {
           if (event.key == "e") return window.scrollBy(0, (inputCount ?? 1) * scrollIncrement);
           if (event.key == "y") return window.scrollBy(0, (inputCount ?? 1) * -scrollIncrement);
         } else {
-          if (event.key == "j") return browserUI.moveCursor(inputCount ?? 1);
-          if (event.key == "k") return browserUI.moveCursor(-(inputCount ?? 1));
+          if (event.key == "h") return browserUI.moveCursorLeft();
+          if (event.key == "l") return browserUI.moveCursorRight();
+          if (event.key == "j") return browserUI.moveCursorVertically(inputCount ?? 1);
+          if (event.key == "k") return browserUI.moveCursorVertically(-(inputCount ?? 1));
           if (event.key == "J") return browserUI.moveTask(inputCount ?? 1);
           if (event.key == "K") return browserUI.moveTask(-(inputCount ?? 1));
           if (event.key == "G") return browserUI.jumpCursor(inputCount ?? MAX_SAFE_INTEGER);