forked from coolaj86/walnut.js
		
	
		
			
	
	
		
			98 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			98 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								(function (exports) {
							 | 
						||
| 
								 | 
							
								  'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var CannedStorage;
							 | 
						||
| 
								 | 
							
								  var Oauth3 = (exports.OAUTH3 || require('./oauth3'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function create(opts) {
							 | 
						||
| 
								 | 
							
								    var myInstance = {};
							 | 
						||
| 
								 | 
							
								    var conf = {
							 | 
						||
| 
								 | 
							
								      prefix: opts.namespace + '.'
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.keys(CannedStorage.api).forEach(function (key) {
							 | 
						||
| 
								 | 
							
								      myInstance[key] = function () {
							 | 
						||
| 
								 | 
							
								        var args = Array.prototype.slice.call(arguments);
							 | 
						||
| 
								 | 
							
								        args.unshift(conf);
							 | 
						||
| 
								 | 
							
								        return CannedStorage.api[key].apply(null, args);
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return myInstance;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var api = {
							 | 
						||
| 
								 | 
							
								    init: function (/*conf*/) {
							 | 
						||
| 
								 | 
							
								      // noop, reserved for future use
							 | 
						||
| 
								 | 
							
								      return Oauth3.PromiseA.resolve();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  , get: function (conf, key) {
							 | 
						||
| 
								 | 
							
								      var val;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      try {
							 | 
						||
| 
								 | 
							
								        val = JSON.parse(localStorage.getItem(conf.prefix + key) || null);
							 | 
						||
| 
								 | 
							
								      } catch(e) {
							 | 
						||
| 
								 | 
							
								        console.error("couldn't parse " + conf.prefix + key, localStorage.getItem(conf.prefix + key));
							 | 
						||
| 
								 | 
							
								        localStorage.removeItem(conf.prefix + key);
							 | 
						||
| 
								 | 
							
								        val = null;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // just because sometimes it happens...
							 | 
						||
| 
								 | 
							
								      if ('undefined' === val || 'null' === val) {
							 | 
						||
| 
								 | 
							
								        console.warn("got undefined for " + conf.prefix + key);
							 | 
						||
| 
								 | 
							
								        val = null;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      return val && Oauth3.PromiseA.resolve(val) || Oauth3.PromiseA.reject();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  , set: function (conf, key, val) {
							 | 
						||
| 
								 | 
							
								      try {
							 | 
						||
| 
								 | 
							
								        localStorage.setItem(conf.prefix + key, JSON.stringify(val));
							 | 
						||
| 
								 | 
							
								        return Oauth3.PromiseA.resolve();
							 | 
						||
| 
								 | 
							
								      } catch(e) {
							 | 
						||
| 
								 | 
							
								        console.error("couldn't stringify " + conf.prefix + key, val);
							 | 
						||
| 
								 | 
							
								        return Oauth3.PromiseA.reject(e);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  , remove: function (conf, key) {
							 | 
						||
| 
								 | 
							
								      localStorage.removeItem(conf.prefix + key);
							 | 
						||
| 
								 | 
							
								      return Oauth3.PromiseA.resolve();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  , clear: function (conf, account) {
							 | 
						||
| 
								 | 
							
								      var re;
							 | 
						||
| 
								 | 
							
								      var keys = [];
							 | 
						||
| 
								 | 
							
								      var i;
							 | 
						||
| 
								 | 
							
								      var key;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      re = new RegExp('^'
							 | 
						||
| 
								 | 
							
								        // See http://stackoverflow.com/a/6969486/151312 for regexp escape explanation
							 | 
						||
| 
								 | 
							
								        + conf.prefix.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&")
							 | 
						||
| 
								 | 
							
								        + (account || '')
							 | 
						||
| 
								 | 
							
								      );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for (i = 0; i < localStorage.length; i += 1) {
							 | 
						||
| 
								 | 
							
								        key = localStorage.key(i);
							 | 
						||
| 
								 | 
							
								        if (re.test(key) && !/\.(dev|developer)\./.test(key)) {
							 | 
						||
| 
								 | 
							
								          keys.push(key);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      keys.forEach(function (key) {
							 | 
						||
| 
								 | 
							
								        localStorage.removeItem(key);
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      return Oauth3.PromiseA.resolve();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  CannedStorage = {
							 | 
						||
| 
								 | 
							
								    create: create
							 | 
						||
| 
								 | 
							
								  , api: api
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								  exports.CannedStorage = CannedStorage.CannedStorage = CannedStorage;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if ('undefined' !== typeof module) {
							 | 
						||
| 
								 | 
							
								    module.exports = CannedStorage;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}('undefined' !== typeof exports ? exports : window));
							 |