cartodb/lib/assets/javascripts/dashboard/helpers/local-storage.js
2020-06-15 10:58:47 +08:00

78 lines
1.9 KiB
JavaScript

var _ = require('underscore');
/**
* Local storage wrapper
*
* - It should be used within 'cartodb' key, for example:
*
* var loc_sto = new cdb.common.LocalStorage();
* loc_sto.set({ 'dashboard.order': 'create_at' });
* loc_sto.get('dashboard.order');
*
*/
var LocalStorageWrapper = function (name) {
this.name = name || 'cartodb';
if (!localStorage.getItem(this.name) && this.isEnabled()) {
localStorage.setItem(this.name, '{}');
}
};
// Some browsers with private mode don't allow to use
// local storage
LocalStorageWrapper.prototype.isEnabled = function () {
try {
localStorage.setItem('checking', 'test');
localStorage.removeItem('checking');
return true;
} catch (e) {
return false;
}
};
LocalStorageWrapper.prototype.get = function (n) {
if (!this.isEnabled()) return false;
if (n === undefined) {
return JSON.parse(localStorage.getItem(this.name));
} else {
var data = JSON.parse(localStorage.getItem(this.name));
return data[n];
}
};
LocalStorageWrapper.prototype.search = function (searchTerm) {
if (!this.isEnabled()) return null;
var wholeArray = JSON.parse(localStorage.getItem(this.name));
for (var i in wholeArray) {
if (wholeArray[i][searchTerm]) {
return wholeArray[i][searchTerm];
}
}
return null;
};
LocalStorageWrapper.prototype.set = function (data) {
if (!this.isEnabled()) return null;
var d = _.extend(this.get(), data);
return localStorage.setItem(this.name, JSON.stringify(d));
};
LocalStorageWrapper.prototype.add = function (obj) {
return this.set(obj);
};
LocalStorageWrapper.prototype.remove = function (n) {
if (!this.isEnabled()) return null;
var d = _.omit(this.get(), n);
return localStorage.setItem(this.name, JSON.stringify(d));
};
LocalStorageWrapper.prototype.destroy = function () {
delete localStorage.removeItem(this.name);
};
module.exports = LocalStorageWrapper;