Maxim Sokhatsky 11 years ago
parent
commit
d3cc5a89d0
1 changed files with 56 additions and 0 deletions
  1. 56 0
      apps/web/priv/static/app/js/kvs.js

+ 56 - 0
apps/web/priv/static/app/js/kvs.js

@@ -0,0 +1,56 @@
+// Console Populate:
+// kvs_add({type:"user", id:"1",container:"feed",name:"maxim"});
+// kvs_add({type:"user", id:"2",container:"feed",name:"maxim"});
+// kvs_add({type:"user", id:"3",container:"feed",name:"maxim"});
+
+// localStorage:
+// feeduser : {"type":"feed","id":"user","count":3,"top":"3"}
+// user1 : {"type":"user","id":"1","container":"feed","name":"maxim","next":"2","feed_id":"user"}
+// user2 : {"type":"user","id":"2","container":"feed","name":"maxim","prev":"1","next":"3","feed_id":"user"}
+// user3 : {"type":"user","id":"3","container":"feed","name":"maxim","prev":"2","next":null,"feed_id":"user"}
+
+// Console Traverse:
+// kvs_read("user","1",-1);
+// [Object,Object,Object]
+
+function kvs_put(o) { localStorage.setItem(o.type+o.id, JSON.stringify(o)); }
+
+function kvs_add(iterator) {
+    var type = iterator.type;
+    var id = iterator.id;
+    var local = localStorage.getItem(type+id);
+    if (null == local) {
+        var container_name = iterator.container;
+        var feed_id = iterator.feed_id ? iterator.feed_id : iterator.type;
+        var container = localStorage.getItem(container_name+feed_id);
+        if (null == container) {
+            container = {type: iterator.container, id: feed_id, count: 0 };
+            kvs_put(container);
+        } else container = JSON.parse(container);
+        var prevTop = container.top;
+        var prev = localStorage.getItem(type+prevTop);
+        if (null != prev) {
+            prev = JSON.parse(prev);
+            prev.next = id;
+            kvs_put(prev);
+            iterator.prev = prev.id;
+        }
+        container.top = iterator.id;
+        container.count++;
+        iterator.next = null;
+        iterator.feed_id = feed_id;
+        kvs_put(container);
+        kvs_put(iterator);
+    }
+}
+
+function kvs_read(type,start,count) { return traversal(type,start,count,[]); }
+function traversal(type,start,count,result) {
+    var item = localStorage.getItem(type+start);
+    if (null == item || count == 0) return result; else {
+        item = JSON.parse(item);
+        result.push(item);
+        if (count <= result.length && count != -1) return result; else
+        return traversal(type,item.next,count,result);
+    }
+}