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