UNPKG

angular-lfmo

Version:

Simple models for localforage.

12 lines (11 loc) 2.81 kB
/*! * angular-lfmo * @version 0.1.6 * @author Reto Aebersold <aeby@substyle.ch> * @copyright (c) 2015 Reto Aebersold <https://github.com/aeby/> * @license MIT <https://github.com/aeby/angular-lfmo/blob/master/LICENSE> * * @overview Simple models for localforage. */ !function(a,b){"use strict";if("function"==typeof define&&define.amd)define(["localforage"],function(c){b(a.angular,c)});else if("object"==typeof exports){var c=a.angular||window&&window.angular;module.exports=b(c,require("localforage"))}else b(a.angular,a.localforage)}(this,function(a,b){"use strict";a.module("angular-lfmo",["ng"]).factory("$lfmo",["$filter","$q","$parse",function(c,d,e){function f(){var a,b="";for(a=0;36>a;a+=1)b+=14===a?"4":19===a?"89ab".charAt(4*Math.random()):8===a||13===a||18===a||23===a?"-":"0123456789abcdef".charAt(16*Math.random());return b}var g={_getItem:function(a){var c=d.defer();return b.getItem(a).then(function(a){c.resolve(a)},function(a){c.reject(a)}),c.promise},_setItem:function(a,c){var e=d.defer();return b.setItem(a,c).then(function(a){e.resolve(a)},function(a){e.reject(a)}),e.promise},_removeItem:function(a){var c=d.defer();return b.removeItem(a).then(function(a){c.resolve(a)},function(a){c.reject(a)}),c.promise},init:function(a,b){var c=this;this.name=a,this.idKey=b,this.modelPrefix=a+"/",this.indexName="idx/"+a,this.lastModified=-1,this.indexPromise=c._getItem(c.indexName).then(function(a){return c.index||(c.index=a||[]),c.index})},create:function(b){var c=this;return a.isUndefined(b[c.idKey])&&(b[c.idKey]=f()),c.indexPromise.then(function(){return c.index.push(b[c.idKey]),c._setItem(c.indexName,c.index),c._setItem(c.modelPrefix+b[c.idKey],b)}).then(function(a){return c.lastModified=Date.now(),a})},update:function(b,c){var d=this;return d.get(b).then(function(e){return a.extend(e,c),d._setItem(d.modelPrefix+b,e)}).then(function(a){return d.lastModified=Date.now(),a})},get:function(a){var b=this;return b._getItem(b.modelPrefix+a)},remove:function(a){var b=this;return b.indexPromise.then(function(){return b.index.splice(b.index.indexOf(a),1),b._removeItem(b.modelPrefix+a)}).then(function(){b.lastModified=Date.now()})},findAll:function(a){var b=this;return b.indexPromise.then(function(){var a=[];return b.index&&b.index.forEach(function(c){a.push(b.get(c))}),d.all(a)}).then(function(b){return c("filter")(b,a)})},bindAll:function(a,b,c){var d=this;return a.$watch(function(){return d.lastModified},function(){d.findAll(c).then(function(c){var d=e(b);d.assign(a,c)})})},bindOne:function(a,b,c){var d=this;return a.$watch(function(){return d.lastModified},function(){d.get(c).then(function(c){var d=e(b);d.assign(a,c)})})}};return{define:function(b,c){a.isUndefined(c)&&(c="id");var d=Object.create(g);return d.init(b,c),d}}}])}); //# sourceMappingURL=angular-lfmo.min.map