static/js/zamboni/storage.js (56 lines of code) (raw):
import $ from 'jquery';
import 'jquery.cookie';
import { capabilities } from '../zamboni/capabilities';
/**
* storage.js - Simple namespaced browser storage.
*
* Creates a window.Storage function that gives you an easy API to access
* localStorage, with fallback to cookie storage. Each Storage object is
* namespaced:
* let foo = Storage('foo'),
* bar = Storage('bar');
* foo.set('test', 'A');
* bar.set('test', 'B');
* foo.get('test'); // 'A'
* bar.remove('test');
* foo.get('test'); // still 'A'
*
* Requires jQuery and jQuery Cookie plugin.
*/
export function Storage(namespace) {
let cookieStorage = {
expires: 30,
getItem: function (key) {
return $.cookie(key);
},
setItem: function (key, value) {
return $.cookie(key, value, { path: '/', expires: this.expires });
},
removeItem: function (key) {
return $.cookie(key, null);
},
};
let engine = capabilities.localStorage ? localStorage : cookieStorage;
namespace = namespace ? namespace + '-' : '';
return {
get: function (key) {
return engine.getItem(namespace + key);
},
set: function (key, value) {
return engine.setItem(namespace + key, value);
},
remove: function (key) {
return engine.removeItem(namespace + key);
},
};
}
export function SessionStorage(namespace) {
let cookieStorage = {
getItem: function (key) {
return $.cookie(key);
},
setItem: function (key, value) {
return $.cookie(key, value, { path: '/' });
},
removeItem: function (key) {
return $.cookie(key, null);
},
};
let engine = capabilities.localStorage ? sessionStorage : cookieStorage;
namespace = namespace ? namespace + '-' : '';
return {
get: function (key) {
return engine.getItem(namespace + key);
},
set: function (key, value) {
return engine.setItem(namespace + key, value);
},
remove: function (key) {
return engine.removeItem(namespace + key);
},
};
}