Split storage into sessionStorage and localStorage

- Created sessionStorage service
- Created localStorage service
- Refactored Storage class to accept the store
This commit is contained in:
Chris Cowan 2014-09-26 12:30:55 -07:00
parent c0907dd3ff
commit b1fbe37479
6 changed files with 50 additions and 45 deletions

View file

@ -4,7 +4,7 @@ define(function (require) {
var inherits = require('lodash').inherits;
return function DocSourceFactory(Private, Promise, es, storage) {
return function DocSourceFactory(Private, Promise, es, sessionStorage) {
var sendToEs = Private(require('components/courier/data_source/_doc_send_to_es'));
var SourceAbstract = Private(require('components/courier/data_source/_abstract'));
@ -123,7 +123,7 @@ define(function (require) {
var key = this._versionKey();
if (!key) return;
var v = storage.get(key);
var v = sessionStorage.get(key);
this._version = v ? _.parseInt(v) : void 0;
return this._version;
};
@ -139,7 +139,7 @@ define(function (require) {
var key = this._versionKey();
if (!key) return;
this._version = version;
storage.set(key, version);
sessionStorage.set(key, version);
};
/**
@ -148,7 +148,7 @@ define(function (require) {
DocSource.prototype._clearVersion = function () {
var key = this._versionKey();
if (!key) return;
storage.remove(key);
sessionStorage.remove(key);
};
return DocSource;

View file

@ -3,13 +3,13 @@ define(function (require) {
var _ = require('lodash');
modules.get('kibana/persisted_log')
.factory('PersistedLog', function ($window, storage) {
.factory('PersistedLog', function ($window, localStorage) {
function PersistedLog(name, options) {
options = options || {};
this.name = name;
this.maxLength = options.maxLength || 0;
this.filterDuplicates = options.filterDuplicates || false;
this.items = storage.get(this.name) || [];
this.items = localStorage.get(this.name) || [];
}
PersistedLog.prototype.add = function (val) {
@ -35,7 +35,7 @@ define(function (require) {
}
// persist the stack
storage.set(this.name, stack);
localStorage.set(this.name, stack);
return this.items = stack;
};

View file

@ -1,37 +1,42 @@
define(function (require) {
var modules = require('modules');
function Storage(store) {
var self = this;
self.store = store;
self.get = function (key) {
try {
return JSON.parse(self.store.getItem(key));
} catch (e) {
return null;
}
};
self.set = function (key, value) {
try {
return self.store.setItem(key, JSON.stringify(value));
} catch (e) {
return false;
}
};
self.remove = function (key) {
return self.store.removeItem(key);
};
self.clear = function () {
return self.store.clear();
};
}
var createService = function (type) {
return function ($window) {
return new Storage($window[type]);
};
};
modules.get('kibana/storage')
.service('storage', function ($window) {
function Storage() {
var self = this;
self.store = $window.localStorage;
self.get = function (key) {
try {
return JSON.parse(self.store.getItem(key));
} catch (e) {
return null;
}
};
self.set = function (key, value) {
try {
return self.store.setItem(key, JSON.stringify(value));
} catch (e) {
return false;
}
};
self.remove = function (key) {
return self.store.removeItem(key);
};
self.clear = function () {
return self.store.clear();
};
}
return new Storage();
});
.service('localStorage', createService('localStorage'))
.service('sessionStorage', createService('sessionStorage'));
});

View file

@ -92,7 +92,7 @@ define(function (require) {
config.init()
]).then(function () {
$scope.setupComplete = true;
$injector.invoke(function ($rootScope, courier, config, configFile, storage, $timeout, $location, timefilter, globalState) {
$injector.invoke(function ($rootScope, courier, config, configFile, sessionStorage, $timeout, $location, timefilter, globalState) {
$rootScope.globalState = globalState;
@ -100,11 +100,11 @@ define(function (require) {
var lastPathFor = function (app, path) {
var key = 'lastPath:' + app.id;
if (path === void 0) {
app.lastPath = storage.get(key) || '/' + app.id;
app.lastPath = sessionStorage.get(key) || '/' + app.id;
return app.lastPath;
} else {
app.lastPath = path;
return storage.set(key, path);
return sessionStorage.set(key, path);
}
};

View file

@ -18,7 +18,7 @@ define(function (require) {
function init() {
module('kibana/persisted_log', function ($provide) {
// mock storage service
$provide.service('storage', function () {
$provide.service('localStorage', function () {
this.get = sinon.stub();
this.set = sinon.stub();
this.remove = sinon.spy();
@ -27,7 +27,7 @@ define(function (require) {
});
inject(function ($injector) {
storage = $injector.get('storage');
storage = $injector.get('localStorage');
PersistedLog = $injector.get('PersistedLog');
});
}

View file

@ -21,7 +21,7 @@ define(function (require) {
});
inject(function ($injector) {
storage = $injector.get('storage');
storage = $injector.get('localStorage');
$window = $injector.get('$window');
});
}