]> git.scottworley.com Git - vopamoi/commitdiff
Views: Show tasks by state
authorScott Worley <scottworley@scottworley.com>
Thu, 27 Jan 2022 07:49:58 +0000 (23:49 -0800)
committerScott Worley <scottworley@scottworley.com>
Thu, 27 Jan 2022 20:21:55 +0000 (12:21 -0800)
vopamoi.ts

index 94c26e61d528fa5be15564077923bd424e36aa21..3c592269d8d0bdecaa95ea76d07ae1b40cf65970 100644 (file)
@@ -177,6 +177,7 @@ const UI = {
 };
 
 function BrowserUI() {
+  var currentViewState = "todo";
   return {
     addTask: function (event: KeyboardEvent) {
       const input = <HTMLInputElement>document.getElementById("taskName");
@@ -223,7 +224,7 @@ function BrowserUI() {
 
     firstVisibleTask: function () {
       for (const task of document.getElementsByClassName("task")) {
-        if (task instanceof HTMLElement && task.getAttribute("data-state")! === "todo") {
+        if (task instanceof HTMLElement && task.getAttribute("data-state") === currentViewState) {
           return task;
         }
       }
@@ -241,7 +242,7 @@ function BrowserUI() {
       while (true) {
         cursor = increment > 0 ? cursor.nextElementSibling : cursor.previousElementSibling;
         if (!cursor || !(cursor instanceof HTMLElement)) break;
-        if (cursor.getAttribute("data-state")! === "todo") {
+        if (cursor.getAttribute("data-state")! === currentViewState) {
           offset -= increment;
           valid_cursor = cursor;
         }
@@ -299,6 +300,16 @@ function BrowserUI() {
       return UI.setState(createTimestamp, newState, oldState);
     },
 
+    setView: function (state: string) {
+      const sheet = (document.getElementById("viewStyle") as HTMLStyleElement).sheet!;
+      sheet.insertRule(`.task:not([data-state=${state}]) { display: none }`);
+      sheet.removeRule(1);
+      currentViewState = state;
+      if (document.activeElement?.getAttribute("data-state") !== state) {
+        this.firstVisibleTask()?.focus();
+      }
+    },
+
     undo: function () {
       const ret = UI.undo();
       if (ret && ret instanceof HTMLElement) ret.focus();
@@ -327,17 +338,23 @@ function handleKey(event: any) {
       if (event.key == "J") return browserUI.moveTask(1);
       if (event.key == "K") return browserUI.moveTask(-1);
       if (event.key == "n") return browserUI.focusTaskNameInput(event);
-      if (event.key == "s") return browserUI.setState("someday-maybe");
-      if (event.key == "w") return browserUI.setState("waiting");
-      if (event.key == "d") return browserUI.setState("done");
       if (event.key == "c") return browserUI.setState("cancelled");
+      if (event.key == "d") return browserUI.setState("done");
+      if (event.key == "s") return browserUI.setState("someday-maybe");
       if (event.key == "t") return browserUI.setState("todo");
+      if (event.key == "w") return browserUI.setState("waiting");
       if (event.key == "X") return browserUI.setState("deleted");
       if (event.key == "u") return browserUI.undo();
       if (event.key == "e") return browserUI.beginEdit(event);
       if (event.key == "v") return (inputState = InputState.View);
     } else if (inputState === InputState.View) {
-      return (inputState = InputState.Command);
+      inputState = InputState.Command;
+      if (event.key == "c") return browserUI.setView("cancelled");
+      if (event.key == "d") return browserUI.setView("done");
+      if (event.key == "s") return browserUI.setView("someday-maybe");
+      if (event.key == "t") return browserUI.setView("todo");
+      if (event.key == "w") return browserUI.setView("waiting");
+      if (event.key == "x") return browserUI.setView("deleted");
     }
   }
 }