0
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-02-13 10:54:24 +01:00
Bootstrap/js/src/dom/data.js

58 lines
1.5 KiB
JavaScript
Raw Normal View History

2017-08-21 09:11:37 +02:00
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.1.1): dom/data.js
2020-06-16 21:41:47 +03:00
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2017-08-21 09:11:37 +02:00
* --------------------------------------------------------------------------
*/
2018-09-14 14:27:30 +02:00
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
2017-08-21 09:11:37 +02:00
const elementMap = new Map()
2017-09-20 14:19:10 +02:00
export default {
set(element, key, instance) {
if (!elementMap.has(element)) {
elementMap.set(element, new Map())
}
2019-02-26 13:20:34 +02:00
const instanceMap = elementMap.get(element)
2018-09-14 14:27:30 +02:00
// make it clear we only want one instance per element
// can be removed later when multiple key/instances are fine to be used
if (!instanceMap.has(key) && instanceMap.size !== 0) {
// eslint-disable-next-line no-console
console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)
return
2017-08-21 09:11:37 +02:00
}
instanceMap.set(key, instance)
2018-09-14 14:27:30 +02:00
},
get(element, key) {
if (elementMap.has(element)) {
return elementMap.get(element).get(key) || null
}
return null
2018-09-14 14:27:30 +02:00
},
remove(element, key) {
if (!elementMap.has(element)) {
return
}
const instanceMap = elementMap.get(element)
instanceMap.delete(key)
// free up element references if there are no instances left for an element
if (instanceMap.size === 0) {
elementMap.delete(element)
}
2018-09-14 14:27:30 +02:00
}
}