all repos — litestore @ 98c53976f76ab618c018bb05800a89a9e3970b82

A minimalist nosql document store.

admin/js/models.js

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
(function(){
  window.Page = {};
  window.Info = {};
  window.Doc = {};
  var app = window.LS || (window.LS = {});
  var u = app.utils;
  app.host = ""; //'http://localhost:9500';

  var host = location.origin === app.host ? "" : app.host;
  
  Page.get = function(id) {
    var content = m.prop("");
    return m.request({
        method: "GET", 
        url: host+"/docs/admin/md/"+id+".md",
        deserialize: function(value) {
          return value;
        }
      }).then(function(content){ 
        return u.markdown(content);
      });
  };
  
  Info.get = function(){
    var content = m.prop("");
    return m.request({
        method: "GET", 
        url: host+"/info"
      }).then(content);
  };
  
  Doc.getByTag = function(tag, offset, limit) {
    offset = offset || 0;
    limit = limit || 10;
    var docs = m.prop("");
    return m.request({
        method: "GET", 
        url: host+"/docs?contents=false&tags="+tag+"&limit="+limit+"&offset="+offset
      }).then(docs);
  };
  
  Doc.search = function(search, offset, limit){
    offset = offset || 0;
    limit = limit || 10;
    var docs = m.prop("");
    return m.request({
        method: "GET", 
        url: host+"/docs?contents=false&search="+search+"&limit="+limit+"&offset="+offset,
      }).then(docs);
  };

  Doc.get = function(id) {
    var doc = m.prop("");
    return m.request({
        method: "GET", 
        url: host+"/docs/"+id+"?raw=true"
      }).then(doc);
  };
  
  Doc.delete = function(id){
    return m.request({
        method: "DELETE", 
        url: host+"/docs/"+id
      });
  };
  
  Doc.put = function(doc, contentType){
    xhrcfg = u.setContentType(doc, contentType);
    console.log("Doc.put - Saving Document:", doc);
    return m.request({
        method: "PUT", 
        url: host+"/docs/"+doc.id,
        data: doc.data,
        serialize: function(data){
          return data;
        },
        config: xhrcfg
      });
  };
  
  Doc.upload = function(doc) {
    console.log("Doc.put - Uploading Document:", doc);
    return m.request({
      method: "PUT",
      url: host+"/docs/"+doc.id,
      data: doc.data,
      serialize: function(data) {
        return data;
      }
    });
  };
  
  Doc.patch = function(id, updatedTags){
    return Doc.get(id).then(function(doc){
      var tags = doc.tags;
      var count = 0;
      var ops = [];
      tags.forEach(function(tag){
        if (updatedTags[count]){
          if (updatedTags[count] != tag){
            // update tag
            ops.push({"op": "replace", "path": "/tags/"+count, "value": updatedTags[count]});
          }
        } else {
          // delete tag
          ops.push({"op": "remove", "path": "/tags/"+count});
        }
        count++;
      });
      if (updatedTags.length > tags.length) {
        for (i = tags.length; i< updatedTags.length; i++){
          // add tag
          ops.push({"op": "add", "path": "/tags/"+i, "value": updatedTags[i]});
        }
      }
      console.log("Doc.patch - Saving Tags:", ops);
      return m.request({
        method: "PATCH",
        url: host+"/docs/"+id,
        data: ops
      });
    });
  };
}());