]> git.scottworley.com Git - vopamoi/blobdiff - vopamoi.ts
Use CSS for filtering the view
[vopamoi] / vopamoi.ts
index 80e8ff93c704ad3c5bb4675a29abe3c269be3eca..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);
@@ -312,6 +306,7 @@ const BrowserUI = {
 
 enum InputState {
   Command,
+  View,
 }
 var inputState = InputState.Command;
 
@@ -337,6 +332,9 @@ function handleKey(event: any) {
       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);
     }
   }
 }