@web-atoms/core-docs
Version:
66 lines • 2.26 kB
JavaScript
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "./AtomBridge"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.InheritedProperty = void 0;
const AtomBridge_1 = require("./AtomBridge");
/**
* Use this decorator only to watch property changes in `onPropertyChanged` method.
* This decorator also makes enumerable property.
*
* Do not use this on anything except UI control
* @param target control
* @param key name of property
*/
function InheritedProperty(target, key) {
// property value
const iVal = target[key];
const keyName = typeof Symbol === "undefined"
? ("_" + key)
: Symbol(`${key}`);
target[keyName] = iVal;
// property getter
const getter = function () {
let start = this;
do {
const p = start[keyName];
if (typeof p !== "undefined") {
return p;
}
if (!start.element) {
break;
}
start = start.parent;
} while (start);
return undefined;
};
// property setter
const setter = function (newVal) {
const oldValue = this[keyName];
if (oldValue && oldValue.dispose) {
oldValue.dispose();
}
this[keyName] = newVal;
AtomBridge_1.AtomBridge.refreshInherited(this, key);
};
// delete property
if (delete target[key]) {
// create new property with getter and setter
Object.defineProperty(target, key, {
get: getter,
set: setter,
enumerable: true,
configurable: true
});
}
}
exports.InheritedProperty = InheritedProperty;
});
//# sourceMappingURL=InheritedProperty.js.map