devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
129 lines (120 loc) • 3.86 kB
JavaScript
/**
* DevExtreme (cjs/__internal/core/m_element_data.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/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.afterCleanData = afterCleanData;
exports.beforeCleanData = beforeCleanData;
exports.cleanData = cleanData;
exports.cleanDataRecursive = cleanDataRecursive;
exports.data = data;
exports.getDataStrategy = getDataStrategy;
exports.removeData = removeData;
exports.strategyChanging = exports.setDataStrategy = void 0;
var _events_engine = _interopRequireDefault(require("../../common/core/events/core/events_engine"));
var _dom_adapter = _interopRequireDefault(require("../../core/dom_adapter"));
var _memorized_callbacks = _interopRequireDefault(require("../../core/memorized_callbacks"));
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
const dataMap = new WeakMap;
let strategy;
const strategyChanging = exports.strategyChanging = new _memorized_callbacks.default;
let beforeCleanDataFunc = function() {};
let afterCleanDataFunc = function() {};
const setDataStrategy = function(value) {
strategyChanging.fire(value);
strategy = value;
const {
cleanData: cleanData
} = strategy;
strategy.cleanData = function(nodes) {
beforeCleanDataFunc(nodes);
const result = cleanData.call(this, nodes);
afterCleanDataFunc(nodes);
return result
}
};
exports.setDataStrategy = setDataStrategy;
setDataStrategy({
data: function() {
const element = arguments.length <= 0 ? void 0 : arguments[0];
const key = arguments.length <= 1 ? void 0 : arguments[1];
const value = arguments.length <= 2 ? void 0 : arguments[2];
if (!element) {
return
}
let elementData = dataMap.get(element);
if (!elementData) {
elementData = {};
dataMap.set(element, elementData)
}
if (void 0 === key) {
return elementData
}
if (2 === arguments.length) {
return elementData[key]
}
elementData[key] = value;
return value
},
removeData: function(element, key) {
if (!element) {
return
}
if (void 0 === key) {
dataMap.delete(element)
} else {
const elementData = dataMap.get(element);
if (elementData) {
delete elementData[key]
}
}
},
cleanData: function(elements) {
for (let i = 0; i < elements.length; i++) {
_events_engine.default.off(elements[i]);
dataMap.delete(elements[i])
}
}
});
function getDataStrategy() {
return strategy
}
function data() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key]
}
return strategy.data.apply(this, args)
}
function beforeCleanData(callback) {
beforeCleanDataFunc = callback
}
function afterCleanData(callback) {
afterCleanDataFunc = callback
}
function cleanData(nodes) {
return strategy.cleanData.call(this, nodes)
}
function removeData(element, key) {
return strategy.removeData.call(this, element, key)
}
function cleanDataRecursive(element, cleanSelf) {
if (!_dom_adapter.default.isElementNode(element)) {
return
}
const childElements = element.getElementsByTagName("*");
strategy.cleanData(childElements);
if (cleanSelf) {
strategy.cleanData([element])
}
}