UNPKG

crelmstat

Version:

An expedient, minuscule (1kb), super simple, fully tested, zero dependency, generic state management tool.

1 lines 1.32 kB
function crelmstat(){return{data:new Map,set:set,get:get,attach:attach,load:load,state:state,toJSON:toJSON}}function set(key,value){var data=this.state(key);if(typeof value==="function")data.value=value(data.value);else data.value=value;var filtered=data.subscribers.filter(function(s){var val=s(data.value);return val!==null});data.subscribers=filtered;return data.value}function get(key){return this.state(key).value}function attach(key,elem,attr){var data=this.state(key);if(typeof elem==="function")data.subscribers.push(elem);else if(typeof elem==="string")data.subscribers.push(function(newVal){var elements=document.querySelectorAll(elem);for(var x=0,len=elements.length;x<len;x++){elements[x][attr]=newVal}});else data.subscribers.push(function(newVal){if(elem.parentElement||elem instanceof Element===false)elem[attr]=newVal;else return null})}function state(key){var data=this.data.get(key);if(data)return data;else{var obj={crelmstat:true,subscribers:[]};this.data.set(key,obj);return obj}}function load(object){if(typeof object!=="object"||Array.isArray(object))throw new Error("Only objects can be loaded!");for(var id in object){this.set(id,object[id])}}function toJSON(){var obj={};this.data.forEach(function(val,key){obj[key]=val.value});return obj}crelmstat.global=crelmstat();module.exports=crelmstat;