]> git.scottworley.com Git - vopamoi/commitdiff
Persistence
authorScott Worley <scottworley@scottworley.com>
Wed, 26 Jan 2022 06:13:35 +0000 (22:13 -0800)
committerScott Worley <scottworley@scottworley.com>
Thu, 27 Jan 2022 20:21:09 +0000 (12:21 -0800)
vopamoi.ts

index 6cfdbf2d2f645a4ac24afd3554ea7455ce179ba3..4d6cd86bfe25289cca1a52969530f6e17851dfe2 100644 (file)
@@ -37,18 +37,41 @@ const Model = {
   },
 };
 
   },
 };
 
-const Log = {
-  addTask: function (description: string) {
-    this.applyLogEntry(`${Date.now()} Create ${description}`);
-  },
+const Log = (function () {
+  var next_log_index = 0;
+  return {
+    addTask: function (description: string) {
+      this.recordAndApplyLogEntry(`${Date.now()} Create ${description}`);
+    },
 
 
-  applyLogEntry: function (entry: string) {
-    const [timestamp, command, data] = splitN(entry, " ", 2);
-    if (command == "Create") {
-      Model.addTask(data);
-    }
-  },
-};
+    applyLogEntry: function (entry: string) {
+      const [timestamp, command, data] = splitN(entry, " ", 2);
+      if (command == "Create") {
+        Model.addTask(data);
+      }
+    },
+
+    recordLogEntry: function (entry: string) {
+      window.localStorage.setItem(`${next_log_index++}`, entry);
+    },
+
+    recordAndApplyLogEntry: function (entry: string) {
+      this.recordLogEntry(entry);
+      this.applyLogEntry(entry);
+    },
+
+    replay: function () {
+      while (true) {
+        const entry = window.localStorage.getItem(`${next_log_index}`);
+        if (entry === null) {
+          break;
+        }
+        this.applyLogEntry(entry);
+        next_log_index++;
+      }
+    },
+  };
+})();
 
 function handleKey(event: any) {
   if (event.target.tagName !== "INPUT") {
 
 function handleKey(event: any) {
   if (event.target.tagName !== "INPUT") {
@@ -71,4 +94,5 @@ function browserCreateTask(form: any) {
 
 function browserInit() {
   document.body.addEventListener("keydown", handleKey, { capture: false });
 
 function browserInit() {
   document.body.addEventListener("keydown", handleKey, { capture: false });
+  Log.replay();
 }
 }