]> git.scottworley.com Git - vopamoi/blobdiff - vopamoi.ts
Use CSS for filtering the view
[vopamoi] / vopamoi.ts
index 271354fc7aa3a52192f092a88a9df8de2f1fb341..f93c51c45a134826c034626377e62457dfbfc3bb 100644 (file)
@@ -36,6 +36,7 @@ const Model = {
     task.setAttribute("class", "task");
     task.setAttribute("tabindex", "0");
     task.setAttribute("data-created", timestamp);
+    task.setAttribute("data-state", "todo");
     document.getElementById("tasks")!.appendChild(task);
     return task;
   },
@@ -73,10 +74,6 @@ const Model = {
     return parseFloat(task.getAttribute("data-created")!);
   },
 
-  getState: function (task: Element): string {
-    return task.getAttribute("data-state") ?? "todo";
-  },
-
   getTask: function (createTimestamp: string) {
     for (const task of document.getElementsByClassName("task")) {
       if (task.getAttribute("data-created") === createTimestamp) {
@@ -103,9 +100,6 @@ const Model = {
     const task = this.getTask(createTimestamp);
     if (task) {
       task.setAttribute("data-state", state);
-      if (task instanceof HTMLElement) {
-        task.style.display = state == "todo" ? "block" : "none"; // Until view filtering
-      }
     }
   },
 };
@@ -228,7 +222,7 @@ const BrowserUI = {
 
   firstVisibleTask: function () {
     for (const task of document.getElementsByClassName("task")) {
-      if (task instanceof HTMLElement && task.style.display !== "none") {
+      if (task instanceof HTMLElement && task.getAttribute("data-state")! === "todo") {
         return task;
       }
     }
@@ -246,7 +240,7 @@ const BrowserUI = {
     while (true) {
       cursor = increment > 0 ? cursor.nextElementSibling : cursor.previousElementSibling;
       if (!cursor || !(cursor instanceof HTMLElement)) break;
-      if (cursor.style.display !== "none") {
+      if (cursor.getAttribute("data-state")! === "todo") {
         offset -= increment;
         valid_cursor = cursor;
       }
@@ -297,7 +291,7 @@ const BrowserUI = {
   setState: function (newState: string) {
     const task = document.activeElement;
     if (!task) return;
-    const oldState = Model.getState(task);
+    const oldState = task.getAttribute("data-state")!;
     if (newState === oldState) return;
     const createTimestamp = task.getAttribute("data-created")!;
     this.moveCursor(1) || this.moveCursor(-1);
@@ -310,6 +304,12 @@ const BrowserUI = {
   },
 };
 
+enum InputState {
+  Command,
+  View,
+}
+var inputState = InputState.Command;
+
 function handleKey(event: any) {
   if (event.target.tagName === "INPUT") {
     if (event.target.id === "taskName") {
@@ -318,19 +318,24 @@ function handleKey(event: any) {
       if (event.key == "Enter") return BrowserUI.completeEdit(event);
     }
   } else {
-    if (event.key == "j") return BrowserUI.moveCursor(1);
-    if (event.key == "k") return BrowserUI.moveCursor(-1);
-    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 == "t") return BrowserUI.setState("todo");
-    if (event.key == "X") return BrowserUI.setState("deleted");
-    if (event.key == "u") return BrowserUI.undo();
-    if (event.key == "e") return BrowserUI.beginEdit(event);
+    if (inputState === InputState.Command) {
+      if (event.key == "j") return BrowserUI.moveCursor(1);
+      if (event.key == "k") return BrowserUI.moveCursor(-1);
+      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 == "t") return BrowserUI.setState("todo");
+      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);
+    }
   }
 }