PluginProbe
Content Blocks Builder – Create blocks, repeater blocks with carousel, grid, popup layouts / trunk
Content Blocks Builder – Create blocks, repeater blocks with carousel, grid, popup layouts vtrunk
2.8.14 2.8.13 2.8.12 2.7.5 2.7.6 2.7.7 2.7.8 2.7.9 2.8.0 2.8.1 2.8.10 2.8.11 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 trunk 1.0.1 1.0.2 1.1.0 1.1.1 All 147 releases
content-blocks-builder / src / utils / dom / data.js

data.js in Content Blocks Builder – Create blocks, repeater blocks with carousel, grid, popup layouts trunk, at src/utils/dom/data.js

67 lines 1.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Internal dependencies
3 */
4 import { exposeComponent } from "./utils";
5
6 /**
7 * Data API
8 * Adapted from Bootstrap
9 */
10
11 /**
12 * Constants
13 */
14
15 const elementMap = new Map();
16
17 const Data = {
18 set(element, key, instance) {
19 if (!elementMap.has(element)) {
20 elementMap.set(element, new Map());
21 }
22
23 const instanceMap = elementMap.get(element);
24
25 // make it clear we only want one instance per element
26 // can be removed later when multiple key/instances are fine to be used
27 if (!instanceMap.has(key) && instanceMap.size !== 0) {
28 // eslint-disable-next-line no-console
29 console.error(
30 `Doesn't allow more than one instance per element. Bound instance: ${
31 Array.from(instanceMap.keys())[0]
32 }.`
33 );
34 return;
35 }
36
37 instanceMap.set(key, instance);
38 },
39
40 get(element, key) {
41 if (elementMap.has(element)) {
42 return elementMap.get(element).get(key) || null;
43 }
44
45 return null;
46 },
47
48 remove(element, key) {
49 if (!elementMap.has(element)) {
50 return;
51 }
52
53 const instanceMap = elementMap.get(element);
54
55 instanceMap.delete(key);
56
57 // free up element references if there are no instances left for an element
58 if (instanceMap.size === 0) {
59 elementMap.delete(element);
60 }
61 },
62 };
63
64 exposeComponent("Data", Data);
65
66 export { Data };
67