29 lines
949 B
JavaScript
29 lines
949 B
JavaScript
|
/** A storage solution aimed at replacing jQuerys data function.
|
||
|
* Implementation Note: Elements are stored in a (WeakMap)[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap].
|
||
|
* This makes sure the data is garbage collected when the node is removed.
|
||
|
*/
|
||
|
const dataStorage = {
|
||
|
_storage: new WeakMap(),
|
||
|
put: function (element, key, obj) {
|
||
|
if (!this._storage.has(element)) {
|
||
|
this._storage.set(element, new Map())
|
||
|
}
|
||
|
this._storage.get(element).set(key, obj)
|
||
|
},
|
||
|
get: function (element, key) {
|
||
|
return this._storage.get(element)?.get(key)
|
||
|
},
|
||
|
has: function (element, key) {
|
||
|
return this._storage.has(element) && this._storage.get(element).has(key)
|
||
|
},
|
||
|
remove: function (element, key) {
|
||
|
const ret = this._storage.get(element).delete(key)
|
||
|
if (this._storage.get(element).size === 0) {
|
||
|
this._storage.delete(element)
|
||
|
}
|
||
|
return ret
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export default dataStorage
|