devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
103 lines (102 loc) • 3.2 kB
JavaScript
/**
* DevExtreme (esm/__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/
*/
import eventsEngine from "../../common/core/events/core/events_engine";
import domAdapter from "../../core/dom_adapter";
import MemorizedCallbacks from "../../core/memorized_callbacks";
const dataMap = new WeakMap;
let strategy;
export const strategyChanging = new MemorizedCallbacks;
let beforeCleanDataFunc = function() {};
let afterCleanDataFunc = function() {};
export 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
}
};
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++) {
eventsEngine.off(elements[i]);
dataMap.delete(elements[i])
}
}
});
export function getDataStrategy() {
return strategy
}
export 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)
}
export function beforeCleanData(callback) {
beforeCleanDataFunc = callback
}
export function afterCleanData(callback) {
afterCleanDataFunc = callback
}
export function cleanData(nodes) {
return strategy.cleanData.call(this, nodes)
}
export function removeData(element, key) {
return strategy.removeData.call(this, element, key)
}
export function cleanDataRecursive(element, cleanSelf) {
if (!domAdapter.isElementNode(element)) {
return
}
const childElements = element.getElementsByTagName("*");
strategy.cleanData(childElements);
if (cleanSelf) {
strategy.cleanData([element])
}
}