CartoDB/cartodb20

View on GitHub
lib/assets/javascripts/cartodb/common/local_storage.js

Summary

Maintainability
D
2 days
Test Coverage
var _ = require('underscore-cdb-v3');

/**
 *  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;