-
Notifications
You must be signed in to change notification settings - Fork 0
/
referential.min.js
1 lines (1 loc) · 7.31 KB
/
referential.min.js
1
var Referential=function(){"use strict";var toString=function(obj){return Object.prototype.toString.call(obj)};var isNumber;var isNumber$1=isNumber=function(value){return toString(value)==="[object Number]"};var isObject;var isObject$1=isObject=function(value){return toString(value)==="[object Object]"};var getOwnSymbols;var objectAssign;var shouldUseNative;var toObject;var slice=[].slice;getOwnSymbols=Object.getOwnPropertySymbols;toObject=function(val){if(val===null||val===void 0){throw new TypeError("Object.assign cannot be called with null or undefined")}return Object(val)};shouldUseNative=function(){var err,i,j,k,len,letter,order2,ref,test1,test2,test3;try{if(!Object.assign){return false}test1=new String("abc");test1[5]="de";if(Object.getOwnPropertyNames(test1)[0]==="5"){return false}test2={};for(i=j=0;j<=9;i=++j){test2["_"+String.fromCharCode(i)]=i}order2=Object.getOwnPropertyNames(test2).map(function(n){return test2[n]});if(order2.join("")!=="0123456789"){return false}test3={};ref="abcdefghijklmnopqrst".split("");for(k=0,len=ref.length;k<len;k++){letter=ref[k];test3[letter]=letter}if(Object.keys(Object.assign({},test3)).join("")!=="abcdefghijklmnopqrst"){return false}return true}catch(error){err=error;return false}};var index=objectAssign=function(){if(shouldUseNative()){return Object.assign}return function(){var from,j,k,key,len,len1,ref,source,sources,symbol,target,to;target=arguments[0],sources=2<=arguments.length?slice.call(arguments,1):[];to=toObject(target);for(j=0,len=sources.length;j<len;j++){source=sources[j];from=Object(source);for(key in from){if(Object.prototype.hasOwnProperty.call(from,key)){to[key]=from[key]}}if(getOwnSymbols){ref=getOwnSymbols(from);for(k=0,len1=ref.length;k<len1;k++){symbol=ref[k];if(Object.prototype.propIsEnumerable.call(from,symbol)){to[symbol]=from[symbol]}}}}return to}}();var observable=function(el){el=el||{};var callbacks={},slice=Array.prototype.slice;Object.defineProperties(el,{on:{value:function(event,fn){if(typeof fn=="function")(callbacks[event]=callbacks[event]||[]).push(fn);return el},enumerable:false,writable:false,configurable:false},off:{value:function(event,fn){if(event=="*"&&!fn)callbacks={};else{if(fn){var arr=callbacks[event];for(var i=0,cb;cb=arr&&arr[i];++i){if(cb==fn)arr.splice(i--,1)}}else delete callbacks[event]}return el},enumerable:false,writable:false,configurable:false},one:{value:function(event,fn){function on(){el.off(event,on);fn.apply(el,arguments)}return el.on(event,on)},enumerable:false,writable:false,configurable:false},trigger:{value:function(event){var arglen=arguments.length-1,args=new Array(arglen),fns,fn,i;for(i=0;i<arglen;i++){args[i]=arguments[i+1]}fns=slice.call(callbacks[event]||[],0);for(i=0;fn=fns[i];++i){fn.apply(el,args)}if(callbacks["*"]&&event!="*")el.trigger.apply(el,["*",event].concat(args));return el},enumerable:false,writable:false,configurable:false}});return el};var Ref;var nextId;var indexOf=[].indexOf||function(item){for(var i=0,l=this.length;i<l;i++){if(i in this&&this[i]===item)return i}return-1};nextId=function(){var ids;ids=0;return function(){return ids++}}();var Ref$1=Ref=function(){function Ref(_value,parent,key1){this._value=_value;this.parent=parent;this.key=key1;this._cache={};this._children={};this._numChildren=0;this._id=nextId();if(this.parent!=null){this.parent._children[this._id]=this;this.parent._numChildren++}observable(this);this}Ref.prototype._mutate=function(key){var child,id,ref;this._cache={};ref=this._children;for(id in ref){child=ref[id];child._mutate()}return this};Ref.prototype.clear=function(){var child,id,ref;this._cache={};ref=this._children;for(id in ref){child=ref[id];child.clear()}this._children={};this._numChildren=0;this._value=void 0;if(this.parent!=null){return this.parent.set(this.key,void 0)}};Ref.prototype.destroy=function(){var child,id,ref;ref=this._children;for(id in ref){child=ref[id];child.destroy()}delete this._cache;delete this._children;this.off("*");if(this.parent&&this.parent._children){delete this.parent._children[this._id];this.parent._numChildren--}return this};Ref.prototype.value=function(state){if(!this.parent){if(state!=null){this._value=state}return this._value}if(state!=null){return this.parent.set(this.key,state)}else{return this.parent.get(this.key)}};Ref.prototype.ref=function(key){if(!key){return this}return new Ref(null,this,key)};Ref.prototype.get=function(key){if(!key){return this.value()}else{if(this._cache[key]){return this._cache[key]}return this._cache[key]=this.index(key)}};Ref.prototype.set=function(key,value){var k,oldValue,v;if(isObject$1(key)){for(k in key){v=key[k];this.set(k,v)}return this}oldValue=this.get(key);this._mutate(key);this.index(key,value,false);this._triggerSet(key,value,oldValue);this._triggerSetChildren(key,value,oldValue);return this};Ref.prototype._triggerSetChildren=function(key,value,oldValue){var child,childKeys,childRemainderKey,i,id,keyPart,keyParts,partialKey,ref,ref1,regExps,results;if(this._numChildren===0){return this}key=key+"";keyParts=key.split(".");partialKey="";childKeys=[];regExps={};for(i in keyParts){keyPart=keyParts[i];if(partialKey===""){partialKey=keyPart}else{partialKey+="."+keyPart}childKeys[i]=partialKey;regExps[partialKey]=new RegExp("^"+partialKey+".?")}ref=this._children;results=[];for(id in ref){child=ref[id];if(ref1=child.key,indexOf.call(childKeys,ref1)>=0){childRemainderKey=key.replace(regExps[child.key],"");child.trigger("set",childRemainderKey,value,oldValue);results.push(child._triggerSetChildren(childRemainderKey,value,oldValue))}else{results.push(void 0)}}return results};Ref.prototype._triggerSet=function(key,value,oldValue){var parentKey;this.trigger("set",key,value,oldValue);if(this.parent){parentKey=this.key+"."+key;return this.parent._triggerSet(parentKey,value,oldValue)}};Ref.prototype.extend=function(key,value){var clone;this._mutate(key);if(value==null){this.value(index(this.value(),key))}else{if(isObject$1(value)){this.value(index(this.ref(key).get(),value))}else{clone=this.clone();this.set(key,value);this.value(index(clone.get(),this.value()))}}return this};Ref.prototype.clone=function(key){return new Ref(index({},this.get(key)))};Ref.prototype.index=function(key,value,get,obj){var next,prop,props;if(get==null){get=true}if(obj==null){obj=this.value()}if(this.parent){return this.parent.index(this.key+"."+key,value,get)}if(isNumber$1(key)){key=String(key)}props=key.split(".");if(get){while(prop=props.shift()){if(!props.length){return obj!=null?obj[prop]:void 0}obj=obj!=null?obj[prop]:void 0}return}if(this._value==null){this._value={};if(obj==null){obj=this._value}}while(prop=props.shift()){if(!props.length){return obj[prop]=value}else{next=props[0];if(obj[prop]==null){if(isNaN(Number(next))){if(obj[prop]==null){obj[prop]={}}}else{if(obj[prop]==null){obj[prop]=[]}}}}obj=obj[prop]}};return Ref}();var methods;var refer;methods=["extend","get","index","ref","set","value","clear","destroy","on","off","one","trigger"];refer=function(state,ref){var fn,i,len,method,wrapper;if(ref==null){ref=null}if(ref==null){ref=new Ref$1(state)}wrapper=function(key){return ref.get(key)};fn=function(method){return wrapper[method]=function(){return ref[method].apply(ref,arguments)}};for(i=0,len=methods.length;i<len;i++){method=methods[i];fn(method)}wrapper.refer=function(key){return refer(null,ref.ref(key))};wrapper.clone=function(key){return refer(null,ref.clone(key))};return wrapper};refer.Ref=Ref$1;var refer$1=refer;return refer$1}();