webdetta 0.1.229 → 0.1.230

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webdetta",
3
- "version": "0.1.229",
3
+ "version": "0.1.230",
4
4
  "author": "Fedot Kriutchenko <fodyadev@gmail.com>",
5
5
  "description": "",
6
6
  "license": "MIT",
@@ -45,15 +45,24 @@ Element.from = arg => {
45
45
  return document.createTextNode(arg);
46
46
  }
47
47
 
48
- const elementHooks = new WeakMap();
49
- Element.registerHooks = (node, hooks) => elementHooks.set(node, hooks);
48
+ const hooks = {
49
+ beforeAppend: new WeakMap(),
50
+ afterAppend: new WeakMap(),
51
+ beforeRemove: new WeakMap(),
52
+ afterRemove: new WeakMap(),
53
+ }
54
+ Element.registerHook = (node, hook, handler) => {
55
+ const map = hooks[hook];
56
+ const prev = map.get(node);
57
+ map.set(node, function hook() { prev?.(); handler(); });
58
+ }
50
59
 
51
60
  const performAppend = (node, method, item) => {
52
61
  const itemNode = Element.from(item);
53
- const hooks = elementHooks.get(itemNode);
54
- hooks?.beforeAppend?.();
62
+ const { beforeAppend, afterAppend } = hooks;
63
+ beforeAppend.get(itemNode)?.();
55
64
  node[method](itemNode);
56
- hooks?.afterAppend?.();
65
+ afterAppend.get(itemNode)?.();
57
66
  }
58
67
  Element.append = (node, item) => {
59
68
  processItem(item,
@@ -67,10 +76,10 @@ Element.appendBefore = (node, sibling) => performAppend(node, 'before', sibling)
67
76
  Element.appendAfter = (node, sibling) => performAppend(node, 'after', sibling);
68
77
 
69
78
  Element.remove = (node) => {
70
- const hooks = elementHooks.get(node);
71
- hooks?.beforeRemove?.();
79
+ const { beforeRemove, afterRemove } = hooks;
80
+ beforeRemove.get(node)?.();
72
81
  node.remove();
73
- hooks?.afterRemove?.();
82
+ afterRemove.get(node)?.();
74
83
  }
75
84
 
76
85
  export const Operator = (...funcs) => Builder((tasks, node) => {
@@ -62,12 +62,10 @@ const createContainer = (content) => {
62
62
  export const createList = (itemsFn, renderItem, keyFn = listItemKey) => {
63
63
  const root = document.createTextNode('');
64
64
  const containers = new Map();
65
- Element.registerHooks(root, {
66
- afterAppend: () => effect.run(),
67
- beforeRemove: () => {
68
- for (const c of containers.values()) c.remove();
69
- containers.clear();
70
- }
65
+ Element.registerHook(root, 'afterAppend', () => effect.run());
66
+ Element.registerHook(root, 'beforeRemove', () => {
67
+ for (const c of containers.values()) c.remove();
68
+ containers.clear();
71
69
  });
72
70
 
73
71
  const effect = r.effect(() => {
@@ -98,10 +96,8 @@ export const createList = (itemsFn, renderItem, keyFn = listItemKey) => {
98
96
  export const createSlot = (content) => {
99
97
  const root = document.createTextNode('');
100
98
  const container = createContainer(content);
101
- Element.registerHooks(root, {
102
- afterAppend: () => container.appendAfter(root),
103
- beforeRemove: () => container.remove()
104
- });
99
+ Element.registerHook(root, 'afterAppend', () => container.appendAfter(root));
100
+ Element.registerHook(root, 'beforeRemove', () => container.remove());
105
101
  return root;
106
102
  }
107
103