UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

99 lines (98 loc) 2.93 kB
/** * DevExtreme (esm/core/element_data.js) * Version: 21.1.4 * Build date: Mon Jun 21 2021 * * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import WeakMap from "./polyfills/weak_map"; import domAdapter from "./dom_adapter"; import eventsEngine from "../events/core/events_engine"; import MemorizedCallbacks from "./memorized_callbacks"; var dataMap = new WeakMap; var strategy; export var strategyChanging = new MemorizedCallbacks; var beforeCleanDataFunc = function() {}; var afterCleanDataFunc = function() {}; export var setDataStrategy = function(value) { strategyChanging.fire(value); strategy = value; var cleanData = strategy.cleanData; strategy.cleanData = function(nodes) { beforeCleanDataFunc(nodes); var result = cleanData.call(this, nodes); afterCleanDataFunc(nodes); return result } }; setDataStrategy({ data: function() { var element = arguments[0]; var key = arguments[1]; var value = arguments[2]; if (!element) { return } var 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 { var elementData = dataMap.get(element); if (elementData) { delete elementData[key] } } }, cleanData: function(elements) { for (var i = 0; i < elements.length; i++) { eventsEngine.off(elements[i]); dataMap.delete(elements[i]) } } }); export function getDataStrategy() { return strategy } export function data() { return strategy.data.apply(this, arguments) } 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 } var childElements = element.getElementsByTagName("*"); strategy.cleanData(childElements); if (cleanSelf) { strategy.cleanData([element]) } }