123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import defaultValue from "../Core/defaultValue.js";
- import defined from "../Core/defined.js";
- import ConstantProperty from "./ConstantProperty.js";
- function createProperty(
- name,
- privateName,
- subscriptionName,
- configurable,
- createPropertyCallback
- ) {
- return {
- configurable: configurable,
- get: function () {
- return this[privateName];
- },
- set: function (value) {
- const oldValue = this[privateName];
- const subscription = this[subscriptionName];
- if (defined(subscription)) {
- subscription();
- this[subscriptionName] = undefined;
- }
- const hasValue = value !== undefined;
- if (
- hasValue &&
- (!defined(value) || !defined(value.getValue)) &&
- defined(createPropertyCallback)
- ) {
- value = createPropertyCallback(value);
- }
- if (oldValue !== value) {
- this[privateName] = value;
- this._definitionChanged.raiseEvent(this, name, value, oldValue);
- }
- if (defined(value) && defined(value.definitionChanged)) {
- this[subscriptionName] = value.definitionChanged.addEventListener(
- function () {
- this._definitionChanged.raiseEvent(this, name, value, value);
- },
- this
- );
- }
- },
- };
- }
- function createConstantProperty(value) {
- return new ConstantProperty(value);
- }
- /**
- * Used to consistently define all DataSources graphics objects.
- * This is broken into two functions because the Chrome profiler does a better
- * job of optimizing lookups if it notices that the string is constant throughout the function.
- * @private
- */
- function createPropertyDescriptor(name, configurable, createPropertyCallback) {
- //Safari 8.0.3 has a JavaScript bug that causes it to confuse two variables and treat them as the same.
- //The two extra toString calls work around the issue.
- return createProperty(
- name,
- `_${name.toString()}`,
- `_${name.toString()}Subscription`,
- defaultValue(configurable, false),
- defaultValue(createPropertyCallback, createConstantProperty)
- );
- }
- export default createPropertyDescriptor;
|