Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function Store(params) {
- var self = this,
- dbName = params.db,
- type = params.name,
- listView = params.list,
- seq = 0,
- items = {},
- itemsHid = {},
- list = [],
- docEmpty = params.docEmpty || {name:"", active:true, stamp: Date.now()};
- this.name = params.name;
- this.db = dbName;
- this.createEmpty = function() {
- return Object.clone(docEmpty, true);
- };
- this.getList = function() {
- if (list.length) return list;
- var keys = Object.keys(items),
- max = keys.length;
- while(max--) {
- list.push(items[keys[max]]);
- }
- return list;
- };
- this.getIndex = function(id) {
- return id ? (id.length == 8 ? items[itemsHid[id]] : items[id]) : items;
- };
- this.reloadList = function reloadList(forced) {
- l.view(dbName, listView, {since: seq}, function(err, data) {
- var maxSeq = 0;
- if(data && data.rows && data.rows.length) {
- var max = data.rows.length,
- lSeq = 0,
- row, rv, id;
- if(max) while(max--) {
- if((row = data.rows[max]) && (rv = row.value)) {
- if(rv.type == type && (id = rv['_id']) && (!items[id] || items[id]['_rev'] != rv['_rev'])) {
- items[id] = rv;
- if(rv.hid) itemsHid[rv.hid] = id;
- }
- if((lSeq = rv['_local_seq']) && lSeq > maxSeq) {
- maxSeq = lSeq;
- }
- }
- }
- }
- if(forced || (seq < maxSeq && (seq = maxSeq))) {
- list.length = 0;
- self.trigger('changeList');
- }
- });
- };
- this.getItem = function(id, done) {
- l.item(dbName, id, function(err, data) {
- if(done) done(data);
- });
- };
- this.update = function(doc, done) {
- if(params.preUpdate) doc = params.preUpdate(doc);
- l.update(dbName, doc, function(err, res) {
- if (!err && res && res.ok) {
- self.trigger('changeDoc', res.id);
- self.reloadList();
- }
- if(done) done(err, res);
- });
- };
- this.delete = function(docId, done) {
- l.remove(dbName, docId, function(err, res) {
- if (!err && res && res.ok) {
- if(items[res.id]) delete items[res.id];
- self.reloadList(true);
- }
- if(done) done(err, res);
- });
- };
- }
- Store.prototype.__proto__ = MicroEvent.prototype;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement