]> git.scottworley.com Git - vopamoi/commitdiff
Tag view
authorScott Worley <scottworley@scottworley.com>
Thu, 10 Feb 2022 00:30:47 +0000 (16:30 -0800)
committerScott Worley <scottworley@scottworley.com>
Thu, 10 Feb 2022 17:51:51 +0000 (09:51 -0800)
vopamoi.css
vopamoi.ts

index ac29e309b7c6f9d55e708ffe2f520dbf5021412a..c98337c1c425548c643f7c501bf666bccccb8297 100644 (file)
@@ -15,6 +15,9 @@ input.tag {
   width: 7em;
   border: none;
 }
+.hide {
+  display: none;
+}
 .task {
   clear: right;
 }
index 931505b6027e3ef6ebcafba2c996f0010f10b10b..76c2d29380f1720b36d2ce8f8ef4a0749f5dba0b 100644 (file)
@@ -369,7 +369,11 @@ function BrowserUI() {
     firstVisibleTask: function () {
       for (const task of document.getElementsByClassName("task")) {
         const state = task.getAttribute("data-state");
-        if (task instanceof HTMLElement && (state === currentViewState || (currentViewState === "all" && state !== "deleted"))) {
+        if (
+          task instanceof HTMLElement &&
+          (state === currentViewState || (currentViewState === "all" && state !== "deleted")) &&
+          !task.classList.contains("hide")
+        ) {
           return task;
         }
       }
@@ -392,7 +396,10 @@ function BrowserUI() {
         cursor = increment > 0 ? cursor.nextElementSibling : cursor.previousElementSibling;
         if (!cursor || !(cursor instanceof HTMLElement)) break;
         const state = cursor.getAttribute("data-state")!;
-        if (state === currentViewState || (currentViewState === "all" && state !== "deleted")) {
+        if (
+          (state === currentViewState || (currentViewState === "all" && state !== "deleted")) &&
+          !cursor.classList.contains("hide")
+        ) {
           offset -= increment;
           valid_cursor = cursor;
         }
@@ -452,8 +459,15 @@ function BrowserUI() {
       ui.removeTag(target.parentElement!.getAttribute("data-created")!, target.textContent!);
     },
 
+    resetTagView: function () {
+      for (const task of document.getElementsByClassName("task")) {
+        task.classList.remove("hide");
+      }
+    },
+
     resetView: function () {
       this.setView("todo");
+      this.resetTagView();
     },
 
     returnFocusAfterInput: function (): boolean {
@@ -490,6 +504,19 @@ function BrowserUI() {
       return ui.setState(createTimestamp, newState, oldState);
     },
 
+    setTagView: function () {
+      const target = this.currentTag();
+      if (!target) return;
+      const tag = target.textContent!;
+      for (const task of document.getElementsByClassName("task")) {
+        if (Model.hasTag(task, tag)) {
+          task.classList.remove("hide");
+        } else {
+          task.classList.add("hide");
+        }
+      }
+    },
+
     setView: function (state: string) {
       const sheet = (document.getElementById("viewStyle") as HTMLStyleElement).sheet!;
       if (state === "all") {
@@ -584,6 +611,8 @@ function handleKey(event: any) {
       if (event.key == "d") return browserUI.setView("done");
       if (event.key == "q") return browserUI.setView("todo");
       if (event.key == "s") return (inputState = InputState.VS);
+      if (event.key == "T") return browserUI.resetTagView();
+      if (event.key == "t") return browserUI.setTagView();
       if (event.key == "v") return browserUI.resetView();
       if (event.key == "w") return browserUI.setView("waiting");
       if (event.key == "x") return browserUI.setView("deleted");