blob: 37693ba196731f8f36d699ab15e239380ccf79e5 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
const UNSET_PROPERTY_VALUE = '<unset>';
const getPropertyValue = ($element: HTMLElement, prop: string) => {
const value = `${getComputedStyle($element).getPropertyValue(prop)}`.trim()
return !value || value === UNSET_PROPERTY_VALUE ? '' : value;
};
const getChildrenIds = ($element: HTMLElement) => {
const value = getPropertyValue($element, '--cssx-children')
return value.split(/\s*,\s*/g).filter(Boolean)
}
const handleEvents = ($element: HTMLElement) => {
const eventHandlers = {
click: '--cssx-on-click',
load: '--cssx-on-load',
}
Object.entries(eventHandlers).forEach(([event, property]) => {
const handlerExpr = getPropertyValue($element, property);
if (handlerExpr) {
// TODO: Parse onclick
console.log($element.id, event, handlerExpr);
}
});
};
let iters = 0;
const manageElement = ($element: HTMLElement) => {
if (iters++ > 100) return; // to prevent infinite rec
handleEvents($element);
const $childrenRoot = Object.assign(document.createElement('div'), {
className: 'cssx-layer',
});
$element.appendChild($childrenRoot);
const childrenIds = getChildrenIds($element);
for (const id of childrenIds) {
const $child = Object.assign(document.createElement('div'), { id });
$childrenRoot.appendChild($child);
manageElement($child);
}
}
|