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;
|
|
});
|