devextreme
Version: 
HTML5 JavaScript Component Suite for Responsive Web Development
103 lines (100 loc) • 3.62 kB
JavaScript
/**
 * DevExtreme (cjs/viz/core/base_theme_manager.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/
 */
;
exports.BaseThemeManager = void 0;
var _class = _interopRequireDefault(require("../../core/class"));
var _extend2 = require("../../core/utils/extend");
var _type = require("../../core/utils/type");
var _iterator = require("../../core/utils/iterator");
var _palette = require("../palette");
var _utils = require("./utils");
var _themes = require("../themes");
function _interopRequireDefault(e) {
    return e && e.__esModule ? e : {
        default: e
    }
}
const _getTheme = _themes.getTheme;
const _addCacheItem = _themes.addCacheItem;
const _removeCacheItem = _themes.removeCacheItem;
const _extend = _extend2.extend;
const _each = _iterator.each;
function getThemePart(theme, path) {
    let _theme = theme;
    path && _each(path.split("."), (function(_, pathItem) {
        return _theme = _theme[pathItem]
    }));
    return _theme
}
const BaseThemeManager = exports.BaseThemeManager = _class.default.inherit({
    ctor: function(options) {
        this._themeSection = options.themeSection;
        this._fontFields = options.fontFields || [];
        _addCacheItem(this)
    },
    dispose: function() {
        _removeCacheItem(this);
        this._callback = this._theme = this._font = null;
        return this
    },
    setCallback: function(callback) {
        this._callback = callback;
        return this
    },
    setTheme: function(theme, rtl) {
        this._current = theme;
        this._rtl = rtl;
        return this.refresh()
    },
    refresh: function() {
        const that = this;
        const current = that._current || {};
        let theme = _getTheme(current.name || current);
        that._themeName = theme.name;
        that._defaultPalette = theme.defaultPalette;
        that._font = _extend({}, theme.font, current.font);
        that._themeSection && _each(that._themeSection.split("."), (function(_, path) {
            theme = _extend(true, {}, theme[path])
        }));
        that._theme = _extend(true, {}, theme, (0, _type.isString)(current) ? {} : current);
        that._initializeTheme();
        if ((0, _utils.parseScalar)(that._rtl, that._theme.rtlEnabled)) {
            _extend(true, that._theme, that._theme._rtl)
        }
        that._callback();
        return that
    },
    theme: function(path) {
        return getThemePart(this._theme, path)
    },
    themeName: function() {
        return this._themeName
    },
    createPalette: function(palette, options) {
        return (0, _palette.createPalette)(palette, options, this._defaultPalette)
    },
    createDiscretePalette: function(palette, count) {
        return (0, _palette.getDiscretePalette)(palette, count, this._defaultPalette)
    },
    createGradientPalette: function(palette) {
        return (0, _palette.getGradientPalette)(palette, this._defaultPalette)
    },
    getAccentColor: function(palette) {
        return (0, _palette.getAccentColor)(palette, this._defaultPalette)
    },
    _initializeTheme: function() {
        const that = this;
        _each(that._fontFields || [], (function(_, path) {
            that._initializeFont(getThemePart(that._theme, path))
        }))
    },
    _initializeFont: function(font) {
        _extend(font, this._font, _extend({}, font))
    }
});