UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

197 lines (195 loc) • 7.48 kB
/** * DevExtreme (cjs/__internal/core/options/m_index.js) * Version: 24.2.6 * Build date: Mon Mar 17 2025 * * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Options = void 0; var _option_manager = require("../../../core/options/option_manager"); var _utils = require("../../../core/options/utils"); var _common = require("../../../core/utils/common"); var _data = require("../../../core/utils/data"); var _extend = require("../../../core/utils/extend"); var _type = require("../../../core/utils/type"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function(n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) { ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]) } } return n }, _extends.apply(null, arguments) } class Options { constructor(options, defaultOptions, optionsByReference, deprecatedOptions) { this._deprecatedCallback; this._startChangeCallback; this._endChangeCallback; this._validateOptionsCallback; this._default = defaultOptions; this._deprecated = deprecatedOptions; this._deprecatedNames = []; this._initDeprecatedNames(); this._optionManager = new _option_manager.OptionManager(options, optionsByReference); this._optionManager.onRelevantNamesPrepared(((options, name, value, silent) => this._setRelevantNames(options, name, value, silent))); this._cachedOptions = {}; this._rules = [] } set _initial(value) { this._initialOptions = value } get _initial() { if (!this._initialOptions) { const rulesOptions = this._getByRules(this.silent("defaultOptionsRules")); this._initialOptions = this._default; this._optionManager._setByReference(this._initialOptions, rulesOptions) } return this._initialOptions } _initDeprecatedNames() { for (const optionName in this._deprecated) { this._deprecatedNames.push(optionName) } } _getByRules(rules) { rules = Array.isArray(rules) ? this._rules.concat(rules) : this._rules; return (0, _utils.convertRulesToOptions)(rules) } _notifyDeprecated(option) { const info = this._deprecated[option]; if (info) { this._deprecatedCallback(option, info) } } _setRelevantNames(options, name, value, silent) { if (name) { const normalizedName = this._normalizeName(name, silent); if (normalizedName && normalizedName !== name) { this._setField(options, normalizedName, value); this._clearField(options, name) } } } _setField(options, fullName, value) { let fieldName = ""; let fieldObject = null; do { fieldName = fieldName ? `.${fieldName}` : ""; fieldName = (0, _utils.getFieldName)(fullName) + fieldName; fullName = (0, _utils.getParentName)(fullName); fieldObject = fullName ? this._optionManager.get(options, fullName, false) : options } while (!fieldObject); fieldObject[fieldName] = value } _clearField(options, name) { delete options[name]; const previousFieldName = (0, _utils.getParentName)(name); const fieldObject = previousFieldName ? this._optionManager.get(options, previousFieldName, false) : options; if (fieldObject) { delete fieldObject[(0, _utils.getFieldName)(name)] } } _normalizeName(name, silent) { if (this._deprecatedNames.length && name) { for (let i = 0; i < this._deprecatedNames.length; i++) { if (this._deprecatedNames[i] === name) { const deprecate = this._deprecated[name]; if (deprecate) { !silent && this._notifyDeprecated(name); return deprecate.alias || name } } } } return name } addRules(rules) { this._rules = rules.concat(this._rules) } applyRules(rules) { const options = this._getByRules(rules); this.silent(options) } dispose() { this._deprecatedCallback = _common.noop; this._startChangeCallback = _common.noop; this._endChangeCallback = _common.noop; this._optionManager.dispose() } onChanging(callBack) { this._optionManager.onChanging(callBack) } onChanged(callBack) { this._optionManager.onChanged(callBack) } validateOptions(callBack) { this._optionManager.onValidateOptions(callBack) } onDeprecated(callBack) { this._deprecatedCallback = callBack } onStartChange(callBack) { this._startChangeCallback = callBack } onEndChange(callBack) { this._endChangeCallback = callBack } isInitial(name) { const value = this.silent(name); const initialValue = this.initial(name); const areFunctions = (0, _type.isFunction)(value) && (0, _type.isFunction)(initialValue); return areFunctions ? value.toString() === initialValue.toString() : (0, _common.equalByValue)(value, initialValue) } initial(name) { return (0, _utils.getNestedOptionValue)(this._initial, name) } option(options, value) { const isGetter = arguments.length < 2 && "object" !== (0, _type.type)(options); if (isGetter) { return this._optionManager.get(void 0, this._normalizeName(options)) } this._startChangeCallback(); try { this._optionManager.set(options, value) } finally { this._endChangeCallback() } } silent(options, value) { const isGetter = arguments.length < 2 && "object" !== (0, _type.type)(options); if (isGetter) { return this._optionManager.get(void 0, options, void 0, true) } this._optionManager.set(options, value, void 0, true) } reset(name) { if (name) { const fullPath = (0, _data.getPathParts)(name); const value = fullPath.reduce(((value, field) => value ? value[field] : this.initial(field)), null); const defaultValue = (0, _type.isObject)(value) ? _extends({}, value) : value; this._optionManager.set(name, defaultValue, false) } } getAliasesByName(name) { return Object.keys(this._deprecated).filter((aliasName => name === this._deprecated[aliasName].alias)) } isDeprecated(name) { return Object.prototype.hasOwnProperty.call(this._deprecated, name) } cache(name, options) { const isGetter = arguments.length < 2; if (isGetter) { return this._cachedOptions[name] } this._cachedOptions[name] = (0, _extend.extend)(this._cachedOptions[name], options) } } exports.Options = Options;