not really known
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

74 lines
2.0 KiB

var ObjectValues = function ObjectValues(object) {
return Object.keys(object).map(function (key) {
return object[key];
});
};
function State() {
var _this = this;
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
this.state = state;
var subscribeList = {};
var render = function render(statesToChange) {
var prevState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
statesToChange.forEach(function (state) {
subscribeList[state].forEach(function (subscribers) {
var elem = document.querySelector(subscribers[0]);
if (typeof subscribers[1] === 'function') {
subscribers[1](elem, _this.state[state], prevState[state]);
} else {
var propertyToChange = subscribers[1];
elem[propertyToChange] = _this.state[state];
}
});
});
};
this.set = function (arg) {
var stateToUpdate = typeof arg === 'function' ? arg(this.state) : arg;
var prevState = this.state;
Object.assign(this.state, stateToUpdate || {});
for (var _state in stateToUpdate) {
if (!(_state in subscribeList)) {
subscribeList[_state] = [];
}
}
render(Object.keys(stateToUpdate || {}), prevState);
};
this.subscribe = function (obj) {
var _loop = function _loop(key) {
if (key in subscribeList) {
if (Array.isArray(obj[key])) {
if (Array.isArray(obj[key][0])) {
subscribeList[key].map(function (arr) {
subscribeList[key].push(arr);
});
} else {
subscribeList[key].push(obj[key]);
}
}
} else {
if (Array.isArray(obj[key])) {
if (Array.isArray(obj[key][0])) {
subscribeList[key] = obj[key];
} else {
subscribeList[key] = [obj[key]];
}
}
}
};
for (var key in obj) {
_loop(key);
}
render(Object.keys(obj));
};
}
define(function () {
return State;
});