mframejs
Version:
simple framework
179 lines • 9.53 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var subscribeClassProperty_1 = require("./property/subscribeClassProperty");
var bindingEngine_1 = require("./bindingEngine");
var exported_1 = require("../interface/exported");
var createBindingContext_1 = require("./createBindingContext");
var subscribeChangeBaseClass = (function () {
function class_1(_class, key, meta) {
this._class = _class;
this.key = key;
this.meta = meta;
}
class_1.prototype.call = function (newValue, oldValue) {
if (oldValue !== newValue) {
var key = this.key;
var _class = this._class;
var META = this.meta;
if (_class.$bindingContext && key in _class.$bindingContext.$context) {
if (_class.$bindingContext.$context[key] !== newValue) {
_class.$bindingContext.$context[key] = newValue;
}
}
if (_class[key + "Changed"]) {
_class[key + "Changed"](newValue, oldValue);
}
if (_class["attributesChanged"]) {
_class["attributesChanged"](key, newValue, oldValue);
}
if (META[key].options.changeHandler) {
_class[META[key].options.changeHandler](key, newValue, oldValue);
}
}
};
return class_1;
}());
function subscribeClassMetaBinding(_class) {
var META = _class.__proto__[exported_1.CONSTANTS.META_BINDABLE];
if (META) {
var keys = Object.keys(META);
var _loop_1 = function (key) {
if (!_class.__metaBinding) {
_class.__metaBinding = {};
}
if (!_class.__metaBinding[key]) {
_class.__metaBinding[key] = {};
_class.__metaBinding[key].key = key;
_class.__metaBinding[key].options = {};
}
var CLASSMETA = _class.__metaBinding[key];
var subscribeInternal = new subscribeChangeBaseClass(_class, key, META);
subscribeClassProperty_1.subscribeClassProperty(createBindingContext_1.createBindingContext(_class), key, subscribeInternal);
CLASSMETA.options.subscribeInternal = subscribeInternal;
if (META[key].observableOnly === true) {
}
else {
if (_class.$attributes && !_class.$attribute) {
if (_class.$element && _class.$bindingContext) {
var el = _class.$element;
var att = META[key].options.attribute + ".bind";
var attrValue = el.getAttribute(att);
if (attrValue) {
var subscribeExternal = Object.create({
call: function (newValue, oldValue) {
if (oldValue !== newValue) {
_class[key] = newValue;
}
}
});
subscribeClassProperty_1.subscribeClassProperty(_class.$bindingContext, attrValue, subscribeExternal);
CLASSMETA.options.subscribeExternal = subscribeExternal;
}
else {
att = "" + META[key].options.attribute;
attrValue = el.getAttribute(att);
if (attrValue) {
if (attrValue.indexOf('${') !== -1 || attrValue.indexOf('@{') !== -1) {
var val = bindingEngine_1.BindingEngine.tokenizeParseAndTraverseAST(attrValue, _class.$bindingContext);
if (val) {
_class[key] = val;
}
}
else {
_class[key] = attrValue;
}
}
}
}
}
else {
if (_class.$element && _class.$bindingContext) {
if (keys.length === 1 && key === 'value') {
var el = _class.$element;
var att = _class.$attribute.name;
var haveBind = att.indexOf('.bind');
var attrValue = el.getAttribute(att);
if (haveBind !== -1) {
var subscribeExternal = Object.create({
call: function (newValue, oldValue) {
if (oldValue !== newValue) {
_class[key] = newValue;
}
}
});
subscribeClassProperty_1.subscribeClassProperty(_class.$bindingContext, attrValue, subscribeExternal);
CLASSMETA.options.subscribeExternal = subscribeExternal;
}
else {
attrValue = el.getAttribute(att);
if (attrValue) {
if (attrValue.indexOf('${') !== -1 || attrValue.indexOf('@{') !== -1) {
var val = bindingEngine_1.BindingEngine.tokenizeParseAndTraverseAST(attrValue, _class.$bindingContext);
if (val) {
_class[key] = val;
}
}
else {
_class[key] = attrValue;
}
}
}
}
else {
var el = _class.$element;
var attributeName = _class.$attribute.name;
var att_1 = META[key].options.attribute + ".bind";
var attrValues = el.getAttribute(attributeName) ? el.getAttribute(attributeName).split(';') : null;
if (attrValues) {
var attrValue_1;
attrValues.forEach(function (value) {
var test = value.split(':');
if (test && test[0].trim() === att_1) {
attrValue_1 = test[1];
}
});
if (attrValue_1) {
var subscribeExternal = Object.create({
call: function (newValue, oldValue) {
if (oldValue !== newValue) {
_class[key] = newValue;
}
}
});
subscribeClassProperty_1.subscribeClassProperty(_class.$bindingContext, attrValue_1, subscribeExternal);
CLASSMETA.options.subscribeExternal = subscribeExternal;
}
else {
att_1 = "" + META[key].options.attribute;
var attrValue_2;
attrValues.forEach(function (value) {
var test = value.split(':');
if (test && test[0].trim() === att_1) {
attrValue_2 = test[1];
}
});
if (attrValue_2) {
if (attrValue_2.indexOf('${') !== -1 || attrValue_2.indexOf('@{') !== -1) {
var val = bindingEngine_1.BindingEngine.tokenizeParseAndTraverseAST(attrValue_2, _class.$bindingContext);
if (val) {
_class[key] = val;
}
}
else {
_class[key] = attrValue_2;
}
}
}
}
}
}
}
}
};
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
var key = keys_1[_i];
_loop_1(key);
}
}
}
exports.subscribeClassMetaBinding = subscribeClassMetaBinding;
//# sourceMappingURL=subscribeClassMetaBinding.js.map