| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- /**
- * Copyright (c) 2017 ESHA Research
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- *
- * Adds getters and setters for existing keys (and newly set() ones) to enable dot access to stored properties.
- *
- * store.dot('foo','bar');// makes store aware of keys (could also do store.set('foo',''))
- * store.foo = { is: true };// == store.set('foo', { is: true });
- * console.log(store.foo.is);// logs 'true'
- *
- * This will not create accessors that conflict with existing properties of the store object.
- *
- * Status: ALPHA - good, but ```store.foo.is=false``` won't persist while looking like it would
- */
- ;(function(_, Object, Array) {
- // expose internals on the underscore to allow extensibility
- _.dot = function(key) {
- var keys = !key ? this.keys() :
- Array.isArray(key) ? key :
- Array.prototype.slice.call(arguments),
- target = this;
- keys.forEach(function(key) {
- _.dot.define(target, key);
- });
- return this;
- };
- _.dot.define = function(target, key) {
- if (!(key in target)) {
- Object.defineProperty(target, key, {
- enumerable: true,
- get: function(){ return this.get(key); },
- set: function(value){ this.set(key, value); }
- });
- }
- };
- // add function(s) to the store interface
- _.fn('dot', _.dot);
- })(window.store._, window.Object, window.Array);
|