UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

103 lines (102 loc) 3.2 kB
/** * 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]) } }