Advertisement
Guest User

Untitled

a guest
Jan 29th, 2015
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.10 KB | None | 0 0
  1. function Store(params) {
  2. var self = this,
  3. dbName = params.db,
  4. type = params.name,
  5. listView = params.list,
  6. seq = 0,
  7. items = {},
  8. itemsHid = {},
  9. list = [],
  10. docEmpty = params.docEmpty || {name:"", active:true, stamp: Date.now()};
  11.  
  12. this.name = params.name;
  13. this.db = dbName;
  14.  
  15. this.createEmpty = function() {
  16. return Object.clone(docEmpty, true);
  17. };
  18.  
  19. this.getList = function() {
  20. if (list.length) return list;
  21. var keys = Object.keys(items),
  22. max = keys.length;
  23. while(max--) {
  24. list.push(items[keys[max]]);
  25. }
  26. return list;
  27. };
  28.  
  29. this.getIndex = function(id) {
  30. return id ? (id.length == 8 ? items[itemsHid[id]] : items[id]) : items;
  31. };
  32.  
  33. this.reloadList = function reloadList(forced) {
  34. l.view(dbName, listView, {since: seq}, function(err, data) {
  35. var maxSeq = 0;
  36.  
  37. if(data && data.rows && data.rows.length) {
  38. var max = data.rows.length,
  39. lSeq = 0,
  40. row, rv, id;
  41.  
  42. if(max) while(max--) {
  43. if((row = data.rows[max]) && (rv = row.value)) {
  44. if(rv.type == type && (id = rv['_id']) && (!items[id] || items[id]['_rev'] != rv['_rev'])) {
  45. items[id] = rv;
  46. if(rv.hid) itemsHid[rv.hid] = id;
  47. }
  48. if((lSeq = rv['_local_seq']) && lSeq > maxSeq) {
  49. maxSeq = lSeq;
  50. }
  51. }
  52. }
  53. }
  54.  
  55. if(forced || (seq < maxSeq && (seq = maxSeq))) {
  56. list.length = 0;
  57. self.trigger('changeList');
  58. }
  59. });
  60. };
  61.  
  62. this.getItem = function(id, done) {
  63. l.item(dbName, id, function(err, data) {
  64. if(done) done(data);
  65. });
  66. };
  67.  
  68. this.update = function(doc, done) {
  69. if(params.preUpdate) doc = params.preUpdate(doc);
  70.  
  71. l.update(dbName, doc, function(err, res) {
  72. if (!err && res && res.ok) {
  73. self.trigger('changeDoc', res.id);
  74. self.reloadList();
  75. }
  76. if(done) done(err, res);
  77. });
  78. };
  79.  
  80. this.delete = function(docId, done) {
  81. l.remove(dbName, docId, function(err, res) {
  82. if (!err && res && res.ok) {
  83. if(items[res.id]) delete items[res.id];
  84. self.reloadList(true);
  85. }
  86. if(done) done(err, res);
  87. });
  88. };
  89. }
  90. Store.prototype.__proto__ = MicroEvent.prototype;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement