]> git.scottworley.com Git - vopamoi/blobdiff - vopamoi.ts
Always set state attribute
[vopamoi] / vopamoi.ts
index 271354fc7aa3a52192f092a88a9df8de2f1fb341..b16bc703b2ee1ca8432c0f3c2bab782fed502421 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) {
@@ -297,7 +294,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 +307,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 +321,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);
+    }
   }
 }