Sha256: fcddb32b64af09b602d4543adf84822a37fcc5a04ac3e262cb83db8e6b513cbd

Contents?: true

Size: 1.61 KB

Versions: 6

Compression:

Stored size: 1.61 KB

Contents

define([
  'angular',
  'lodash'
],
function (angular, _) {
  'use strict';

  var module = angular.module('kibana.factories');
  module.factory('storeFactory', function() {

    return function storeFactory($scope, name, defaults) {
      if (!_.isFunction($scope.$watch)) {
        throw new TypeError('Invalid scope.');
      }
      if (!_.isString(name)) {
        throw new TypeError('Invalid name, expected a string that the is unique to this store.');
      }
      if (defaults && !_.isPlainObject(defaults)) {
        throw new TypeError('Invalid defaults, expected a simple object or nothing');
      }

      defaults = defaults || {};

      // get the current value, parse if it exists
      var current = localStorage.getItem(name);
      if (current != null) {
        try {
          current = JSON.parse(current);
        } catch (e) {
          current = null;
        }
      }

      if (current == null) {
        current = _.clone(defaults);
      } else if (_.isPlainObject(current)) {
        _.defaults(current, defaults);
      } else {
        throw new TypeError('Invalid store value' + current);
      }

      $scope[name] = current;

      // listen for changes and store them in localStorage.
      // delete the value to reset to the defaults, ie. `delete $scope[name]` -> digest cycle -> `$scope[name] == defaults`
      $scope.$watch(name, function (val) {
        if (val === void 0) {
          localStorage.removeItem(name);
          $scope[name] = _.clone(defaults);
        } else {
          localStorage.setItem(name, JSON.stringify(val));
        }
      }, true);

      return current;
    };
  });

});

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
kibana-sinatra-3.1.2.0 lib/kibana/assets/app/factories/store.js
kibana-sinatra-3.1.1.0 lib/kibana/assets/app/factories/store.js
kibana-sinatra-3.1.0.2 lib/kibana/assets/app/factories/store.js
kibana-sinatra-3.1.0.1 lib/kibana/assets/app/factories/store.js
kibana-sinatra-3.1.0.0 lib/kibana/assets/app/factories/store.js
kibana-sinatra-3.0.1.0 lib/kibana/assets/app/factories/store.js